Repository navigation
linXiv v0.5.2
v0.5.1 was about adding more trust to your shared libraries.
v0.5.2 is a minor update to v0.5.1.
We have received specific guidance on how to handle arxiv's different rate-limits. We are now aware that a 429 with the body text "Rate exceeded" indicates that the arxiv API is down for all. This is reflected in the 429 error text, and a new setting is available to tell arxiv who you are (If you so choose) to help them distinguish between bot and real human traffic.
Included:
- a full CRDT history journal so you can see, attribute, and undo every change,
- a headless server you can run on a box or in a container as an always-on node. connected through iroh.
- Managed/scoped permissions for the server and an additional for the shared projects.
CRDT history journal
Every project and the library now keep an Automerge journal alongside the database (SQLite stays authoritative), so shared work has a real change log instead of just "latest state wins".
- History dialog: browse the log per project or library-wide, with word-level diffs, entity links, and an actor filter.
- Undo and restore:
/api/historyexposes log, diff, and restore, and deletions propagate correctly across sync instead of resurrecting on merge. - Attribution: every write is stamped with a device actor. Members are named with paired actors, and remote writes are journaled under the member's endpoint id, so "who changed this" has an answer in shared projects.
- Roles to match: shared projects gain a co-admin role matrix and admin transfer, with a role-aware members panel in the app and an admin marker on E2EE docs.
Headless server
The Tauri-free backend now lives in its own linxiv-server crate, and linxiv-headless is the whole linXiv backend without a window: the complete /api/* router over HTTP, share routes included, plus the iroh peer and background sync. No webkit or gtk in the build. It shares the on-disk layout with the desktop app, CLI, and MCP server, so they can all point at the same library.
Prebuilt images now publish to GHCR on every release, and the package is public — no registry login needed. To run one (podman or docker):
# 1. Pull the image (tags are unprefixed: 0.5.1, or latest for the newest stable)
podman pull ghcr.io/linxiv-dev/linxiv-headless:0.5.1
# 2. Start the node with an API token and a persistent data volume
export LINXIV_API_TOKEN="$(openssl rand -hex 32)"
podman run -d --name linxiv \
-e LINXIV_API_TOKEN \
-e LINXIV_P2P_PASSPHRASE=change-me \
-p 127.0.0.1:8000:8000 \
-v linxiv-data:/data \
ghcr.io/linxiv-dev/linxiv-headless:0.5.1
# 3. Verify it's up
curl -H "Authorization: Bearer $LINXIV_API_TOKEN" http://127.0.0.1:8000/api/status- Fails closed: a non-loopback bind without
LINXIV_API_TOKENrefuses to start; authenticated requests use a bearer token. - Remote query mode: members can query the node over
linxiv-api/1on the share endpoint, gated by their role, with a paced lane for PDF bytes. - Always-on niceties: minimal web admin page at
/admin,GET /api/statusaggregate, relay access allowlist, the full-text worker runs in the headless bin, and the home feed polls on a settable cadence (headless_feed_poll_minutes). - Ops: persistent JSONL access log under
/datawith rotation, and system sleep is inhibited by default (LINXIV_ALLOW_SLEEP=1opts out).
See docs/headless for the run guide and a compose file.
Also in this release
- Graph performance: f32 typed-array charge and collide forces.
- PDF highlights survive CSS zoom on Linux.
- Share dialog: create a project inline, descriptions and sync badges on share cards.
- MathJax 4, composite paper index, and unique author links.
Full Changelog: v0.4.1...v0.5.2
What's Changed
- feat/qol fanout by @jakeuribe in #291
- fix/pdf preview flash by @jakeuribe in #292
Full Changelog: v0.5.1...v0.5.2
