The AI code editor that checks its own work

Every change, checkedbefore you apply it.

Composer plans a change and stages it as a diff. Before you apply it, Aperture checks that it parses, its imports resolve, the preview renders, and the tests pass. The tests run in your browser tab, free, in about a second.

Open source · MIT · try it with no API key in replay mode

harbor-api / src/store.ts
24  export function listTasks() {
25    const start = page * pageSize;
26    return tasks;
27  }
28
29  export function getTask(id: ID) {
30    const task = byId.get(id);
31    return task;

How it works

Three steps. Nothing writes until you say so.

01

Open a project

Drop a folder, a zip, or a public GitHub link, or start on the built-in demo project. node_modules stays out.

02

Ask Composer

Write it like you’d tell a teammate. Composer reads the code, posts a plan, and waits for you to click Build it.

03

Check, then apply

Edits arrive as staged diffs, each checked: it parses, imports resolve, the preview renders, the tests pass. Keep or skip file by file.

The edit

Specific snippets. Same run.

Composer does not dump a whole file. You get the plan, the exact lines, and the apply call — typed as they land.

src/store.ts
 export function listTasks() {
  const start = page * pageSize;
+ return tasks.slice(start, start + pageSize);
 }
 
 export function getTask(id: ID) {
  const task = byId.get(id);
- return task;
+ if (!task) throw new NotFound(id);
+ return task;
 }

The edit, as a search-replace you can read.

Why Aperture

Checked before you apply. Not after.

AI edits are easy to make look right. Aperture finds out whether they parse, resolve, render and pass before anything touches your files.

Checks

  • Parses
  • Imports resolve
  • Preview renders
  • Tests

The workspace

Your project. Your keys. Your apply.

Code search for the agent

Composer searches the project’s code before it plans, not just the open tab.

Design mode

Click an element in the preview to edit its CSS rule or the page’s theme tokens. No model needed.

Sandboxed tests

The test sandbox blocks all network access, so code the agent just wrote cannot reach the app or anything else.

Your models. Your keys.

Composer uses the model in the menu. If that key is missing, we tell you. Hosted Grok is a choice, not a fallback.

xAI Grok

api.x.ai

Hosted Grok, or bring your own xAI key.

OpenAI GPT

api.openai.com

Bring your own key under Settings → Models.

Anthropic Claude

api.anthropic.com

Bring your own key under Settings → Models.

Google Gemini

aistudio.google.com

Bring your own key under Settings → Models.

DeepSeek

api.deepseek.com

Bring your own key under Settings → Models.

Coming soon

Plans

Hobby is free today. Pro and Team are not available yet: there is no checkout, and nothing is charged.

Hobby

The editor and agents, with a small hosted allowance.

$0 / mo

No card required

  • Composer, Chat, and Inline — not gated
  • Plan before the first diff
  • 50 hosted Grok turns / month
  • One send = one hosted turn
  • One bring-your-own key
  • Session cap on by default
  • Download a zip of the project

Pro

Coming soon

Daily hosted Grok, unlimited agents on your keys.

$16 / mo

Not available yet. Nothing is charged.

  • 500 hosted Grok turns / month
  • Unlimited Composer on your GPT, Claude, Gemini, DeepSeek, Grok keys
  • You pick the model. No Auto
  • Tab ghost-text — fast model, 250 hosted / day
  • One background job
  • ACP: Claude Code, Codex, OpenCode, Grok Build in the same diffs

Team

Coming soon

Headroom for people who live in the agent.

$32 / mo

Not available yet. Nothing is charged.

  • 2,000 hosted Grok turns / month
  • Everything in Pro
  • Tab ghost-text — 600 hosted / day
  • Three concurrent background jobs
  • Usage dashboard and session caps

Paid plans are not available yet: there is no checkout, and no card is charged. Bring your own key

Questions

What is Aperture, in one sentence?+

An open-source AI code editor that checks its own work: Composer plans a change and stages it as a diff, and every staged change is checked before you apply it.

What gets checked?+

Four things, computed from the staged change: the changed files parse, every import in them resolves, the staged page renders without errors and is not blank, and the project’s tests pass. A check that could not run says why. It never shows as a pass.

Do the tests cost anything?+

No. npm run test runs in a sandboxed Worker in your browser tab, with no network access, in about a second. It covers node:test, Vitest and Jest. Projects that need a real Node can run in Vercel Sandbox instead.

Can I try it without an API key?+

Yes. Run it locally with APERTURE_MODEL=replay. Replay plays back recorded runs on the built-in demo project, harbor-api, and costs nothing. The commands are in the README.

Do I have to use your model?+

No. Pick Hosted Grok, or your own key for Grok, OpenAI, Anthropic, Gemini or DeepSeek under Settings → Models. Your own API usage is billed by that provider, not by us.

How do I take the code with me?+

Download a zip from the Open menu, the command palette, or ⌘S / Ctrl+S. Secrets like .env never enter the zip. Apply is not final — Undo this run restores the files from before that Composer send.

Is there a paid plan?+

Not yet. Paid plans are coming soon. Nothing is charged today.

Ready when you are.

Open the editor and fix a bug in the demo project. Add your own keys later if you already pay OpenAI, Anthropic, or xAI.