Why June
Vision
Software now has two audiences — people and agents — and two authors: people and agents. June is designed for that world end to end.
- Serving agents: one
route()= HTML + JSON + markdown. llms.txt, sitemap, MCP derive automatically. Tools are intent-shaped, policy-checked — never auto-CRUD. - Agents as principals: an agent calling
/mcpcarries a user's credential and hits the SAME authorization check the UI does —defineAction.run(input, ctx)is one gate for both. - Built by agents: conventions a coding agent can't misread, plain SQL migrations, and an oracle for every artifact.
Core design philosophy
No glue layer. Declare auth, resources, and your actions in one model; June wires the adapter, mounts the endpoints, and bridges identity into the agent surface. June is opinionated on purpose — these choices are made for you:
- Convention over configuration. Presence is the API: a
page.tsxis a route, anapp/_client.tsenables hydration, acontent/*.mdjoins the manifest. Nothing asks to be wired. - Don't repeat yourself. One
route()is four surfaces; onedefineAction()is a UI action, an MCP tool, and a manifest entry; one render core serves dev and prod. Nothing drifts because nothing is duplicated — even our benchmark numbers render from a single registry. - Defaults you remove, not assemble. The agent surface ships ON;
june.config.tsexists to turn things off. An undeclared resource doesn't exist; an unused one compiles away. - Blessed picks over option matrices. One recommended auth, one default data layer — each swappable, none left as homework.
- Zero client JS until a subtree earns it. Interactivity is an explicit island; navigation belongs to the browser (Speculation Rules, View Transitions), not a client router.
- The SQL you read is the SQL that runs. Plain SQL migrations — no DSL for a human or an agent to misread.
- Markdown is source, not output. The
.mdsurface serves your authored bytes; nothing is reconstructed from rendered HTML.
Where we are
June is 0.0.x — the spec is still being drafted, and APIs will change. Benchmarks are dev-machine numbers with published methodology. The owned Rust+V8 runtime and server-reactive live RSC are experimental roadmap items — today's host is Bun/Node, deploying to Workers.