v0.1.0
Prerelease
Getting started
This is Omaweb's first release, and like every v0.* release it is marked a prerelease. It attaches no binaries, so build it from source as the README describes. macOS is a development platform, and Omaweb does not distribute macOS builds. Linux packaging with Wayland support is not qualified yet.
Omaweb runs on QtWebEngine. All of its chrome sits in a vertical sidebar beside the page, with no toolbar above it and no visible native window controls. Settings has an About section that names the build, links the site, the source and the issues, and states the license.
Spaces
- A Space is a named browsing identity with its own logins, site data, Site permissions, history, session and tabs. Create, switch, rename and delete Spaces from the Spaces menu in the footer.
- The footer shows every Space as a letter. The letter of the Space on show is the only lit one.
- Each Space keeps its cookies across a restart, so its logins survive one.
- Putting a Space away closes its pages' renderers. A Pinned tab marked Keep active and the tab Developer tools are attached to keep running.
- Settings lists every retained tab with the resident memory its renderer holds.
- Moving a tab to another Space loads it again under that Space's identity. It loses its scroll position, form state and history on the way.
- A Space at rest shows the Shortcut sheet where the page would be, and costs no renderer. Closing the last page in a Space takes its renderer with it.
Tabs
- A tab row shows the site's favicon. With favicon artwork off, its two-letter tile takes the favicon's hue at the theme's saturation and lightness.
- Pinned tabs sit in their own block above the ordinary tabs. With Tint favicons on, each pin takes its favicon's colour, and the active pin carries it as a wash and a border.
- Drag a row to carry it to its new place. The rows it passes move aside to open the gap, and nothing is reordered until you let go. The keyboard moves a row one place at a time.
- Each row has a menu. Duplicate tab opens the same address again and copies nothing else. Close other tabs and Close tabs below never close a Pinned tab.
- Each Space keeps its 25 most recently closed tabs across a restart. A Private window keeps the same stack in memory only.
- A tab making sound turns its site chip into a speaker. Click it to mute the tab. Muting survives navigation within the tab, and the session keeps it with the tab rather than the site.
- Pages may autoplay, but a tab on a site you have not interacted with stays silent. The site is heard once you touch one of its pages or unmute it from the row.
- Native notifications name the site and the Space, and activate the tab that sent them. A page in a Space that is put away and not retained cannot send one.
- A new tab is created only once you commit a destination in the Omnibar. A page's ordinary new-window request becomes a tab, and Auxiliary windows carry sign-in and payment flows.
Sidebar and window
- The sidebar's top row holds hide-sidebar and search at the left, and back, forward and reload at the right. The footer holds the Space letters, the Spaces menu and settings.
- With the sidebar hidden, a floating navigation strip sits at the top of the page area. It blurs the page behind it, as the Omnibar does.
- Drag the seam between the sidebar and the page to resize it, or press
Primary+Shift+]andPrimary+Shift+[. The page keeps at least half the window, and the width is remembered. Primary+Emoves the keyboard into the sidebar, onto the row you are reading.EscapeorPrimary+Shift+Ehands it back to the page.Primaryis Command on macOS and Control elsewhere.- Settings opens where the page would be, with a rail of sections.
Primary+,opens it. - A permission question docks above the page, so the page stays readable while you answer.
- The sidebar and panels are translucent at the theme's opacity, and the page viewport stays opaque. On macOS the window has a native blur behind it and keeps its chrome across fullscreen.
Omnibar, history and search
- The Omnibar opens addresses, searches, and runs browser commands. The arrow keys step through its history suggestions, which come from the Space on show only.
- The History sheet searches the Space's history and deletes one visit, one site, a time range or all of it.
- Settings clears cookies, site storage, cache, Site permissions and history for one Space and a time range. Clearing every Space and deleting a Space each ask for their own confirmation.
- Settings offers search engine presets. DuckDuckGo is the default.
localhost, IP literals, explicit ports and the.testand.localhostdomains open as addresses rather than searches.- A Private window records no history.
Page commands
- Find keeps its query and match position while hidden. A navigation clears the matches.
- Zoom belongs to one tab, moves along a fixed ladder, and is saved with the session. A new tab starts at 100 percent.
- Reload bypassing cache, Stop loading, fullscreen, printing and inline PDF viewing each have a command. Printing uses the desktop's own print dialog.
- A command the engine or the desktop cannot carry out is listed as unavailable and reports why.
- Site fullscreen opens with a notice naming the site and always ends with
Escape. A page in fullscreen has no browser chrome over it. - Right-click a page, or press
Shift+F10, for Omaweb's own context menu. It acts on the link, image, media or selection under the pointer, and lists rows it cannot run as unavailable. Primary+Shift+Ccopies the page's address, alone, with no title or markup.- JavaScript and HTTP authentication prompts belong to their tab. Opening an external application asks first, naming the application, the scheme, the site and the full destination.
Developer tools
- Open developer tools docks QtWebEngine's inspector beside the tab it inspects, in the browser's theme. It follows that tab through navigation and Space switches, and closes with it. It does not come back after a restart.
Primary+Alt+Cruns Inspect element. From the keyboard it opens the inspector's element picker.- Remote debugging exists only when you ask for it with a launch option. It listens on loopback only, and that session opens no Private window. Any other Chromium debugging switch stops the browser from starting.
Content blocking
- A first run subscribes to EasyList and EasyPrivacy. A list is kept for the rules that compiled, and the rules it cannot use are reported by category in Settings.
- Element hiding applies before the page's own scripts run, so ads do not appear and then vanish. Turning blocking off for a site gives them back without a reload.
- EasyList's 2,939
$popuprules decide which windows a page may open. A background tab you open with a middle-click or Ctrl-click is exempt, and a refused window counts as a refused request. ##+js(...)rules run scriptlets from uBlock Origin's library, pinned to uBO 1.69.0, before the page's first script. Scriptlets that uBlock Origin keeps behind trust are refused.$redirectrules get the substitute resource they name, from the same vendored library.$removeparamrules strip the parameters they name.- A site with blocking turned off runs no scriptlets.
Keyboard navigation
j,k,ggandGscroll the page.fshows link hints for the current tab, andShift+Fopens the link in a background tab.- Hinting a text field focuses it instead of clicking it.
Escapeleaves a focused page field. ?orPrimary+/shows the Shortcut sheet. It reads the live keymap, so it lists only keys the window answers.- Keybindings live in
keybindings.json. A new default binding reaches a file you have edited, and a binding you deleted stays deleted. - A binding for a command this build does not know is dropped, and the rest of the file loads. Settings names the dropped binding in its keyboard section, and the settings button carries a mark.
Themes and configuration
- Configuration lives in
$XDG_CONFIG_HOME/omaweb, or~/.config/omawebwhen that is unset.OMAWEB_CONFIG_ROOTmoves it. - A
theme.jsonthere ranks above a theme Omarchy renders and belowOMAWEB_THEME_FILE. - The interface draws with the Omarchy shell's component kit, driven from the theme palette.
theme.jsonnames its preferred font families, and the first one installed wins. import_terminal_theme.pyderives a theme from Ghostty, iTerm2, kitty, Alacritty or a customised Terminal.app profile. Run it from that terminal. It refuses to write while Omarchy renders the theme.- A Private window has dark purple chrome, and its footer shows a mask.
- The page area paints the theme's background before a page paints its own, so there is no white flash on navigation.
Full changelog: https://github.com/villekivela/omaweb/commits/v0.1.0