honest framework
Start here,
polyglot.
You think in patterns, not frameworks. The reading order below starts with the principles, then the type system that implements them, then each layer that builds on top. Code examples are available in Python, Ruby, Go, JavaScript, and PHP — use the language selector in the header.
Recommended reading order
01
02
03
04
05
06
07
08
09
Why should I care?
The bugs that disappear. The bugs that remain. The benchmark numbers, run yourself.
Honest Code Principles
The sixteen practices that make code honest. The prerequisite for everything else.
honest-type
A type is a Set. classify() is a pure function. The same tables run at static check, test time, and runtime — zero drift.
honest-persist
Schema as data. Migration as diff. Queries as data. No ORM. No migration file chain. No identity map.
honest-features
Feature flags as a handler table. The flag state routes to a handler — no if/else, no hidden branching.
honest-observe
One append-only event log for the entire stack. State is a projection over events, queryable at any point in time.
honest-test
Exhaustive enumeration from finite vocabularies. Not sampled — every valid input, every time.
honest-check
Static verification from dispatch tables. No type annotations required. The linter reads your vocabularies directly.
DATAOS
The DOM is the state. There is no other state. Every popular framework violates this. Honest Framework does not.
Also in the framework
honest-state
There is no 'the state.' Every declared piece of state has exactly one mutator — one place to look.
honest-parse
One place source becomes a tree. honest-check and honest-test read the same parse, so they can never disagree about a file.
honest-errors
Two raw payloads, one normalized report. What happens to it is a pure function of the environment, not the catch block.
honest-gherkin
A feature file is executable. Steps fold over an immutable context, so no scenario passes on another's residue.
honest-auth
Identity validated once at the boundary, passed inward as data. No link trusts an actor it read from the request.
honest-format
A value's element declares how it reads. The formatter is pure; the format name is a static reference the gate resolves.
honest-components
Atoms, molecules, organisms. Two mounting behaviors. One CSS namespace per component, for life.
honest-DOM
The DOM is the authority. The DATAOS primitives are pure; every boundary op is injected — no global document.
honest-page
A page is a declared set of surfaces, and every reference it emits resolves at the gate — no button wired to nowhere.
honest-alerts
Messages between actors. The mailbox is a projection over the event log, so a crash loses nothing.