Go to file
Levi Neely 6dd103482b Fix n/ directory listing when note count exceeds 9P read buffer
readDir was slicing the serialized dir entry bytes at the raw byte
boundary, splitting entries mid-stream. The plan9 client's dirUnpack
stops on a truncated entry, so 9pfuse received nothing usable.

Fix readDir to return only complete entries per read, as required by
the 9P spec. Also warn-and-skip on ExtractMetadata errors in LoadAll
instead of aborting the entire directory walk.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-21 21:34:15 +01:00
internal Fix n/ directory listing when note count exceeds 9P read buffer 2026-03-21 21:34:15 +01:00
pkg Initial commit: denotesrv 9P server for denote notes 2026-03-20 16:46:47 +01:00
.gitignore Initial commit: denotesrv 9P server for denote notes 2026-03-20 16:46:47 +01:00
LICENSE Initial commit: denotesrv 9P server for denote notes 2026-03-20 16:46:47 +01:00
README.md Update plan9port branch name 2026-03-20 17:37:10 +01:00
go.mod Add event stream via pubsub 2026-03-20 18:00:34 +01:00
go.sum Add event stream via pubsub 2026-03-20 18:00:34 +01:00
main.go Add DENOTE_9MOUNT env var for mount path 2026-03-20 17:18:14 +01:00
mkfile Initial commit: denotesrv 9P server for denote notes 2026-03-20 16:46:47 +01:00

README.md

denotesrv

9P server for denote notes.

Dependencies

  • plan9port (wayland-9pfuse-truncate branch required for 9pfuse truncate fix)

Installation

mk install

Usage

denotesrv start       # background
denotesrv fgstart     # foreground
denotesrv status
denotesrv stop

On startup, the server automatically mounts at ~/mnt/denote via 9pfuse. Use -mount /path to override the mount location.

Environment

Variable Default Description
DENOTE_DIR ~/Documents/notes Notes directory
NAMESPACE /tmp/ns.$USER.:0 9P namespace

9P Filesystem

denote/
  ctl         (write) filter <query>, cd <path>, refresh
  event       (read)  Event stream
  index       (read)  Note metadata (respects filter)
  new         (write) Create note: "'title' tag1,tag2"
  n/
    <id>/
      backlinks (read)  Notes linking to this note
      body      (rw)    File content
      ctl       (write) 'd' to delete
      keywords  (rw)    Tags
      path      (rw)    Filesystem path
      signature (rw)    Note signature
      title     (rw)    Note title

See Also