Your generated source code and your app's data belong to you. Every project admin can export an app at any time without contacting Forge64, and everything the archive cannot carry says so — inside the archive itself.
Export (available)
GET /api/projects/:id/export returns a single .zip. Project admin or
above (project:export); viewers are refused, because possession of the file
is possession of the app.
What is in it:
- Source code — the current version at the zip root (buildable as-is:
npm install && npm run buildworks from a fresh unzip), plus every earlier version underforge/versions/v<N>/. - The app's own database (
forge/appdata/) — the database your app runs against:dump.sql— every runtime row, as standard SQLINSERTs, read under every tenant context the export could discover (the project id plus the organization ids found in your own membership table);users.sql— your app's end users, including password hashes, session tokens and provider links, in standard SQL. Restoring this file is what lets your users keep their existing passwords on your own infrastructure. It is the most sensitive file in the archive: store it like a credential;schema.sql— the structure (tables, indexes, foreign keys, row-level security policies, triggers), reconstructed from the live catalog;README.md— the exact load order (schema, then users, then data).
- The platform database (
forge/database/) — Forge's own records about your project: versions, deployments, domains and the rest, with its ownschema.sql+dump.sql+ restore README. - Uploaded files (
forge/objects/) — every object your app's users uploaded, plus a manifest of key, size and last-modified. - Settings (
forge/config/) — the project row, the product spec, domain registrations and serving status, deployment history, and the list of integrations with their secret names. - Secret names (
forge/secrets/) — the names of every environment variable your app reads, plus the ordered re-keying procedure. Secret values are never exported — by design, never; a secret that travels in a download is not a secret. - Self-host kit (
forge/selfhost/) — adocker-compose.yml, an.env.example(names only) and a README, so "run it yourself" is a compose file and not a research project. forge/PORTABILITY.md— the leaving guide, generated from the same manifest as the README, travelling inside the zip so it cannot 404 after you cancel.forge/manifest.json— the machine-readable record. Every category isincluded,partialorunavailablewith a reason; anything notincludedalso appears underacknowledgements.
Import (available)
Two directions:
Into Forge64, for a project you have elsewhere:
- a Git repository URL (with an access token for private repositories), or
- a zip file of up to 100 MB
via POST /api/import/zip / POST /api/import/git: the files are pulled
into the project and indexed so you can open and edit them in the editor.
Move to Forge (POST /api/move-to-forge/…) takes a GitHub repository —
dry-run first, then import — and a separate database endpoint
(POST /api/move-to-forge/db/import) loads a SQL dump of INSERTs into an
app you already own. Both are capped per user per day, idempotent, and never
read an env value. One deliberate limit: the importer never writes auth
or identity tables (user, session, account, …) — a dump that could
overwrite your users' password hashes would be an account-takeover primitive.
Sign-in users migrate by re-registering or through their identity provider.
Back onto your own servers is the documented psql path in
forge/appdata/README.md and forge/PORTABILITY.md: apply schema.sql,
then users.sql, then dump.sql, in that order.
Your Forge account itself (GDPR)
Everything above is about an app. For the Forge account:
GET /api/gdpr/export— a quick envelope of the account-held data (projects, memberships, credits, request history).POST /api/gdpr/export/archive+GET /api/gdpr/export/archive/status— the complete archive: every table, key-value record, object and per-app visitor-data row that names you, produced as downloadable zip parts.POST /api/gdpr/deletewith{"confirm":"DELETE"}— erase the account (orgs shared with other members block erasure until ownership is transferred). Progress atGET /api/gdpr/delete/status.GET /api/gdpr/requests— your recent export/erasure requests.
Full detail, including what erasure cannot undo, is in
docs/compliance/GDPR-DATA-SUBJECT-RIGHTS.md.
Coming soon
- Guided imports from Vercel, Netlify, Lovable, Bolt and Supabase.