تصور کنید تمام قدرت یک مرورگر مدرن بر پایه کرومیوم را در قلب محیط متنی ترمینال داشته باشید. اگر یک توسعهدهنده یا مدیر سیستم هستید که ساعتها از محیط خط فرمان جدا نمیشود، دیگر لازم نیست برای چک کردن یک مستند فنی یا تست یک API، جریان کاری خود را با باز کردن یک پنجره گرافیکی قطع کنید. این ابزار، فاصله بین بهرهوری گردش کار مبتنی بر کیبورد و ضرورتهای وب مدرن که به شدت به اسکریپتها وابسته است را از بین میبرد.
به نقل از مستندات پروژه در tangled.org (که تنها منبع رسمی پس از مهاجرت از Codeberg است)، مرورگر Brow6el در ۲۳ جولای ۲۰۲۶ منتشر شد. توسعهدهنده این پروژه دلیل انتقال از Codeberg را این گفته است که پروژههای دیگر در آنجا دیگر مورد استقبال نبودند و او ترجیح داد از یک پلتفرم واحد استفاده کند. Brow6el در واقع یک اثبات مفهوم (POC) است که با بهرهگیری از چارچوب جاسازیشده کرومیوم (CEF) — که شبیه به موتور یک ماشین قدرتمند است که در بدنه یک ماشین دیگر نصب شده تا همان قدرت را بدهد — محدودیتهای قدیمی مرورگرهای متنی را میشکند.
برای چندین دهه، وبگردی در ترمینال به معنای انتخاب بین سادگی بیش از حد Lynx یا کلنجار رفتن با لایوتهای بههمریخته در w3m بود. صفحات وب مدرن که بر پایه جاوااسکریپتهای سنگین و CSS3 هستند، در آن محیطها اصلاً کار نمیکنند. Brow6el این وضعیت را تغییر میدهد؛ این مرورگر صفحات را بهصورت آف-اسکرین (خارج از صفحه) توسط CEF رندر کرده و سپس آن فریمها را به پروتکلهای گرافیکی Sixel یا Kitty تبدیل میکند. این کار به ترمینال اجازه میدهد به جای نمایش تقریبهای متنی (ASCII)، پیکسلهای واقعی را نمایش دهد.
همانطور که در تحلیلهای پیشین ما درباره ابزارهای بهرهوری محیط CLI اشاره کردیم، حذف جابهجایی بین محیطهای مختلف، کلید افزایش تمرکز است. Brow6el این کار را از طریق دو مسیر گرافیکی اصلی انجام میدهد:
- پروتکل Sixel: گزینه پیشفرض و توصیه شده برای اکثر کاربران است. این پروتکل از رندرینگ یکپارچه (Monolithic) و تکهای (Tiled) برای کاهش لرزش تصویر پشتیبانی میکند. در محیطهایی که تایپ زیاد است، Sixel معمولاً سریعتر عمل میکند و توسط ترمینالهایی مانند mlterm، xterm، foot و wezterm پشتیبانی میشود.
- پروتکل Kitty: جایگزینی برای ترمینالهای سازگار با Kitty (از جمله ghostty و wezterm) است که از کدگذاری base64 برای نمایش انیمیشنهای با کیفیت بالا با نرخ ۳۰ فریم بر ثانیه استفاده میکند. این پروتکل از سیستم دو-بافره (Double Buffering) یا همان تعویض شناسههای تصویر استفاده میکند تا از لرزش جلوگیری کند. همچنین تصاویر را در لایه z=-1 (پشت لایه متن) قرار میدهد تا دیالوگهای ترمینال روی تصاویر نمایش داده شوند.

