Bookmarks
Bookmarks from every browser and your own links, in one search
palupdated 2026-10-27ProductivityComes with pal
Comes with pal, so a new install already has it; the button finds it in pal again if you removed it. This page can't see what your pal has installed.




What it does
Search the bookmarks of every browser you use, plus links of your own, and open one in the browser it came from. A second list searches your browsing history.
- Chrome, Brave, Edge, Chromium, Vivaldi, Arc, Safari and Firefox, every profile
- Your own links from a JSON file, with names, keywords and icons
- Found by name, address or folder; a link saved twice is listed once
- Open it, open it in the browser it came from, or copy it plain or as a markdown link
- Browser History: search pages you visited in Chrome-family browsers and Firefox, newest first
Palettes 2
-
Bookmarks
bookmarkslistThe links in the file and the browsers, by name, folder and keyword.
- ↵Open in the browser
- ⌘CCopy the link
- ⌘⇧CCopy as markdown
-
Browser History
historyinputWhat the browsers visited (Chrome, Brave, Edge, Chromium, Vivaldi, Arc, Firefox; every profile), searched by title and address on every keystroke, newest first; the last visit on the right. Each browser's history file is copied under pal's cache before it is read, since a running browser holds it locked; the copy follows the file, at most every 30 s. Safari's history needs Full Disk Access and is not read.
- ↵Open in the browser it came from
- ⌘CCopy the link
- ⌘OOpen in the default browser
Actions
- Open in browserThe system's default browser. Every action here works on several marked rows: they open together, copies go one per line.↵
- Copy link⌘C
- Copy as markdown[name](url).⌘⇧C
- Open in Chrome, Safari, FirefoxOn a browser's row: the browser it came from.
- Open in Chrome, Firefox (history)On a Browser History row: the page in the browser it came from.↵
- Open in default browser (history)⌘O
Settings
Extension, [extensions.bookmarks]
fileA JSON array of {name, url, subtitle?, icon?, keywords?}; the url is opened or copied. Optional: without the file the browsers alone are listed.
browsersWhose bookmarks to list, in order (the first wins a url two have): chrome, brave, edge, chromium, vivaldi, arc, safari, firefox. Empty lists the file alone.
exclude_foldersBookmark folders skipped, by name (`Archive`) or a short path (`Bookmarks Bar/Old`).
Defaults shown. Change them in pal's settings window or in the config file.
The README
Everything Bookmarks does, key by key, from the extension's own README.md
Bookmarks
Hand-picked links from a JSON file and your browsers' bookmarks, in one
indexed palette, and the browsers' visit history in a second (below).
Enter opens the link in the default browser; ⌘C copies it. Every source is read on every listing (⌘R), so an edit in the
browser or the file shows at once. A url two sources have is listed once,
the first wins: the file's rows come first, then each browser in the
browsers setting's order.
The file's rows show subtitle (the address when absent), an icon (a glyph,
emoji or hex colour; a row with a url and no icon gets the site's favicon)
and match their keywords. Browser rows sit in a section per browser and
profile (Chrome, Chrome (Work), Safari, Firefox), carry the folder
path as an accessory (Bookmarks Bar / Dev) and as keywords, and get the
site's favicon.
Sources
| source | what is read |
|---|---|
| the file | ~/.config/pal/data/bookmarks.json (the file setting): a JSON array of { name, url, subtitle?, icon?, keywords? } |
| Chrome, Brave, Edge, Chromium, Vivaldi, Arc | every profile's Bookmarks JSON; the profile name from Local State when there is more than one |
| Safari | ~/Library/Safari/Bookmarks.plist, through plutil -convert xml1; the Reading List is left out |
| Firefox | every profile's places.sqlite, copied first because the running browser holds it locked; tags and place: queries left out |
[
{ "name": "Home Assistant", "url": "http://ha.lan", "keywords": ["ha", "home"] },
{ "name": "GitHub", "url": "https://github.com", "icon": "🐙" }
]
Keyboard
| keys | action |
|---|---|
enter |
Open in browser: the system's default |
cmd+c |
Copy link |
cmd+shift+c |
Copy as markdown: [name](url) |
| (action panel) | Open in Chrome, Safari, Firefox, ...: on a browser's row, the browser it came from (open -a on macOS, the browser's binary on Linux) |
cmd+r |
Read every source again |
Browser History
A second palette, input rather than indexed: every keystroke searches the
visit history the same browsers keep (browsers setting; Safari's
History.db is behind Full Disk Access and is not read), by title and
address, newest first, fifty rows at most, a url once. The row is the
page's title (the address when it has none), the address under it and as
the favicon's source, when it was last visited on the right, the browser
and profile as the section. Enter opens the page in the browser it came
from, ⌘C copies the link, ⌘O opens it in the default browser.
| browser | file read |
|---|---|
| Chrome, Brave, Edge, Chromium, Vivaldi, Arc | every profile's History (SQLite, urls; Chrome's clock counts microseconds from 1601) |
| Firefox | every profile's places.sqlite (moz_places, microseconds from 1970) |
A running browser holds its file locked, so each is copied under pal's
cache (~/Library/Caches/pal/bookmarks, ~/.cache/pal/bookmarks on
Linux) before it is read; the copy is taken again when the file's mtime
moved, at most every 30 seconds, so a keystroke never copies a large
history twice. Hidden entries (a redirect Chrome keeps for autocomplete)
and pages never visited are left out.
Setup
Nothing to install. A browser with no profile on the machine lists nothing. Safari's file is behind Full Disk Access on macOS: without it the Safari section is one inert row saying so (System Settings > Privacy & Security > Full Disk Access, add pal); the other browsers still list.
Settings, [extensions.bookmarks]:
| key | type | default | what |
|---|---|---|---|
file |
path | ~/.config/pal/data/bookmarks.json |
The bookmarks file. ~ is expanded. Not there: the browsers alone; unreadable: one hint row naming it. |
browsers |
list | ["chrome", "brave", "edge", "chromium", "vivaldi", "arc", "safari", "firefox"] |
Whose bookmarks (and history) to list, in order. [] is the file alone, and no history. |
exclude_folders |
list | [] |
Bookmark folders skipped, by name (Archive) or a short path (Bookmarks Bar/Old), case-insensitive. |
What it does not do
- Add, edit or delete a bookmark: the file is edited by hand, the browsers' bookmarks in the browser. The Quicklinks palette is the one edited in the panel.
- Safari's Reading List, Firefox's tags and
place:smart folders, and Safari's history (Full Disk Access). - Arc on Linux: it has no Linux build, so the entry has no profile root.
- Favicons for the file's rows come from the url; a row without a url is skipped.
Platforms
macOS and Linux. Safari (and Full Disk Access) is macOS only; the
Chromium browsers and Firefox are read from their platform's profile
roots (~/Library/Application Support/... or ~/.config/... and
~/.mozilla/firefox).