zero-native: اپ دسکتاپ با وب UI و باینری کوچیک
خلاصهٔ کاملتر
zero-native یه شل دسکتاپ نوشتهشده با زبان Zig هست که بهت اجازه میده با فریمورکهای وب مثل Next.js، React، Vue یا Svelte، اپهای دسکتاپ بومی بسازی. مشکل اصلی ابزارهایی مثل Electron اینه که کل موتور کرومیوم رو داخل اپ میذارن؛ zero-native به جاش از WebView سیستمعامل (WKWebView روی macOS و WebKitGTK روی لینوکس) استفاده میکنه تا باینری نهایی کوچیک، مصرف رم پایین، و استارت سریع داشته باشی.
وقتی رندرینگ یکپارچه و قابلپیشبینی مهمتره، میتونی به جای WebView سیستمی، Chromium از طریق CEF رو انتخاب کنی. این انتخاب در فایل منیفست app.zon با یه خط تنظیم میشه. چون لایهی بومی با Zig نوشته شده و Zig مستقیم با C صحبت میکنه، دسترسی به SDKهای پلتفرم، کتابخانههای بومی، و کدکها هم بدون واسط اضافه ممکنه.
ارتباط بین JavaScript و لایهی بومی از طریق window.zero.invoke() انجام میشه — یه پل ساختیافته که فراخوانیها رو از نظر سایز، مبدأ، و مجوز بررسی میکنه و فقط به هندلرهای ثبتشده راه میده. این یعنی WebView بهصورت پیشفرض غیرقابلاعتماد تلقی میشه و هر قابلیتی باید صریحاً فعال بشه.
تنظیمات اصلی پروژه توی فایل app.zon قرار میگیره. این فایل همهچیز رو مشخص میکنه: متادیتای اپ، موتور وب، پنجرهها، مجوزها، و سیاست امنیتی:
.{
.id = "com.example.my-app",
.web_engine = "system",
.permissions = .{ "window" },
.security = .{
.navigation = .{
.allowed_origins = .{ "zero://app", "http://127.0.0.1:5173" },
},
},
.windows = .{
.{ .label = "main", .title = "My App", .width = 960, .height = 640 },
},
}برای شروع کافیه CLI رو نصب کنی و با یه دستور پروژه رو بسازی. اپ از اول روی macOS 11+، لینوکس، و ویندوز پشتیبانی میکنه. مثالهای آماده برای Next.js، React، Svelte و Vue هم توی پوشهی examples/ وجود داره. حتی نمونههایی برای iOS و Android هم هست که نشون میده چطور میشه libzero-native.a رو از یه اپ موبایل لینک کرد.
نکات کلیدی:
- لایهی بومی با Zig نوشته شده: باینری کوچیک، ریبیلد سریع
- دو گزینه برای موتور وب: WebView سیستمی (سبک) یا Chromium/CEF (یکپارچه)
- پل JS-to-Zig با
window.zero.invoke()و مدل امنیتی opt-in - پشتیبانی از Next.js، React، Vue، Svelte با مثالهای آماده
- هنوز در مرحلهی pre-release هست