در جزئیات پیادهسازی گرافیکی، قابلیت رندرینگ تکهای Sixel یکی از ویژگیهای کلیدی است. این قابلیت با استفاده از کاشیهای با اندازه پویا (تقریباً ۳۰ تا ۴۰ کاشی در هر صفحه) بر اساس رزولوشن ترمینال، لرزش تصویر را کاهش میدهد. مرورگر از «مستطیلهای کثیف» (Dirty Rectangles) در CEF استفاده میکند تا نواحی تغییر یافته را شناسایی کند؛ تنها کاشیهایی که با این نواحی تلاقی دارند دوباره رسم میشوند. این کاشیها دقیقاً با مرزهای سلولهای ترمینال تراز شدهاند تا هیچ اثر بصری نامطلوبی (Artifact) ایجاد نشود.
در مقابل، رندرینگ یکپارچه Kitty تمام صفحه را به صورت RGBA کدگذاری کرده و از طریق base64 ارسال میکند. این متد برای بهینهسازی عملکرد تایپ، بدون فشردهسازی ارسال میشود. کاربران میتوانند در حالت استاندارد با فشردن کلید z بین رندر تکهای و یکپارچه (فقط برای Sixel) جابهجا شوند. همچنین با فشردن کلید Z میتوان بازترسیم کامل را اجبار کرد (در Sixel حالت یکپارچه و در Kitty رفرش کامل). نوار وضعیت مرورگر وضعیت فعلی را نمایش میدهد: [S][T] برای Sixel تکهای، [S][M] برای Sixel یکپارچه و [S] برای Kitty.
برای کنترل این محیط بصری بدون استفاده از موس، Brow6el یک سیستم ناوبری مودال (Modal Navigation) — شبیه به کلیدهای میانبر در نرمافزار Vim — را پیاده کرده است. شما میتوانید بین سه مود اصلی برای تعامل با وب جابهجا شوید:
۱. حالت استاندارد [S]: لایه پیشفرض برای ناوبری است که در آن از کلیدهای h/j/k/l یا کلیدهای جهتنما برای حرکت استفاده میشود. اکشنهای کلیدی در این مود عبارتند از:
* r: ریلود (بارگذاری مجدد) صفحه
* u: رفتن به یک URL خاص
* U: کپی URL فعلی در کلیپبورد (Shift+U)
* d: افزودن بوکمارک
* b: باز کردن لیست بوکمارکها
* m: باز کردن مدیریت دانلودها
* x: خروج از مرورگر
* f: فعالسازی مود Hint (ناوبری لینکها با کیبورد)
* c: باز و بسته کردن کنسول جاوااسکریپت
* s: منوی اسکریپتهای کاربر
* y: فعال/غیرفعال کردن تزریق خودکار اسکریپتها
* z: سوئیچ بین رندر تکهای و یکپارچه (فقط Sixel)
* Z: اجبار به بازترسیم کامل
* بزرگنمایی: کلیدهای + یا = برای زوم به جلو، - یا _ برای زوم به عقب و 0 برای بازگشت به حالت ۱.۰x.
۲. حالت درج [I]: با فشردن کلید i فعال میشود و تمام ورودیهای کیبورد را مستقیماً به صفحه وب ارسال میکند. این حالت برای تایپ در فرمها، نواحی متنی (Text areas) و نوار جستجو حیاتی است. برای بازگشت به حالت استاندارد باید کلید ESC زده شود.
۳. حالت بصری [V]: لایهای برای انتخاب متون و کپی کردن محتوا است. مکاننما از اولین متن قابل رویت یا موقعیت قبلی موس شروع میشود.
* جابهجایی: کلیدهای h/l برای حرکت تک-کاراکتری، w/b برای حرکت کلمه به کلمه و j/k برای حرکت خط به خط.
* انتخاب: با فشردن کلید v انتخاب شروع میشود و با h/l/w/b/j/k محدوده انتخاب گسترش مییابد.
* تکمیل: کلید y برای کپی در کلیپبورد و خروج از مود، و کلید ESC برای لغو عملیات.

