v0.3.0

Prerelease

Sync

Sync copies your Spaces, tabs and configuration between installations through a private GitHub repository. It is off by default. Connect it in Settings, under Sync. There is no Omaweb account, and Sync never runs in a Private window.

  • Connecting signs in to GitHub and authorizes the omaweb-sync GitHub App. Omaweb then creates a private repository and opens the App's installation with only that repository selected. The consent pages open in front of the window.
  • Space names and colours, ordinary tabs and Pinned tabs are each encrypted before upload.
  • The keybindings, the filter subscription addresses and four Settings keys are readable in the repository.
  • Everything else stays on the machine. That includes passwords, cookies, history, downloads, Site permissions and every Private window.
  • GitHub can still see that the repository exists, how big it is and when it changes.
  • The recovery key is shown once. Save it and type it on your other machine, because Omaweb cannot recover it. A wrong key applies nothing and pauses Sync.
  • Sync's tokens are kept in the keyring.
  • The Sync section has Sync now, Pause, Resume and Disconnect. Pause keeps the credentials and the local copy. Disconnect removes both and leaves the repository on GitHub.
  • Once connected, your GitHub avatar replaces the Settings button in the footer.

omaweb.app/sync states what leaves your machine and which GitHub permissions the App asks for.

Movement with a direction

The Omnibar, the sheets and the panels arrive from where they belong. Each closes the way it came, in 120ms.

  • The Omnibar grows out of the address field in 180ms. With the sidebar hidden, it drops in from just above its place.
  • The Start page, Settings and history lift from a little below their place. Their backdrop stays still.
  • Site information unfolds from the address, and the download detail rises from the Download mark. A page notice comes down from the top edge.
  • On a tab switch, the new page arrives from below for a tab further down the list, and from above for one further up. Between two pins on one row, it arrives from the side.
  • A Space switch slides along the row of Spaces in the footer. The tab list, the page and the footer's highlight move the same way.
  • One setting turns all of this off: Ease the chrome, in Settings. It began as the sidebar's ease.

Sidebar and Settings

  • Space actions moved from the sidebar footer into Settings: create, rename, move a tab and delete.
  • Point at the left edge of the window to reveal a hidden sidebar. This works with floating navigation off too.
  • In Settings, press a section's first letter to go to it. Press it again to cycle through sections that share the letter. A field with the keyboard keeps its letters.
  • Settings keeps the keyboard until it closes, even after you click a tab.
  • A small indicator at the top centre of the page shows that the page is loading. It follows the active tab only, and stays off the Start page and Settings. Under reduced motion it is a steady mark.

Faster

  • The packaged browser ships its QML compiled ahead of time. The first launch no longer parses every file.
  • Recording a visit, saving the tabs and saving the closed-tab list run on a thread of their own. On an M2 Max with a Space at its 5,000-visit bound, the visit write held the interface for 2 to 3 ms. Each of the three writes now costs the interface less than 2 ms.

Fixes

  • On the Start page, single-key commands keep working after the Omnibar closes. They used to stop until you switched tabs.
  • Pinned tab favicons are the same size as other tabs' favicons. They were 25% larger.
  • The retained-tab report counts the memory of pages loaded from a site. It used to report them at nothing.
  • makepkg -si in a clone packages that clone. It used to clone GitHub again and package that, so your own commits were missing.
  • A source build no longer leaves about 600 MB of untracked files in the checkout's packaging/.

Full changelog: https://github.com/villekivela/omaweb/compare/v0.2.1...v0.3.0

This release on GitHub