A GitHub-Projects-style issue tracker that isn't siloed: the data is a
single plain-text .jsonl file you can put in git, email, or drop in a
shared folder, and the viewer is a static HTML/JS app with no server and
no build step. History is signed and append-only, so two people editing
offline merge back together automatically — the same trust model git
itself uses, applied to a spreadsheet-shaped tracker instead of code.
Open wigwag.html directly in a browser (file:// works fine — there's
no server dependency for local use) or serve it:
npm install
npm run serve # http://localhost:8933/
The very first open starts genuinely blank; use "+ New project" or paste
in a .jsonl export to load a real dataset.
wigwag.html, and only wigwag.html, is the app. It's one
self-contained, offline-capable file — markup, styles, and logic all
bundled together, nothing else required at runtime. That's the whole
point: copy this one file anywhere and it works. See docs/EDITING.md
before touching it directly, since its own source is bundled in a way
that isn't safe to hand-edit without following that workflow.
Everything else in this repo is infrastructure around that one file — shared logic it's built from, ways to drive it without a browser, and optional bridges to other systems. None of it is required to just use wigwag.
wigwag-core.js— the pure, environment-agnostic data/state logic (history-to-value derivation, merge, signing, the rule engine, GitHub/ Jira/Salesforce field pickers, markdown rendering,.xlsxexport) thatwigwag.htmland the CLI tools both need to produce identical results from.wigwag.htmlcarries its own hand-synced inline copy of the parts it needs (no build step ties the two together — see the comment at the top ofwigwag-core.js).
Two independent CLIs, both live and intentional — neither supersedes the other:
wigwag-cli.js— file-based, no browser, sub-second for most commands. Operates on any local directory'stracker.jsonl.wigwag-agent.js(thin CLI wrapper) +wigwag-client.js(the real interaction logic) — drives a real headlesswigwag.htmlinstance via Playwright. Used specifically for this project's own live backlog tracker (seeCLAUDE.md).
wigwag-cfd.js is a separate, standalone cumulative flow diagram
generator for a .jsonl export's full history — deliberately kept out of
the app itself (a once-in-a-while retrospective view, not a live-editor
feature).
wigwag-validate.js is a separate, standalone local schema/sanity
checker for a .jsonl export — run it before importing a file you're
unsure of (node wigwag-validate.js <path>). It runs the same parse/
derive pipeline wigwag.html itself uses (built on wigwag-core.js), so a
clean result means the file is actually safe to import, not just
well-formed JSON. There's no schema validation on import itself today, so
this exists as the local, pre-flight alternative.
Everything in bridges/ is an optional way to connect wigwag to
something external; wigwag.html works completely fine with none of them
running.
wigwag-matrix-host.html— embeds wigwag as a Matrix/Element widget (Room Scoped Widget Mode): a room's timeline becomes the shared, synced backing store instead of local files or GitHub.*-proxy.js/push-relay.js— small local relay servers backing GitHub/Jira/Salesforce/Google Drive integrations, OAuth, and web push. Each has a matchingnpm runscript (seepackage.json'sscripts).proxy-shared.jsis common plumbing the*-proxy.jsfiles share, not runnable on its own.
serve.js— a zero-dependency static server for viewingwigwag.htmloverhttp://localhostinstead of a rawfile://path (needed for browser APIs likeNotificationthatfile://can't use).src-tauri/— the optional Tauri desktop-app wrapper aroundwigwag.html.docs/FORMAT.md— the.jsonlwire format, read/write semantics, and merge rules. Load-bearing reading before touching the format.docs/EDITING.md— the required workflow for safely modifyingwigwag.html's own bundled source. Load-bearing reading before touching that file.tests/— the Playwright end-to-end suite (npm test).wigwag-core.test.jsandwigwag-cli.test.jsare plain Node unit tests for their respective modules, run directly (node wigwag-core.test.js).
npm test # full Playwright suite
node wigwag-core.test.js # core logic unit tests
node wigwag-cli.test.js # file-based CLI unit tests