An Elements app, running on your machine.
An agent can build a complex app extremely quickly, because everything it needs is already here. Features like realtime pubsub, database migrations, sessions and authentication all ship with Elements.

Elements is the integrated app environment for building and deploying web apps. It's a project server, app framework and build tooling, engineered from the ground up to work together. The project server is always running, so your agent can check its work instead of guessing. Prototype quickly. Ship the same code to production.
Try it: a working app in seconds.
You bring the agent. Elements brings the project server, build tooling, app framework and deployment. The result is correct code the first time, and still correct a hundred agent sessions later. Keep building on your own machine, then deploy to commodity hardware in seconds. Nothing meters how much you build.
An agent can build a complex app extremely quickly, because everything it needs is already here. Features like realtime pubsub, database migrations, sessions and authentication all ship with Elements.

The build has already run by the time your agent asks: type check, program analysis, migrations and tests. Your agent reads the diagnostics and corrects the code before reporting the work finished.

One server per project. The first command starts it and everything after connects to the same one: elements build, elements test, elements install, and your editor over LSP. It holds the build state in memory, so checking costs microseconds instead of seconds, and your agent can check after every change rather than at the end.
Save a file and the rebuild and the full type check are already done, because the build state never left memory. Your agent asks the same question with -json and reads the answer without parsing a screen.
Read the config, install packages, crawl, type check, run program analysis, emit, migrate the test database, run the tests, collect diagnostics, migrate the app database, release atomically, hot reload connected browsers.
Packages install as part of the build, automatically. It is npm compatible. Install one at version local and it resolves from your package search path, gets watched like the rest of the project, and ships on deploy. No monorepo, no file links.
A migration is a .sql file. No ORM, no migration DSL, nothing to learn on top of sql you already know, which is also why an agent writes and edits them correctly, and why you can always run one directly against a database if you need to. Write one and it is applied on save, to the test database before the tests run and to the app database after. Nothing to remember, nothing to run.
The test server runs several processes at once, so tests execute in parallel against the freshly migrated test database. Those processes take part in hot module reload, and a test is rerun when its dependencies change, so a typical test takes a few milliseconds. Fast enough that they stop being the thing you write to be compliant and start being how you find out what you broke.
A database call reachable from the browser does not compile, so it never ships. The report carries the fix and the path that got there.
Any Ubuntu box you can ssh into. Elements builds the release, ships it, runs the migrations and hot reloads the app. No server restart, no dropped connections. A load balancer and TLS certificates come with every deploy machine.
A deploy is your project server talking directly to the one on each machine. Yours sends the source graph it already holds, theirs diffs it against the graph it already holds, and only what changed crosses the wire. Both ends are already hot. No queue behind a million other people's builds, no container image to assemble and push, and nothing rebuilt from scratch on the far side.
Every machine runs its own load balancer and they find each other automatically. To grow the cluster, add the IP address to config.jsoc and deploy. Whichever machine takes a request balances it across the cluster, with failover to the ones still answering.
Set a domain, point DNS at the machine, open 80 and 443. Elements issues the certificate through Let's Encrypt on the first request and renews it before it expires. Adding a domain or rotating a certificate takes effect without dropping connections.
Elements installs and manages Postgres on every machine, so a single-machine app has a database with nothing to set up. For a bigger app, or a cluster of several machines, point Elements at a hosted Postgres instead.
Everything a real application needs. No external packages required.
The difference between an app that works the first time and an afternoon of telling your agent to try again.
It matters more the larger the app gets. Save any file in the project and it is checked against every page, every route and every test, so your agent can change a schema in a codebase nobody remembers and find out immediately that it broke something three files away. Nothing regresses quietly, and an app you shipped six months ago is still one you can change with confidence.
I've been building Elements for more than a decade. When I started, the plan was to create better tooling for people, to make building web apps dramatically simpler. It turns out the same tools also make agents insanely more productive. It's finally here. I'd love to hear from you: hello@elements.dev.
Chris Mather
A project server, build tools, app framework and deployment, as one carefully engineered system. Built from the ground up to work together, on your own machines.
Install Elements