tendrl
io.github.limina1.tendrl
liminal π¦ liminal@gitcitadel.com Read, write and navigate knowledge on Nostr.
Sats Received
Underlying data available via MCP: app_zaps, app_releases.
Zap Count
Underlying data available via MCP: app_zaps, app_releases.
Releases
- Sep 22, 2026 0.15.1- feat(wm): tendrl-open-chat β SPC c / SPC b o a / M-x opens the assistant chat on both shells
- Sep 16, 2026 0.14.0- docs(kasten): decision β no OS keyring backend, nsec signing to be phased out - docs(plan): assistant-slot bunker verified live against nak bunker - feat(signing): bunker + Amber for the assistant slot β any identity, any transport - feat(signing): NIP-46 bunker as a signing source + named sign_as β plan Phase 2 - docs(kasten): decision β buffers re-read shared engine state on mount - docs(commands): headless GUI-drive gotchas for the context-set check - feat(context): engine-owned context set β plan Phase 1 - docs(plan): 5b β annotations buffer on the phone: one at a time, view switch in-header - docs(plan): D7 β the annotations table is one buffer with views; arrangement is the WM's - docs(plan): D9 β post-it treatment resolved: B structure, A skin, C narrow layout
Moreβ¦
- docs(plan): annotations table (D7) + create-annotation form (D8); load takes a spell - docs(kasten): feat-mcp, context-set-as-collection, load-on-demand; promotion = copy the index - fix(modal): read the event kind before onclose() nulls the prop - docs: insertions spec, engine-owned context set, assistant signing β design pass - fix(reader): restore the scroll position in scroll mode, not just the section - chore: bump version to 0.13.4 - chore: bump version to 0.13.3 - chore: bump version to 0.13.2 - chore: bump version to 0.13.1 - docs(kasten): where buffer state lives β decision zettel, reader/discussions/ui-patterns updates - feat(emacs): tendrl.el β fetch an event into a read-only buffer, raw JSON kept apart - docs: mirror the ngit issue tracker in bugs.org; ngit + headless-CDP recipes - fix(web): typed-but-unsent text survives a buffer switch - fix(reader): remember the reading place across buffer switches - fix(web): a highlight over a wikilink keeps the link - docs(nostrdown): formalize target forms β pointer / handle in the grammar, classification order, reach and tag per form - docs(nostrdown): spec revision 2 β roles not scopes, the modifier rule, revision notes - chore(release): v0.13.0 β NIP-42 relay auth - docs(nip42): plan, decision zettel, verify recipe, module map - feat(web): relay auth pill is real β NIP-42 opt-in, passive auth statuses - feat(nip42): relay auth β opt-in per relay, signed as the user, never prompted - feat(nostrdown): ref scope follows the target form β entity refs may leave the document - feat(emacs): M-x nostrdown entry point β turn the layer on and resolve now - feat(emacs): nostrdown-mode β {{ }} reference layer over Org/Markdown/AsciiDoc - Sep 12, 2026 0.12.2- feat(kasten): nanoid-pinned d-tags, direct relay publisher, NIP-19-aware MCP event lookup - fix(nostrdown): index the NIP-54-normalized d-tag as a {{ref:}} sibling handle - fix(event-menu): wrap the Actions row instead of overflowing the modal
- Sep 11, 2026 0.12.1- feat(reader): one-strip chrome β Β§ Β· paged|scroll Β· tree Β· T Β· M - feat(reader): NoteView β short-form events by id render as their own card, not a section - fix(discussions): follow relay hints when resolving a comment's root/parent - fix(spells): keep the result feed when leaving and returning to the profile buffer - feat(spells): local-first runs β sync newer at the head, load older at the foot - fix(android): _exit on activity destroy β exit()'s atexit pass aborted inside libonnxruntime
- Sep 11, 2026 0.12.0- feat(git): NIP-34 repositories β profile tab, repository buffer, issues + threads
- Aug 18, 2026 0.10.0- three columns - fix(server): bind the listener before constructing the engine - feat(mobile): drawer commands opens the SPC leader as a touch sheet - feat(relay): unified relay management UI β active/inactive toggle + modal opt-in - docs(zettel): fold the highlight-capture rework into the kasten - feat(relay): persistent active/inactive relay state (park/unpark) - feat(mobile): + highlight drawer button opens the general highlighter - feat(relay): make the search class actually serve search; flatten it to a row toggle - feat(highlights): context entry in the general highlighter - feat(relay): new default relays + mercury resolve claims, seed-version upgrades
Moreβ¦
- fix(highlights): center the capture card on both shells - fix(highlights): mobile-first capture β selectionchange trigger, bottom sheet, editable text, explicit NIP-84 context - fix(relay): bound websocket connect; make cold-cache feed pull non-blocking - Aug 15, 2026 0.9.1- feat(reading): per-device reading typography β face, size, measure, leading, justify - feat(wm): SPC w v vertical split and SPC w x window kill - perf(search): detach profile backfill, batch existence, drop to the index - feat(relays): route resolution through kind claims - feat(relays): per-relay resolve-kind claims (storage, API, editor) - docs(zettel): mark the relay row layout fix shipped - fix(web): wrap the relay panel's rows and header instead of shrinking them - docs(zettel): correct the media-query claim in the relay row fix - docs(zettel): spec kind-scoped relay routing + relay row mobile fix
- Aug 12, 2026 0.9.0- chore(release): 0.8.2 -> 0.9.0 - feat(nostrdown)!: global wikilinks resolve to kind-30818 only - perf(resolve): revert chunked backfill (relay-cost multiplier); concurrent wiki topic chunks - fix(android): retry the splash->engine navigate until the webview reports the engine origin - feat(stats): local DB inventory + count:kind / count:by - perf(reader): chunked wiki backfill with live progress; write-only apply - perf(embed): inference off the async runtime; per-tick budget for mobile - docs(zettel): A/B benchmark numbers for the perf sweep - docs(zettel): record the perf sweep's outcome in the eval report - perf(android): boot off the UI thread β splash-first WebView, capped LMDB map, small HNSW floor
Moreβ¦
- perf(reader): equality-guarded status poll, stable effect keys, parse/highlight caches, visible-first resolve - perf(resolve): batch resolve_refs β one tree + sibling index per publication per request - perf(sections): three-phase load_sections β concurrent local pass, one batched relay REQ, early exit - perf(relay): bounded-concurrent read fanout; one REQ per relay in backfill - perf(tick): dirty-set embed sync, gated sections pass, batched checks, cheap saves - build(release): [profile.release] in both workspace roots; drop forced APK-clean - docs(zettel): performance audit 2026-08 β eval report, fix-* issue layer, engine-substrate base - fix(release): generate the Android keystore as real JKS, not JDK-default PKCS12 - feat(release): Android release pipeline β signed APK on the engine version train - fix(release): tarball lives in target/portable/, not target/portable/release/; reject non-version positional args - fix(release): tarball lives in target/portable/, not target/portable/release/; reject non-version positional args - feat(release): publish-release.sh β GitHub releases from tag + CHANGELOG + portable tarball - Aug 11, 2026 0.8.2- docs(zettel): buffer-mgmt UI β PaneTabs overflow pattern, SPC b o, mobile bar/drawer rework - feat(search): tag-filter values match their NIP-54 slug automatically - feat(web): mobile β° menu-edge preference β right by default, drawer follows - feat(web): mobile drawer activity/wiki/history rows; β° moves to the bottom bar - fix(web): mobile bar slots are work + search, not chat + work - docs(commands): phone-browser demo of the SPA mobile shell over LAN - feat(web): buffer-management UI β overflow-aware tab strip, SPC b o chords, mobile drawer statuses - feat(scripts): make-android-icon.sh β lab SVG export β installed icon set - refactor(design): accordion sidebar for the icon lab - feat(design): icon-generation lab β identifier exports + settings loader
Moreβ¦
- feat(mobile): Android app icon from the phototropic decay mark