Bun 1.4 کے ساتھ ایک بلٹ ان WebView API آتی ہے جو تقریباً Playwright یا Puppeteer کے لیے عام طور پر استعمال ہونے والی RAM کے ایک تہائی حصے کے ساتھ ہیڈ لیس Chromium یا WebKit کو چلاتی ہے، جو ڈویلپرز کو AI سے چلنے والی اسکریپنگ اور براؤزر آٹومیشن کے لیے ایک ہلکا پھلکا آپشن فراہم کرتی ہے۔
Bun 1.4 کیا اضافہ کرتا ہے
اس ریلیز کا سب سے اہم فیچر Bun.WebView ہے۔ یہ براہ راست Bun runtime سے Chrome DevTools Protocol فراہم کرتا ہے، تاکہ ایک ڈویلپر بغیر کسی بیرونی npm پیکیجز یا ڈرائیور بائنریز کو انسٹال کیے ہیڈ لیس براؤزر شروع کر سکے۔ یہ API macOS پر WebKit بیک اینڈ بھی پیش کرتا ہے، جس سے صارفین کو وہ انجن منتخب کرنے کی سہولت ملتی ہے جو ان کے ورک لوڈ کے لیے بہترین ہو۔
میموری کی بچت کیسے کام کرتی ہے
Playwright یا Puppeteer کے ذریعے شروع کیا گیا ایک مکمل Chromium انسٹنس عام طور پر معمولی صفحات کے لیے بھی 500 MB سے زیادہ ریزیڈنٹ میموری استعمال کرتا ہے۔ Bun.WebView "پیچیدہ صفحات" کے لیے 192 MB سے 256 MB کے درمیان استعمال رپورٹ کرتا ہے۔ یہ کمی رن ٹائم کے ساتھ بہتر انٹیگریشن اور براؤزر کو ہیڈ لیس موڈ میں چلانے کی صلاحیت کی وجہ سے ممکن ہوئی ہے، جو ان بہت سے بھاری بھرکم اجزاء کو چھوڑ دیتا ہے جنہیں عام آٹومیشن ٹولز لوڈ رکھتے ہیں۔
حقیقی دنیا کا ٹیسٹ: Claude Code کے لیے ایک چھوٹا JSON API
Simon Willison نے ایک پروف آف کانسیپٹ بنایا ہے جو Claude Code—ایک ایسا LLM جو کوڈ تو تیار کر سکتا ہے لیکن کلک یا JavaScript رینڈر نہیں کر سکتا—کو ایک پیج اسکریپ کرنے اور کوئی بھی اسکرپٹ چلانے کی اجازت دیتا ہے۔ اس سیٹ اپ میں ایک کم سے کم (minimal) TypeScript سرور شامل ہے جو:
- ٹارگٹ URL اور اختیاری JavaScript کے ساتھ ایک درخواست وصول کرتا ہے۔
new WebView({ url })کو انسٹینشی ایٹ کرتا ہے۔- پیج کے اندر کوڈ چلانے کے لیے
evaluate(script)کو کال کرتا ہے۔ - نتیجے کو JSON کے طور پر واپس کرتا ہے۔
یہ پوری سروس ایک ایسے کنٹینر میں چلتی ہے جو ایک چھوٹے کنٹینر میں آسانی سے سما سکتا ہے، جو کہ عام طور پر سادہ اسکریپنگ ٹاسکس کے لیے استعمال ہونے والے 1 GB کنٹینرز سے بہت کم ہے۔ نیچے دیا گیا کوڈ اسنیپٹ بنیادی منطق کو ظاہر کرتا ہے:
import { WebView } from "bun";
const server = Bun.serve({
port: 3000,
async fetch(req) {
const url = new URL(req.url);
if (url.pathname === "/scrape") {
const target = url.searchParams.get("url");
const script = url.searchParams.get("script") || "return document.title";
const wv = new WebView({ url: target });
const result = await wv.evaluate(script);
return Response.json({ result });
}
return new Response("Not found", { status: 404 });
},
});
Claude Code اب /scrape?url=…&script=… کی درخواست کر سکتا ہے اور رینڈر شدہ ڈیٹا حاصل کر سکتا ہے، جس سے مکمل براؤزر اسٹیک کے بوجھ کے بغیر اس کی صلاحیتیں مؤثر طریقے سے بڑھ جاتی ہیں۔
Bun.WebView کب موزوں ہے
- کم میموری والے ماحول – ایج (edge) یا سرور لیس پلیٹ فارمز کے لیے مثالی جہاں RAM بہت قیمتی ہوتی ہے۔
- لاگت کے حساس پائپ لائنز – ایک LLM ایجنٹ کے ساتھ ہلکا پھلکا کنٹینر چلانے سے انفراسٹرکچر کے بل کم رہتے ہیں۔
- سادہ آٹومیشن – ٹائٹل نکالنا، اسکرین شاٹ لینا، یا سنگل پیج فارم سبمٹ کرنا جیسے کام براہ راست کیے جا سکتے ہیں۔
یہ API ویژول ٹیسٹنگ (اسکرین شاٹس لینا اور ان کا فرق دیکھنا) اور کثیر مرحلہ وار فارم بھرنے کی بھی حمایت کرتا ہے، جو اسے ان ڈویلپرز کے لیے ایک ہمہ گیر ٹول بناتا ہے جنہیں کسی بھاری بھرکم فریم ورک کے بغیر صرف ضرورت کے مطابق براؤزر پاور چاہیے۔
غور کرنے کے لیے کچھ حدود
Bun.WebView ایک نیا اضافہ ہے، اس لیے اس کے فیچرز کے لحاظ سے Playwright اور Puppeteer کے پختہ ایکو سسٹم سے پیچھے ہے۔ جدید استعمال کے کیسز—جیسے نیٹ ورک انٹرسیپشن، ملٹی براؤزر آرکیسٹریشن، یا وسیع پلگ ان سپورٹ—کے لیے اب بھی پرانے ٹولز کی ضرورت پڑ سکتی ہے۔ ڈیبگنگ بھی زیادہ دستی (manual) ہے، کیونکہ بلٹ ان API ابھی تک وہ بھرپور انسپکٹر UI فراہم نہیں کرتا جو بڑے فریم ورکس کے ساتھ آتا ہے۔
آگے کیا دیکھنا ہے
کمیونٹی کا ردعمل اس بات کا تعین کرے گا کہ Bun.WebView اپنی صلاحیتوں کو کتنی تیزی سے بڑھاتا ہے۔ ابتدائی طور پر استعمال کرنے والے ممکنہ طور پر ریپرز (wrappers)، ٹیسٹنگ یوٹیلیٹیز، اور انٹیگریشن گائیڈز شائع کریں گے جو قائم شدہ آٹومیشن سویٹس کے فرق کو ختم کر سکتے ہیں۔ کارکردگی میں بہتری، اضافی براؤزر انجن آپشنز، اور کسی بھی سیکیورٹی ہارڈننگ کے لیے Bun کے ریلیز نوٹس پر نظر رکھیں جو API کے وسیع پیمانے پر استعمال کے ساتھ ضروری ہو سکتے ہیں۔
خلاصہ: Bun 1.4 کا WebView ڈویلپرز کو ہیڈ لیس براؤزنگ کے لیے ایک ہلکا پھلکا اور کم میموری والا راستہ فراہم کرتا ہے، جو سستی، کنٹینر کے لیے موزوں AI سے چلنے والی اسکریپنگ اور آٹومیشن کے دروازے کھولتا ہے—بشرطیکہ ورک لوڈ اس کے موجودہ فیچرز کے دائرہ کار میں آ جائے۔
