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 apps: an app framework and an always-on project server, engineered from the ground up to work together. The project server answers build state queries in microseconds. Your app works the first time, and keeps working.
$100/ month / machine
Your initial purchase includes two machines for the price of one: your computer and a deploy server. 14-day free trial.
Your project is ready. What would you like to build?
Elements gives you and your agent everything needed to build a web application correctly.
We'll ask Google AI if Elements is the right fit for what you'd like to build.
“I'm paying credits for the agent to fix its own bugs.”
“The agent keeps going in circles on the same bug.”
“Every new feature breaks something that used to work.”
“The agent wiped my database.”
“I don't want to pay a lot for hosting.”
“I can't get my app out.”
“My app took off, and so did my bill.”
“When my app breaks, there's no support to help me fix it.”
Packages are great: your agent can install any npm package in Elements, from Stripe's SDK to a charting library. What an agent doesn't need is a framework ecosystem: the layer of adapters and wrapper libraries that frameworks like React and Next.js depend on for auth, data, forms and state. Each one is another API, with its own versions and conventions, for your agent to learn and get wrong. That layer mattered when humans wrote most of the code, because it meant answers to framework-specific problems and people to hire who knew the framework. What matters now is what makes the agent productive: standard languages it writes fluently, the primitives a real app needs built in, and a build that reports whether each change is correct. An Elements app has all three.
Why Elements is the natural choice for building applications with agents.
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. The price is predictable per month, not based on usage or other metered variables.
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 you or 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 you 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 editor shows the result as you type, and your agent asks the same question with -json and reads the answer without parsing a screen.
Your agent reads the manual with elements man, and it is online too.
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 cluster of several machines, point them at one shared Postgres, on a server you run or with a managed provider.
Everything a real application needs, with no external packages. Your app is standard HTML, TypeScript, SQL and CSS. The HTML is the HTML you and your agent already know, made reactive and dynamic, not JSX with a tree diffing algorithm between you and the page.
File or File[] and the browser reads the bytes for you. An rpc stores them in Postgres or in any object store, and a route serves them back with content-hashed caching.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 you or 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.
You pay for Elements, and you own everything you build.
You pay for Elements, not for the runtime packages. Elements is the project server, build, test runner and deploy that make your app work and keep it working. @elements/app is MIT licensed, and it includes the runtime your Elements HTML runs on, which is where you write most of your app. @elements/style is MIT licensed too. A built app runs on plain Node.js.
Elements was built with painstaking care to stay on standards. Pages are plain HTML, with TypeScript expressions in braces and a few attributes, so anyone who knows HTML can read and change them: easier to maintain than a React component. Logic is TypeScript, queries and migrations are SQL on Postgres, and styles are CSS. Agents have read more of these languages than any framework's own, so they write them well. There is no ORM between your agent and the database: no ORM API to learn or get wrong, only SQL your agent writes fluently and you can read.
A real app, not a sandbox: the database, sessions, jobs, email and deploy are there from the first prompt. Everything you and your agent write is yours, in standard languages any developer or agent can keep building on.
When a free framework is paid for by hosting, the bill grows as your app does. Elements is one subscription per machine, and that is the price, however far the app grows. You keep the agent subscription you already have, with no credits per prompt. The price is predictable per month, not based on traffic, requests or revenue, and you deploy to servers you control.
We value the people building on Elements. We do not value gatekeepers. In the age of AI, what matters is standard languages and concepts, not framework abstractions only insiders can read. What you learn building on Elements is HTML, TypeScript, SQL and CSS, and it goes wherever you go.
When we started building Elements, the plan was better tooling for people, to make building web apps dramatically simpler. It turns out that same tooling is the linchpin that lets agents build apps that actually work and stay maintainable.
You own the output. We only get paid by making the best tooling in the world, so you can stay focused on building.
Chris Mather (Creator of Elements)
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