Repository navigation
Vimma 0.1.1 · Firefox 158.0
0.1.1 · Firefox 158.0 (2026-10-16)
The first release. The in-app updater is included but not active yet: there is no update host and no signing key, so Vimma does not tell you about new releases. Until it is, update by installing the newer release the way you installed this one: on Arch Linux, run curl -fLO https://github.com/vimma-browser/vimma/releases/latest/download/PKGBUILD && makepkg -si again in the same directory; otherwise install the newer .deb, AppImage or tarball.
Added
- Update checks: every 12 hours Vimma fetches a signed manifest from
updates.vimma.devand, when a newer release exists, the status bar says⇡ 0.3.1 available(red,⇡ 0.3.1 security: :update, for a Firefox security release).:updatechecks at once and opens about:vimma's new Updates section with the exact commands for how Vimma was installed (the release's PKGBUILD, AUR,.deb, tarball or AppImage). The request is anonymous and names only the platform and the update channel;[updates] check = falseorvimma.update.enabled=falseturns it off. Nothing is installed yet, and no update host or signing key exists yet, so the check is not active. The help-text anddefaults.tomlsnapshots gained the unboundcheck_updatesand[updates]. - Arch Linux: each release carries a vimma-bin PKGBUILD;
curl -fLO https://github.com/vimma-browser/vimma/releases/latest/download/PKGBUILD && makepkg -siinstalls or updates Vimma without the AUR (#300). - Live grep:
ctrl+b f gsearches the text of every tab in your workspace as you type, like Telescope'slive_grep: theLive Grepprompt at the bottom, the results above it with the best one next to it, and a preview of the lines around the selected match on the right. The query is a regular expression with ripgrep's smart case (text that is not one is searched as typed); a scope box says which windows, workspaces and tabs are searched, every row names its window, tab and host, andctrl+swidens the search from the workspace to the window, to every window, and to the titles and URLs of recently closed tabs and windows (Enterreopens one);ctrl+spacerefines the results fuzzily.Enterselects the tab and the match in normal mode,]q/[qstep through the results afterwards, and:grep textopens it with that text,:grepwith the last query. Tabs not loaded since a restart are listed, never loaded; private tabs never reach a normal window. The help-text anddefaults.tomlsnapshots gainedlive_grep,grep_next,grep_previousandgrep_resume, and the e2e baselineslive-grepandlive-grep-jumpare new. - Tab search:
ctrl+b g(b,:ls) opens ready to type and finds tabs in every workspace and window and recently closed tabs and windows; rows show workspace, window, audio and agent markers, and:tabsearch text(:ts,:b) opens it with text typed. The help-text snapshot changed with the action's new description. ctrl+b u,:toolbar [show|hide]and[ui] toolbar = "hidden"hide Firefox's toolbar in every window: the page reaches the top of the window. Focusing the address bar (I,ctrl+l,F6, a new tab) shows a minimal bar over the page with only the URL field, andEnterorEschides it again; a permission prompt or the site's identity panel shows the whole address bar and hangs from its icon as with the toolbar shown; the full toolbar shows while an add-on popup or a toolbar panel is open, andctrl+b ubrings it back otherwise; the status bar saysnot secureandprivatemeanwhile. Shown or hidden, the toolbar, its URL field and suggestions and the prompts and panels hanging from it follow Vimma's theme, and a permission prompt answersy(allow) andn(block) once armed,Tabmoving onto its buttons. The account panel no longer offers "Get Vimma for Android or iOS", an app that does not exist. The help-text anddefaults.tomlsnapshots gained the three actions and[ui]; the e2e baselinestoolbar-hiddenandtoolbar-minimalare new, andm0-happy-path-help,m0-mcp-stdio-question,m0-mcp-stdio-grant,m3-private-workspaceandm4-split-panesshow the themed toolbar.- Search engines in
config.toml:[search] defaultsets the default engine and[search.aliases]gives@aliases(gh = "https://github.com/search?q=%s"makes an engine;w = "Wikipedia (en)"names an installed one), for the URL bar,:openand:tabnew;:open @completes them, and:openalso resolves Firefox's own aliases and bookmark keywords (a keyword bookmarklet is refused). The file wins at every start; removing a line restores the previous default and aliases. Unknown engines and taken aliases show as config errors with their line, and about:vimma gains a Search section. Thedefaults.tomlsnapshot gained a commented[search]block. - Agents (MCP):
vimma-ctl mcpis the MCP server that Claude Code, Codex, opencode and Copilot start (claude mcp add --transport stdio vimma -- vimma-ctl mcp, then:mcp onin Vimma). It speaks MCP 2025-06-18, 2025-11-25 and 2026-07-28 over stdio and offersvimma_tabs,vimma_read_page,vimma_openandvimma_close_tab, which reach only the agent workspace and each wait for your answer on the question line. Page text comes back marked as untrusted; a denial, an unanswered question, MCP off or Vimma not running comes back as a tool error that says what to do; cancelling a call in the agent takes its question off the line (the new control-protocol commandagent-cancel). The e2e baselinesm0-mcp-stdio-questionandm0-mcp-stdio-grantare new. - Agents (MCP): downloads from the agent workspace work again, safely. Each asks first in the agent question line with the file's name, size, type and site (never the address), and a
vimma_downloadgrant covers that agent's next ones; files go only to~/Downloads/vimma-agent/([mcp] download_dir) with mode 0600, are never opened by Vimma, and keep a.partname until checked. Executables, scripts, installers, archives Vimma cannot look inside and zips holding any of them need!for that one file; plainhttp:and files over[mcp] download_max_mb(200 MB) are refused; with the system's ClamAV (/usr/bin/clamscan, optional, not bundled) each file is scanned first, keeping one ClamAV could not fully scan is asked, and the notice says scanned or not scanned. A grant covers only the agent's own opened download, never what its pages download later; zips holding executables, links or paths outside their folder need!; the quarantine folder must be a private folder of yours. Your own Save Page in an agent tab saves where you choose, unasked.vimma-ctlnow prints its full-control code only after sending it. Thedefaults.tomlsnapshot gaineddownload_diranddownload_max_mb. - Agents (MCP): an agent's request now asks in one line at the foot of the window (
yonce,15afor 15 minutes,n,xto deny and mute), armed after a second, never while you type or with focus in a field, and never taking focus; otherwise it waits as◇ agent 1?in the status bar forctrl+b shift+a.◇ agent 14mcounts a grant down, calls under a grant show a notice, and a window not in front is marked urgent with a desktop notification that has no address and no buttons. While agents are on, each newvimma-ctlconnection asksvimma-ctl wants full control — y/Nfirst, and:control on <minutes>turns full control on for a while. Pages in the agent workspace get no permission prompt (location, notifications, camera, microphone, screen and the rest are refused) and open no pop-up. The help-text anddefaults.tomlsnapshots gainedagent_promptonctrl+b shift+aand the unboundcontrol_command. - Agent workspace: every profile has an empty
agentworkspace (cyan, its own container and logins), made at its next start, for local AI agents to use oncevimma-ctl mcplands.ctrl+b ( ),]w/[w,:wn/:wpandctrl+^skip it; the workspace picker lists it last as◇ agent. Closing it only empties it, renaming it is refused,:mcp forgetclears its logins after y/N, and moving a tab there warns that agents can read it.:mcp on|off(with y/N) and the validated[mcp]table inconfig.toml(schema 2) set whether agents may ask; about:vimma shows it. The help-text snapshot gained the unboundmcp_commandaction in a new Agents group, and thedefaults.tomlsnapshot the[mcp]section. - Theme:
:theme dark,:theme lightand:theme system(or[theme] appearanceinconfig.toml, which wins) keep the built-in palette dark or light or have it follow the system, live and across restarts; the start page andabout:vimmasay how. Off Omarchy, Vimma no longer looks for Omarchy: it checks once at startup, and without it there is no theme poll, no hook check and no Omarchy wording. The help-text anddefaults.tomlsnapshots gained the action and theappearancecomment. - Firefox's keys are Vimma bindings with Firefox's meaning:
ctrl+t,ctrl+shift+t,ctrl+l,alt+left/alt+right,F5,ctrl+tab,alt+1..9,ctrl+plus/ctrl+minus/ctrl+0,ctrl+n,ctrl+q(Firefox still asks first),F11,ctrl+s,ctrl+p, the Library keys and the DevTools keys, 37 new actions in the new Browser and Developer tools groups and in Tabs (restore_tabmoves there).ctrl+b ?,:mapanddocs/bindings.mdlist them with Vimma's keys (alt+leftunder "Go back", next toH,ctrl+oandctrl+[),[keys]rebinds them by name, and a page that uses one itself (an editor'sctrl+s) still gets it first, as in Firefox; Firefox's own shortcut on a key Vimma binds is off.docs/bindings.mdgains a generated "Firefox's shortcuts" table. The help-text anddefaults.tomlsnapshots changed with the new keys, and the e2e baselinem0-happy-path-helpwas re-recorded: the bindings overlay lists Firefox's keys (ctrl+t, alt+1..9, ctrl+tab …) next to Vimma's. docs/bindings.jsonis generated withdocs/bindings.mdfrom the same source, and vimma.dev is told when the default bindings change, so its?overlay lists every Vimma binding (#154).- The start page shows Vimma's version and the Firefox release it is built on, read from the build (#159).
- Private workspace on Hyprland: going to it puts the private window exactly where the Vimma window was (same workspace, tile, size, fullscreen or floating) and hides the normal window in
special:vimmauntil you switch back, close the private window, or a link from another app arrives. Vimma talks to Hyprland's socket with a fixed command set and sends no titles or URLs;[private] placement = "window"keeps it a separate window. Private windows' titles no longer include the page title (privacy.exposeContentTitleInWindow.pbm=false). Thedefaults.tomlsnapshot gained the[private]section. - Side panel: with a split, the panel opens with the panes' tabs marked. Unmark one and
Entertakes it out of the split (it stays open, right after the split) while the other panes keep their sizes; unmark down to one to end the split; mark another tab to add it.Enterthen goes to the highlighted row: unmark pane C and pressEnteron C, and C shows alone while the others wait as a hidden split. Going to any tab outside a split (the picker,ctrl+tab,alt+1..9,ctrl+b n/p, a click, the panel) now shows it alone and keeps the split hidden, as Firefox's split view does, instead of putting it in the focused pane; going to one of the split's tabs brings it back whole, also after a workspace switch or a restart, and the status bar sayssplit 3 hiddenmeanwhile. A new tab (ctrl+t, a link) still opens in the focused pane. The help-text snapshot changed with the newEnterandEscdescriptions. - Private workspace:
ctrl+b shift+p(orctrl+shift+p,:private) goes to Firefox's private window as if it were one more workspace, and back. It is never a stop onctrl+b (/); the workspace picker lists it last with a tab count only;mmoves a tab in after y/N;ctrl+b shift+dthere closes every private window, pop-ups included, and discards its data.vimma-ctl statewithholds its URLs and titles. The help-text anddefaults.tomlsnapshots gained the key, and the e2e baselinem3-private-workspaceis new. - Vimma's own palette from vimma.dev, mint on green-black, is the built-in theme, light or dark as the system is, and switches live. Omarchy themes are unchanged;
[theme] name = "tokyo-night"brings back the old palette. The e2e baselinesm0-happy-path-helpandm4-split-panesand thedefaults.tomlsnapshot changed for it. - Side panel: mark tabs with
spaceor aVrange, andEntershows them together as panes in the workspace's layout (dwindle by default) without reloading them; past[panes] maxit refuses and changes nothing. The help-text anddefaults.tomlsnapshots gained the two new keys. about:licenselists the smol-toml TOML parser's BSD-3-Clause notice under Vimma, so release builds carry it (#16).- Bookmarks per workspace: each workspace has its own folder in the Bookmarks Toolbar, and the bookmarks panel shows only the current workspace's bookmarks, following you as you switch.
ctrl+b aand:bookmarkfile there,@name/targets another workspace, and renaming or deleting a workspace renames its folder or asks what to do with its bookmarks.[bookmarks] root = "workspace" | "toolbar" | "all"picks the view. - Accessibility: pickers and panels expose the selected row to screen readers, bookmarks are a tree, prompts are dialogs, notices are announced once, and panels give focus back when they close. Text colours meet WCAG AA in the built-in dark and light themes. The help-overlay screenshot baseline was re-recorded for the new colours.
- Tiling layouts:
ctrl+b enteropens a pane split along the focused pane's longer side (dwindle), andctrl+b spaceor:layoutcycles tmux's presets (even-horizontal, even-vertical, main-vertical, main-horizontal, tiled) and dwindle without reloading any page.[panes] layoutandmain_sizeinconfig.tomlset the defaults; each workspace keeps its layout across switches and restarts. The help-text anddefaults.tomlsnapshots changed with the new keys and options. - Workspaces work like Vim buffers:
ctrl+^(orctrl+6, since^is a dead key on Finnish layouts) andctrl+b ^flip to the previous workspace,]w/[wstep through them, and:ws,:wn,:wp,:wd,:wa,:workspacesand:ws #mirror the buffer commands. A command abbreviation now runs when it begins every other match (:woris:workspace). ctrl+b eor:addonsopens a keyboard add-on manager:Enteropens an add-on's popup with focus inside it,oits options,xturns it on or off,dremoves it after y/N,uchecks for updates andshift+pallows it in private windows;:addon <name>opens one popup directly. System and hidden add-ons are never listed.- In text fields
ctrl+wdeletes the previous word,ctrl+udeletes to the start of the line andctrl+hdeletes a character, as in Vim, andctrl+zundoes them ([modal] insert_editing = falseturns this off). xin the side panel closes the selected tab and keeps the panel open; pinned tabs are left alone.- The browser builds as Vimma:
vimma --versionprintsVimma 0.1.0 · Firefox 158.0, and the window title, brand strings, app name and vendor say Vimma. The app icon is the window-and-V mark from the Vimma logo, on a dark window that reads on light and dark desktops; the start page shows the full logo, transparent, with a dark tile under light themes. ctrl+b ?opens a bindings overlay over any page, includingabout:preferencesand the PDF viewer./filters it,Escorqcloses it and focus returns to where it was. A barectrl+bwaits for the next key without a timeout.- Firefox's tab strip is hidden by default. Set
vimma.ui.tabstrip.hiddentofalseinabout:configto show it again, without a restart. Firefox's tab keys and the window controls keep working. - Key capture across the whole window, including
about:pages, the URL bar and the PDF viewer. Setvimma.debug.keysto log each key to the console. vimma-core: tmux-style prefix and Vim key notation, the closed action set, the default keymap, a keymap compiler with "did you mean" suggestions, and a dispatcher with counts, timeouts and replay.docs/bindings.mdanddefaults.tomlare generated from it (npm run gen-docs).- Help-text and
defaults.tomlsnapshots recorded for the first time. vimma-core:config.tomlschema v1 validation withfile:lineerrors and suggestions, schema migrations, keeping the last good config on error, and theme tokens from Omarchy'scolors.toml,[theme.colors]or the built-in Tokyo Night.- Artifact builds (
tools/artifact-build,npm run mochitest -- --artifact): test the front end on Mozilla's binaries for the same release, locally and on every PR. - A tmux-style prefix layer:
ctrl+b(tmux's default prefix), then a key, works in every mode.ctrl+b c,n/p,1-9andshift+xopen, cycle, pick and close tabs;t,x,gtandgTdo the same in normal mode. - Vim keys on pages:
j/k/h/lwith counts,d/uandctrl+d/ctrl+u(half a page),ctrl+e/ctrl+y,gg/G; focusing a text field enters insert mode andEscleaves it,iandgifocus the first field. Keys Vimma does not bind still reach the page. H/L(or Vim'sctrl+o/ctrl+i) go back and forward andrreloads, in the focused pane;yycopies the page URL,p/Popen the clipboard here or in a new tab,gu/gUgo up a level or to the site's root, andgfshows the page source.- Link hints:
flabels every link, button and field on screen, also in frames and web components, andFopens a link in a background tab. The labels are drawn by the browser, so pages cannot see or restyle them. - Vim-style find:
/and?search forward and backward with smartcase,n/Nrepeat, and the status bar shows the match count. - Copy mode:
vorctrl+b [puts a caret on the page; Vim motions (w,e,f/t,{/}, counts),v/Vselections,iw/awandy/Ycopy text. Selecting text with the mouse enters copy mode too. - An always-visible status bar on the window's last line: mode, pending keys, workspace,
tab n/N, panes, title or tab name, search, loading and URL. - A Vim-style command line on
:, with completion, history (a private window keeps its own), errors with "did you mean" and commands such as:open,:tabnew,:q,:ls,:tabrenameand any action by name. ctrl+b g(orb) opens a fuzzy goto picker of the window's tabs, andctrl+b shift+tnames a tab; the name shows in the status bar and picker and survives a restart.- Workspaces, each a Firefox container of its own, so a login in one is invisible in another:
ctrl+b (/ctrl+b )switch (tmux's session keys, from every mode),ctrl+b shift+n/shift+w/shift+d(or:wsnew,:wsrename,:wsdelete) create, rename and delete,:wsmovemoves a tab, and thectrl+b wpicker shows tab counts and moves tabs. New tabs and windows open in the current workspace, and a restart restores every workspace, its tabs, panes and tab names. I(shift+i) jumps to the address bar with the address selected, from normal and copy mode or with a panel open, for the focused pane; in a text field it still typesI.- An on-demand side panel (
ctrl+b bor:sidebar) lists the current workspace's tabs;j/k,Enteror1-9pick one. - Routing:
[[routes]]inconfig.tomlsends a domain, URL prefix or the app that opened a link (viavimma-open) to a workspace;:routelists, adds and moves. - Split panes on Firefox's split view, up to 4 per workspace (
[panes] max):ctrl+b v/-split,ctrl+b h/j/k/l(orctrl+w h/j/k/l) move focus,ctrl+b zzooms,ctrl+b xcloses a pane,ctrl+b shift+h/j/k/lswap andctrl+b renters a resize mode. Each workspace keeps its own split, and a split made outside Vimma becomes panes. - Bookmarks:
ctrl+b a(or:bookmark) files the page under a folder path from anywhere, andctrl+b shift+bor:bookmarksopens a neo-tree style bookmarks panel to open, add, rename, move and delete. - A Vimma start page for new windows and tabs, with the Vimma logo and a key hint, themed and local.
vimma.startpage.newtabturns it off for new tabs. - Vimma loads
~/.config/vimma/config.tomland reloads it within 2 s in every window, without a restart. Every key, the prefix and the leader can be remapped there. A broken file keeps the last good config and showsconfig.toml:LINEin the status bar;:sourcereloads now,:source <path>loads another file and:configopens the file. On first run Vimma creates a commentedconfig.toml(mode 0600) and never overwrites it. - Vimma follows your current Omarchy theme live: the status bar, command line, overlay, pickers, hints, panes and start page take its colours, and a theme-set hook Vimma installs recolours them as soon as the theme changes.
vimma.theme.source = builtinkeeps Tokyo Night. about:vimma(or:about) shows versions, upstream patches, modes and recent keys (typed text masked), config errors, theme, workspaces and the control socket;:bugcopies a redacted report.vimma-ctl, a Rust command-line client for a local control socket that is off by default (vimma.control.enabled):send-keys,state,openandreload-theme.npm startruns your build with its own dev profile, and a socket-driven end-to-end test suite runs under Xvfb.
Changed
- Firefox's find bar, menus, dialogs (page alerts, prompts, print settings) and its own pages (Settings, Add-ons, Downloads, Troubleshooting, about:config) follow the Vimma/Omarchy theme; Settings no longer shows Firefox's mascot (#305).
- Nightly builds are a 7-day workflow artifact instead of a public pre-release until the first release; the build job holds no write token (#292).
- Release and nightly builds run on GitHub-hosted runners from a freshly downloaded, checksum-verified Firefox source (#286).
- Surfer is pinned and never auto-merged, npm install scripts are off, and no workflow can target a self-hosted runner (#280).
- Repository links, update URLs and the release signing identity point at vimma-browser/vimma (#278).
- Firefox 158.0 (MFSA 2026-106).
- The e2e baseline
m0-happy-path-helpwas re-recorded on Firefox 158.0, which antialiases the bindings overlay's text slightly differently (1.26 % of pixels, every row in place) and draws its scrollbar thumb 3 px shorter; nothing else in the screenshot changed. vimma --versionprints Vimma's version and the Firefox release it is built on (Vimma 0.1.0 · Firefox 158.0) instead ofVimma Vimma 0.1.0.- Firefox's own shortcuts that overlap Vimma or Vim are off:
ctrl+w(close tab),ctrl+u(page source),ctrl+h(history),ctrl+d(bookmark dialog),ctrl+o(open file),ctrl+i(page info),ctrl+k(web search) andctrl+b(bookmarks sidebar).[firefox] disable = "all" | [...]andenable = [...]inconfig.tomlchange the set;about:vimmalists what is off. The help-text anddefaults.tomlsnapshots changed with the new keys and options. - Characters typed with AltGr (Linux, Windows) or Option (macOS), such as
{,}and$on Finnish layouts, match their bindings. ctrl+b ?,:mapandabout:vimmalist the keys you press (ctrl+b b,ctrl+b shift+x,ctrl+w h) instead of config notation (prefix+b), following a remapped prefix or leader; the legend names the leader only when a binding uses it. The help-text snapshot changed to match.- Workspaces switch with
ctrl+b (/ctrl+b )instead ofctrl+u/ctrl+i, which are Vim's half-page-up and jump-forward keys in normal mode now;ctrl+othere goes back instead of opening a file (the File menu and:openstill do). The help-text anddefaults.tomlsnapshots changed with the defaults: the workspace, scroll and history rows list the new keys. - Project renamed from vimux to Vimma:
packages/vimma-core,src/browser/base/content/vimma/,~/.config/vimma/config.toml. Thedefaults.tomlsnapshot changed only in its generator-path comment. ctrl+bno longer opens Firefox's bookmarks sidebar. It is Vimma's tmux-style prefix key;ctrl+b shift+bopens Vimma's bookmarks panel.vimma-corevendors smol-toml 1.9.0 (BSD-3-Clause) as its TOML parser: source in the repo, not an npm dependency (ADR-012).defaults.tomlsnapshot changed: it gains the commented[workspaces],[theme]and[theme.colors]sections of schema v1; bindings unchanged.- Help-text and
defaults.tomlsnapshots changed: they gain the bookmark bindings (ctrl+b a,ctrl+b shift+b,<leader>band the panel's neo-tree keys); no other row moved (bookmarks). - The leader has no default bindings:
space nandspace bno longer open the side panel and the bookmarks panel (ctrl+b bandctrl+b shift+bdo). Help-text anddefaults.tomlsnapshots changed:toggle_sidebarandtoggle_bookmarkslose<leader>nand<leader>b; no other row moved. The leader itself stays, for bindings you add inconfig.toml. - Closing the last tab keeps the window open with a new tab, startup restores the previous session, and the new-tab page is no longer preloaded. Each can be changed back in
about:config. - Config schema 2 adds
[panes] max,[modal] hint_chars,[sites."host"] insertand[[routes]]; a schema 1 file migrates as is.
Fixed
Escleaves insert mode on pages that put focus back into a field, and right afterTabinto a frame from another site (#301).- about:vimma's Search line no longer lists a search alias that config.toml names but Vimma could not apply (#297).
- A find match in a text field no longer loses its highlight colour when the find bar closes under load (#285).
- Insert mode: after
iorgi, a page that moves focus itself (a file finder jumping to its result list, a dialog taking focus) no longer drops the tab back to normal mode, so the keys you type keep going to the page instead of running Vimma commands; onlyEscor a new page ends it.inow goes back to the text field you were last in on the page, and falls back to the first one (#165). The help-text snapshot changed withi's new description. - Omarchy themes whose
colors.tomlhas only the terminal colours (accent, foreground, background, color0–color15, such as Event Horizon) are no longer rejected: Vimma derives the rest as Omarchy does (#266). - A find whose match is in a text field (
/then Enter) keeps the match highlighted the way Firefox's find bar does, instead of showing it greyed out (#270). - The e2e baseline
m3-private-workspacewas re-recorded: it predated the start page's version footer (#159) and:themehint (#173), and the scenario now opens the private window only once the search service is ready, so its URL bar always names the default engine ("Search with Google or enter address" and its icon) instead of sometimes showing the engine-less placeholder and magnifier (#236). - Opening external-protocol links and download prompts no longer fails on Firefox 158.
- Split panes keep pages exactly at their pane edges on Firefox 158.
- The side panel no longer names the agent workspace as the
ctrl+b (/ctrl+b )target, in a normal or a private window. - A megabyte-long unknown key or value in
config.tomlno longer stalls the "did you mean" suggestion (#196). - Keys typed right after switching to a workspace whose start page is still being restored are no longer lost: focus waits on the window until the page has loaded (#140).
- Private workspace on Hyprland: Vimma listens to Hyprland's events again even when a switch happens just as Hyprland closes the event socket (#163).
- On Hyprland the private workspace now really takes the Vimma window's place (a new private window used to be shown beside it); a swap that cannot name the window says so once in the console and in
about:vimma(#160). - A key name with a bracket or a quote in
config.tomlis reported as an error instead of crashing the config reload (#134). - Find: a match in a page's search box (YouTube, DuckDuckGo) no longer switches the tab to insert mode;
n/Nkeep stepping through matches (#164). - A playing video keeps the screen awake on Wayland: Vimma sets Firefox's own
MOZ_WAKE_LOCK_TYPE=WaylandIdleInhibitat startup on Linux unless one is exported, since the portal path inhibited nothing on Hyprland (#153). - The side panel's scrollbar takes the theme's colours instead of Firefox's white track; the bookmarks panel's too (#146).
- Firefox's own sidebar (history, bookmarks, synced tabs and the launcher strip) follows the theme, live, with the theme's focus ring instead of Firefox's blue (#148).
- The address bar's focus ring, the focused pane's outline in a split and other focus rings in the browser's own UI take the theme's accent instead of Firefox's blue, a shade darker or lighter where the accent would miss 3:1 contrast.
- Vimma's side panel, bookmarks panel, pickers and help overlay draw their focus ring in the theme accent instead of Firefox's blue. The e2e baseline
m0-happy-path-helpchanged for the help overlay's ring. npm run importno longer fails after a patch changes: it restores the Firefox files our patches touch before re-applying them.tools/relocate-checkout.mjsrepairs a checkout that was moved.- Switching workspaces with
ctrl+b (,ctrl+b )or:workspaceno longer shows "no workspaces in this window" after a successful switch. - Sites see Firefox's user agent (
… Gecko/20100101 Firefox/158.0), notVimma/0.1.0. - Everything that asks for the Firefox version (webcompat interventions, add-on updates, Remote Settings and Nimbus targeting, backups) gets Firefox's (158.0).
--versionshows Vimma's 0.1.0 with the Firefox version, and the About dialog shows Vimma's 0.1.0. - Startup no longer throws in BrowserGlue, so
about:homeandabout:newtabload again. - The build stops with "run 'npm run import'" when the version files are missing, instead of silently building as 0.1.0 everywhere.
- The
ctrl+b ?overlay takes the theme's colours instead of staying white under a dark theme.
Security
- The Firefox source is accepted only when Mozilla's release key signed its SHA512SUMS;
npm run verify-sourcechecks a local download (#289). - A quarterly audit checks every change to Firefox's own code against its register entry, size budget and review date, and opens an issue with the report.
- Firefox security updates on autopilot: every 4 hours CI checks Mozilla's releases and advisories, opens a tracking issue, verifies the source, checks the patches, runs every test suite and opens the update pull request. A security release left unshipped for 3 days fails CI and opens an issue.
- Every parser of outside input (control protocol,
config.toml, routing rules, key notation, the command line, Omarchy theme files,vimma-ctl) is fuzzed in CI and nightly. Fuzzing found and fixed unbounded TOML nesting,constructor-named keys crashing a reload, a slow IPv6 pattern, an 8 s freeze on a huge:paste and a malformed control message wedging its connection. - Vimma does not join Mozilla's studies, experiments or rollouts (Normandy, Nimbus) and shows no sponsored stories, shortcuts or address-bar suggestions, remote recommendations or Mozilla promos. Each default can be turned back on in
about:config. - Builds have no crash reporter and no official telemetry, so nothing is sent to Mozilla. A crash leaves a local core dump.
- Remote Settings (CRLite certificate revocation, intermediates), the add-on blocklist, Sync and AMO add-on updates stay as in Firefox. Safe Browsing's phishing, malware and unwanted-software lists are on in builds made with a Google API key (the nightly); a keyless build shows the protection as off (docs/limits.md).
- The control socket listens on
127.0.0.1only and is off by default. Clients need a 256-bit token from a file only you can read, the browser proves it holds the token before the client sends it, and connection, size and idle limits apply.openrefusesjavascript:anddata:. - Routing never acts on a link a page opens or a page's own navigation, so a page cannot open a site with another workspace's logins.
- Every way Vimma opens a URL (
:open,:tabnew,p/P, bookmarks, the control socket) refusesjavascript:anddata:, also behindview-source:. - docs/security.md states what each risky part may and must never do, every rule linked to the test that enforces it, and CI fails if a linked test disappears. SECURITY.md explains how to report a vulnerability privately.
- Deleting a workspace asks first and clears its container's site data; a container deleted outside Vimma is replaced at once, so new tabs never land in the default container.
- Semgrep and CodeQL scan every PR, and a PR that adds a high-severity CodeQL alert cannot merge. CodeQL's first scan found 15 alerts; 14 were fixed (regex backtracking replaced by linear scans, file races, Markdown escaping in generated docs) and one was a false positive.
- Dependencies are kept current: Dependabot proposes updates weekly, and security, patch and minor updates merge on their own once every required check passes. The build tools' outdated
sharpandqswere lifted past their advisories.
Removed
- Firefox's app updater: Vimma no longer asks Mozilla's update server for app or system add-on updates, and About and Settings show no update button. Add-on updates from addons.mozilla.org stay on.
Third-party notice
The AppImage starts with the unmodified AppImage type-2 runtime 20251108 (MIT), which
statically links libfuse 3.15.0 under the LGPL-2.1-or-later. Its source:
https://github.com/AppImage/type2-runtime/tree/20251108. The licence text and how to relink or replace the runtime are in
usr/share/doc/vimma/ inside the AppImage (--appimage-extract). Vimma is MPL-2.0; the
CycloneDX SBOM lists the other components.