یکی از خیرهکنندهترین قابلیتها، حالت شبیهسازی موس [M] است. در این وضعیت، به جای نیاز به موس فیزیکی، کاربر یک نشانگر زرد رنگ را با کیبورد (h/j/k/l یا جهتنماها) جابهجا میکند. کلید q سرعت دقت (Precision) و کلید f سرعت سریع (Fast) را تغییر میدهد. کاربران میتوانند با فشردن SPACE یا ENTER کلیک کنند؛ یا در صورت فعال بودن قابلیت Drag-and-Drop (با کلید r)، آیتمی را رها کنند. برای بازگشت به حالت استاندارد از کلید e یا ESC استفاده میشود.
برای حل مشکل دقت در مکانیابی، مرورگر یک حالت پرش شبکهای (Grid Jump Mode) دارد. با فشردن کلید g در حالت موس، یک شبکه تطبیقی ۳در۳ با سلولهای نامگذاری شده (به طور پیشفرض qweasdzxc) ظاهر میشود. با انتخاب یک سلول، مرورگر به صورت بازگشتی روی آن ناحیه زوم میکند تا کاربر در ۳ یا ۴ حرکت به دقیقترین المان برسد.
- نشانه های بصری: شبکههای سبز رنگ نشاندهنده امکان زوم بیشتر و شبکههای قرمز نشاندهنده رسیدن به حداکثر زوم هستند.
- حرکت: در حداکثر زوم، شبکه به حرکت مکاننمای با دقت بالا تغییر میکند.
- ناوبری: کلید Backspace برای زوم به عقب (Zoom out) و
ESCبرای خروج از حالت شبکه است. - شخصیسازی: کلیدهای شبکه را میتوان در فایل
~/.brow6el/browser.confاز طریق تنظیمgrid_keysتغییر داد.
برای توسعهگران، یک بازرس عناصر (Element Inspector) با فشردن کلید i در حالت موس فعال میشود. این ابزار یک حاشیه فیروزهای دور المانها میکشد و یک پنل اطلاعاتی در لحظه نمایش میدهد که شامل موارد زیر است:
- نام تگ، ID و کلاسهای CSS.
- ویژگیهای کلیدی مانند
href،src،typeوname. - ابعاد و موقعیت دقیق.
- پیشنمایش محتوای متنی.

