webframe: صفحهٔ وب رو مثل یه برنامهٔ ترمینالی اجرا کن
خلاصهٔ کاملتر
webframe یه ابزار متنباز از tractordev هست که شعارش اینه: صفحهٔ وب رو مثل یه برنامه اجرا کن. یه URL یا فایل محلی رو توی یه webview مخفی باز میکنه، با سرعت کامل نگهش میداره و به ترمینال وصلش میکنه. خروجی console میره به stdout، exceptionها به stderr، و میشه از stdin توی صفحه JavaScript اجرا کرد.
برای این کار مرورگر جداگونه بستهبندی نمیکنه. از webview خود سیستمعامل استفاده میکنه، یعنی WebKit روی macOS، WebKitGTK روی Linux و WebView2 روی Windows. این کارو از طریق کتابخونهٔ glaze انجام میده، پس خروجی فقط یه باینری کوچیکه که روی بیشتر پلتفرمها به cgo هم نیاز نداره. روی Linux اگه display نباشه، خودش یه Xvfb (یعنی یه سرور گرافیکی مجازی بدون صفحهنمایش) راه میندازه و آخر کار خاموشش میکنه.
کاربردهایی که سازندهها گفتن: اجرای کدهای مخصوص مرورگر مثل WASM، WebGPU، Web Audio یا کتابخونههای DOM توی اسکریپت و CI، نگه داشتن یه صفحه بهعنوان یه پروسهٔ همیشهروشن مثل daemon، و ور رفتن با صفحهٔ زنده از طریق REPL. حتی میشه یه شبیهساز مثل v86 رو headless اجرا کرد و از طریق stdio باهاش حرف زد.
با فلگ -c هر خط از stdin بهعنوان یه اسکریپت سراسری توی صفحه اجرا میشه. پس varها بین خطها میمونن و اگه نتیجه promise باشه، صبر میکنه تا resolve بشه:
$ webframe -c about:blank
> var x = 40
undefined
> x + 2
42به صفحه هم میشه مقدار فرستاد: متغیرهای محیطی با پیشوند WF_ قبل از اجرای اسکریپتهای صفحه بهصورت string روی window قرار میگیرن. فلگ -e با اولین exception برنامه رو با کد ۱ میبنده که برای CI بهدردبخوره. سیگنال SIGHUP صفحه رو دوباره لود میکنه. روی macOS throttling خاموشه و تایمرها توی حالت مخفی هم با سرعت کامل کار میکنن، ولی روی بقیهٔ پلتفرمها ممکنه کند بشن.
webframe یه پکیج Go هم هست که CLI فقط یه لایهٔ نازک روشه و رویدادها رو با callbackهایی مثل Console، Exception و Ready گزارش میده. یه Dockerfile مبتنی بر Alpine هم داره که حدود ۵۸۰ مگابایته و تقریباً همهش WebKitGTK هست. یه محدودیت هم هست: خطاهای صفحههای file:// و اسکریپتهای cross-origin بدون CORS فقط Script error. نشون میدن، چون WebKit جزئیاتشون رو مخفی میکنه.
نکات کلیدی:
- برای ساختن از سورس به Go 1.27 یا بالاتر نیاز هست
- روی Linux به WebKitGTK 4.1 یا 6.0 و یه display یا Xvfb نیاز داره
- ایمیج Docker حدود ۵۸۰ مگابایته و با کاربر non-root اجرا میشه
- بیلدها با CGO_ENABLED=0 انجام میشن، بهجز linux-musl که از cgo و zig استفاده میکنه
- alert، confirm و prompt بهصورت [dialog] چاپ میشن و انگار رد شدن جواب داده میشن
- مجوزش MIT هست




