Person/codekiln/GitHub/logseq-gardener/Analysis/Fable/26/09/12/0658 ET Pick the parser first and let the language follow
Pick the parser first and let the language follow
- The Brief leaves the core language open between OCaml and Rust and asks for an architectural decision record. The parser decides it. garden-core is mostly a parser plus an index, so whichever faithful Logseq parser it links sets the language, the license, and how much of Phase 0 is already done.
- The Brief's premise holds. Logseq split the file version into logseq/og, whose commits since May 2026 are Electron and dependency bumps, and the DB documentation says file graphs are no longer supported in the browser.
The three faithful parsers, as of 2026-09-12
Parser Language License Maintainer Last push Notes mldoc OCaml AGPL-3.0 Logseq organization 2026-08-31 The parser Logseq itself uses. Has an outline-only Markdown mode in md_outline.ml. lsdoc Rust AGPL-3.0 one person 2026-09-01 From-scratch port checked differentially against mldoc. Exposes parse,refs, andparse_outlinewith source spans, consumed as a Cargo git dependency.tine-core Rust AGPL-3.0 the same person 2026-09-12 Tine's GUI-free crate: parse, serialize, model, indexing, queries, refs, and HTML publish over a standard Logseq graph folder. - Every faithful option is AGPL-3.0, and Looksyk is AGPL-3.0 too. The permissively licensed neighbor, markdown-oxide (Apache-2.0), is built around Obsidian vaults and its README does not mention Logseq. So garden-core will be AGPL-3.0 unless it writes its own parser, and the Brief's licensing bullet can be resolved today.
What Tine changes
- Tine is a Logseq-compatible outliner that reads and writes the same
pages/,journals/,assets/, andlogseq/config.ednas Logseq, with a pure-Rust core and an in-memory cache for search, backlinks, and queries. It ships static HTML export with offline search and a native Android build. It was created in late June 2026 and was last pushed today. - That is most of the "fast, faithful, local semantic engine" the Brief describes, already written, three months old, by one maintainer. My/Principle/Simplify/Fewer and Deeper says to use a credible abstraction layer instead of building the component again. My/Pref/Dev/Tool/Prefer Well-Maintained Projects asks for a credible maintainer and healthy maintenance together; here maintenance is very healthy and the maintainer is new and alone, which that page calls a decision point.
- Tine is a Logseq-compatible outliner that reads and writes the same
How to decide
- Run lsdoc's own differential harness against the encode garden. lsdoc reports exact matches, classified intentional deviations, and unclassified mismatches against real mldoc. Zero unclassified mismatches on the encode garden means lsdoc is faithful for this corpus and the Rust path is open with the parser already done.
- If lsdoc passes, build garden-core in Rust on lsdoc, and open an issue on Tine proposing that a CLI and an LSP share tine-core. Whether garden-core ends up as a crate beside tine-core or as a client of it is a conversation to have with the maintainer, and it would give Tine a second contributor.
- If lsdoc fails on constructs the encode garden uses, build on mldoc in OCaml. Logseq is rewriting core pieces in OCaml: datascript-ocaml, a persistent sorted set, an FSRS library, and the official Logseq CLI are all OCaml. That CLI compiles to JavaScript through Melange, targets DB graphs only, and runs a db-worker-node server with a lock file and a random port, which is the operational shape the Brief rules out. It is prior art for command vocabulary and for a
.mli-first spec style, and it is a reason to expect mldoc to stay maintained. - My/Pref/Dev/Tool/PL ranks Rust first. Treat that preference as the tie-breaker after the differential check; the Brief is right that it should not decide the question alone.
Dormant prior art to skip
- logseqlsp, written in Go, was last pushed in November 2023. Marksman was last pushed in February 2026 and is generic Markdown. Neither needs a compatibility review.