linkmarks 2.2.1

Local-first, AGPL-licensed bookmark manager. CLI + interactive TUI for collecting, deduplicating, and exporting browser bookmarks offline. Works against a single SQLite store under ~/.local/share/linkmarks.
Documentation
# linkmarks

> Local-first, AGPL-licensed bookmark manager. Imports what you have,
> dedupes deterministically by canonical URL, stays useful offline
> against a single SQLite store under `~/.local/share/linkmarks/`.

`linkmarks` is the umbrella crate for the [LinkMarks](https://github.com/LOUST-PRO/LinkMarks)
workspace. It bundles the seven sub-libraries — the core domain model,
the CLI dispatcher, the terminal UI, and three browser-bridge parsers
— into one artifact so end users only need a single `cargo install` to
get the working CLI.

## What is it

LinkMarks is a bookmark manager that lives entirely on your disk. It
imports from the browser export formats you already have (Chrome/Edge
JSON, Firefox `places.sqlite`, Netscape HTML, jsonlz4 backups),
normalizes URLs to a canonical form, deduplicates deterministically,
and lets you browse the result in a terminal UI. No account, no
remote, no telemetry. The SQLite store at `~/.local/share/linkmarks/`
is the single source of truth.

The umbrella collapses the seven previously-individual crates into one
artifact. Sub-libraries remain installable via the umbrella's `path`
dependencies but no longer ship their own crates.io pages, so the
project presents as the single tool users actually see.

## Install

Install the CLI binary from crates.io:

```bash
cargo install linkmarks --locked
```

This produces the `linkmarks` binary in `~/.cargo/bin/`. The binary
embeds the full CLI dispatcher (from `linkmarks-cli`) plus the
terminal UI (from `linkmarks-tui`) and all three browser bridges
(chromium, firefox, netscape).

If you want to use LinkMarks as a Rust library — to embed the
canonicalization, the storage layer, or the TUI into your own crate
— add it to `Cargo.toml`:

```toml
[dependencies]
linkmarks = "2.2"
```

The umbrella re-exports `linkmarks_core` (domain model, storage,
canonicalization, dedupe) and `linkmarks_tui` (interactive terminal
browser) so consumers can `use linkmarks::{core, tui}` directly.

## Usage

Initialize the local store and import from any of the supported
formats:

```bash
linkmarks init
linkmarks import --from chrome ./Chrome-Bookmarks.html
linkmarks import --from firefox ~/snap/firefox/common/.mozilla/firefox/*/places.sqlite
linkmarks list
```

Launch the interactive terminal browser to skim and search:

```bash
linkmarks tui
```

Deduplicate deterministically (canonical URL + title + tag overlap)
with a conflict report:

```bash
linkmarks dedupe --report
```

Export to any supported format:

```bash
linkmarks export --to netscape ./my-bookmarks.html
linkmarks export --to json ./my-bookmarks.json --format json
```

Generate shell completions:

```bash
linkmarks completions bash > ~/.local/share/bash-completion/completions/linkmarks
linkmarks completions zsh  > "${fpath[1]}/_linkmarks"
linkmarks completions fish > ~/.config/fish/completions/linkmarks.fish
```

Every subcommand supports `--format json|yaml` for machine-readable
output.

## Architecture

The umbrella re-exports:

- `linkmarks_core` — domain model (`Bookmark`, `Tag`, `Collection`),
  SQLite storage layer, URL canonicalization, deterministic dedupe.
- `linkmarks_tui` — interactive terminal browser (ratatui +
  crossterm), with state-machine integration tests for every filter
  and sort variant.
- `linkmarks_cli` — clap-based CLI dispatcher. The umbrella binary
  delegates its `main` to `linkmarks_cli::run()`, so the CLI is
  single-sourced.
- `linkmarks_bridge_chromium` / `_firefox` / `_netscape` — the three
  interchange parsers. Browser-locked formats and standard HTML
  interchange both supported.

The seven sub-libraries are workspace members with `publish = false`
— they live in this monorepo and are bundled into the umbrella at
build time. There are no separate crates.io pages for the sub-libraries.

## License

Dual-licensed under **AGPL-3.0-or-later** (open source) or a
commercial license. See [`LICENSE`](https://github.com/LOUST-PRO/LinkMarks/blob/main/LICENSE)
at the repository root for the full text and the commercial contact
path.

SPDX: `AGPL-3.0-or-later OR LicenseRef-Commercial`