atproto utils for zig zat.dev
atproto sdk zig

docs: add roadmap and archive old plans

Changed files
+67 -1
docs
scripts
+4
docs/plan-expanded.md docs/archive/plan-expanded.md
··· 1 + # archived: expanded plan (partially implemented) 2 + 3 + This file is preserved for context/history. Current direction lives in `docs/roadmap.md`. 4 + 1 5 # zat - expanded scope 2 6 3 7 the initial release delivered string primitives (Tid, Did, Handle, Nsid, Rkey, AtUri). this plan expands toward a usable AT Protocol sdk.
+4
docs/plan-initial.md docs/archive/plan-initial.md
··· 1 + # archived: initial plan (out of date) 2 + 3 + This file is preserved for context/history. Current direction lives in `docs/roadmap.md`. 4 + 1 5 # zat - zig atproto primitives 2 6 3 7 low-level building blocks for atproto applications in zig. not a full sdk - just the pieces that everyone reimplements.
+40
docs/roadmap.md
··· 1 + # roadmap 2 + 3 + `zat` is a grab bag of **AT Protocol building blocks** in Zig: parsers, validators, resolvers, and small protocol helpers. 4 + 5 + This roadmap is intentionally short. If it doesn’t fit into one file, it probably belongs in issues. 6 + 7 + ## now 8 + 9 + - keep current APIs stable (0.x semver) 10 + - tighten docs/examples as real apps discover sharp edges 11 + - keep the “primitives, not framework” ethos 12 + 13 + ## next 14 + 15 + ### polish 16 + 17 + - improve docs around common workflows: 18 + - resolving handle → DID → PDS 19 + - making XRPC calls + parsing JSON 20 + - verifying JWTs from DID documents 21 + - add more integration tests that hit real-world edge cases (without becoming flaky) 22 + 23 + ### primitives 24 + 25 + - fill gaps that show up repeatedly in other atproto projects: 26 + - CIDs and common multiformats plumbing 27 + - richer `AtUri` helpers (safe joins, parsing variants) 28 + - more ergonomic JSON navigation patterns (still optional, no forced codegen) 29 + 30 + ## later (maybe) 31 + 32 + - lexicon codegen is still “probably a separate project” 33 + - higher-level clients/frameworks stay out of scope 34 + 35 + ## non-goals 36 + 37 + - token refresh/session frameworks 38 + - opinionated app scaffolding 39 + - “one true SDK” that tries to do everything 40 +
+19 -1
scripts/build-wisp-docs.mjs
··· 139 139 140 140 const mdFiles = (await exists(docsDir)) ? await listMarkdownFiles(docsDir) : []; 141 141 142 + // Copy all markdown under docs/ (including archives), but only include non-archive 143 + // paths in the sidebar manifest. 142 144 for (const rel of mdFiles) { 143 145 const src = path.join(docsDir, rel); 144 146 const dst = path.join(outDocsDir, rel); ··· 146 148 await cp(src, dst); 147 149 148 150 const md = await readFile(src, "utf8"); 149 - pages.push({ path: rel, title: normalizeTitle(titleFromMarkdown(md, rel)) }); 151 + if (!rel.startsWith("archive/")) { 152 + pages.push({ path: rel, title: normalizeTitle(titleFromMarkdown(md, rel)) }); 153 + } 150 154 } 155 + 156 + // Stable nav order: README homepage, then roadmap, then changelog, then the rest. 157 + pages.sort((a, b) => { 158 + const order = (p) => { 159 + if (p === "index.md") return 0; 160 + if (p === "roadmap.md") return 1; 161 + if (p === "changelog.md") return 2; 162 + return 3; 163 + }; 164 + const ao = order(a.path); 165 + const bo = order(b.path); 166 + if (ao !== bo) return ao - bo; 167 + return a.title.localeCompare(b.title); 168 + }); 151 169 152 170 await writeFile( 153 171 path.join(outDir, "manifest.json"),