The open-source, AI-native browser — full Chromium compatibility, powered 100% by your local Ollama model. No cloud, no API keys, no telemetry.
!yt lofi beats, !g, !w,
!gh, !fk and jump straight to that site's own search.
43 bangs ship in the binary; unknown ones fall through to a normal search.10 km to miles, 72 f to c, 500 ms to s),
percentages (15% of 80) and a world clock (time in tokyo,
time in delhi) — previewing live as you type./ jumps to the box, Esc clears; live suggestion dropdown while typing.Prerequisites: Node.js 20+ and Ollama.
# 1. Install Ollama, then pull a model (any one works — see Models):
ollama pull qwen3.5:9b # great tool calling, ~6 GB
# smaller machine? ollama pull qwen3.5:4b (~2.5 GB)
# 2. Clone & run Aether
git clone https://github.com/e2sy/aether-browser.git
cd aether-browser
npm install
npm run dev
npm run dist # NSIS (Windows) / dmg (macOS) / AppImage + deb (Linux)
The Models tab in the AI sidebar is a full model manager:
qwen3.5:4b,
llama3.1:8b, deepseek-r1:8b, or a GGUF from the Hugging Face
registry (hf.co/user/model-GGUF).qwen3.5:9b (16 GB RAM), qwen3.5:4b or
llama3.2:3b (8 GB RAM). Chat and search work well with anything.The sidebar extracts the page (Readability → Markdown) and answers grounded in it. Turn page context off to chat freely. Conversations are remembered per site (local page memory) and reused as context on your next visit.
Search from the omnibox opens aether://search: free web results next to a
cited answer written by your local model. Results come from a resilient engine chain —
DuckDuckGo → DuckDuckGo Lite → Bing — so blocked or throttled engines never leave you
with an empty page. If everything fails, one click re-runs the search on Google.
Select text on any page → right-click → Ask / Summarize / Rewrite / Translate. The prompt lands in your sidebar.
If Ollama is unreachable, chat & AI search can use any OpenAI-compatible endpoint (Groq / OpenRouter free tiers). Opt-in, key stays on disk — the agent always stays local.
Open the Agent tab, type a task, press Run. The agent renders the page as a numbered menu of interactive elements and picks one tool per step (max 12 steps):
| Tool | What it does |
|---|---|
navigate | Open a URL in the current tab |
click | Click an element by its [ref] number |
type | Type into an input (optionally press Enter) |
press_key | Send a key like Enter, Escape |
scroll | Scroll up / down |
go_back | History back |
read_page | Extract readable text |
find_text | Find & highlight text |
list_tabs | See all open tabs |
screenshot | Save a PNG of the page |
ask_user | Pause and ask you a clarifying question |
done | Report the final answer |
Tick ⏺ Record as macro before an agent run. Successful actions are saved as a replayable script; replay re-finds elements by captured CSS locators, needs no model at all, and still respects the confirm gate.
Open the Macros list (Agent tab → Macros) and press ✎ to open the step
editor. You can rename the macro, reorder steps (↑/↓), edit any
argument, add new steps (navigate, click, type,
press_key, scroll, go_back), or remove steps —
then Save.
Typical use: record “search for X on a site” once, then edit the type step's
text and replay it any time — deterministic and instant.
.macro.json file you can back up or share.Aether supports unpacked MV2/MV3 Chrome extensions via
electron-chrome-extensions: content scripts, background pages, browser-action
buttons with popups, and chrome.contextMenus items.
.crx or .zip onto the drop
zone on the same page..crx files: double-click one in Explorer (or pick Aether in “Open with”)
and it installs, no unzipping needed. On macOS the same works via “Open with →
Aether”.CRX2 and CRX3 containers are both parsed (the zip payload is extracted and installed as a normal unpacked extension under your user-data folder). Signatures are not verified — only install packages you trust.
manifest.json).electron-chrome-extensions is GPL-3.0 / patron dual-licensed.Settings → Hibernate idle tabs after (off / 15 / 30 / 60 minutes). Background tabs first hibernate 🌙 — muted and throttled to 1 fps, they wake instantly with no reload. After 3× that delay they are fully discarded (unloaded, shown as (unloaded), reloaded on click). Pinned and audio-playing tabs are never touched.
Ctrl+= / Ctrl+- / Ctrl+0 (or the View menu). Each site's zoom is remembered and re-applied on every visit; a Chrome-style bubble shows the level and resets on click.
Files land in your Downloads folder (duplicates get “ (1)” suffixes). A shelf at the
bottom-left shows progress with cancel and “show in folder”. Ctrl+J opens the
full aether://downloads manager — search, pause/resume, re-download, reveal.
The search page (aether://search) is Aether's own metasearch: five sources in
parallel, source badges + filter chips, a Wikipedia knowledge panel, related searches and
full keyboard control (↓/↑, Enter, 1-9,
/). Start a query with a bang to jump straight to a site:
!yt YouTube, !g Google, !w Wikipedia, !gh
GitHub, !so Stack Overflow, !fk Flipkart, !sp Spotify,
!maps Maps, and more. Instant answers computed on this device: math
(2^10), units (10 km to miles, 72 f to c,
1 gb to mb, 500 ms to s), percentages (15% of 80),
and the world clock (time in tokyo, time in delhi,
time, date).
localhost:11434 by default; nothing leaves your machine
unless you enable the optional cloud fallback.Electron/ UA token is stripped so Google
and YouTube treat Aether like a normal Chrome browser (toggleable).| Shortcut | Action |
|---|---|
| Ctrl+T / Ctrl+W | New / close tab |
| Ctrl+Shift+T | Reopen last closed tab |
| Ctrl+Tab / Ctrl+Shift+Tab | Next / previous tab |
| Ctrl+1 … Ctrl+8, Ctrl+9 | Jump to tab 1–8 / last tab |
| F5 | Reload page |
| Ctrl+N | New browser window |
| Ctrl+Shift+D | Duplicate tab |
| Ctrl+Shift+P | Pin / unpin tab |
| Ctrl+Shift+U | Mute / unmute tab |
| Ctrl+L | Focus the omnibox |
| Ctrl+R / Alt+← / Alt+→ | Reload / back / forward |
| Ctrl+F | Find in page |
| Ctrl+H / Ctrl+Shift+O | History / bookmarks |
| Ctrl+, / Ctrl+Shift+M | Settings / Model library |
| Ctrl+Shift+A | Toggle the AI sidebar |
| Ctrl+= / - / 0 | Zoom in / out / reset (per site) |
macOS: use ⌘ instead of Ctrl.
| Problem | Fix |
|---|---|
| “Electron failed to install correctly” (Windows) | The ~110 MB Electron download was interrupted (antivirus or flaky network).
Aether now auto-repairs this after every npm install; if it still fails,
run npm run repair:electron or the one-shot
npm run setup:win, and add an antivirus exclusion for the project folder. |
| “Ollama not reachable” (Windows) | Start the Ollama app from the Start menu (it lives in the system tray). Check that
http://127.0.0.1:11434 says “Ollama is running”. |
| “Ollama not reachable” | Start Ollama (ollama serve or the menu bar app). Check the URL in
Settings → model section. The sidebar health dot turns green when connected. |
| Agent clicks the wrong element | Use a stronger tool-calling model (qwen3.5:9b) and keep tasks short. Re-check the confirm gate so you can Deny bad steps. |
| Google sign-in blocked | Keep “Identify as regular Chrome” enabled in Settings. If it persists, sign in on accounts.google.com first, then browse. |
| Netflix / Spotify DRM won't play | Widevine isn't bundled with Electron. YouTube (non-DRM) works fine. |
| Extension didn't load | The folder must contain manifest.json at its root. Check the console
(npm run dev) for the [extensions] log line. |
| High RAM usage | Enable the memory saver (Settings → 15/30 min), or right-click tabs → Discard. |
| Do I need Ollama running? | Only for the AI parts (sidebar chat, the AI answer on the search page, the agent). Browsing and the web-results half of AI search work without it. Keep the Ollama app running in the tray for the full experience, or switch Settings → Search mode to Google / DuckDuckGo to skip AI entirely. |
| AI search shows “No web results” | v1.1.3 falls back across DuckDuckGo → Lite → Bing automatically; if all three are unreachable from your network, use the “Search on Google instead” button shown on the page. |
| Nothing happens when I press Enter / click buttons | Fixed in v1.1.4 (the preload bridge failed to load in sandboxed views). Update to v1.1.4+, fully close Aether and start it again. The new-tab page now shows a red banner if the bridge is down instead of failing silently. |
| Console shows “Unauthorized IPC call to … from http://localhost:5173/” and the address bar / toolbar buttons do nothing | Fixed in v1.1.5 — the IPC guard used to reject the browser's own UI (the multi-window refactor dropped the chrome-UI check). The UI is now trusted by identity in dev and production, while normal pages stay blocked. Update to v1.1.5+ and restart. |
| Console shows “Unable to move the cache: Access is denied. (0x5)” or “Gpu Cache Creation failed: -2”, and sites won't load | Another process (an old Aether/electron.exe still running in the background, antivirus,
OneDrive) is locking your profile's cache folder. v1.1.7 fixes this two ways: a second
Aether now hard-exits and focuses the running one, and if the cache is locked Aether
automatically relocates the profile to aether-browser-recovered (old profile is
kept) and prints reclaim steps in the console. Manual fix: Task Manager (Ctrl+Shift+Esc) →
end every electron.exe/Aether.exe, then delete
%APPDATA%\aether-browser if you don't need the old bookmarks. |
| The dev server starts on port 5174 instead of 5173 | An older Aether dev session is still alive and holding 5173. Close it (Task Manager →
end node.exe/electron.exe from the old folder) and start again —
with v1.1.7 a second Aether can't even boot over the old one anymore. |
| Console line “session.getPreloads is deprecated” | Harmless — it comes from the electron-chrome-extensions dependency, not from
Aether. Ignore it. |
| A site shows a blank page forever and nothing explains why | Fixed in v1.1.6 — every failed page load now shows an error screen with the exact reason (DNS, timeout, offline, blocked, crash) and a Try again button. If it says the ad blocker cancelled the page, use the “Turn off ad blocker & retry” button (or Settings → Privacy). If it says DNS/offline, check your connection or whether your network blocks the site. |
| YouTube (or another heavy site) is blank with no error | Root cause found in v1.2.0: the ad blocker's anti-adblock scriptlets killed the page's own JS. Shields now run in two tiers — Standard (default) blocks ads & trackers without touching page scripts (YouTube loads normally), Aggressive adds scriptlets as an opt-in. If a site breaks: toolbar shield icon → “Turn shields off for this site”. |
| How do I add more filter lists (uBlock-style)? | Settings → Shields: tick the uBlock presets (Ads / Privacy / Badware) or paste any
https:// filter-list URL. Lists are fetched at boot and cached for offline.
The toolbar shield popup shows live blocked counts per site. |