عن المشروع

itch هو تطبيق سطح المكتب لتشغيل الألعاب من itch.io. هدفه المعلن هو السماح للمستخدمين بتنزيل الألعاب وتشغيلها، وتلقي إشعارات التحديث، وإبقاء الألعاب محدثة، دون استبدال موقع itch.io نفسه. البنية المعمارية التطبيق هو تطبيق Electron بتصميم متعدد العمليات. العملية الرئيسية (Node.js) تتعامل مع إدارة الحالة باستخدام Redux، والمنطق التجاري، والتنسيق مع المكونات المرافقة؛ وتستخدم نمط "مفاعل" للآثار الجانبية الناتجة عن إجراءات Redux. عملية العرض هي واجهة مستخدم مبنية على React تتم مزامنة حالتها من العملية الرئيسية عبر electron-redux. مكونان مرافقان مكتوبان بلغة Go يدعمانه: - butler: خادم يتعامل مع تنزيل الألعاب وتثبيتها وتحديثها وتشغيلها، ويحتفظ بقاعدة بيانات SQLite لبيانات التثبيت، ويتواصل مع التطبيق عبر RPC قائم على TCP. يتم تشغيله كعملية فرعية مرتبطة بدورة حياة التطبيق. - itch-setup: ملف تنفيذي يتعامل مع التثبيت الأولي على جميع المنصات ويدير فحوصات التحديث الذاتي وإعادة التشغيل. إدارة الإصدارات (broth) يدير التطبيق إصدارات butler وitch-setup من خلال نظام يسمى broth، وهو خدمة تعمل كوكيل لواجهة برمجة تطبيقات itch.io لتوفير عناوين تنزيل ثابتة للملفات الثنائية والأصول. تُستضاف الملفات الثنائية تحت broth.itch.zone مع معرفات منصات مثل linux-amd64 وdarwin-arm64 وwindows-386. محليًا، تُخزن الإصدارات تحت دليل broth (على سبيل المثال ~/.config/itch/broth/ على Linux)، مع ملفات ثنائية مستخرجة وتنزيلات مؤقتة وعلامة .chosen-version. اختيار الإصدار يستخدم قيود semver معرفة في src/main/broth/formulas.ts (butler ^15.20.0، itch-setup ^1.8.0). يجلب التطبيق نقطة نهاية /versions ويختار أحدث إصدار يحقق القيد؛ إصدارات canary تستخدم قنوات -head بدون قيود. عند بدء التشغيل يتحقق من الإصدار المختار، ويفحص إصدارات المكونات الجديدة عندما يتغير إصدار التطبيق، وينزل ويستخرج مع تحقق CRC32، ويجري فحص سلامة، ثم يحدث العلامة وينظف الإصدارات القديمة. تجاوز تطويري (BROTH_USE_LOCAL=butler) يسمح باستخدام butler مبني محليًا. ارتباطات butlerd التواصل مع butler يستخدم بروتوكول JSON-RPC 2.0 يسمى butlerd. تعريفات TypeScript للطلبات والإشعارات وأنواع البيانات موجودة في src/common/butlerd/messages.ts ويتم توليدها تلقائيًا من تعريفات أنواع Go باستخدام أداة تسمى generous. الكود المولد يعتمد على حزمة npm @itchio/butlerd، التي توفر بيئة التشغيل لإطلاق الخادم، والاتصال عبر TCP وتبادل رسائل JSON-RPC. يمكن إعادة توليد الارتباطات باستخدام npm run sync-butler عندما يكون مستودع butler مستخرجًا كدليل شقيق. itch مقابل kitch قاعدة الكود تدعم نسختين: itch (مستقرة) وkitch (canary)، قابلتين للتثبيت جنبًا إلى جنب. يتم تحديد النسخة بواسطة وسم git في وقت البناء: وسم ينتهي بـ -canary ينتج kitch، وإلا itch. التطوير المحلي يعمل دائمًا كـ kitch لأن اسم package.json الافتراضي هو "kitch"؛ التغليف الإنتاجي يستبدله بـ "itch" للبنى غير canary. الاختلافات تشمل بروتوكولات URL (itchio:// وitch:// مقابل kitchio:// وkitch://)، قنوات broth (عادية مقابل -head)، قيود semver (موجودة مقابل لا شيء)، معرفات حزمة macOS، أيقونات الدرج/النافذة، وأسماء القطع الأثرية. التطوير والاختبار التطوير يتطلب npm install، ثم npm start للتشغيل في وضع التطوير مع المراقبة وإعادة البناء. سكربتات أخرى تشمل npm run ts-check لفحص الأنواع وnpm run compile لبناء الأصول. اختبارات التكامل تستخدم ChromeDriver للتحكم في تطبيق Electron واختبار تدفقات مثل تسجيل الدخول وتثبيت الألعاب والتنقل في واجهة المستخدم. تتطلب Go (مشغل الاختبارات مكتوب بلغة Go)، وشاشة عرض (xvfb على Linux CI)، ومفتاح API لـ itch.io من حساب اختبار. يجب أن يتطابق إصدار ChromeDriver مع إصدار Electron؛ عندما يتغير إصدار Electron في package.json، يجب تحديث integration-tests/versions.go وفقًا لذلك. يمكن تشغيل الاختبارات ضد بناء معبأ (npm run integration-tests) أو نسخة التطوير (node release/test.js --test-dev). الترخيص والمشاريع ذات الصلة itch مُصدر تحت رخصة MIT. يذكر README أيضًا Mitch، وهو عميل Android بدأه مطورون آخرون.