Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Prompts, downloads and permissions

Prompts

Everything that needs an answer appears in a box floating near the bottom of the page, one at a time. prompt.position = "center" puts the box in the middle of the page, "docked" puts it in a strip above the status bar, and prompt.width sets the box's width. The floating box lists each answer on its own line with its key, and you can click an answer instead of pressing the key:

  • JavaScript alert, confirm, prompt and leave-page warnings
  • HTTP logins (username, then a hidden password)
  • where to save a download
  • site permission requests (camera, microphone, location, notifications…)
ModeKeys
prompt (text)type, readline keys (Ctrl-w deletes one path component), Return accepts, Escape cancels
yesnoy / n, Return (the default), Escape cancels

Permissions

A permission request shows the asking site in large type, with its host in bold so a look-alike name stands out, and an icon for each thing it wants (camera, microphone, location, notifications, screen…). A question belongs to the tab that asked: if a tab in the background asks, you stay where you are, the tab gets a ? badge in the tab bar, and the question shows when you go to that tab.

For permission prompts:

  • y allows once and n (or Escape) means "not now".
  • A always allows and N always blocks. These are saved as per-site settings in autoconfig.toml, as in qutebrowser, so they survive restarts. That includes camera and microphone. Chromium also remembers y for its own permission prompts.

The content.geolocation, content.notifications.enabled, content.media.audio_capture, content.media.video_capture, content.desktop_capture, content.mouse_lock (pointer lock, as games use) and content.register_protocol_handler (a site offering to handle mailto: links) settings (ask, true or false) answer without asking.

Notifications

content.notifications.presenter picks where notifications from sites go:

PresenterWhere
auto (the default)Your desktop, sent by Chromium
libnotifyYour desktop, sent by riptide with notify-send (from libnotify), following the settings below. Clicking one shows its tab.
messagesriptide's status bar, for messages.timeout milliseconds

With libnotify:

SettingWhat it does
content.notifications.app_nameThe app name on the notification (riptide), which notification services can match to style riptide's own
content.notifications.urgencylow, normal or critical
content.notifications.timeoutMilliseconds it stays; -1 lets your desktop decide and 0 keeps it until you dismiss it
content.notifications.site_iconShow the site's icon
content.notifications.show_originPut the site it came from on the first line (this also starts status bar messages with it)

How notifications look (colors, fonts, position, sound) is up to your notification service: dunst, mako, GNOME or KDE. Most can style one app differently, for example in dunst:

[riptide]
appname = riptide
background = "#181616"
foreground = "#c5c9c5"

If notify-send isn't installed, riptide shows the notification in the status bar and says why.

A link riptide can't show, like mailto:, magnet: or zoommtg:, asks before going to your desktop's handler (xdg-open). content.unknown_url_scheme_policy = "allow-all" hands them over without asking, and "disallow" never does.

Untrusted TLS certificates (self-signed, expired, wrong host…) ask before the page loads: y loads it once, A always loads that site, N always blocks it. content.tls.certificate_errors (ask, block or load-insecurely) sets the default and can be set per site. :debug-clear-ssl-errors forgets the y answers given this session.

Per-site settings

The permission settings above, content.tls.certificate_errors, content.blocking.enabled, content.headers.user_agent and the content.* settings listed in Privacy can differ per site. The last matching pattern wins. Patterns are hosts (example.com, *.example.com for subdomains too), origins (https://meet.example.com) or match patterns (*://*.example.com/app/*):

:set -u https://meet.example.com content.media.video_capture true
:set -u *.example.org content.javascript.enabled false

:config-unset -u https://meet.example.com content.media.video_capture forgets one site's value, and the Sites tab of :settings lists and forgets them with a click.

[per_domain."*.example.com"]          # config.toml or autoconfig.toml
"content.blocking.enabled" = false
rt.set("content.geolocation", "false", "*.tracker.example")  -- config.lua

Downloads

Downloads go to downloads.location.directory, or the system Downloads folder if that's empty (on Linux, XDG_DOWNLOAD_DIR or ~/.config/user-dirs.dirs). Server-suggested names are reduced to a plain file name, existing files get (1) appended, and typing an existing path asks before overwriting. Set downloads.location.prompt = false to skip the question. The status bar shows ↓2 41% while downloads run.

Command
:download [url]Download a URL, or the current page
;dHint a link to download
:download-cancel, :download-openThe newest running / finished download, or the one given as a count (2:download-open)
:download-retryStart the newest failed or cancelled download again
:download-remove [--all]Take a download off the list, cancelling it if it's running; --all takes every finished one, like :download-clear
:download-deleteDelete the newest finished download's file
:download-clearForget finished downloads
:downloadsA page listing this session's downloads with their numbers and progress

In the "Save file to" prompt, Tab completes file and directory names, as in a shell, and Alt-e picks the folder with fileselect.folder.command (see below). Ctrl-x opens the file instead of keeping it: it downloads to a temporary folder and opens with downloads.open_dispatcher or your desktop's default; :prompt-open-download zathura names a program. Alt-y copies the download's URL, in any prompt that has one.

:download-open uses downloads.open_dispatcher if you set one ({} is the file, or it goes at the end), and the system's opener (xdg-open, open or start) otherwise.

SettingWhat it does
downloads.location.suggestionWhat the save prompt starts with: folder and name (both), the folder (path), or the name (filename; a bare name saves into the download folder)
downloads.location.rememberStart the prompt in the folder the last download went to (on by default)
downloads.remove_finishedTake finished downloads off the list after this many milliseconds (-1, the default, keeps them)

Choosing files to upload

Upload fields open Chromium's file dialog. To use a terminal file manager instead, set fileselect.handler = "external". Riptide runs the command for the field (fileselect.single_file.command, fileselect.multiple_files.command or fileselect.folder.command) with {} replaced by a file to write the chosen paths to, one per line. The defaults run ranger in xterm, as qutebrowser does. For yazi in foot:

fileselect.handler = "external"
fileselect.single_file.command = ["foot", "yazi", "--chooser-file={}"]
fileselect.multiple_files.command = ["foot", "yazi", "--chooser-file={}"]