Raycast 2.0 چطور ساخته شد؟
خلاصهٔ کاملتر
Raycast 2.0 تازه وارد مرحله بتای عمومی شده و این بزرگترین نسخهایه که تیم Raycast از ۲۰۲۰ تا حالا منتشر کرده. این نسخه اولین باریه که Raycast هم روی macOS و هم ویندوز اجرا میشه. برای رسیدن به این هدف، تیم کل اپ رو از صفر بازنویسی کرد — با یه معماری کاملاً جدید.
نسخه اول Raycast یه اپ نیتیو مک بود که با Swift و AppKit ساخته شده بود. تیم تقریباً هیچوقت از کامپوننتهای UI استاندارد استفاده نمیکرد چون اونها برای جریانهای کیبورد-محور کافی نبودن. اکوسیستم اکستنشنها هم روی React، TypeScript و Node.js ساخته شده بود. از اواخر ۲۰۲۳، وقتی تصمیم به ساپورت ویندوز گرفتن، مشخص شد که معماری قدیمی دیگه جواب نمیده — زمان کامپایل زیاد شده بود، AppKit موانعی ایجاد میکرد، و پیدا کردن توسعهدهندههای متخصص macOS سختتر شده بود.
تیم سه گزینه رو بررسی کرد: Electron، Tauri، و ساخت یه استک هیبریدی سفارشی. Electron برای اکثر شرکتها انتخاب درستیه، اما Raycast نیاز داشت به hotkeyهای سراسری، مدیریت کلیپبورد، پنجرههای شناور، و کنترل دقیق روی رفتار OS. بنابراین تیم به سراغ رویکرد هیبریدی رفت: shellهای نیتیو سفارشی که WebView سیستم رو wrap میکنن — یه پروژه Xcode روی مک و Visual Studio روی ویندوز — با دسترسی کامل به APIهای پلتفرم.
معماری نهایی Raycast 2.0 از چهار لایه تشکیل شده:
- Host app: Swift + AppKit روی مک، C# + WPF روی ویندوز
- Web frontend: یه پروژه React + TypeScript که روی هر دو پلتفرم مشترکه
- Node backend: منطق اصلی اپ، دسترسی به دیتابیس، و runtime اکستنشنها
- Rust core: برای کارهای سنگین مثل ایندکسگذاری فایلها و sync ابری
یکی از چالشهای جدی، کار با WebKit بود. این موتور رندرینگ برای مرورگر طراحی شده، نه برای اپی که روزانه صدها بار show و hide میشه. مشکلاتی مثل throttling انیمیشنها، blank frame هنگام resize، و flicker موقع باز شدن پنجره همه باید با راهحلهای سفارشی حل میشدن. مثلاً برای جلوگیری از throttling، پنجره رو به جلو میآرن ولی با alphaValue = 0 مخفی نگهاش میدارن.
در مورد حافظه هم تیم صادقانه توضیح داده: Raycast v2 نسبت به v1 حافظه بیشتری مصرف میکنه — حدود ۳۵۰ تا ۴۵۰ مگابایت در برابر ۲۰۰ تا ۳۰۰ مگابایت قبلی. اما تأکید میکنن که همه حافظهها یکسان نیستن؛ macOS حافظه غیرفعال رو فشرده میکنه، صفحات clean رو میتونه رها کنه، و فریمورکهای مشترک بین پروسهها دوبارهحساب میشن. بهینهسازی حافظه یه اولویت فعاله و تیم انتظار داره این اعداد تا خروج از بتا پایین بیان.
نکات کلیدی:
- Raycast 2.0 با یه استک هیبریدی سفارشی ساخته شده نه Electron یا Tauri
- فرانتاند React و بکاند Node بین مک و ویندوز مشترکن
- هسته Rust برای ایندکس فایلها مستقیماً MFT ویندوز رو میخونه تا سرعت لازم رو داشته باشه
- مصرف حافظه در v2 بیشتر از v1 است اما تیم روی بهینهسازی آن کار میکند
- سرعت توسعه با hot reload بهتر شده و فیچرها الان یکبار برای دو پلتفرم ساخته میشن




