Diffie is a browser-first, local-first PostgreSQL snapshot diff tool.
Its job is narrow:
- accept two PostgreSQL snapshots
- parse row data from
INSERT INTO ... VALUES - diff tables, rows, and cells
- present the result clearly on screen
- print cleanly from the browser
If future work makes Diffie broader but less trustworthy, clarity and correctness win.
- PostgreSQL snapshots only
- browser runtime first
- local processing only
INSERT INTO ... VALUESis the primary supported input- small snapshot files first, typically under 5 MB
- table / row / cell diffing
- automatic key detection with positional fallback
- print-friendly output
- MySQL
- JSON input
- Laravel/backend work
- live database connections
- server-side processing
- broad “all SQL dialects” ambitions
- feel like a tool, not a marketing app
- compact, efficient, and low-friction
- calm dark theme with terminal sensibility
- visual style closer to
slowlife-appthan heavy/brutalist chrome - filters and actions should be directly visible
- parsing/diff actions must be predictable and non-confusing
- print mode is a first-class view, not an afterthought
- keep parser and diff logic pure and testable
- prefer explicit failures over silent incorrect parsing
- keep UI thin around the core logic
- use Web Workers for parse/diff work in the browser
- broaden supported SQL only with tests and clear intent
- every parsing bug should add a regression test or fixture
Current matching priority:
- detected stable key such as
id - detected stable key such as
uuid - table-specific singular key such as
order_id - positional fallback with warning
Positional fallback is acceptable only when no stable key is available, and the UI should make that obvious.
The current implementation already has:
- PostgreSQL
INSERTparsing - diff engine core
- worker-based parse/diff execution
- paste, upload, and drag-drop input
- parsed preview
- diff summary and per-table drilldown
- print stylesheet
Local commands:
pnpm testpnpm lintpnpm typecheckpnpm buildpnpm verify
CI runs pnpm verify. The badge above should reflect current workflow status.
When making changes, preserve these priorities:
- correctness over breadth
- simplicity over abstraction
- tool clarity over decorative UI
- local privacy over convenience features
- maintainable scope over speculative expansion
README.md— this constitution and product guardrailsCONTRIBUTING.md— setup, structure, workflow, and testing notesROADMAP.md— implementation status and next steps