Brow6el انتقال بین مودها را بر اساس متن (Context) خودکار میکند:
- کلیک روی یک فیلد ورودی در حالت موس $\rightarrow$ انتقال خودکار به مود INSERT.
- کلیک روی یک جعبه انتخاب (Select box) در حالت موس $\rightarrow$ انتقال خودکار به مود STANDARD.
- ناوبری به یک صفحه جدید $\rightarrow$ بازگشت خودکار به مود STANDARD.
برای کسانی که کلاً از موس دوری میکنند، مود Hint (فعال با کلید f) برچسبهای زرد رنگی روی تمام لینکها قرار میدهد. با تایپ برچسب خاص (مثلاً "ab") و فشردن Enter، کاربر بلافاصله به آن لینک منتقل میشود. این مسیر، ناوبری کامل با کیبورد را بدون نیاز به ورود به حالت موس ممکن میسازد.
از نظر حریم خصوصی و شخصیسازی فنی، Brow6el کنترل گستردهای را از طریق فایل ~/.brow6el/browser.conf ارائه میدهد. کاربران میتوانند بین مودهای مختلف پروفایل انتخاب کنند:
- مود موقت (پیشفرض): هر جلسه از یک پروفایل جدید استفاده میکند. تمام کوکیها، کش و تاریخچه هنگام خروج پاک میشوند. هر نمونه از یک دایرکتوری کش مجزا در
/tmp/brow6el_<PID>استفاده میکند. - مود پایدار (Persistent): پروفایل را در
~/.brow6el/profileذخیره میکند تا جلسات ورود (Login) و کش برای افزایش سرعت حفظ شوند. - مود سفارشی: اجازه میدهد کاربر مسیر یک پروفایل خاص را از طریق
profile_pathتعیین کند.
گزینههای دقیق پیکربندی در browser.conf شامل cache_size_mb=500 (حجم کش)، clear_cache_on_exit (پاکسازی کش در خروج) و clear_cookies_on_exit (پاکسازی کوکیها در خروج) است. همچنین میتوان یک default_url برای صفحه اصلی تعریف کرد.
امنیت از طریق سیستم یکپارچه DNS-over-HTTPS (DoH) مدیریت میشود. کاربران میتوانند doh_enabled=true را تنظیم کرده و یکی از ارائهدهندگان زیر را انتخاب کنند:
- Cloudflare:
https://cloudflare-dns.com/dns-query - Google:
https://dns.google/dns-query - Quad9:
https://dns.quad9.net/dns-query(تمرکز بر امنیت و مسدود کردن دامنههای مخرب)
حالت doh_mode میتواند روی secure (اجباری، بدون بازگشت به DNS سیستم - توصیه شده برای Ad-blocking) یا automatic (با قابلیت بازگشت به DNS سیستم در صورت شکست) تنظیم شود. نکته این است که در حالت secure، سرور DoH باید بتواند google.com را برای چک کردن اتصال CEF تحلیل کند.
مرورگر همچنین شامل یک سیستم پروکسی است که از پروتکلهای HTTP، HTTPS و SOCKS4/5 پشتیبانی میکند. پیکربندی شامل proxy_server، proxy_username و proxy_password است. یک لیست استثنا به نام proxy_bypass_list (مثلاً localhost,127.0.0.1,*.local) تضمین میکند که ترافیک محلی از پروکسی عبور نکند.
- پروکسیهای HTTP/HTTPS: پشتیبانی کامل از احراز هویت با نام کاربری و رمز عبور.
- پروکسیهای SOCKS: به دلیل نحوه پیادهسازی در کرومیوم، از احراز هویت پشتیبانی نمیکنند.
مدیریت زوم از طریق کلیدهای + (بزرگنمایی)، - (کوچکنمایی) و 0 (بازگشت به ۱.۰x) انجام میشود. سه رفتار اصلی برای زوم وجود دارد:
- مود Auto: زوم را با یک فرمول وزنی محاسبه میکند:
(cell_zoom * 0.6) + (resolution_zoom * 0.4). در این فرمول، زوم سلول بر اساس ارتفاع و عرض سلول و زوم رزولوشن بر اساس ارتفاع و عرض پنجره محاسبه میشود تا با نمایشگرهای High-DPI و تغییر اندازه پنجره سازگار شود (دامنه ۰.۵x تا ۳.۰x). - مود Fixed: از تنظیم ثابت
zoom_level(مثلاً ۲.۵) در فایل تنظیمات استفاده میکند. مقدارzoom_step(پیشفرض ۰.۲۵) گامهای تغییر با کلید میانبر را تعیین میکند. - مود None: از ۱.۰x شروع کرده و فقط اجازه تغییرات دستی را میدهد.
کاربران همچنین میتوانند فایل ~/.brow6el/zoom.conf را برای تنظیمات اختصاصی هر سایت ایجاد کنند؛ مثلاً github.com=2.5 یا wikipedia.org=2.75 که برای زیردامنهها نیز کار میکند.
فراتر از وبگردی پایه، این پلتفرم از سیستم تزریق جاوااسکریپت شبیه به Greasemonkey پشتیبانی میکند. کاربران میتوانند فایلهای .js را در ~/.brow6el/userscripts قرار داده و الگوهای URL را در ~/.brow6el/userscripts.conf با فرمت script.js|Name|AutoInjectBool|URLPattern تعریف کنند.
تزریق دستی اسکریپتها از طریق منوی s یا فعالسازی تزریق خودکار با کلید y امکانپذیر است. مرورگر با چندین اسکریپت پیشفرض در دایرکتوری scripts/ عرضه میشود:
- Adblock.js: ارائه قابلیتهای پایه مسدودسازی تبلیغات.
- Reader-mode.js: سادهسازی صفحات برای نمایش محتوای مقاله (مشابه Reader View در فایرفکس).
- View-source.js: نمایش سورس HTML با هایلایت سینتکس، فرمتبندی و شماره خطوط (با قابلیت ناوبری کیبورد).
- Force-light-mode.js: بازنویسی تمهای تاریک برای تحمیل طرح رنگی روشن.
- Frameset-redirect.js: هدایت صفحات قدیمی frameset به محتوای واقعی.
فرآیند ساخت، سازگاری و استقرار
برای نصب Brow6el، کاربران ابتدا باید یک باینری CEF با حجم حدود ۶۷۰ مگابایت را با اجرای دستور ./download_cef.sh دانلود کرده و سپس ./build.sh را اجرا کنند.
وابستگیهای ساخت (Dependencies) عبارتند از:
- در Ubuntu/Debian: بستههای
build-essential,cmake,git,pkg-config,curl,libsixel-dev,libx11-dev,libxcomposite-dev,libxdamage-dev,libxext-dev,libxfixes-dev,libxrandr-dev,libgbm-dev,libxcb1-dev,libpango1.0-dev,libatk1.0-dev,libcups2-dev,libasound2-dev,libnss3-dev,libnspr4-devوlibglib2.0-dev. - در Arch Linux: بستههای
base-devel,cmake,git,pkg-config,curl,libsixel,libx11,libxcomposite,libxdamage,libxfixes,libxrandr,mesa,pango,atk,cups,alsa-lib,nss,nsprوglib2.
این پروژه در حال حاضر روی اوبونتو ۲۵.۱۰، دبیان ۱۳ و آرچ لینوکس تست شده و به طور رسمی از طریق مسیرهای زیر توزیع میشود:
- Arch User Repository (AUR): با نام
brow6el-git - Artix Linux: مخزن Omniverse
- Debian: مخزن غیررسمی Vejeta (شامل آخرین نسخههای libcef)
اگرچه این ابزار با ترمینالهای foot، wezterm و Ghostty کار میکند، اما نویسنده هشدار داده است که نسخه Kitty در اوبونتو ۲۴.۰۴ (نسخه ۰.۳۲.۲) بسیار قدیمی است و نمیتواند پروتکل تصویر فعلی را هندل کند، که منجر به چاپ متن base64 به جای تصاویر میشود. علاوه بر این، اجرای Brow6el روی یک میزبان راه دور از طریق SSH به دلیل حجم عظیم دادههای مورد نیاز برای هر فریم رندر شده، پاسخدهی را به شدت کاهش میدهد.
نکات فنی تکمیلی:
- کنسول جاوااسکریپت: با کلید
cدر حالت استاندارد باز میشود. تمام پیامهایconsole.log/warn/errorرا ثبت میکند. کاربران میتوانند کدهای JS را تایپ کرده و با Enter اجرا کنند و خروجی را با کلیدهای جهتنما مرور نمایند. - پیکربندی CEF: فلگهای کرومیوم در
~/.brow6el/cef_flags.confمدیریت میشوند که اجازه میدهد کاربر WebGL را فعال/غیرفعال کند، سطح لاگها را تغییر دهد یا User-Agent سفارشی تنظیم کند. در این زمینه، بهینهسازیهای لایهی رندر گرافیکی اهمیت زیادی دارد، مشابه آنچه در تجربه کاهش زمان رندر WebGL با استفاده از llvmpipe مشاهده شد. - اجراهای چندگانه: چندین نسخه از مرورگر میتوانند به طور همزمان در ترمینالهای مختلف اجرا شوند و هر کدام دایرکتوری کش مجزایی را در
/tmp/brow6el_<PID>داشته باشند.
تحلیل تحریریه
Brow6el نشاندهنده تغییری در نحوه تفکر ما درباره «تجربه کاربری ترمینال» است. با آوردن کل استک کرومیوم به محیط CLI، شکاف بین بهرهوری گردش کار مبتنی بر کیبورد و ضرورتهای وب مدرن و سنگین را پر میکند. برای توسعهدهندگان و مدیران سیستمی که در ترمینال زندگی میکنند، این ابزار جابهجاییe آزاردهنده به مرورگر گرافیکی برای چک کردن سریع مستندات یا تست API را حذف میکند.
با این حال، تکیه اولیه بر پروتکلهای Sixel و Kitty باعث شده این ابزار فعلاً بیشتر برای علاقهمندان (Enthusiasts) باشد. افت عملکرد در SSH نشان میدهد که اگرچه رندرینگ چشمگیر است، اما نیازهای پهنای باند برای وبگردی «پیکسل-به-پیکسل» در ترمینال همچنان یک گلوگاه است. ارزش واقعی این پروژه در ناوبری مودال آن نهفته است؛ تبدیل وب به یک تجربه شبیه Vim، برای کسانی که بر این کلیدها مسلط شدهاند، یک جهش بزرگ در بهرهوری است.




گفتگو