Docs

Get your app online.

Create a project, deploy it from GitHub, a folder or your AI assistant, and add the database and storage it needs.

Quickstart

  1. Create a project. Sign in with your invited account and choose Add new project.
  2. Add what your app needs. In Settings → Resources enable PostgreSQL or persistent storage. In Settings → Environment variables add your secrets.
  3. Deploy. Choose Deploy and import a GitHub branch or upload a folder. You can also ask your AI assistant to deploy.
  4. Open it. Follow the build in Deployments. When it is ready, your app is live at its HTTPS address.

Deploy from GitHub

Connect GitHub from the Deploy page and choose which repositories localhost may read. The app asks only for read access to code and metadata; it cannot write to your repositories.

  1. Pick the GitHub account, repository and branch.
  2. Optionally set an application directory, such as apps/web.
  3. Choose Deploy branch. Each deployment records the exact commit it builds.

Automatic deployments

Turn on automatic deployments and save one production branch. Every push to that branch builds and publishes the newest commit. Pushes to other branches, tags and redelivered events are ignored. Automatic deployments are off until you enable them.

A failed build never replaces the running version. Production keeps serving the last successful deployment and you get the build log.

Upload a folder

No repository yet? On the Deploy page, choose your project folder. The dashboard reviews it in your browser before anything is sent: you can see the included files and what was left out.

Environment files, private keys, Git metadata and dependency or build folders are excluded automatically. Never upload .env or .npmrc files — add those values as environment variables instead.

Connect your AI

localhost has a remote MCP server at https://localhost.tr/mcp. Your assistant signs in with OAuth in your browser using the public client localhost-mcp. There is no secret to copy.

Claude Code

claude mcp add --transport http --client-id localhost-mcp --callback-port 19877 localhost https://localhost.tr/mcp
claude mcp login localhost

Your assistant can list and create projects, read and change resource settings, deploy uploaded source or GitHub branches, and follow build status. It works only with projects in your account. Never put a password or token in a prompt.

Claude Code is tested end to end. Other clients need remote HTTP MCP and a registered OAuth client; automatic client registration is not available yet.

Frameworks & packages

FrameworkStatus
Next.js (App Router, JavaScript or TypeScript)Available
Node.js servers — Express, Fastify, Hono, NestJSAvailable
Static sites — Vite, Astro, plain HTMLAvailable
React Router, Remix, SvelteKit, NuxtPlanned
Dockerfile — any app that serves HTTPPlanned

Frameworks are detected from your source. Public npm dependencies, including dev and optional dependencies, are installed inside an isolated build machine through a registry-only connection. Include an npm v3 package-lock.json for a reproducible install; without one, packages are resolved with npm install. For Next.js, next.config.js and next.config.mjs are supported.

Node.js

A project with a package.json that is not Next.js or a static generator is a Node.js app. Dependencies are installed, your build script runs if present, devDependencies are then removed, and the app starts with your start script (or main, server.js, index.js). Listen on process.env.PORT and 0.0.0.0. The app is live once / answers with any status below 500, so APIs that return 404 on / work.

Your app runs on a read-only filesystem: write to /tmp (128 MB, in memory) or to the persistent /data disk. Apps cannot call the internet yet (external APIs, SMTP, OAuth providers), and packages that compile native code or download binaries during install are not supported. If a tool such as tsx starts your app, keep it in dependencies.

Static sites

A folder with index.html is served as is. Projects using Vite, Astro, Create React App, Parcel, Eleventy or Gatsby are built and the first of dist, build, out, _site or public with an index.html is published. /about serves about.html or about/index.html; a 404.html is used for missing pages. Single-page apps (one HTML file) fall back to index.html for client-side routes.

localhost.json

Optional, at the project root, to override detection:

{
  "framework": "static",        // "nextjs" | "node" | "static"
  "buildCommand": "npm run build:site",
  "outputDirectory": "site",    // static sites
  "spa": true,                  // static sites: index.html fallback
  "startCommand": "node api.js" // Node.js apps
}
In a monorepo, set the application directory to the app folder; it is built on its own, without the root lockfile or sibling packages. Not supported yet: private registries, Git or file dependencies, npm workspaces, server rendering for SvelteKit, Remix, Nuxt and Astro, submodules, installers that download binaries from other domains, native toolchains and next.config.ts.

Environment variables

Add variables in Settings → Environment variables. Values are encrypted and never shown again. Saving an existing key updates it. Each deployment keeps a snapshot of the settings it was built with; deploy again to apply changes.

Available duringWho can read it
Runtime onlyYour running application. Not dependency installation or builds.
Build onlyInstallation and compilation, including your dependencies’ scripts.
Build and runtimeBoth.

Public variables such as NEXT_PUBLIC_*, VITE_* or REACT_APP_* end up in the browser bundle and need build or build-and-runtime scope. Static sites only receive build variables. DATABASE_URL, STORAGE_PATH, PORT and NODE_OPTIONS are managed by localhost and cannot be overridden.

Database & storage

PostgreSQL

Enabling a database creates a dedicated PostgreSQL 17 database and login for the project and injects DATABASE_URL at runtime. Use any client, such as pg. Each project gets up to 10 connections with query time limits. The database is not reachable during builds — run migrations from your application.

Storage → Database shows tables, columns and records. You can edit and delete rows that have a primary key; edits made to a row that changed in the meantime are rejected.

Persistent storage

A 1 GiB disk is mounted at /data and exposed as STORAGE_PATH. Files there survive deployments and restarts. Storage → Files lets you browse, upload and download files up to 2 MiB, create folders and delete single items.

Backups, replication and recovery from host loss are not provided in this preview. Keep your own copy of anything important.

Releases & rollback

Every build runs in its own Firecracker microVM. The output is checked, started in a separate runtime microVM and must pass a health check before traffic moves to it. If any step fails, the current version keeps serving.

Open a deployment in Deployments to read its build output, cancel it while it is pending, or restore an earlier successful release with its original settings. Apps with persistent storage restart briefly when a new version goes live.

Rolling back code does not undo database migrations or file changes your application made.

Preview limits

localhost is an invitation-only preview. These are current limits, not paid plans.

Projects3 per account · 2 pending deployments · 20 deployment records per project
SourceUp to 1,000 files and 8 MiB
Build2 vCPU · 3 GiB memory · 10 minutes
Runtime1 vCPU · 1 GiB memory per app
DatabasePostgreSQL 17 · 10 connections · no hard size quota yet
Storage1 GiB at /data · 2 MiB per dashboard transfer
AddressAutomatic HTTPS at *.dev.localhost.tr

Coming later: custom domains, more frameworks, outbound network access for apps, public sign-up and billing. Today all workloads run on a single host.