Puter

Code editor, spreadsheet and video windows on a desktop inside a browser tab, with a folder's menu open on Publish as website.

A windowed desktop in a browser tab, backed by storage and AI APIs

Puter puts a desktop in a browser tab, with windows, folders, a dock and an app store. The backend behind it keeps each account's files, runs a key-value store, forwards requests to AI models and hosts static sites. Web apps reach all of it through the Puter.js SDK, so they can save data or query a model without a server of their own. The project calls itself an open source "internet computer", and a hosted version runs at puter.com.

Backend-free apps, each fenced into its own folder

  • Puter.js comes from npm (@heyputer/puter.js) or a <script> tag, and works on an ordinary website, inside a Puter app, under Node.js or in a worker. Its APIs cover AI, auth, files, key-value storage, static hosting, serverless workers and peer-to-peer connections.
  • Sandboxed apps: each app gets ~/AppData/<app-id>/ and a key-value store of its own, and nothing else in the account is visible to it. Reaching a specific file, a folder or the user's email address takes a puter.perms.request call.
  • A subdomain for every site and app: users publish to subdomains Puter creates on demand, <name>.site.<domain> for sites and <name>.app.<domain> for apps.
  • AI on your own keys: on a self-hosted instance, a Claude, OpenAI or Gemini key in config.json switches that provider on, and the ai Compose profile adds Ollama, with tinyllama as the default local model.
  • Sign-in and sign-up controls: login through Google, Apple, Microsoft or any other OIDC provider, a proof-of-work captcha with no outside service involved, and disable_user_signup to stop new registrations.

Self-hosting means wildcard DNS and switching off the meter

A self-hosted Puter depends on five other services and a wildcard DNS record. The official docker-compose.yml, which the guide calls the closest thing to a production deployment you can manage yourself on a single host, runs Puter next to MariaDB, Valkey, DynamoDB Local, RustFS for S3 storage and Caddy. Puter routes every request by hostname (api., site., app., s3.), hence the wildcard record. A public instance also needs a wildcard certificate, issued through a DNS challenge the bundled Caddy image cannot complete alone. The README's npm start is development mode, backed by SQLite.

Self-hosted accounts inherit the free-tier budget of puter.com. Each account's serving cost (bytes sent, storage requests, AI tokens) is metered against the hosted service's free allowance: US$0.50 a month, roughly 2.5 GiB of downloads. Once that runs out, operations fail with a 402 error, and a self-hosted install has no paid plan to raise the cap. The self-hosting guide tells admins to set "unlimitedMetering": true.

On puter.com, users pay for their own consumption. Under what the project calls the User-Pays Model, people sign in to a Puter.js app with their Puter account and pay for the AI and storage they use beyond a free monthly allowance. The developer pays nothing for infrastructure, but every user of the app needs a Puter account.

The AGPL covers the code, not the name. Puter is licensed under AGPL-3.0, and TRADEMARK.md adds rules of its own: a redistributed modified version has to drop the Puter logos and say that Puter Technologies Inc. does not endorse it. Registering a domain name that contains the mark is off limits.

Ten releases have shipped in under four months. Version numbers follow the year and month, from 26.07 on 8 July 2026 to 26.10.1, the latest, on 25 October; the most recent commit is from 27 October 2026. MariaDB/MySQL and SQLite are the supported databases. PostgreSQL support was contributed by the community, is not used in production at puter.com, and can still fail on less common queries.