A local-first, AGPL-licensed bookmark manager. Imports what you already have, dedupes deterministically, and stays useful offline. The server is an optional relay, never the authority.
Topics: bookmarks self-hosted rust local-first crdt bookmark-manager agpl cli linkmarks
LinkMarks is a single Rust binary that:
- Imports Chromium-style
BookmarksJSON (google-chrome,Brave,Edge,Arc,Vivaldi,Opera). - Lists bookmarks deterministically (
table/json/yaml). - Exports to Netscape HTML (the universal interchange format).
- Dedupes locally by canonical URL with a human-readable conflict report.
That's it for v1. Everything else is in the ROADMAP and is opt-in, not required.
These are decisions, not gaps. Adding them later requires a CONCERNS.md entry.
- No server-authoritative mode. The server is relay-only.
- No mandatory telemetry. No phoning home. Ever.
- No silent link-health checks. We never visit your URLs to "see if they're alive". That leaks intent and costs you money.
- No AI-without-cost-gate. No embeddings, no LLM-suggested tags, no auto-summary. If these ever ship, they must declare per-action cost before running.
- No Docker-only deploy. Single static binary, systemd-friendly.
- No closed-source build. Source == release.
Pre-built binaries will land on the GitHub Releases page once v1 ships. Until then:
git clone https://github.com/LOUST-PRO/LinkMarks
cd LinkMarks
cargo build --release
./target/release/linkmarks --help# Import a Chromium Bookmarks file
linkmarks import --source=chrome --path ~/.config/google-chrome/Default/Bookmarks
# List deterministically
linkmarks list --source=chrome --format=table
# Export to Netscape HTML
linkmarks export --format=netscape --output ./bookmarks.html
# Dedupe with a conflict report (dry-run by default)
linkmarks dedupe --source=chrome
linkmarks dedupe --source=chrome --apply # explicit apply tokenExit codes:
| Code | Meaning |
|---|---|
| 0 | OK |
| 1 | Partial / source error |
| 2 | Invalid args |
| 3 | Dedupe conflicts found |
Dual: AGPL-3.0-or-later (open source) + Commercial license for entities
that need to skip the AGPL §13 network-use clause. See LICENSE and
LICENSE-COMMERCIAL.md. Contact: opensource@loust.pro.
See docs/ARCHITECTURE.md for the workspace
tree, crate responsibilities, and the domain model. Decisions live
under docs/decisions/ as ADRs (MADR template).
Issues and PRs welcome. Read CONTRIBUTING
and the CONCERNS file before opening a PR that
adds scope.
David Alejandro Mireles Llamas — @loust