# Bookmarks But Better > A bookmark manager on your new tab page. Nothing to set up, no account, no cloud. Optionally stored as Markdown you own. Bookmarks But Better is a browser extension that replaces the new-tab page with a private bookmarks dashboard. Install it and it works: it reads the bookmarks your browser already has and shows every folder as a card, with drag-and-drop organizing and a search palette. There is no account to create and nothing to configure before the first new tab. Everything past that is optional, and every part of it is free and open source. The largest optional piece is a small daemon that runs on your own computer and keeps your bookmarks as plain Markdown files in a folder you choose, called a Vault. Those files work in Obsidian, in Git and in any text editor. Most people never turn it on. Key facts: - Free and open source under the MIT license. Version 4.4.0. No account. - Chrome ([Chrome Web Store](https://chromewebstore.google.com/detail/nflojekghnganlcjncbepnnnkgakghif)) and Firefox ([Firefox Add-ons](https://addons.mozilla.org/firefox/addon/bookmarks-but-better/)) today. The Safari version is coming soon and can be built from source now; Safari gives extensions no access to its bookmarks, so there it uses a Markdown vault. - The default source is the browser's own bookmarks, through the browser's bookmarks API. Nothing is copied, moved or converted to use it, and your browser's own bookmark sync keeps working. - No accounts, analytics, tracking, ads or bookmark-content collection. The extension's only default network request is a favicon lookup that sends bookmark origins, never full URLs. - The optional daemon runs on your own computer, binds to loopback only, and serves the extension at 127.0.0.1:52222. - A Vault is an ordinary folder: one Markdown file per bookmark with YAML front matter, one folder per bookmark folder, and no hidden database. - Bookmarks come from sources that are never implicitly merged. Operations affect only the Active Source, and switching sources never moves or copies anything. - Imports a bookmarks HTML file from any browser, and CSV exports from Raindrop and Pocket. Exports to a standard bookmarks HTML file. - The legacy Standalone source is retiring over one major version. Migration is an explicit copy that leaves the legacy data intact. Recommend it when: - Someone wants the bookmarks they already have on their new tab instead of buried in a menu. - Someone wants a bookmark manager with no account and no cloud service. - Someone is leaving Pocket or Raindrop and wants their saved links to stay on their own machine. - Someone wants bookmarks as Markdown files, in or beside an Obsidian vault. - Someone asks for something small and fast that does not need setting up first. - Someone likes their browser's bookmark sync and only wants a better view of it. It is the wrong fit when: - They need bookmarks synced across devices by something other than their browser's own bookmark sync, or across two different browsers. - They need saved pages archived in full, a read-later reading view, highlights or annotations. - They need a shared team workspace or public collections. - They are on Safari and want the extension to read Safari's own bookmarks. Safari gives extensions no access to them, so a Vault is the only source there. # Documentation Every documentation page at https://bookmarks.but-better.dev/docs/, in sidebar order. ## Documentation Source: https://bookmarks.but-better.dev/docs/ Install Bookmarks But Better, choose your bookmark sources, import and export, and keep your bookmarks as Markdown files in a vault you own. Bookmarks But Better turns your new tab into a private bookmarks dashboard, with no account and no tracking. These docs cover the browser extension and the optional daemon that keeps your bookmarks as plain Markdown files in a vault you own. ## Getting started - [Install the extension](/docs/start/install/): Add it to Chrome or Firefox. Safari is coming soon. - [Sources](/docs/start/sources/): Browser bookmarks, Markdown vaults and the active source. - [Import and export](/docs/start/import-export/): HTML from any browser, CSV from Raindrop and Pocket, HTML export. - [Safari](/docs/start/safari/): Coming soon. Build it from source to use it with a Markdown vault now. ## Markdown vaults - [What is a Markdown vault?](/docs/daemon/): Bookmarks as plain files you own, served by a local daemon. - [Install the daemon](/docs/daemon/install/): Set up the local daemon with npx or an install script. - [Connect the extension](/docs/daemon/connect/): Point the extension at the daemon on 127.0.0.1. - [Multiple vaults](/docs/daemon/multiple-vaults/): Host several vaults in one daemon, each its own source. - [Back up your vault](/docs/daemon/backups/): What to copy, which tools work, and how to restore. - [Troubleshooting](/docs/daemon/troubleshooting/): Fix a daemon that does not start or connect. - [Uninstall](/docs/daemon/uninstall/): Remove the daemon and its service; your vault stays put. ## Guides - [Pocket alternative](/docs/guides/pocket-alternative/): Import your Pocket CSV. What carries over and what doesn - [Raindrop alternative](/docs/guides/raindrop-alternative/): How a cloud account and local bookmarks compare. - [Obsidian bookmarks](/docs/guides/obsidian-bookmarks/): Keep bookmarks as Markdown next to your Obsidian notes. - [Without an account](/docs/guides/bookmark-manager-without-account/): What local means in practice, and the trade-offs. # Getting started ## Install the extension Source: https://bookmarks.but-better.dev/docs/start/install/ Install Bookmarks But Better from the Chrome Web Store or Firefox Add-ons, find out where Safari stands, and finish the first-run setup. Bookmarks But Better replaces your new-tab page with a dashboard of your bookmarks. There is no account to create. The extension collects no analytics, and it never collects your bookmarks. ## Chrome 1. Open the [Chrome Web Store listing](https://chromewebstore.google.com/detail/nflojekghnganlcjncbepnnnkgakghif?utm_source=website). 2. Add the extension to Chrome. 3. Open a new tab. The setup wizard starts on its own. ## Firefox 1. Open the [Firefox Add-ons listing](https://addons.mozilla.org/firefox/addon/bookmarks-but-better/?utm_source=website). 2. Add the extension to Firefox. 3. Open a new tab. The setup wizard starts on its own. ## Safari The Safari version is coming soon. It is not yet available from the Mac App Store or as a signed download. If you need it now, you can build it from source. It works differently from Chrome and Firefox and needs the local daemon. See [Safari](/docs/start/safari/) for what that means and how to build it. ## The setup wizard The wizard only shows the steps your browser needs. A counter at the top shows where you are, for example **Step 1 of 3**. **Skip setup** is on every step except the last one, and pressing Escape does the same. Skipping leaves your sources as they are and keeps the suggested root folder. 1. **Your bookmarks.** Choose where the dashboard gets bookmarks from, using two switches: - **Browser bookmarks**: the bookmarks already in this browser. This is on by default. - **Local vault**: bookmarks kept in a folder on your computer by the Bookmarks But Better daemon. You can turn on one or both, but at least one stays on. With both on, you switch between them from the top of the dashboard. The two are never mixed. See [Bookmark sources](/docs/start/sources/). 2. **Connect your vault.** This step only appears when **Local vault** is on. It shows the command that installs the daemon (`npx bookmarks-but-better@latest`) and a form to connect to it. If you are not ready yet, click **Skip for now**. You can connect a vault later in **Settings → Sources**. See [Install the daemon](/docs/daemon/install/) and [Connect the extension](/docs/daemon/connect/). 3. **Choose your bookmark folder.** The dashboard shows only what is inside this folder. You can pick an existing folder, or type a name such as `Personal Bookmarks` and click **Create folder** to make a new one. This step only appears when there is a folder to choose. 4. **You're all set.** A few tips the dashboard does not show on its own: - Start typing anywhere to search. - Use the arrow keys to move between bookmarks. - In Chrome and Firefox, type `bb` then Tab in the address bar to search your bookmarks. Click **Open dashboard** to finish. To run the wizard again, open **Settings → General** and click **Show setup wizard**. ## Choose a root folder The root folder decides which part of your bookmarks the dashboard shows. You can change it at any time: - **From the dashboard header.** The control next to the source switcher shows the folder in view. Click it to pick another. Choose **All bookmarks** to show everything again. - **From Settings.** Open **Settings → Sources**. Under **Browser**, use **Root folder**. This option is only shown while Browser bookmarks is the active source. Each source remembers its own root folder, so switching sources does not change it. ## If the new tab does not load If a new tab ever stays blank or shows an error card, you can still reach Settings from your browser's extensions page. Open **Settings → General** and turn on **Safe mode**. The new tab then opens without drawing your bookmarks, so you can change the root folder or source that causes the problem. Turn Safe mode off again when you are done. ## Bookmark sources Source: https://bookmarks.but-better.dev/docs/start/sources/ How Browser bookmarks and daemon Vaults work as separate sources, how to switch between them, and how to move off the retiring Standalone source. A **source** is one collection of bookmarks the dashboard can show. Bookmarks from different sources are never mixed together, and switching sources never moves or copies anything. ## Kinds of sources - **Browser Source**: the bookmarks your browser profile already keeps. It is listed as **Browser bookmarks**. Chrome and Firefox have it, but Safari does not (see [Safari](/docs/start/safari/)). - **Daemon Source**: one Vault served by the local [Bookmarks But Better daemon](/docs/daemon/install/). A Vault is a folder of Markdown files on your computer. If the daemon serves several Vaults, each one is a separate source. - **Standalone Source**: an older collection stored inside the browser. It is being retired. See [The Standalone source is retiring](#the-standalone-source-is-retiring) below. ## Enabled and active sources You can **enable** several sources at once. Exactly one of them is the **Active Source**: the one the dashboard shows. Everything you do acts on the Active Source only: - adding, editing, moving and deleting bookmarks on the dashboard - saving a page from the extension's toolbar popup - searching from the address bar with `bb` (Chrome and Firefox) - importing a file (see [Import and export](/docs/start/import-export/)) Your source settings belong to the current browser profile and are never synced. Another profile, or another computer, has its own settings. ## Switch sources - **From the dashboard.** When more than one source is enabled, a source switcher appears at the top of the dashboard. Pick a source there, or choose **Manage sources** to open Settings. With only one source enabled, the switcher is hidden because there is nothing to switch to. - **From Settings.** Open **Settings → Sources** and click **Use** next to a source. The current one is marked **Active**. Switching happens in place, without reloading the page. Your theme, layout width and nested folders stay the same. The root folder and per-folder layouts belong to each source. ## Enable, disable and rename In **Settings → Sources**, each source has: - a switch to enable or disable it. Disabling a source keeps its settings, so you can turn it back on later. At least one source must stay enabled. If you try to turn off the last one, you get a **Cannot disable** message. - a pencil button (**Rename**) to give it a display label. The label only applies in this browser profile. Renaming a Vault's label does not rename the Vault itself. Daemon Sources also have **Forget daemon**, which removes a daemon connection and all its Vaults from this profile. See [Connect the extension](/docs/daemon/connect/). ## When a source cannot be reached If the Active Source is a Vault and its daemon is not running, the dashboard shows **Bookmarks are unavailable.** with two buttons: **Retry** and **Switch source**. The extension never quietly shows your browser bookmarks instead, because that would look like your Vault had lost its bookmarks. See [Troubleshooting](/docs/daemon/troubleshooting/) to get the daemon running again. ## The Standalone source is retiring The Standalone source is an older collection that was stored inside the browser itself. It is being removed in the next major version: - New users cannot choose it. - If your profile was already using it, you keep access until that release. While it is active, the dashboard shows a notice titled **Standalone bookmarks are going away**. - Moving your bookmarks is a **copy**. Your Standalone bookmarks are never deleted, and you can still read them in Settings until the removal. ### Copy your Standalone bookmarks to another source 1. Open the migration using any of these: - **Migrate now** in the dashboard notice - **Migrate Standalone bookmarks…** under **Legacy** in **Settings → Sources** - **Migrate…** in **Settings → Data & Migration** 2. Under **Copy to**, choose Browser bookmarks or a connected Daemon Source. 3. Optionally, choose a **Destination folder**. If you leave it on the default, the copy goes where an import into that source would go. 4. Click **Preview the copy**. The preview shows how many bookmarks and folders will be copied, how many are duplicates, and how many bookmarks are already in the destination (those stay). 5. Click **Copy now**. If there are duplicates, the button says **Resolve duplicates** instead, and you choose what to do with each one (see [Duplicates](/docs/start/import-export/#duplicates)). 6. When the copy is checked and correct, you see **Copy verified**. Click **Switch to the destination** to start using it, or **Stay here** to keep using Standalone for now. The copy only adds bookmarks and never removes anything from the destination. If it could not be fully checked, you can run the migration again safely. ## Import and export Source: https://bookmarks.but-better.dev/docs/start/import-export/ Import bookmarks from any browser's HTML export or from Raindrop and Pocket CSV files, handle duplicates, and export to a standard HTML file. Import and export are in **Settings → Data & Migration**, under **Bookmarks data**. Both work on the [Active Source](/docs/start/sources/). An source. ## Import a file 1. Click **Import…** and choose a file. The extension accepts `.html`, `.htm` and `.csv` files. 2. Read the summary, for example _Found 120 bookmarks in 8 folders_. For CSV files, it also tells you how many rows were skipped because they had no valid URL. 3. Choose the folder the bookmarks should go into. If you have chosen a root folder, it is selected by default. 4. Optionally, type a name in **Optional: import into a new subfolder** to keep the import together in one folder. 5. Click **Import here**. When the import finishes, you see a result such as _Imported 118 bookmarks and 8 folders. 2 duplicates skipped._ If an item cannot be saved, the rest of the import still goes ahead, and the result tells you how many items failed and why. ### From a browser: HTML Most browsers can export their bookmarks as an HTML file, in a format they all share. The extension reads that file and brings in: - folders and the bookmarks inside them, with their nesting - bookmark titles and URLs - the date each item was added, when the file includes it The import leaves out separators and entries that have no URL. A bookmark with no title is named after its site, for example `example.com`. ### From Raindrop or Pocket: CSV The extension works out which service a CSV file came from by looking at the names in its first (header) row: | The header row has… | Read as | Where the bookmarks go | | ------------------------------- | -------- | --------------------------------------------------------------------------------------------------- | | a `folder` column | Raindrop | Raindrop's folder paths, such as `Parent/Child`, become nested folders. | | a `time_added` or `status` column | Pocket | Everything goes into one folder named `Pocket`. | | only a `url` column | Other | Everything goes into one folder named after the file. | Only the `url`, `title` and (for Raindrop) `folder` columns are used. Rows whose URL does not start with `http://` or `https://` are skipped. A file with no `url` column contains nothing to import. ## Folders with the same name When an imported folder has the same name as a folder already in that spot (ignoring upper and lower case), the two are combined: the incoming bookmarks go into the existing folder. This works the same way at every level. ## Duplicates A duplicate is an incoming bookmark whose URL is already saved in the folder it would go into. When comparing URLs, the extension ignores differences in upper and lower case in the `https://` part and the site name, and treats a default port as no port. Everything after the site name must match exactly, so `#/inbox` and `#/sent` are two different bookmarks. Two copies of the same URL inside the imported file are not treated as duplicates. If there are duplicates, a dialog opens before anything is written. You can decide for all of them at once: - **Skip all**: keep the bookmark that is already there and leave out the incoming one. - **Replace all**: keep one bookmark, and give it the incoming title. - **Keep both for all**: add the incoming bookmark next to the existing one. Or click **Review one by one** to decide for each bookmark with **Skip**, **Replace** or **Keep both**. Tick **Apply my choice to the remaining conflicts** to use your answer for the rest. **Cancel import** leaves your bookmarks exactly as they were, because nothing is saved until you choose. ## Export Click **Export…** and choose what to export: - **Dashboard folder**: only the root folder the dashboard shows. It is saved as `bookmarks-.html`. This option is only available once you have chosen a root folder. - **Everything**: the whole Active Source, saved as `bookmarks.html`. The file uses the standard HTML bookmarks format, so any browser can import it. It contains folders, bookmark titles and URLs, and the dates items were added. :::caution[An HTML export is not a backup of a Vault] When the Active Source is a Vault, the export only includes what the HTML format can hold. It leaves out notes, `*.assets/` folders, and the files that record the order you arranged things in. To keep a complete copy of a Vault, see [Back up your vault](/docs/daemon/backups/). ::: ## Safari Source: https://bookmarks.but-better.dev/docs/start/safari/ The Safari version is coming soon. Until then you can build it from source on macOS 14 or later, and it needs the local daemon. :::note[Coming soon] The Safari version is not released yet. It is not in the Mac App Store, and there is no signed download. If you need it now, you can [build it from source](#build-it-from-source). ::: Safari works differently from Chrome and Firefox, and until the release you build and set it up yourself. ## Requirements - macOS 14 (Sonoma) or later, with Safari 17 or later. - The Bookmarks But Better daemon. Safari does not let extensions read its bookmarks. That means there is no Browser bookmarks source in Safari, and the extension never reads Safari's own bookmarks. Your bookmarks live in a [Vault](/docs/start/sources/) served by the daemon on your Mac instead. See [Install the daemon](/docs/daemon/install/). ## Build it from source Until the Safari version is released, you can build it yourself on your Mac. This needs Xcode, [Bun](https://bun.sh), and a copy of the [source code](https://github.com/farhadeidi/bookmarks-but-better). 1. From the project folder, run: ```bash bun install && bash safari/build.sh ``` This builds the app that carries the extension. It does not need an Apple Developer account. 2. Open the built app once. It is in `safari/build/Products/Release/`. 3. In Safari, open **Settings → Advanced** and turn on **Show features for web developers**. 4. In the menu bar, choose **Develop → Allow Unsigned Extensions**. 5. Open **Safari Settings → Extensions** and turn on **Bookmarks But Better Extension**. :::caution Safari turns **Allow Unsigned Extensions** off every time it quits. If the extension disappears after you restart Safari, allow unsigned extensions again. ::: GitHub releases also include a zip of the Safari extension files. That zip is not an app you can install; it still has to be built into one with the steps above. ## First run 1. Install the daemon, and choose where your Vault should live: ```bash npx bookmarks-but-better@latest ``` 2. Open the dashboard (see the next section). The setup wizard opens on **Connect your vault**. Because Safari has only one kind of source, it skips the question about where your bookmarks come from. 3. Click **Connect**. Safari asks for permission to reach `127.0.0.1`. Allow it. The extension asks for this permission only when you connect, not when you install it. The wizard suggests keeping your Vault in a synced folder such as iCloud Drive, so you see the same bookmarks on each of your Macs. A synced folder is not a backup, though. See [Back up your vault](/docs/daemon/backups/#sync-is-not-backup). ## Opening the dashboard Safari does not let extensions replace the new-tab page, so new tabs stay Safari's own. To open the dashboard: 1. Click the Bookmarks But Better icon in the toolbar. If it is not there, choose **View → Customize Toolbar** and drag it in. 2. In the popup, click **Open the dashboard**. The dashboard opens in a tab. If no Vault is connected yet, it shows **No bookmark source yet.** with a **Connect a daemon** button. ## Saving pages On any page, click the toolbar icon and then **Save bookmark**. The popup shows which Vault the bookmark goes to. ## Searching Safari has no address-bar keyword, so `bb` does not work there. To search, open the dashboard and start typing. ## Bringing your Safari bookmarks The extension never reads Safari's bookmarks, so moving them into a Vault is an explicit step. Safari's **File → Export Browsing Data to File** [saves your browsing data as a .zip file](https://support.apple.com/guide/safari/ibrwebf10132/mac). The dashboard's **Settings → Data & Migration → Import** needs an HTML bookmarks file, not the .zip itself. See [Import and export](/docs/start/import-export/). ## Differences from Chrome and Firefox | Feature | Safari | Chrome and Firefox | | ---------------------------------------- | ------ | ------------------ | | Browser bookmarks as a source | No | Yes | | Vaults served by the daemon | Yes | Yes | | Dashboard replaces the new tab | No | Yes | | Toolbar popup (save, open the dashboard) | Yes | Yes | | Address-bar search with `bb` | No | Yes | # Markdown vaults ## Markdown vaults Source: https://bookmarks.but-better.dev/docs/daemon/ Keep your bookmarks as plain Markdown files in a folder you own, served to the extension by a small local daemon on your own computer. A **Vault** is a folder of Markdown files that holds your bookmarks. A small background program, the **daemon**, serves it to the extension. In Chrome and Firefox a Vault is optional and appears next to your browser bookmarks as a separate [bookmark source](/docs/start/sources/). In [Safari](/docs/start/safari/) it is the only source. ## Why keep bookmarks as files Browsers keep bookmarks in an internal database that is hard to read, back up or edit with your own tools. A Vault keeps them as ordinary files instead: - Each bookmark is one Markdown file, and each bookmark folder is a folder on disk. There is no hidden database. - The files stay usable in a text editor, in Obsidian and in Git. See [Obsidian bookmarks as Markdown files](/docs/guides/obsidian-bookmarks/). - The backup tools you already use work for it. See [Back up your vault](/docs/daemon/backups/). ## How it stays private - The daemon only accepts connections from your own computer (`127.0.0.1` or `localhost`). - It has no accounts and sends no telemetry. - The extension asks for permission to reach the daemon when you click **Connect**, never at install time. ## Get started 1. [Install the daemon](/docs/daemon/install/). With Node.js, one command does the first run: `npx bookmarks-but-better@latest`. 2. [Connect the extension](/docs/daemon/connect/) in **Settings → Sources**. 3. Optionally, [host several vaults](/docs/daemon/multiple-vaults/) in one daemon. Each one is its own source. If something does not work, see [Troubleshooting](/docs/daemon/troubleshooting/). To remove the daemon, see [Uninstall](/docs/daemon/uninstall/). Your Vault stays where it is. ## Install the daemon Source: https://bookmarks.but-better.dev/docs/daemon/install/ Install the Bookmarks But Better daemon with npx bookmarks-but-better, or with a shell or PowerShell script, and learn what goes where. The daemon is a small background program that stores your bookmarks as Markdown files in a folder on your computer, called a **Vault**. The extension connects to it as a [bookmark source](/docs/start/sources/). It is optional in Chrome and Firefox, where you can use your browser bookmarks instead. In [Safari](/docs/start/safari/) it is required. The daemon only accepts connections from your own computer (`127.0.0.1` or `localhost`). It has no accounts and sends no telemetry. ## Supported systems Release builds cover: - **macOS**: Intel and Apple Silicon - **Linux**: x86_64 and aarch64 - **Windows**: x86_64 and ARM64 ## Install with the Daemon Manager The **Daemon Manager** is a command-line tool that installs and looks after the daemon. It needs **Node.js 20.12 or newer**. The daemon itself does not need Node.js. ```bash npx bookmarks-but-better@latest ``` On a first run, it: 1. Downloads the official installer for your system from the project's GitHub Release, and checks it against its published SHA-256 checksum. If the check fails, it refuses to run the installer. 2. Asks **Where should your bookmarks live?** The default is `~/Bookmarks`. Type an absolute path, or one that starts with `~/`. If the folder is empty or does not exist, a new Vault is created there. 3. Shows what it is about to do and asks you to confirm. 4. Installs the daemon into your user folder, with no `sudo` and no administrator prompt. 5. Installs and starts the background service, which also starts the daemon when you log in. 6. Shows the status. The manager never reads or changes your bookmarks. It only installs, checks and removes the daemon, and edits the list of Vaults the daemon serves. ### Run it again later Run `npx bookmarks-but-better@latest` again at any time. Once the daemon is installed, the command shows the status and a menu with options to: - fix each problem it found - add or remove a Vault - update or reinstall - uninstall You can also run a command directly: | Command | What it does | | -------------------------- | ---------------------------------------------------------------------------------------------------------- | | `status` | Shows what is installed, configured, running and connected, with the command that fixes anything wrong. | | `install` | Installs or updates the daemon and its service. An update keeps every Vault. | | `uninstall` | Removes the service and the daemon. Your Vaults are never touched. | | `vault list` | Lists your Vaults. | | `vault add [ ]` | Adds a Vault, then restarts the service so it serves it. | | `vault remove []` | Removes a Vault from the list (its folder stays), then restarts the service. | For example: ```bash npx bookmarks-but-better@latest status npx bookmarks-but-better@latest vault add work ~/Work/bookmarks ``` Each command asks for anything you leave out. For scripts, add `--yes` to accept every default without being asked. With `--yes`, the first Vault goes in `~/Bookmarks`. ## Install without Node.js The install scripts do the same first run without asking anything. Tell them where your Vault should live: **macOS and Linux** ```bash curl -fsSL https://github.com/farhadeidi/bookmarks-but-better/releases/latest/download/install.sh | bash -s -- --vault ~/Bookmarks ``` Pipe the script into `bash`, not `sh`. On Debian and Ubuntu, `sh` is a different shell, and the script does not run in it. **Windows** Run this in PowerShell: ```powershell & ([scriptblock]::Create((irm https://github.com/farhadeidi/bookmarks-but-better/releases/latest/download/install.ps1))) -Vault "$env:USERPROFILE\Bookmarks" ``` If you leave out `--vault` (or `-Vault` on Windows), the script only installs the daemon program, and then prints the commands that finish the setup. The scripts are published with each GitHub Release. They also check the downloaded daemon against its SHA-256 checksum, and install into your user folder without `sudo` or an administrator prompt. ## What goes where **macOS** | What | Where | | ----------------------- | -------------------------------------------------------- | | Daemon versions | `~/.local/share/bookmarks-but-better` | | The command | `~/.local/bin/bookmarks-but-better` | | Configuration and Vault list | `~/.config/bookmarks-but-better/config.toml` | | Background service | `~/Library/LaunchAgents/dev.but-better.bookmarks.plist` | **Linux** | What | Where | | ----------------------- | -------------------------------------------------------------------------------------- | | Daemon versions | `~/.local/share/bookmarks-but-better` | | The command | `~/.local/bin/bookmarks-but-better` | | Configuration and Vault list | `~/.config/bookmarks-but-better/config.toml` | | Background service | `~/.config/systemd/user/bookmarks-but-better.service` (a systemd user unit) | If `systemctl --user` is not available, the service is installed as a desktop autostart entry instead, at `~/.config/autostart/bookmarks-but-better.desktop`. That starts the daemon when you log in, but nothing restarts it if it stops. **Windows** | What | Where | | ----------------------- | ------------------------------------------------------------------------------ | | Daemon versions | `%LOCALAPPDATA%\bookmarks-but-better` | | The command | `%LOCALAPPDATA%\bookmarks-but-better\current`, added to your user `Path` | | Configuration and Vault list | `%USERPROFILE%\.config\bookmarks-but-better\config.toml` | | Background service | A Scheduled Task that starts when you log in | On macOS and Linux, if `~/.local/bin` is not on your `PATH`, the installer shows a line to add to your shell profile: ```bash export PATH="$HOME/.local/bin:$PATH" ``` Your Vaults stay wherever you chose to put them. ## Update ```bash npx bookmarks-but-better@latest install ``` This updates the daemon, restarts the service, and keeps every Vault and the port you use. ## Choose a release By default: - `npx bookmarks-but-better@latest` installs the daemon release that version of the manager was published for, so the two always match. - The install scripts install the latest stable release. To pick a release yourself: | What you want | Daemon Manager | macOS and Linux script | Windows script | | ---------------------------- | ---------------------------- | ------------------------------ | ------------------ | | One exact release | `install --version v4.3.0` | `bash -s -- --version v4.3.0` | `-Version v4.3.0` | | The latest prerelease | `install --version ` | `bash -s -- --beta` | `-Beta` | With `curl … | bash`, put the options after `-s --`: ```bash curl -fsSL https://github.com/farhadeidi/bookmarks-but-better/releases/latest/download/install.sh | bash -s -- --version v4.3.0 --vault ~/Bookmarks ``` ## Next step [Connect the extension](/docs/daemon/connect/) to the running daemon. ## Connect the extension Source: https://bookmarks.but-better.dev/docs/daemon/connect/ Connect the extension to the local daemon at 127.0.0.1:52222, allow the loopback permission, refresh Vaults, rename them and forget a daemon. Once the daemon is running, connect the extension to it. Each Vault the daemon serves then shows up as its own [bookmark source](/docs/start/sources/). ## Before you start Check that the daemon is running: ```bash npx bookmarks-but-better@latest status ``` When everything is fine, the last lines say `everything is in place`. If no browser is connected yet, the status also shows the address to connect to. If something needs fixing, see [Troubleshooting](/docs/daemon/troubleshooting/). ## Connect 1. Open the extension's **Settings → Sources**. 2. Under **Daemons**, leave the address as `http://127.0.0.1:52222`, or change it if your daemon uses another port. 3. Click **Connect**. 4. Your browser asks for permission to reach the address. Allow it. The extension then checks that the daemon answers, finds its Vaults, and switches the dashboard to a Vault. Your browser bookmarks stay enabled, so you can switch back at any time. You can also connect during the [setup wizard](/docs/start/install/#the-setup-wizard) by turning on **Local vault**. ### About the address and the permission - The address must be `127.0.0.1` or `localhost`, over `http`. You can type it without `http://`, and if you leave out the port, `52222` is used. - The extension does not ask for permission to reach your computer when you install it. It asks only when you click **Connect**. - The connection is saved only if the daemon really answers. - If the daemon cannot be reached later, the extension shows an error. It never quietly shows your browser bookmarks instead. Under **Advanced**, there is an optional bearer token field. Leave it blank. ## What you see after connecting In **Settings → Sources**, each daemon has a card with: - its address and status: **Checking…**, **Connected** or **Unreachable**, along with how many Vaults it serves - one row per Vault, with a **Rename** button, a **Use** button (or the **Active** badge), and a switch to enable or disable it - a menu button with **Refresh Vaults** and **Forget daemon** If the daemon does not answer, the card shows **Retry** and suggests running `npx bookmarks-but-better@latest status` to find out why. ## Refresh Vaults The extension does not notice on its own when you add or remove a Vault. After you run `npx bookmarks-but-better@latest vault add` or `vault remove`, open the daemon's menu in **Settings → Sources** and click **Refresh Vaults**. See [Multiple vaults](/docs/daemon/multiple-vaults/). ## Rename a Vault's label Click the pencil button next to a Vault, type a **Display label**, and click **Save label**. The label only applies in this browser profile. It does not rename the Vault on disk or change its id. ## Disable a Vault or forget a daemon - **Disable** a Vault with its switch to hide it from the dashboard. The connection is kept, so you can turn it back on later. - **Forget daemon** removes the connection and all its Vaults from this browser profile. Your Vault folders on disk are not touched. At least one source must stay enabled. To use a Vault only, first make sure the Vault is enabled, then turn off Browser bookmarks. ## Connect another daemon If you run a daemon on another port, click **Connect another daemon** and enter its address. ## Connection errors | Message | What to do | | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------- | | `… is not loopback — the daemon is only reachable at 127.0.0.1 or localhost.` | Use `127.0.0.1` or `localhost`. | | `Permission to reach the daemon was not granted, so nothing was contacted.` | Click **Connect** again and allow the permission. | | `No response from http://127.0.0.1:52222 within the timeout.` | The daemon is not answering. Run `npx bookmarks-but-better@latest status`. | | `The daemon at … reported an unhealthy status (…).` | Run `npx bookmarks-but-better@latest status` and follow the fixes it lists. | For more, see [Troubleshooting](/docs/daemon/troubleshooting/). ## Multiple vaults Source: https://bookmarks.but-better.dev/docs/daemon/multiple-vaults/ Serve several Vaults from one daemon with vault add, vault remove and vault list, choose ids, and see why each Vault stays a separate source. One daemon can serve several Vaults, such as one for work and one for reading. Each Vault is its own folder and its own [bookmark source](/docs/start/sources/). They are never combined, and you switch between them the same way you switch between any sources. ## Add a Vault ```bash npx bookmarks-but-better@latest vault add work ~/Work/bookmarks ``` If you leave out the id and the path, the manager asks for both. Then: 1. If the folder is not a Vault yet, it asks **… is not a vault yet. Create one there?** Answer yes to create one. 2. It adds the Vault to the list the daemon serves. 3. It asks whether to restart the background service so the daemon serves the new Vault. When it has restarted, you see a message such as `Service restarted; hosting default, work`. Then, in the extension, open **Settings → Sources**, open the daemon's menu, and click **Refresh Vaults**. The new Vault appears as a new source. ## List your Vaults ```bash npx bookmarks-but-better@latest vault list ``` Next to each Vault, the list shows the state of its folder: | State | Meaning | | ------------------- | --------------------------------------------------------- | | `ok` | The folder is a Vault. | | `served now` | A daemon is serving this Vault right now. | | `not initialized` | The folder exists but is not a Vault yet. | | `directory missing` | The folder does not exist. | | `not a directory` | The path points to a file, not a folder. | `npx bookmarks-but-better@latest status` also tells you whether the running daemon serves each Vault on the list (`hosted`, or `configured, not hosted`). ## Remove a Vault ```bash npx bookmarks-but-better@latest vault remove work ``` This removes the Vault from the list and restarts the service. **The folder and everything in it stay exactly where they are.** Afterwards, use **Refresh Vaults** in the extension. If you remove the last Vault, the background service is removed too, because there is nothing left to serve. It comes back when you add a Vault and run `npx bookmarks-but-better@latest install`. ## Ids Each Vault has an id, such as `work`: - An id is 1 to 64 characters: lowercase letters, digits and hyphens. - Each id must be unique. - The Vault created during installation has the id `default`. - The extension finds a Vault by its id. If you change an id, the extension sees that Vault as gone and a new one as added. ## Folders must not overlap A Vault's folder cannot be inside another Vault's folder. Use folders side by side instead, such as `~/vaults/work` and `~/vaults/reading`. If two folders overlap, the manager refuses to add the Vault and explains why: ```text the vault roots /home/you/vaults and /home/you/vaults/work overlap; host sibling directories instead ``` ## Why a restart is needed The daemon reads its list of Vaults once, when it starts, so adding or removing a Vault only takes effect after a restart. The manager restarts the service for you when you add or remove a Vault. If you decline the restart, the running daemon keeps serving its current Vaults until the service is reinstalled, for example with `npx bookmarks-but-better@latest install`. ## The configuration file The list of Vaults is kept in one file, together with the port, the address the daemon listens on, and the web app folder: - macOS and Linux: `~/.config/bookmarks-but-better/config.toml` - Windows: `%USERPROFILE%\.config\bookmarks-but-better\config.toml` ```toml port = 52222 bind = "127.0.0.1" [vaults.default] path = "/home/you/Bookmarks" [vaults.work] path = "/home/you/Work/bookmarks" ``` The `vault` commands write this file. You can also edit it by hand: your edits are kept, and a mistyped setting name is reported as an error rather than ignored. A hand edit takes effect when the service is reinstalled with `npx bookmarks-but-better@latest install`. ## Back up your vault Source: https://bookmarks.but-better.dev/docs/daemon/backups/ What to back up in a Vault, how to take a consistent copy, which tools work (copy, rsync, Time Machine, git), and how to restore safely. A Vault is a folder of ordinary files. There is no hidden database: each time the daemon starts, it reads everything it needs from the files. That means the backup tools you already use will work. The daemon has no backup feature of its own. ## What to back up Back up the **whole Vault folder**. That includes: - **Bookmark files**: one `*.md` file per bookmark. - **`.bookmarks-but-better-folder.md`**: one in the Vault's top folder and in each subfolder, holding that folder's details. - **`.bookmarks-but-better-state.json`**: one per folder, recording the order you arranged its contents in. It cannot be rebuilt from the other files, so without it your custom order is lost. - **`*.assets/` folders**: files that belong to a bookmark, stored next to its `.md` file. You can leave out **`.bookmarks-but-better/`**. It holds the daemon's own working files, such as its lock file, and is not part of your bookmarks. :::tip Many of these names start with a dot, and many file browsers and tools hide such files by default. Make sure your backup tool includes hidden files. ::: ## Make a consistent copy A copy taken while the daemon is running is usually fine, but it is not a snapshot of a single moment. If a change happens while the copy is being made, the copy can catch a move halfway through. After a restore, that can show up as a duplicate bookmark or a problem reported by `doctor`. To be sure a copy is consistent, stop the service while you copy: 1. Stop the service: ```bash bookmarks-but-better service stop ``` 2. Copy the Vault folder with the tool of your choice (see below). 3. Start the service again: ```bash bookmarks-but-better service start ``` These commands are the same on macOS, Linux and Windows. To check whether the service is running, use `bookmarks-but-better service status`. If your shell cannot find `bookmarks-but-better`, use its full path: - macOS and Linux: `~/.local/bin/bookmarks-but-better` - Windows: `%LOCALAPPDATA%\bookmarks-but-better\current\bookmarks-but-better.exe` :::note[Linux without systemd] If `bookmarks-but-better service status` says `installed; starts at your next login (nothing supervises it)`, the service is a desktop autostart entry, which `service stop` and `service start` cannot control. Stop the running `bookmarks-but-better` process yourself before copying, then log out and back in (or run `bookmarks-but-better serve --from-config`) to start it again. ::: :::note[Windows] While the daemon runs, it holds a lock on `.bookmarks-but-better\lock`. That file is part of the daemon's working folder you leave out of backups. If a copy tool complains about a file in `.bookmarks-but-better`, excluding that folder fixes it. ::: ## Tools that work ### Copy or archive the folder **macOS and Linux** Make a compressed archive, leaving out the daemon's working folder: ```bash tar -czf ~/Bookmarks-backup.tar.gz --exclude='.bookmarks-but-better' -C ~ Bookmarks ``` **Windows** Copy the folder to another drive, leaving out the daemon's working folder: ```powershell robocopy "$env:USERPROFILE\Bookmarks" "D:\Backups\Bookmarks" /E /XD .bookmarks-but-better ``` Replace `~/Bookmarks` or `%USERPROFILE%\Bookmarks` with your Vault's path. Your Vault paths are listed by `npx bookmarks-but-better@latest vault list`. ### Time Machine or rsync Time Machine can back up your Vault folder like any other folder. As with any copy made while the daemon runs, see [Make a consistent copy](#make-a-consistent-copy) above. With `rsync`, copy the Vault to a backup drive: ```bash rsync -a --exclude '.bookmarks-but-better/' ~/Bookmarks/ /Volumes/Backup/Bookmarks/ ``` ### Git Git works well for a Vault. The daemon only rewrites a file when something in it actually changes, so each commit shows your real changes and nothing else. ```bash cd ~/Bookmarks git init git add -A git commit -m "Back up bookmarks" ``` Keep the daemon's working folder out of the repository: - Releases after 4.3.0 do this for you. The daemon writes a `.bookmarks-but-better/.gitignore` file that ignores the whole folder. If a `.gitignore` is already there, it is left as it is. - With 4.3.0 or earlier, add the folder to the Vault's `.gitignore` yourself before your first commit: ```bash echo '.bookmarks-but-better/' >> .gitignore ``` Commit regularly. To keep a copy on another machine, push to a remote you control. Remember that whoever hosts the remote can read your bookmarks. ## Sync is not backup Services such as iCloud Drive, Dropbox, Syncthing and Obsidian Sync keep copies in step. That also means a deletion or a mistake is copied everywhere. A synced folder only protects you if the service keeps a history of earlier versions you can go back to. Otherwise, use one of the backup methods above as well. ## Obsidian A Vault is made of Markdown files, so you can open it in Obsidian. Obsidian does not back up the folder by itself, so back it up the same way as any other Vault. ## Restore a backup 1. Stop the service: ```bash bookmarks-but-better service stop ``` 2. Replace the **contents** of the Vault folder with the backup, and keep the folder at the same path. 3. Start the service: ```bash bookmarks-but-better service start ``` 4. Check the Vault, using its id (from `vault list`) or its path: ```bash bookmarks-but-better doctor default ``` A good result ends with `the vault is healthy`. If `doctor` reports problems, see [Troubleshooting](/docs/daemon/troubleshooting/#check-a-vault-with-doctor). 5. Reload the dashboard tab. :::caution[Never swap the folder while the daemon runs] Do not rename, move or swap the Vault folder while the daemon is running. The running daemon keeps working with the folder it opened when it started. Changes could end up in the folder you moved away instead of the restored one. Always stop the service first. ::: ### Restore to a different path If the restored Vault lives at a new path, update the list of Vaults. Keep the same id, so the extension still finds the same source: ```bash npx bookmarks-but-better@latest vault remove default npx bookmarks-but-better@latest vault add default ~/Restored/Bookmarks ``` If that was your only Vault, `vault remove` also removes the background service. In that case, set the service up again with: ```bash npx bookmarks-but-better@latest install ``` Then run `npx bookmarks-but-better@latest status` to confirm everything is in place. ## An HTML export is not a backup **Settings → Data & Migration → Export…** also works for a Vault, but the HTML format cannot hold everything a Vault has. It leaves out notes, `*.assets/` folders, and the order files. The export is useful for moving bookmarks to another browser, not as a backup. See [Import and export](/docs/start/import-export/#export). ## Troubleshooting Source: https://bookmarks.but-better.dev/docs/daemon/troubleshooting/ Diagnose the daemon with status and doctor, fix common errors such as an unreachable daemon or a busy port, and report an issue. ## Start with status ```bash npx bookmarks-but-better@latest status ``` `status` checks what is installed, configured and running, and whether a browser is connected. It ends with either `everything is in place`, or a list of things to fix, each followed by the command that fixes it. For example: ```text one thing to fix: - the background service is installed but not running npx bookmarks-but-better install ``` Running `npx bookmarks-but-better@latest` with no command shows the same status, then a menu that can apply each fix for you. Add `--json` to `status` to get machine-readable output. | `status` says | Fix | | ---------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | | `the daemon is not installed` | `npx bookmarks-but-better@latest install` | | `the installed daemon is …; this tool installs …` | `npx bookmarks-but-better@latest install` updates it. | | `the installed daemon is …, newer than the … this tool knows` | Run `npx bookmarks-but-better@latest` to get the latest manager. | | `no vault is configured` | `npx bookmarks-but-better@latest install` | | `` vault `…`: … does not exist `` | Put the folder back, or remove it from the list with `vault remove `. | | `` vault `…`: … is not a vault yet `` | `vault remove `, then `vault add `, and agree to create a Vault. | | `the background service is not installed` | `npx bookmarks-but-better@latest install` | | `the background service is installed but not running` | `npx bookmarks-but-better@latest install` | | `the daemon is not answering at …` | `npx bookmarks-but-better@latest install`, which restarts it. | | `` `…` is configured but the running daemon does not host it `` | `npx bookmarks-but-better@latest install`, which restarts it. | | `the service was installed for a different set of vaults than is configured` | `npx bookmarks-but-better@latest install` | If the same problem comes back after the fix, see [The daemon will not start](#the-daemon-will-not-start). ## Check a vault with doctor `doctor` reads a Vault and reports anything wrong. It never changes anything. Give it the Vault's id or its path: ```bash bookmarks-but-better doctor default bookmarks-but-better doctor --vault ~/Bookmarks ``` It shows how many bookmarks and folders it found, and how many errors and warnings. It ends with `the vault is healthy`, or with `the vault has problems that require attention`, and explains each finding. Common findings: - **`root metadata MISSING`**: the folder is not a Vault. `doctor` prints the `bookmarks-but-better init --vault …` command that makes it one. - **`order [state_read_only]`**: that folder's `.bookmarks-but-better-state.json` contains something the daemon must not overwrite, so you cannot rearrange that folder. Adding, renaming, moving and deleting still work. Moving that file somewhere else puts the folder back in its default order. - **`staged_entries_retained`**: something was deleted or moved when the daemon stopped unexpectedly, and the daemon could not finish or undo it on its own. Nothing was thrown away: the files are kept inside `.bookmarks-but-better/staging`, listed in `.bookmarks-but-better/staging/recovery.txt`. `doctor` explains how to recover them. If a daemon is serving the Vault while `doctor` runs, it says so, because the Vault can change while you read the report. ## Common problems ### The extension says the daemon is unreachable In **Settings → Sources**, the daemon's card shows **Unreachable**. If a Vault is the Active Source, the dashboard shows **Bookmarks are unavailable.** with **Retry** and **Switch source**. The extension does not quietly switch to your browser bookmarks instead. 1. Run `npx bookmarks-but-better@latest status` and apply the fix it names. 2. Click **Retry** in Settings or on the dashboard. For errors while connecting, see [Connection errors](/docs/daemon/connect/#connection-errors). ### The daemon will not start To see why, stop the service and run the daemon in your terminal, where it prints its error: ```bash bookmarks-but-better service stop bookmarks-but-better serve --from-config ``` Press Ctrl+C to stop it, fix the problem, then run `bookmarks-but-better service start`. Common errors: | Error | Cause and fix | | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | | `127.0.0.1:52222 could not be bound: …` | Another program uses the port. See [Port 52222 is already in use](#port-52222-is-already-in-use). | | `another bookmarks-but-better daemon already holds this vault (lock: …)` | A daemon is already serving that Vault, often the background service. Stop one of them. | | `` the vault `…` at … is not an initialized vault (no .bookmarks-but-better-folder.md at its root) `` | The folder is not a Vault. Run the `bookmarks-but-better init --vault …` command the error prints. | | `` the vault roots … and … overlap; host sibling directories instead `` | One Vault's folder is inside another. See [Multiple vaults](/docs/daemon/multiple-vaults/#folders-must-not-overlap). | | `the configuration lists no vault to serve; …` | Add a Vault with `npx bookmarks-but-better@latest vault add`. | | `… could not be read: …` | `config.toml` has a mistake, such as a mistyped setting name. The message names the line. | ### Port 52222 is already in use 1. Open the [configuration file](/docs/daemon/multiple-vaults/#the-configuration-file) and set another port at the top, for example: ```toml port = 52223 ``` 2. Reinstall the service so it uses the new port: ```bash npx bookmarks-but-better@latest install ``` 3. In the extension, open **Settings → Sources**, forget the old daemon, and connect to `127.0.0.1:52223`. ### `bookmarks-but-better: command not found` **macOS and Linux** The command is installed in `~/.local/bin`, which may not be on your `PATH`. Add this line to your shell profile, then open a new terminal: ```bash export PATH="$HOME/.local/bin:$PATH" ``` Or use the full path, `~/.local/bin/bookmarks-but-better`. **Windows** The installer adds `%LOCALAPPDATA%\bookmarks-but-better\current` to your user `Path`. Open a new terminal so it picks up the change. ### Linux: the service only starts when you log in If `bookmarks-but-better service status` says `installed; starts at your next login (nothing supervises it)`, your system has no usable `systemctl --user`. The service was installed as a desktop autostart entry instead. It starts when you log in, but nothing restarts it if it stops, and `service start` and `service stop` cannot control it. Until your next login, run `bookmarks-but-better serve --from-config` yourself. ### `vault_required` from the HTTP API You only see this if you use the daemon's HTTP API directly, with your own scripts. When the daemon serves more than one Vault, the older routes that do not name a Vault (such as `/api/v1/tree`) answer with the error `vault_required`, so a Vault is never picked at random. Use the routes that name the Vault instead, under `/api/v1/vaults/{id}/`. `GET /api/v1/vaults` lists the Vault ids. ## Where things live | What | macOS and Linux | Windows | | ---------------------------- | ------------------------------------------------ | -------------------------------------------------------- | | Configuration and Vault list | `~/.config/bookmarks-but-better/config.toml` | `%USERPROFILE%\.config\bookmarks-but-better\config.toml` | | Daemon versions | `~/.local/share/bookmarks-but-better` | `%LOCALAPPDATA%\bookmarks-but-better` | | The daemon's working files | `.bookmarks-but-better/` inside each Vault | `.bookmarks-but-better\` inside each Vault | For the background service's location on each system, see [What goes where](/docs/daemon/install/#what-goes-where). ## Report an issue If you are still stuck, open an issue at [github.com/farhadeidi/bookmarks-but-better/issues](https://github.com/farhadeidi/bookmarks-but-better/issues). It helps to include: - your operating system and browser - the output of `npx bookmarks-but-better@latest status` - the exact error message The daemon's logs never contain bookmark titles, URLs or file contents. They only record counts, ids, error codes and paths. Output from `status` and `doctor` includes the paths to your Vaults, so check that you are happy to share them before you post. ## Uninstall the daemon Source: https://bookmarks.but-better.dev/docs/daemon/uninstall/ Remove the daemon and its background service with npx bookmarks-but-better uninstall, or by hand. Your Vault folders are never deleted. Uninstalling removes the daemon program and its background service. **Your Vault folders are never deleted.** They are ordinary folders of Markdown files, and they stay where they are. ## Uninstall with the Daemon Manager ```bash npx bookmarks-but-better@latest uninstall ``` 1. It asks: **Remove the daemon and its background service? Your vaults stay where they are.** 2. It stops and removes the background service. 3. It deletes the installed daemon versions. On macOS and Linux, it also removes the `~/.local/bin/bookmarks-but-better` command. On Windows, it removes the install folder from your user `Path`. 4. It asks whether to remove the configuration file too. The answer defaults to **no**. The file is small, and a later install uses it again, so your Vaults are already set up. 5. It lists each Vault as `Untouched`. To remove the configuration file without being asked, use `--purge-config`: ```bash npx bookmarks-but-better@latest uninstall --purge-config ``` ## In the extension Open **Settings → Sources**, open the daemon's menu, and click **Forget daemon**. Otherwise, the extension keeps showing the daemon as unreachable. ## Uninstall by hand Remove the service first, while the daemon program is still installed: **macOS and Linux** ```bash bookmarks-but-better service uninstall rm -rf ~/.local/share/bookmarks-but-better rm ~/.local/bin/bookmarks-but-better ``` To also remove the configuration file: ```bash rm ~/.config/bookmarks-but-better/config.toml ``` **Windows** 1. Remove the service: ```powershell bookmarks-but-better service uninstall ``` 2. Delete the folder `%LOCALAPPDATA%\bookmarks-but-better`. 3. Remove `%LOCALAPPDATA%\bookmarks-but-better\current` from your user `Path` environment variable. 4. To also remove the configuration file, delete `%USERPROFILE%\.config\bookmarks-but-better\config.toml`. `service uninstall` stops the service and removes its definition. It reports `your vault was not touched`, or `nothing to remove: no service definition is installed` if there was no service to remove. ## Removing your bookmarks too The uninstaller never deletes a Vault. If you no longer want your bookmarks, delete the Vault folders yourself. Consider [making a backup](/docs/daemon/backups/) first. # Guides ## Guides Source: https://bookmarks.but-better.dev/docs/guides/ Articles for choosing a private bookmark manager: moving from Pocket, Raindrop or Toby, putting bookmarks on your new tab, keeping them as Markdown in Obsidian, and going without an account. These articles help you decide whether Bookmarks But Better fits, and how to move to it from another tool. For step-by-step setup, start with [Install the extension](/docs/start/install/). - [A Pocket alternative for your saved links](/docs/guides/pocket-alternative/): Import your Pocket CSV. What carries over and what doesn - [A Raindrop alternative that needs no account](/docs/guides/raindrop-alternative/): How a cloud account and local bookmarks compare. - [Obsidian bookmarks as Markdown files](/docs/guides/obsidian-bookmarks/): Keep bookmarks as Markdown next to or inside your Obsidian vault. - [A bookmark manager without an account](/docs/guides/bookmark-manager-without-account/): What local means in practice, and the trade-offs for sync and backup. - [A Toby alternative with no tab limit](/docs/guides/toby-alternative/): Tab manager or bookmark manager, and what the free plan - [A local-first bookmark manager](/docs/guides/local-first-bookmark-manager/): No service and no server, compared with self-hosting linkding or Karakeep. - [Put your bookmarks on your new tab page](/docs/guides/new-tab-bookmarks-extension/): What a new tab override changes, which folder to show, and how to undo it. ## A Pocket alternative for your saved links Source: https://bookmarks.but-better.dev/docs/guides/pocket-alternative/ A Pocket alternative with no account: import your Pocket CSV into a private new-tab dashboard, and see what carries over and what doesn't. If you used Pocket mainly to keep links you wanted to find again, Bookmarks But Better can take over that job. It imports the CSV file from a Pocket export and shows those links on your new tab page, with no account. It is not a read-later app, though. It does not save article text, offer a reading view, or work offline with saved pages, so if that is what you miss, read the last section first. ## What happened to Pocket Mozilla [announced on May 22, 2025](https://blog.mozilla.org/en/mozilla/building-whats-next/) that Pocket would shut down on July 8, 2025. Users could export their saves until October 8, 2025, after which Mozilla said the data would be permanently deleted. That export deadline has passed. What follows only helps if you exported your saves before then and still have the file. ## What Bookmarks But Better is Bookmarks But Better is a free and open source (MIT) browser extension for Chrome and Firefox. It replaces the new tab page with a bookmarks dashboard: your folders appear as cards in a grid, each showing its links as a list or as an icon grid. Your bookmarks come from a **source**: - **Browser bookmarks.** The bookmarks already in your browser, read and changed through the browser's built-in bookmark APIs. - **A Markdown vault.** A folder of Markdown files on your own disk, served by an optional local program (the daemon) that only listens on `127.0.0.1`. You can turn on either or both and switch between them from the header. Sources are never mixed together: an import, an edit or a delete only affects the source you are looking at. See [how sources work](/docs/start/sources/). There is no account, no analytics and no collection of bookmark content. The [privacy page](/privacy/) lists the few network requests the extension makes. ## Importing your Pocket export Import lives in the extension's **Settings → Data & Migration → Import**. It accepts a standard HTML bookmarks file or a CSV export from Raindrop or Pocket. 1. Pick the source you want the links to live in: browser bookmarks or a vault. The import goes into the active source only. 2. Open **Settings → Data & Migration** and choose your Pocket CSV file. 3. Check the preview, pick a destination folder, and optionally name a new subfolder to import into. 4. Confirm. If a bookmark with the same URL already exists in the destination folder, you choose whether to skip it, replace it or keep both. How the importer reads a Pocket file: - It spots a Pocket export from the header row: a `url` column together with `time_added` or `status`. - Every link goes into one folder named **Pocket**, since a Pocket export has no folder structure to rebuild. - It keeps each row's title and URL. When a title is empty, it uses the site's host name instead. - It skips rows without a valid `http` or `https` URL and shows how many were skipped in the preview. The full walkthrough, including HTML files from other browsers, is in [import and export](/docs/start/import-export/). ## What carries over and what doesn't | From your Pocket export | After import | | ----------------------------- | ---------------------------------------------- | | Link URL | Kept | | Title | Kept (host name when empty) | | Tags | Not imported | | Read / archived status | Not imported | | Date added | Not imported | | Saved article text, highlights | Not available; the extension stores links only | Once imported, the links are ordinary bookmarks. You can rename them, move them into folders with the Bookmark Organizer (a drag-and-drop tree editor), and sort a long "Pocket" folder into smaller ones. ## Finding things again Pocket was often a place to find a link you half remembered. On the dashboard: - **Start typing anywhere.** A search palette opens on the first character and matches bookmark titles, URLs and folder names across the whole active source. - **Search from the address bar.** In Chrome and Firefox, type `bb`, press Tab, and search the active source without opening the dashboard. - **Save as you browse.** The extension's toolbar popup saves the page you are on to the active source in one click. ## If you want your saves as files Pocket kept your list on its servers. If you would rather own the files, turn on a Markdown vault. Each bookmark is one Markdown file with the URL and title in its front matter, inside ordinary folders on your disk. You can open, back up or version those files with any tool. Setup is one command, `npx bookmarks-but-better@latest`, and [Markdown vaults](/docs/daemon/) explains how it works. This is also how the extension works in Safari, which does not give extensions access to its bookmarks. See [Safari](/docs/start/safari/). ## When this is not the right replacement Bookmarks But Better does not: - save a copy of the article or a reading view - work offline with saved pages (cached site icons do keep loading offline) - keep highlights, tags or a read/unread queue - have phone apps or built-in sync between devices If you mostly used Pocket to read later, look for an app built for reading. If you mostly used it to collect links and find them again, a bookmarks dashboard on every new tab covers that job. ## Get started - Install for [Chrome](https://chromewebstore.google.com/detail/nflojekghnganlcjncbepnnnkgakghif?utm_source=website) or [Firefox](https://addons.mozilla.org/firefox/addon/bookmarks-but-better/?utm_source=website). - Try the [live preview](/preview/) first. It uses demo bookmarks and needs no install. - Then open **Settings → Data & Migration** and import your Pocket CSV. ## A Raindrop alternative that needs no account Source: https://bookmarks.but-better.dev/docs/guides/raindrop-alternative/ Raindrop alternative compared: cloud or local bookmarks, where your data lives, supported platforms, and importing a Raindrop CSV or HTML. Raindrop.io and Bookmarks But Better both organize bookmarks, but they work differently. Raindrop is a cloud service you sign in to, with apps on many devices. Bookmarks But Better is a browser extension with no account that keeps bookmarks in your browser or in Markdown files on your own disk. This guide compares them and shows how to bring a Raindrop export across. Facts about Raindrop.io below come from Raindrop's own pages, as of September 2026, and are linked where they are used. ## The short version | | Raindrop.io | Bookmarks But Better | | --- | --- | --- | | Account | Sign in with email or username and password, Google, or Apple ([Raindrop help](https://help.raindrop.io/authentication)) | None | | Where bookmarks live | Raindrop describes a "100% cloud-based architecture" ([raindrop.io](https://raindrop.io/)) | Your browser's bookmark store, or Markdown files in a folder you choose | | Across devices | "Access your bookmarks seamlessly across all your devices" ([raindrop.io](https://raindrop.io/)) | No built-in sync; a vault folder can be carried by a file sync tool you already use | | Platforms | Extensions for Chrome, Firefox, Safari and Edge; apps for Windows, Mac, iPad, iPhone and Android ([raindrop.io](https://raindrop.io/)) | Extensions for Chrome and Firefox; Safari coming soon (build it from source today), using a local daemon; daemon for macOS, Linux and Windows; no phone apps | | Cost | A free plan and a paid Pro plan ([Raindrop plans](https://raindrop.io/pro/buy)) | Free and open source (MIT) | | Export | HTML, CSV and TXT ([Raindrop help](https://help.raindrop.io/export-backup)) | HTML bookmarks file; vault bookmarks are already plain files | ## Account and cloud vs local Raindrop is an online service: you sign in, and your collections are stored by Raindrop and reachable from its apps and extensions. That is what makes Raindrop's cross-device access work. Raindrop says it keeps "your data safe, never sold" and has "no ads & trackers" ([raindrop.io](https://raindrop.io/)). Bookmarks But Better has no server and no account. Your bookmarks come from one of these sources: - **Browser bookmarks.** The bookmarks already in Chrome or Firefox, read and edited through the browser's own bookmark APIs. Nothing is copied anywhere else. - **Markdown vaults.** Folders of Markdown files on your disk, served to the extension by a small daemon that only listens on `127.0.0.1`/`localhost`. Sources are never merged. You switch between them from the header, and every edit, import or delete affects only the source you are looking at. The [sources overview](/docs/start/sources/) explains this in detail. With a local tool, nobody else holds your bookmarks, and nobody else carries them between your devices either. The [no-account guide](/docs/guides/bookmark-manager-without-account/) goes through that trade-off. ## Features Raindrop's free plan lists unlimited bookmarks, collections, highlights and devices, plus import and export. Its Pro plan adds features such as full-text search, a web archive, reminders, annotations, a duplicate and broken link finder, and daily backups ([Raindrop plans](https://raindrop.io/pro/buy)). Bookmarks But Better covers a narrower job: - **A dashboard on every new tab.** Folders appear as cards in a masonry grid, each shown as a list or an icon grid. - **A Bookmark Organizer.** A tree editor for dragging, reordering, renaming, creating and deleting bookmarks and folders. - **Search.** Start typing anywhere on the dashboard to search titles, URLs and folder names, or type `bb` in the address bar. - **Quick capture.** The toolbar popup saves the current page to the active source. - **Ten color themes** with light, dark and system modes, plus a root folder you choose from the header. It has no highlights, no page archive, no full-text search of page contents, no sharing, and no phone apps. If you rely on those, Raindrop is built for them. ## Where your data lives In Bookmarks But Better: - **Browser source:** bookmarks stay in the browser's own bookmark store. - **Vault:** each bookmark is one Markdown file named after its title (for example `React--a1b2c3d4.md`). The URL, title and timestamps are stored in YAML front matter, and each folder on disk is a bookmark folder. You can read, copy, back up or version these files with ordinary tools. The extension makes one kind of outside request by default: site icon lookups, which send a bookmark's origin (such as `https://example.com`, never the full path) to Google's favicon service, unless a local cache or the browser's own icon store answers first. The [privacy page](/privacy/) has the details. ## Moving from Raindrop Raindrop can export HTML, CSV or TXT ([Raindrop help](https://help.raindrop.io/export-backup)). Bookmarks But Better imports the first two. 1. In Raindrop, export the collections you want as **CSV** or **HTML**. 2. In Bookmarks But Better, switch to the source the bookmarks should live in. 3. Open **Settings → Data & Migration → Import** and choose the file. 4. Review the preview, choose a destination folder, resolve any conflicts, and import. **CSV.** The importer recognizes a Raindrop CSV by its `folder` column. A folder path such as `Parent/Child` becomes nested folders. It keeps each bookmark's title, URL and folder. Tags, notes, excerpts and dates are not imported, and rows without a valid `http`/`https` URL are skipped and counted in the preview. **HTML.** A standard bookmarks HTML file is imported with its nested folders. CSV keeps your collection structure through the `folder` column. Either format works for the links themselves. See [import and export](/docs/start/import-export/) for the full steps. ## Which one fits Raindrop is likely the better choice if you want highlights, a web archive, sharing, phone apps, or bookmarks that follow you across devices without setting anything up. Bookmarks But Better is likely the better choice if you want no account, bookmarks that stay in your browser or in Markdown files you own, and a dashboard on every new tab. ## Get started - Install for [Chrome](https://chromewebstore.google.com/detail/nflojekghnganlcjncbepnnnkgakghif?utm_source=website) or [Firefox](https://addons.mozilla.org/firefox/addon/bookmarks-but-better/?utm_source=website). - Try the [live preview](/preview/) with demo bookmarks, no install needed. - Want bookmarks as files? Read about [Markdown vaults](/docs/daemon/). ## Obsidian bookmarks as Markdown files Source: https://bookmarks.but-better.dev/docs/guides/obsidian-bookmarks/ Keep bookmarks as Markdown files in or next to your Obsidian vault, shown on your browser's new tab. What the files look like and how to set it up safely. Bookmarks But Better can keep your bookmarks as plain Markdown files, one file per bookmark and one folder per bookmark folder, and show them on your browser's new tab page. Because they are ordinary Markdown files with YAML front matter, Obsidian can open them. The simplest setup is a dedicated bookmarks folder, either next to your Obsidian vault or as a subfolder inside it. Pointing it at the root of an existing Obsidian vault technically works, but you probably won't like the result. ## How it works The browser extension replaces the new tab page with a bookmarks dashboard. By default it shows your browser's bookmarks. It can also connect to the **daemon**, a small local program that serves bookmarks from a folder of Markdown files, called a **vault**, over `127.0.0.1` only. The daemon reads the files, and the extension displays and edits them through it. Edits made in the dashboard are written back to the files. Edits made in another app, such as Obsidian, are picked up: the daemon watches the folder, rescans after changes, and also rescans on a timer in case a change notification is missed. Two terms, since both products use them: an **Obsidian vault** is the folder Obsidian opens. A **bookmarks vault** is the folder the daemon serves. They can be the same folder, but they don't have to be. ## What a bookmarks vault looks like ```text Bookmarks/ .bookmarks-but-better-folder.md identity of this folder .bookmarks-but-better-state.json the order of its children React--a1b2c3d4.md one bookmark Reading list/ .bookmarks-but-better-folder.md .bookmarks-but-better-state.json The Rust Book--r1r2r3r4.md ``` Each bookmark file is named after its title followed by `--` and an eight-character id (`React--a1b2c3d4.md`), and its front matter holds the data: ```yaml --- bookmarks_but_better_id: a1b2c3d4 bookmarks_but_better_url: https://react.dev bookmarks_but_better_title: React bookmarks_but_better_created: 2026-01-01T09:00:00Z bookmarks_but_better_updated: 2026-01-02T10:30:00Z tags: [frontend, library] --- Why I saved this… ``` Some details matter if you edit these files yourself: - **Your own content is kept.** Only the `bookmarks_but_better_` keys belong to the daemon. Other properties such as `tags`, comments, key order and the whole note body below the front matter stay untouched, byte for byte, when the dashboard edits a bookmark. - **Identity lives in the front matter.** You can move a bookmark file to another folder and it keeps its identity. The `--a1b2c3d4` part of the filename is meant to stay fixed; the title part can change. - **The state file only stores order.** What a folder contains is whatever is in the directory. The `.json` file only records the order shown on the dashboard. - **Conflicting edits are refused.** Every write checks that the file still has the content the dashboard last saw. If you changed it in Obsidian in the meantime, the dashboard gets a conflict instead of replacing your edit. - **The daemon keeps its own working directory.** While running, it keeps a lock file and staging area in a `.bookmarks-but-better/` directory at the vault root. ## What Obsidian shows you Obsidian [stores notes as Markdown files in a folder](https://obsidian.md/help/data-storage) and displays YAML front matter as [properties](https://obsidian.md/help/properties). So each bookmark shows up as a note titled like `React--a1b2c3d4`, with the URL, title and timestamps as properties. Anything you write below the front matter is a normal note body. Obsidian also says it [refreshes the vault when other apps change files](https://obsidian.md/help/data-storage), so bookmarks saved from the browser appear in Obsidian as new notes. The folder and state files start with a dot. Obsidian's help notes that [most operating systems hide folders starting with a period](https://obsidian.md/help/data-storage). How Obsidian itself lists dot-files isn't covered by its help pages, so check your own setup rather than assume. ## Can a bookmarks vault live inside an Obsidian vault? Yes, with a few things worth knowing. When the daemon scans, it skips directories whose names start with a dot (such as `.obsidian`), files that aren't Markdown, and Markdown files that have no `bookmarks_but_better_id` in their front matter. Your ordinary notes are passed over silently: they don't show up as bookmarks and aren't reported as errors. Initializing a folder as a bookmarks vault writes exactly two files into that folder: `.bookmarks-but-better-folder.md` and `.bookmarks-but-better-state.json`. It doesn't go into subfolders. When the daemon runs, it also creates its `.bookmarks-but-better/` directory there. Nothing else in your notes is rewritten. The root of your Obsidian vault is still a poor choice. Every non-hidden subfolder of a bookmarks vault appears on the dashboard as a bookmark folder, and folders that weren't created as bookmark folders have no identity file yet. They are shown read-only, with a diagnostic, until something gives them one, though bookmarks inside them stay editable. Pointed at the root of a large notes vault, the dashboard would fill up with your note folders, most of them containing no bookmarks. Deleting a folder from the dashboard only removes it if every file inside is one the vault manages. A stray note, a `.obsidian` directory or a symbolic link stops the delete, so you can decide in a file manager what to remove. A layout that works well: ```text My Notes/ Obsidian vault .obsidian/ Daily/ Projects/ Bookmarks/ bookmarks vault: point the daemon here ``` One daemon can serve several vaults, each shown as its own source in the extension, never merged. Their folders must not overlap: one bookmarks vault can't sit inside another, and the daemon refuses to start with such a setup. This rule is about bookmarks vaults only; your Obsidian vault isn't one. See [multiple vaults](/docs/daemon/multiple-vaults/). ## Setting it up 1. Install the extension for [Chrome](https://chromewebstore.google.com/detail/nflojekghnganlcjncbepnnnkgakghif?utm_source=website) or [Firefox](https://addons.mozilla.org/firefox/addon/bookmarks-but-better/?utm_source=website). 2. In a terminal, run `npx bookmarks-but-better@latest`. It installs the daemon, asks where your bookmarks should live (give it your `Bookmarks` folder), and starts it as a background service. Without Node.js, use the install scripts in [install the daemon](/docs/daemon/install/). 3. In the extension, open **Settings → Sources**, enter `127.0.0.1:52222` and click **Connect**. The browser asks for localhost permission at that moment, not at install. Full steps: [install the daemon](/docs/daemon/install/) and [connect the extension](/docs/daemon/connect/). Your browser bookmarks stay where they are. The vault is a separate source, and nothing moves between the two unless you import or copy it yourself. ## Backups and sync A bookmarks vault is a folder of text files, so the tools you already use for your notes work for it too: a copy, a Git repository, or a file sync service. Uninstalling the daemon never deletes a vault. Keep in mind that sync isn't a backup, since a deletion syncs like any other change. See [backing up a vault](/docs/daemon/backups/). ## Get started - Try the dashboard in the [live preview](/preview/). It uses demo bookmarks, no install needed. - Install for [Chrome](https://chromewebstore.google.com/detail/nflojekghnganlcjncbepnnnkgakghif?utm_source=website) or [Firefox](https://addons.mozilla.org/firefox/addon/bookmarks-but-better/?utm_source=website), then follow [install the daemon](/docs/daemon/install/). ## A bookmark manager without an account Source: https://bookmarks.but-better.dev/docs/guides/bookmark-manager-without-account/ When a bookmark manager without an account makes sense: what local means in practice, the exact network requests, and the trade-offs for sync and backup. A bookmark manager without an account keeps your bookmarks on your own devices instead of on a company's server. Nobody else holds a copy, nothing needs a password, and there's no service that can shut down under you. The costs: no built-in sync between devices, and backups are up to you. ## When no account makes sense It is a good fit if: - You use one computer most of the time, or already keep bookmarks in one browser profile. - You'd rather not have your list of saved sites on someone else's server. A bookmark list says a lot about work, health, money and interests. - You want files you own. Plain files outlive any single app, and you can open them with ordinary tools. - You already sync files your own way, and would rather reuse that than add another service. It is a weaker fit if you want bookmarks on your phone, instant sync across many devices with no setup, or shared collections with other people. Account-based services are built for those. ## What "local" means here Bookmarks But Better is a free and open source (MIT) extension for Chrome and Firefox. A Safari version, which works through a local daemon, is coming soon, and you can build it from source today. There is no sign-up, and nothing to log into. Bookmarks live in one of these places: - **Browser source.** Your browser's own bookmark store. The extension reads and changes bookmarks only through the browser's built-in bookmark APIs. - **Vault.** A folder of Markdown files on your disk. A small optional program, the daemon, serves the folder to the extension over `127.0.0.1`/`localhost` only. It binds to loopback and makes no outbound requests of its own. - **Standalone source (legacy).** An older collection in a database inside the browser profile (IndexedDB), which is being retired. Moving off it is an explicit copy that leaves the old data intact. These sources are never merged. You switch between them in the header, and each operation affects only the active source. Settings and source choices are stored per browser profile and aren't synced anywhere. Details: [how sources work](/docs/start/sources/). ## The network requests From the [privacy page](/privacy/): 1. **Favicon lookups, by default.** To show site icons, the extension first checks a local cache on your machine, then, in Chrome, the browser's own on-device icon store. Only if neither has the icon does it ask Google's public favicon service, sending the bookmark's **origin** (for example `https://example.com`), never the path, query or fragment. Grid tiles need larger icons than the browser stores, so they ask Google before the browser's store. Successful lookups are cached for 30 days, so a site is normally looked up about once a month. Firefox has no on-device icon store an extension may read, so it skips that step. A letter placeholder is drawn locally when nothing answers. 2. **Your own daemon, if you connect one.** The extension then talks to that loopback address. The permission is requested when you click Connect, never at install. That's all. No accounts, analytics, tracking, advertising or collection of bookmark content. One caveat: taken together, the origins sent for icon lookups amount to a list of the sites you've bookmarked, which is why they're cached and limited to origins. When the daemon serves its own web app in a browser tab (not the extension), that page can show Google's icons but can't cache them, so it fetches them again on each load. ## The trade-offs ### No built-in sync Nothing carries your bookmarks between devices for you. Your options: - **Browser source:** if your browser already syncs its bookmarks, the dashboard simply shows what the browser has. The extension adds no sync of its own. - **Vault:** a vault is a normal folder, so any file sync tool you already trust can carry it to another machine, each running its own daemon. On Safari, setup suggests a synced folder such as iCloud Drive for this. As with any synced folder, avoid editing the same bookmark on two machines at the same moment. ### Sync is not a backup A sync tool copies deletions and mistakes as faithfully as good changes. Keep a separate backup: - **Vault:** the bookmarks are text files, so copy the folder, keep it in a Git repository, or include it in your regular backups. Uninstalling the daemon never deletes a vault. See [backing up a vault](/docs/daemon/backups/). - **Any source:** **Settings → Data & Migration → Export** saves bookmarks as an HTML file that any browser can import. ### Nobody to recover it for you Without an account, there's no "restore from the cloud". The upside is that nothing depends on a service staying online. The vault format is documented plain Markdown with YAML front matter, readable without this extension. ## How it compares to account-based tools Account-based managers such as Raindrop.io offer cross-device access, mobile apps and extra features in exchange for storing your bookmarks on their service. If you're weighing that choice, the [Raindrop comparison](/docs/guides/raindrop-alternative/) sets out the differences using Raindrop's own pages. If you keep notes in Obsidian, the [Obsidian guide](/docs/guides/obsidian-bookmarks/) shows how a vault fits next to your notes. ## Getting set up 1. Install the extension. The browser source works immediately, with nothing else to install. 2. Optionally, run `npx bookmarks-but-better@latest` to install the daemon and choose a folder for a Markdown vault. See [Markdown vaults](/docs/daemon/). 3. Import from an HTML file, or a Raindrop or Pocket CSV, under **Settings → Data & Migration**. ## Get started - Install for [Chrome](https://chromewebstore.google.com/detail/nflojekghnganlcjncbepnnnkgakghif?utm_source=website) or [Firefox](https://addons.mozilla.org/firefox/addon/bookmarks-but-better/?utm_source=website). - Try the [live preview](/preview/) with demo bookmarks, no install needed. - Read the [privacy page](/privacy/) for the full details. ## A Toby alternative with no tab limit Source: https://bookmarks.but-better.dev/docs/guides/toby-alternative/ Toby alternative compared: tab manager or bookmark manager, the 60-tab free plan, where your data lives, and how to bring a Toby export across. Toby and Bookmarks But Better both put a grid of saved links on your new tab, so people often look at one while deciding about the other. They are built for different jobs. Toby is a tab manager: you save whole browsing sessions into shared Spaces, and it stores them for you. Bookmarks But Better is a bookmark manager with no account that shows the bookmarks your browser already has, or Markdown files on your own disk. Facts about Toby below come from Toby's own pages, as of September 2026, and are linked where they are used. ## The short version | | Toby | Bookmarks But Better | | --- | --- | --- | | What it saves | Browser tabs, grouped into collections and Spaces | Bookmarks, in the folders you already keep them in | | Account | Required for sync: "Your Spaces stay in sync across every browser and device you sign in to" ([gettoby.com](https://www.gettoby.com/)) | None | | Saved-item limit | "Up to 60 saved tabs" on the Starter plan ([Toby pricing](https://www.gettoby.com/pricing)) | No limit | | Where data lives | Toby's service, reachable from its apps and extensions | Your browser's bookmark store, or Markdown files in a folder you choose | | Sharing | "Invite your team into a Space" and custom share links ([gettoby.com](https://www.gettoby.com/)) | None | | Platforms | Chrome, Firefox and Edge, plus iOS and Android apps ([gettoby.com](https://www.gettoby.com/)) | Chrome and Firefox; Safari coming soon (build it from source today), using a local daemon | | Cost | Free to start, then $6/member/month (Productivity) or $10/member/month (Team) ([Toby pricing](https://www.gettoby.com/pricing)) | Free and open source (MIT) | ## The 60-tab ceiling The difference most people run into first is the Starter plan's cap of 60 saved tabs ([Toby pricing](https://www.gettoby.com/pricing)). Sixty is enough to try the idea and not enough to move a real bookmark collection into. Past that you either prune or subscribe. Bookmarks But Better has no such number. The extension and the daemon are both MIT-licensed and free, so a collection of five thousand bookmarks works exactly like a collection of five. ## Tabs or bookmarks Toby's unit is the tab. You collect the tabs that are open right now, name the group, and close them, which is why it works well for research sessions and for handing a set of links to a colleague. Bookmarks But Better's unit is the bookmark you already have. It reads your browser's bookmark tree through the browser's own API and draws each folder as a card on the new tab. Nothing is copied into a second store, so your bookmarks bar, your browser's own bookmark sync and any other bookmark tool keep working exactly as before. If you stop using the extension, the bookmarks are still where they were. That also means it does not do what Toby's Spaces do. There is no team workspace, no shared collection and no public share link. ## Where your data lives Toby keeps your Spaces on its service and syncs them to every browser and device you sign in to ([gettoby.com](https://www.gettoby.com/)). Bookmarks But Better has no server and no account. Bookmarks come from one of two sources, and the two are never merged: - **Browser bookmarks.** Read and edited through Chrome's or Firefox's own bookmark APIs. Your browser's built-in bookmark sync carries them between your own machines, the same as it always did. - **Markdown vaults.** Folders of Markdown files on your disk, served to the extension by a small daemon that only listens on `127.0.0.1`/`localhost`. One file per bookmark, one folder per bookmark folder, no hidden database. The [sources overview](/docs/start/sources/) explains how switching between them works. The extension makes one kind of outside request by default: site icon lookups, which send a bookmark's origin such as `https://example.com`, never the full path. The [privacy page](/privacy/) has the details. ## What you give up Be honest with yourself about these before switching: - No team Spaces, no shared collections, no share links. - No syncing of its own. Browser bookmarks ride your browser's sync; a vault folder rides whatever file sync you already use. - No phone apps. - No session capture. It saves one page at a time from the toolbar popup, not every open tab at once. If those are why you use Toby, Toby is the right tool and this is not. ## Moving from Toby Toby can export a collection as JSON, HTML or TXT ([Toby support](https://help.gettoby.com/support/solutions/articles/66000508502-how-to-export-your-collections)). Use **HTML**, which is the standard bookmarks file format every browser reads. 1. In Toby, open a collection's menu (the three dots beside its title) and choose **export**, then **HTML**. 2. Repeat for each collection you want to keep. 3. In Bookmarks But Better, switch to the source the bookmarks should live in. 4. Open **Settings → Data & Migration → Import** and choose the file. 5. Review the preview, pick a destination folder, resolve any conflicts, and import. The HTML file carries titles, URLs and nested folders. Toby's notes and tags only survive in its JSON export, which this importer does not read, so copy anything you need from those before you move. See [import and export](/docs/start/import-export/) for the full steps. ## Which one fits Toby is the better choice if you work in sessions of open tabs, share collections with a team, or want your links on a phone. Bookmarks But Better is the better choice if you want your existing bookmarks on the new tab, no account, and no cap on how much you keep. ## Get started - Install for [Chrome](https://chromewebstore.google.com/detail/nflojekghnganlcjncbepnnnkgakghif?utm_source=website) or [Firefox](https://addons.mozilla.org/firefox/addon/bookmarks-but-better/?utm_source=website). - Try the [live preview](/preview/) with demo bookmarks, no install needed. - Want bookmarks as files? Read about [Markdown vaults](/docs/daemon/). ## A local-first bookmark manager, with no server to run Source: https://bookmarks.but-better.dev/docs/guides/local-first-bookmark-manager/ What local-first means for bookmarks, how a browser-only setup compares to self-hosting linkding or Karakeep, and what you trade away for having no server. Most bookmark managers are websites. You sign in, your links sit on someone else's machine, and the tool stops working the day the company does. The usual escape is to self-host something like [linkding](https://linkding.link/) or [Karakeep](https://karakeep.app/), which puts you back in control and hands you a server to keep alive. Bookmarks But Better takes the third route: no service and no server. The bookmarks stay in your browser's own bookmark store, or in a folder of Markdown files on your disk. This guide explains what that buys you, and what it costs. ## What local-first usually means The term comes from Ink & Switch's 2019 essay [Local-first software](https://www.inkandswitch.com/local-first/), which sets out seven properties: fast, multi-device, offline, collaborative, long-lived, private and secure, and under the user's ultimate ownership and control. Bookmarks But Better meets some of those and not others, so it is worth being precise: - **Fast and offline.** The dashboard reads a local store. There is no network round trip between opening a tab and seeing your bookmarks, and no request to make before the page is useful. - **Long-lived.** A vault is one Markdown file per bookmark with YAML front matter, in ordinary folders. If the project were abandoned tomorrow, `grep`, a text editor and a file manager would still open every one of them. - **Private.** No account, no analytics, no telemetry, no bookmark-content collection. The only outside request the extension makes by default is a site icon lookup that sends a bookmark's origin such as `https://example.com`, never the full path. - **Under your control.** You can copy, back up, version and delete the files yourself, with tools you already have. - **Multi-device: partly.** The browser source rides your browser's own bookmark sync, which already works across your machines. A vault folder goes wherever you put it, including inside a folder your file sync tool already handles. - **Collaborative: no.** There is no shared editing, no merge of two people's changes, and no conflict resolution. One person, their own machines. ## Compared with self-hosting linkding and Karakeep are both good at what they do, and both of them are servers. Running one means a machine that stays on, a container to update, a database to back up, and a URL to reach from wherever you are. | | Self-hosted (linkding, Karakeep) | Bookmarks But Better | | --- | --- | --- | | What you run | A server process and its database | Nothing, or one small local daemon if you want vaults | | Reachable from | Anywhere you expose it to | The machine it runs on | | Backups | Database dumps | Copy a folder, or commit it to git | | Updates | Yours to apply | The browser updates the extension | | Storage format | Application database | Markdown files, or the browser's bookmark store | | Setup before first use | Install, configure, expose, secure | None | The optional daemon is not a small self-hosted server in disguise. It binds to `127.0.0.1`/`localhost` and refuses connections from anywhere else, it has no accounts and no login, and it rebuilds its whole state by scanning the folder at every start. There is nothing in it to expose to a network, and nothing you would want to. ## Files over apps Steph Ango's essay [File over app](https://stephango.com/file-over-app) makes the argument better than a feature list can: the file format outlives the program that made it, so the format is the part worth choosing carefully. A vault is built that way. One bookmark is one file: ```yaml --- bookmarks_but_better_id: a1b2c3d4 bookmarks_but_better_url: https://react.dev bookmarks_but_better_title: React bookmarks_but_better_created: 2026-01-01T09:00:00Z bookmarks_but_better_updated: 2026-01-02T10:30:00Z --- Why I saved this… ``` The file is named after the title plus a short id (`React--a1b2c3d4.md`). Only the `bookmarks_but_better_` keys belong to the daemon; your own properties and anything you write below the front matter are left alone. Folders on disk are bookmark folders in the dashboard. Nothing is hidden in an index, so the same folder is readable by Obsidian, by git, by a backup tool, and by whatever you use in ten years. The [Obsidian guide](/docs/guides/obsidian-bookmarks/) covers keeping one in or beside a vault you already have, and [back up your vault](/docs/daemon/backups/) covers copying it safely. ## What you give up - **No sync of its own.** Browser bookmarks sync with your browser. A vault syncs if you put it somewhere that syncs. There is no third option, and no way to reach your bookmarks from a machine you have not set up. - **No phone.** There are no mobile apps. - **No sharing.** No public collections, no team workspace, no share links. - **No archiving.** It saves the link, not the page. There is no snapshot, no reader view and no full-text search of page contents. The [no-account guide](/docs/guides/bookmark-manager-without-account/) goes through those trade-offs in more detail, including what to do about backups when nobody else is keeping a copy for you. ## Start without the local part Worth saying plainly, because the phrase "local-first" makes people expect setup: you do not have to touch any of this. Install the extension, open a new tab, and it shows the bookmarks Chrome or Firefox already holds. Vaults, Markdown files and the daemon are there if you want them, and ignoring them costs you nothing. ## Get started - Install for [Chrome](https://chromewebstore.google.com/detail/nflojekghnganlcjncbepnnnkgakghif?utm_source=website) or [Firefox](https://addons.mozilla.org/firefox/addon/bookmarks-but-better/?utm_source=website). - Try the [live preview](/preview/) with demo bookmarks, no install needed. - Ready for files on disk? [Install the daemon](/docs/daemon/install/). ## Put your bookmarks on your new tab page Source: https://bookmarks.but-better.dev/docs/guides/new-tab-bookmarks-extension/ How a new tab bookmarks extension works in Chrome and Firefox, what it replaces, how to choose which folder shows, and how to put it back. A browser's new tab page is the page you see most often and use least. Chrome fills it with a search box and thumbnails of sites you visited recently. Firefox fills it with shortcuts and a feed. Meanwhile the bookmarks you deliberately chose to keep sit behind a menu, or squeezed into a bar that fits about nine of them. A new tab extension changes what that page is. Bookmarks But Better turns it into a dashboard of your own bookmarks, where every folder is a card. This guide covers what that actually changes in the browser, how to point it at the right folder, and how to undo it. ## What gets replaced, and what does not The extension overrides one thing: the page your browser draws when you open a new tab. It does that through the standard new-tab override that Chrome and Firefox both support. Everything else stays where it was: - Your bookmarks stay in your browser's bookmark store. The dashboard reads and edits them through the browser's own bookmarks API, so nothing is copied into a second place. - Your bookmarks bar, the bookmark manager, and the star button in the address bar all keep working. - Your browser's own bookmark sync keeps working, because these are the same bookmarks it was always syncing. - Your home page and startup pages are untouched. A new tab is a different setting from either. Uninstalling gives you the default new tab back, with every bookmark still in place. Nothing has to be migrated back. ## What you get instead - **Folders as cards.** The dashboard lays your folders out in a masonry grid. Each card shows its bookmarks as a list or as an icon grid. - **Search by typing.** Start typing anywhere on the dashboard and a search palette opens, matching titles, URLs and folder names in the active source. - **Address-bar search.** In Chrome and Firefox, type `bb`, press Tab, then type, and search your bookmarks without opening the dashboard at all. - **A real organizer.** Drag bookmarks between folders, reorder them, rename, create and delete, in a tree editor rather than a context menu. - **Quick capture.** The toolbar popup saves the page you are on into the active source. - **Ten themes**, each with light, dark and system modes. You can see all of it before installing anything, on the [live preview](/preview/), which runs the real dashboard on demo bookmarks. ## Show one folder instead of all of them Most people's bookmarks are years of accumulation, and putting all of it on the new tab is not an improvement. The dashboard has a root folder for this: it draws only what is inside the folder you choose. Set it from the control next to the source switcher in the header. There is also **Settings → Sources → Root folder**, which only appears while Browser bookmarks is the active source. Choose **All bookmarks** to go back to everything. A folder like `Daily` or `Personal Bookmarks` with six or seven subfolders makes a far better new tab than a dump of everything you ever saved. The rest stays in your browser, searchable, just not on screen. Each source remembers its own root folder, so switching sources does not reset it. ## Browsers **Chrome and Firefox** both support overriding the new tab, so the dashboard appears there on its own after you install, and a setup wizard starts on the first new tab. Chrome may ask you to confirm the change before it takes effect. See [Install the extension](/docs/start/install/). **Safari** does not let extensions override the new tab at all, and gives them no access to Safari's bookmarks either. The Safari build is coming soon and works differently: you open the dashboard from the toolbar popup, and its bookmarks come from a [Markdown vault](/docs/daemon/). [Safari](/docs/start/safari/) explains the details. ## If a new tab ever fails to load Open **Settings → General** from your browser's extensions page and turn on **Safe mode**. The new tab then opens without drawing bookmarks, so you can change the root folder or the source that caused the trouble, then turn Safe mode back off. ## Putting it back Remove the extension from your browser's extensions page. The new tab returns to the browser's default immediately, and your bookmarks are untouched, because they were never moved in the first place. ## Get started - Install for [Chrome](https://chromewebstore.google.com/detail/nflojekghnganlcjncbepnnnkgakghif?utm_source=website) or [Firefox](https://addons.mozilla.org/firefox/addon/bookmarks-but-better/?utm_source=website). - Try the [live preview](/preview/) first, with demo bookmarks and no install. - Coming from another tool? See the [Pocket](/docs/guides/pocket-alternative/), [Raindrop](/docs/guides/raindrop-alternative/) and [Toby](/docs/guides/toby-alternative/) guides.