Brow6el is a full-featured web browser that runs entirely in your terminal using Sixel graphics. Built on Chromium (CEF), it brings modern web browsing to the command line with a powerful vim-style keyboard interface, mouse support, JavaScript console, bookmarks, user scripts, and more. Perfect for terminal enthusiasts who want a complete browsing experience without leaving their workflow.
Download & Install (Current version 0.3.4)
Full-featured Chromium-based web browser for your terminal.
AppImage Downloads
Bleeding Edge Builds
⚠️ Latest development builds - may be unstable
Package Repositories
Build from Source
git clone https://codeberg.org/janantos/brow6el.git cd brow6el ./download_cef.sh ./build.sh ./build/run_brow6el.sh https://example.com
Screenshots
See Brow6el in action:
Video Demo
Browser in Action
Features
🖼️ Sixel Graphics
Full page rendering with automatic resolution detection in your terminal.
🎨 Tiled Rendering
Optional tile-based rendering for reduced flicker and improved responsiveness.
🖱️ Mouse Support
Click, scroll, and interact with web pages naturally.
⌨️ Vim-Style Modal Control
Efficient keyboard navigation with four modes (STANDARD, INSERT, MOUSE, VISUAL).
🎯 Grid Jump Mode
Fast mouse positioning with recursive grid navigation (3-4 keystrokes to any element).
🔍 Element Inspector
Browser DevTools-like element inspection in MOUSE mode.
💻 JavaScript Console
Execute JS commands and view console logs.
📚 Bookmarks
Save and organize your favorite pages.
🔧 User Scripts
Inject custom JavaScript into pages with bundled scripts included.
📥 Download Manager
Save files with progress tracking.
🎯 Popup Handling
Terminal-friendly popup dialogs and alerts.
🪟 Multi-Instance
Run multiple browser windows simultaneously.
🔒 Configurable Profiles
Choose between temporary (private) or persistent (normal) browsing.
🔐 DNS-over-HTTPS
Secure DNS with configurable providers and modes.
🌐 Modern Web
Full HTML5/CSS3/JavaScript support via Chromium/CEF.
Usage & Controls
Modal Navigation System
Brow6el uses four distinct modes for efficient navigation. Current mode shown in status bar (e.g., [S][T] for Standard mode with Tiled rendering):
[S] STANDARD Mode - Default
Vim-like navigation with single-key commands (no Ctrl required):
Navigation:- h j k l or arrow keys - Navigate (left/down/up/right)
- t g - Scroll up/down
- p n - Back/forward in history
- r - Reload page
- u - Navigate to URL
- U - Copy current URL to clipboard (Shift+U)
- c - Toggle JavaScript console
- d - Add bookmark
- b - Open bookmarks
- f - Hint mode (keyboard link navigation)
- s - User scripts menu
- y - Toggle auto-inject user scripts
- z - Toggle tiled rendering (reduces flicker)
- Z - Force next frame to render monolithically
- m - Downloads manager
- x - Exit browser
- i - Enter INSERT mode
- e - Enter MOUSE mode
- v - Enter VISUAL mode (text selection)
[I] INSERT Mode
All keypresses pass through to the webpage. Use for typing in forms, text areas, etc.
- ESC - Return to STANDARD mode
[M] MOUSE Mode
Keyboard-driven mouse emulation with visual cursor:
Movement:- h j k l or arrow keys - Move mouse
- q f - Toggle precision/fast speed
- r - Toggle drag-and-drop
- g - Toggle grid jump mode (fast navigation)
- SPACE or ENTER - Click at cursor position or drop
- i - Toggle inspect mode (show element info on hover)
- e or ESC - Return to STANDARD mode
Grid Jump Mode
Fast mouse positioning with keyboard-driven grid navigation:
- Press g to activate 3x3 grid overlay with labeled cells (qweasdzxc)
- Press a key to jump to that grid cell
- Automatic recursive zoom for precision (3-4 keystrokes to any element)
- Green grid = more zoom available, red = max zoom
- Backspace - Zoom out, ESC - Exit grid mode
Inspect Mode
Browser DevTools-like element inspection:
- Press i to toggle inspect mode
- Cyan border highlights element under cursor
- Info panel shows: tag name, ID, classes, attributes, dimensions, text content
- Real-time updates as cursor moves
[V] VISUAL Mode
Text selection mode for copying page content:
Caret Positioning:- h l - Move left/right by character
- w b - Move forward/backward by word
- j k - Move down/up by line
- v - Start selecting from current position
- Same keys extend selection in respective directions
- y - Copy selection to clipboard, exit VISUAL mode
- ESC - Cancel selection, exit VISUAL mode
💡 Tip: Use MOUSE mode to position cursor, then press ESC and v to start text selection at that exact position!
Requirements
Terminal
Any terminal emulator with Sixel graphics support:
- foot - Wayland terminal (recommended)
- mlterm - X11 terminal with excellent Sixel support
- xterm - With VT340 mode:
xterm -ti vt340 - wezterm - Modern GPU-accelerated terminal
- yaft - Framebuffer terminal for TTY
Build Dependencies
# Ubuntu/Debian sudo apt-get install build-essential cmake git pkg-config curl \ libsixel-dev libx11-dev libxcomposite-dev libxdamage-dev \ libxext-dev libxfixes-dev libxrandr-dev libgbm-dev \ libpango1.0-dev libatk1.0-dev libcups2-dev libasound2-dev \ libnss3-dev libnspr4-dev libglib2.0-dev # Arch Linux sudo pacman -S base-devel cmake git pkg-config curl \ libsixel libx11 libxcomposite libxdamage libxfixes \ libxrandr mesa pango atk cups alsa-lib nss nspr glib2
Advanced Features
📖 User Scripts
Greasemonkey-style custom JavaScript injection with bundled scripts:
mkdir -p ~/.brow6el/userscripts nano ~/.brow6el/userscripts.conf
Example configuration:
auto_inject=true dark-mode.js|Dark Mode|true|* google-custom.js|Google Custom|true|*google.com* view-source.js|View Page Source|true|*
Press s in STANDARD mode to open user scripts menu, or y to toggle auto-inject.
Bundled Scripts:
- view-source.js - View HTML source with syntax highlighting
- reader-mode.js - Simplify pages to article content (like Firefox Reader View)
- adblock.js - Basic ad blocking functionality
- force-light-mode.js - Forces light color scheme
- frameset-redirect.js - Redirects from frameset pages
🔐 Profile Modes
Temporary Mode (Default): Each session uses a new profile, all data deleted on exit - perfect for private browsing.
Persistent Mode: Profile saved in ~/.brow6el/profile, cookies and sessions maintained.
# ~/.brow6el/browser.conf profile_mode=temporary # or: persistent, custom cache_size_mb=500 clear_cache_on_exit=false clear_cookies_on_exit=false default_url=https://example.com grid_keys=qweasdzxc # Grid jump keys (must be 9 chars)
🔐 DNS-over-HTTPS (DoH)
Encrypt DNS queries and prevent DNS-based tracking or blocking:
# ~/.brow6el/browser.conf doh_enabled=true doh_server=https://cloudflare-dns.com/dns-query doh_mode=secure # secure, automatic, or off
Popular DoH Providers:
- Cloudflare: https://cloudflare-dns.com/dns-query (fast, privacy-focused)
- Google: https://dns.google/dns-query (reliable, global)
- Quad9: https://dns.quad9.net/dns-query (security-focused, blocks malicious domains)
🎨 Tiled Rendering
Reduce flicker and improve responsiveness with tile-based rendering:
# ~/.brow6el/browser.conf tiled_rendering=true # Optional: Override auto-detected terminal cell dimensions #cell_width=11 #cell_height=25
Runtime Toggle:
- Press z to toggle between tiled and monolithic rendering
- Press Z to force next frame to render monolithically
- Current mode shown in status bar: [S][T] (tiled) or [S][M] (monolithic)
🔧 CEF Configuration
Customize Chromium flags in ~/.brow6el/cef_flags.conf:
- Enable/disable WebGL support
- Configure rendering options
- Set custom user agent
- Adjust logging verbosity
How It Works
CEF renders web pages offscreen → libsixel converts to sixel graphics → Terminal displays output
The browser continuously renders frames as pages update, with synchronized input handling for mouse and keyboard events.
Community Packages
- Arch Linux: AUR Package (brow6el-git)
- Artix Linux: Omniverse Repository
License & Credits
Brow6el is released under the MIT License.
Uses:
- CEF (Chromium Embedded Framework) - BSD 3-Clause License
- libsixel - MIT License
Project repository: codeberg.org/janantos/brow6el