heiss41 downloadsSearch and link your Linkwarden bookmarks, archive URLs, show their highlights beside your notes, and insert highlights as quotes.
The plugin is not officially from the Linkwarden project and has nothing to do with its development.
The Linkwarden plugin for Obsidian. Search and link your saved links, archive URLs to Linkwarden, and show their highlights as a living reading aid next to the active note — without materializing them as files. Guiding principle: read in Linkwarden, write in Obsidian.
No sync engine, no merge/clobber problem. A link is bound to Linkwarden by a
single Markdown link whose target is the instance deep URL (<base>/links/<id>);
the id in the href is the binding (single source of truth).
Once the token and base URL are set (see Setup):
^lw-<id>). Highlight colors map to callout types and
tags (configurable in settings).All commands appear in the palette prefixed with Linkwarden:. The interface follows Obsidian's display language — English and German ship today, with English as the fallback for any other language.
/api/v1/search); picking a result inserts a Markdown link bound to
that link's stable id. The visible link text stays as a readable fallback.POSTed to Linkwarden and the body link is
rewritten to the binding deep URL. Server-side de-duplication is respected
(enable preventDuplicateLinks in Linkwarden).^lw-<id>). A configurable color→callout/tag map turns
your highlight colors into searchable vault semantics.https://cloud.linkwarden.app) — change it
if you self-host. The token is stored via Obsidian's SecretStorage
(device-local, OS-backed) — it never enters the synced vault. Requires
Obsidian ≥ 1.12.7; on Linux an OS secret backend (kwallet/libsecret) must
be available./links vs /preserved), the color map, and the cache TTL.This plugin communicates with exactly one remote service: your Linkwarden instance (Linkwarden Cloud by default, or your self-hosted URL).
Bearer
header), the search queries you type in the picker, the URLs you choose to
archive, and the ids of links whose highlights the panel loads. All requests go
through Obsidian's requestUrl.npm install
npm run dev # esbuild watch → main.js
npm run build # typecheck + production bundle
npm test # vitest (unit tests for all pure logic)
npm run gen:api # regenerate src/api/schema.ts from openapi/linkwarden.yaml
The typed API layer is generated from Linkwarden's official OpenAPI spec
(vendored at openapi/linkwarden.yaml) via
openapi-typescript into
src/api/schema.ts. A unit test (tests/openapi-drift.test.ts) fetches the
upstream spec and fails if it has drifted from the vendored copy — the signal to
run npm run gen:api and re-vendor. The runtime client (src/api/client.ts) is
a thin, dependency-injected wrapper over Obsidian's requestUrl (which bypasses
CORS at the Electron level), so it stays unit-testable with a fake HTTP client.