Changelog
All notable changes to riptide. Generated by git-cliff from Conventional Commits.
0.3.0 - 2026-10-08
Features
- settings: :settings opens a page to browse, change and reset every setting
- tabs: Mark tabs using the camera, microphone or screen
- settings: A clearer settings page with sections, a colors preview and checks while typing
- settings: URLs & search second on the settings page
- sessions: :recover lists each crash's tabs to reopen some or all
- notifications: Libnotify presenter with app name, urgency, timeout and site icon
- settings: A Keys tab to bind, unbind and restore keys, with clash warnings
- settings: A Sites tab to forget saved permission answers and clear site data
- windows: Well-known call sites open in call windows by default
- settings: Edit per-site values on the page, and j/k/Return to move and edit
- windows: Say when a call site opened in a call window
- prompts: Questions belong to their tab, and permission requests show the site and what it wants
- completion: Site icons in :open and tab completion
- adblock: The status bar counts requests blocked on the page
- adblock: Hosts files work as block lists
- completion: Letters with gaps match when nothing contains the text
- spell: :spell-install downloads dictionaries checked against pinned checksums
- tabs: Cm mutes the call from any tab with the site's own key
- spell: :spell-install alone lists the languages to pick from
- tabs: Gp floats the page's video in picture-in-picture
- Chromium's crash dumps are kept locally and listed in :crash-report
- lua: Rt.on with patterns, groups and once, and eleven more events
- lua: Rt.defer and rt.every timers, rt.notify levels, and a time limit per callback
- lua: Rt.keymap with descriptions, and commands that complete their arguments
- lua: Rt.store keeps data between runs
- lua: Sandboxed plugins from a folder, loaded once you approve their permissions
- tabs: Screen shares are marked, and :share-stop ends them from any tab
- lua: Plugins install from git and stay pinned in rt-pack-lock.json
- lua: A Plugins tab with update review, revoke and remove
- lua: Plugins can wait for an event, command or key to load
- lua: Rt.statusbar.widget draws
lua:<name>widgets - lua: Rt.ui.select and rt.ui.input, rt.page to type and fill logins, and rt.json
- lua: Rt.ui.float draws boxes of text over the page
- lua: Builtin plugins, starting with passwords to fill logins from pass, rbw, bw or KeePassXC
- lua: Rt.ui.panel docks lines beside or below the page
- lua: Plugins ship HTML pages that talk only to their own plugin
- Chrome extensions, installed from the Web Store with :extension-install
- lua: Plugin pages can dock in a panel beside the page
- lua: Rt.page.eval, rt.page.css and rt.page.selection
- lua: Rt.page.hint hints a selector's elements and hands the pick to Lua
- An Extensions tab in :settings, :extension-open and extension updates
- help: :help rt.ui.float and :help
<plugin> - Install extensions straight from the Web Store page
- lua: Riptide --plugin-test runs a plugin's specs, and a plugin template
- lua: Subdir installs one plugin from a repository of several
- Extension popups float over the page, as in Chrome
- Drag an extension's popup by its bar
- lua: Plugins declare dependencies, which install and load first
- lua: One checkout per repository, and check, update, sync, restore and clean
- adblock: Scriptlets, $redirect stand-ins and $removeparam
- lua: Riptide checks plugins for updates in the background
- adblock: UBlock Origin's lists by default, with its trusted scriptlets
- adblock: Procedural element hiding (:has-text, :upward, :remove and more)
- adblock: Element hiding inside frames
- lua: Check plugins for updates daily, mentioning each update once
- lua: Add plugins from the Plugins tab or :pack-add, kept in plugins.toml
- adblock: Your own rules, and an element picker that writes them (;x)
Bug fixes
- window: Windows can be resized, so tiling window managers tile them
- cmdline: :q closes the current window and :qa quits, as in qutebrowser
- tabs: Middle-click and Ctrl+click open links in a background tab
- ui: Ctrl+scroll no longer zooms riptide's own bars
- lua: A plugin whose folder is missing shows as Failed on the Plugins tab
- Say plainly what works when an extension has a popup
- lua: Commands added after loading run in the same callback
- extensions: Build on Windows, and wait for the limits link in the e2e test
- lua: Plugin names and tests on Windows
0.2.0 - 2026-10-07
Features
- tabs: Pinned tabs stay where they are and can sit between others
- tabs: Gt lists this window's tabs by number alone
- tabs: A dragged tab shrinks and stays centred on the pointer
- content: Proxy, WebRTC IP policy, DNS prefetch, canvas reading, cache size
- content: Autoplay, WebGL, reduced motion, PDF viewer, window.close and console messages
- release: Ship a .deb with each release
- cmdline: Ctrl-v and Shift-Insert paste into the command line and prompts
- input: Partial_timeout, match_counts and mode_override
- :report, :debug-keytester, :debug-log-filter, editor.remove_file, new_instance_open_target_window
- Scrolling.bar and tabs.close_mouse_button_on_bar
- content: Mailto: and other external links, mouse lock, protocol handlers, file access
- downloads: Prompt-open-download (Ctrl-x) and prompt-yank (Alt-y)
- input: Rocker gestures, spatial navigation and media keys
- config: Say when a changed setting only applies after a restart
- content: Notifications in the status bar, and keep tests off the desktop bus
- tabs: Tabs.tabs_are_windows
- cmdline: Cmd-repeat, cmd-repeat-last and cmd-run-with-count
- hints: Hints inside cross-origin iframes and open shadow roots
- tabs: A tab whose renderer crashed says so, and r reloads it
- prompts: Float prompts in a box near the bottom of the page
- A panic writes a crash report, and the next start says where
- prompts: Amber floating prompts with a button per answer
- theme: Themes and colors.* settings for riptide's bars, prompts and hints
- theme: Fonts for riptide's bars, prompts and hints, and for pages
- theme: Ui.css and content.user_stylesheets, reloaded on change
- theme: Colors.webpage.bg, and dark mode that applies at once and per site
- sessions: Restored tabs keep their back/forward history and scroll position
- completion: Commands and settings match anywhere in their name, with the match highlighted
- theme: Bars and completion rows grow to fit their fonts and padding
- theme: A floating command line, ui.overlay.position and ui.overlay.width
- hints: Hints.radius, hints.padding and a hints.css file shape the labels
- prompts: Prompt.position center, and a CSS class for what each prompt is about
- theme: Ui.theme = auto follows the light or dark preference
- theme: :theme previews each theme while it's typed or picked
- theme: Your own themes from
themes/<name>.tomlin the config directory - window: Riptide's logo as the window icon
- theme: The downloads and history pages take the theme's colors
- windows: Call windows, where screen sharing picks a tab, window or screen
- theme: Import base16 schemes and qutebrowser theme files from themes/
- windows: :tab-call and content.call_sites send calls to call windows
- lua: Rt.theme defines a theme in config.lua
- :crash-report shows the last crash report, to send as a GitHub issue or by email
Bug fixes
- tabs: Place a dragged tab by the pointer, not its centre
- sessions: Keep each crash's tabs, and don't reopen tabs that crash again
- permissions: Alt-y in a permission prompt copies the site's origin
- notifications: Name riptide's desktop file, not Chromium's
- sessions: Crash recovery messages stay until the tabs have loaded
- theme: Readable text in every built-in theme
- theme: The current tab is always the darkest tab
- sessions: Ctrl-C and a closed terminal keep the tabs for crash recovery
- window: Give riptide's windows a WM_CLASS
- windows: Keep ordinary windows' focus as before call windows
- theme: In light themes the current tab is the brightest tab
0.1.0 - 2026-10-06
Features
- Scaffold CEF-based vim-like browser (milestone 0)
- Add ./task wrapper that bootstraps Task
- Add tabs (milestone 3)
- Add hints and yank/paste (milestone 4)
- Add configuration: TOML, Lua and :set/:bind (milestone 5)
- Add history, quickmarks, bookmarks and sessions (milestone 6)
- Add prompts, downloads and permissions (milestone 7)
- ui: Serve UI pages from hb:// with a UI-only message channel
- tabs: Pinned tabs, tab bar mouse support and favicons
- help: Generated help page, :help, :version and F1
- remote: Hand arguments to a running browser from the terminal
- ui: Add window.title_format
- sandbox: Run Chromium's sandbox whenever Linux allows it
- privacy: Stop background calls that only serve Google
- adblock: Block ads and trackers with Adblock Plus filter lists
- help: Add :changelog and an "Updated to" notice
- spell: Spell checking with keyboard-driven suggestions
- spawn: Add :spawn, qutebrowser-style userscripts and :open-editor
- marks: Set and jump to marks with ` and '
- macros: Record keys with q and replay them with @
- caret: Add caret mode for keyboard text selection
- greasemonkey: Run Greasemonkey scripts in matching pages
- search: Find text in the page with /, ?, n and N
- navigate: Go up the URL, to next/prev pages, or change its number
- ui: Add dark mode and preferred color scheme settings
- config: Per-site settings, and save 'always' permission answers
- tabs: Restore each tab's mode when switching back
- tls: Ask before loading pages with untrusted certificates
- widevine: Opt-in Widevine DRM with content.widevine
- windows: Multiple windows and private windows
- lua: Script the browser from config.lua
- clipboard: Yank to and open from the primary selection
- tabs: Pick a tab in any window with :tab-select (T)
- session: Crash-recovery autosave and a history page
- history: Import qutebrowser's history with :history-import
- tabs: Clone tabs and move them between windows
- help: List commands from config.lua on the help page
- hints: Hint elements inside same-origin iframes
- hints: Number hints that filter by text
- downloads: Tab path completion and a :downloads page
- packaging: Build an AppImage next to the tarball
- ui: Stack messages above the status bar
- adblock: Hide ads with the lists' element-hiding rules
- adblock: Re-check element hiding for ads that load late
- spawn: Show output in a tab with :spawn -o, and Y in caret mode
- hints: Run programs and userscripts on hinted links
- search: Follow a search match's link with Return
- lua: Add hb.tabs() for the current window's tabs
- Zoom, devtools, print, fullscreen, view-source, jseval and more
- Scroll-px, cmd-later, fake-key, click-element and more commands
- breaking: Rename hackers-browser to riptide
- tabs: Vertical tabs with tabs.position, and tabs.show
- statusbar: Statusbar.position and statusbar.show
- statusbar: Statusbar.widgets
- keys: A key hint popup for partial key chains
- completion: Delete and yank the selected completion
- editor: Edit-url, cmd-edit and edit-text, and clean yanked URLs
- hints: Hints.auto_follow, hint-follow and hints.selectors
- input: Bindings.key_mappings and input.insert_mode.auto_load
- sessions: Session.lazy_restore and confirm_quit
- screenshot: Save the tab as an image with :screenshot
- content: JavaScript, cookie and user agent settings
- downloads: Retry, remove and delete downloads; external file picker
- greasemonkey: @require and GM_setValue/getValue/deleteValue/listValues
- prompts: Alt-e picks a folder for the download prompt
- userscripts: Run qutebrowser's bundled userscripts unchanged
- config: Config-list/dict add and remove, config-diff, config-clear, config-edit, config-write-toml
- tabs: Tab title format, select_on_remove, wrap, undo stack size, tooltips
- search: Search.wrap and wrap messages; smooth scrolling; zoom.levels
- keys: Readline word commands, rl-yank, caret block moves, selection-drop
- tools: Restart, bookmark-list, mark reloads, debug-dump-page, debug-clear-ssl-errors, devtools-focus
- userscripts: breaking: Name the userscript variables RIPTIDE_*
- completion: Completion.show, height, open_categories and more
- urls: Url.auto_search, url.open_base_url and url.incdec_segments
- hints: Hints.min_chars, scatter, leave_on_load and next/prev regexes
- downloads: Location.suggestion and remember, open_dispatcher, remove_finished
- content: Images, mute, popups, clipboard and protocol handler settings
- tabs: Mark the current tab by making it darker, with an accent line
- tabs: Title alignment, min and max tab width, indicator width, close button
- completion: Shrink, timestamp_format, delay, quick and use_best_match
- Update CEF to 154.0.33 (Chromium 154.0.8037.94)
- hints: Word hints from hints.dictionary, and hints.hide_unmatched_rapid_hints
- tabs: No accent line on the current tab by default; colors.tabs.selected.accent sets one
- sessions: Session.default_name and :save
- window: Window.hide_decoration and changelog_after_upgrade
- greasemonkey: GM_xmlhttpRequest and GM_openInTab
- lua: Rt.spawn runs programs and calls back with their output
- content: Accept_language, do_not_track, referer and custom headers
- tabs: Gt tab picker, pinned-tab prompt, live drag, gD, :set values
- tabs: Gt tab picker, pinned-tab prompt, live drag, gD, :set values
Bug fixes
- Build on Windows, where CEF event flags are i32
- tabs: Focus a new tab again once its browser exists
- keys: Send keys that land in a UI view on to the current tab
- remote: Build valid file URLs from Windows paths
- ui: Leave the port and user info out of {host}
- permissions: Make per-site settings override Chromium's saved answers
- tabs: U reopens a tab closed before its page loaded
- content: Private windows crashed after content settings applied