# Make your Replit app private to your company

> Canonical: https://teamonly.dev/move-from-replit
> Checked 26 October 2026. Written by TeamOnly. Replit facts link to Replit's own docs. We moved a real Replit Agent app from GitHub to write this.

**Short answer:** If your coworkers already have Replit accounts, use Replit's own private publishing: it is a setting in the Publishing tool, on Starter and Core plans and up. If they don't, or you want them to sign in with their work account, move the app to TeamOnly. Download it as a zip or push it to GitHub, run `npx teamonly init` and ask your AI tool to "Move this app to TeamOnly". The screens stay the same; the Express server, the Replit database and Replit Auth are replaced. Python apps can't move.

## Can Replit make it private?

Yes. Replit's Publishing tool has a Sharing setting with four choices. Two are private, and both need a Replit account.

| | Who can open it | Do visitors need a Replit account? | Best when |
|---|---|---|---|
| Public | Anyone on the internet with the link | No | Nothing in it is private |
| Password protected | Anyone with the password | No. One shared password | A quick demo. Workspace admins can turn this option off |
| Workspace only | Admins, members and viewers in your Replit workspace | Yes | Your coworkers are already in your Replit workspace |
| Invite only | You, workspace admins, and the people or groups you invite | Yes | A handful of people who use Replit |
| TeamOnly | Everyone at your company, or a named list | No. Work Google, Microsoft or an emailed code | Coworkers who don't have Replit accounts |

Replit says private publishing is on Starter and Core plans and up since May 2026; before that it needed Pro or Enterprise. Core is $20 a month, or $18 billed yearly. Pro is $100 a month and lets you invite up to 50 viewers; more than 50 needs Enterprise, which is also where SSO and audit logs are.

Sources (checked 26 October 2026): [who can access your app](https://docs.replit.com/cloud-services/deployments/private-deployments), [private publishing on Core and Starter](https://replit.com/blog/secure-more-apps), [pricing](https://replit.com/pricing), [viewer seats](https://docs.replit.com/teams/identity-and-access-management/viewer-seats), [Replit Auth](https://docs.replit.com/references/auth-and-identity/authentication), [download or connect GitHub](https://docs.replit.com/help/projects-and-files), [database connection details](https://docs.replit.com/features/data-and-storage/connection-details), [pg_dump backup](https://docs.replit.com/features/data-and-storage/shared-database-migration). Plans change; check Replit before you pay.

## When is moving the app worth it?

- **Your coworkers don't have Replit accounts.** Asking finance or the warehouse to make one to use a single tool is where most of these apps stall.
- **You want company login, not a list.** Anyone at your company signs in with the work account they already have, and people who leave lose access when IT turns off their account.
- **More than a few people need it.** On TeamOnly, people who only use apps are free, however many there are.
- **You want admin rights set by someone, not by who signs in.** Roles such as editor or approver are given out in TeamOnly and checked on the server.
- **Your company email isn't on Google or Microsoft.** Emailed codes work for any company domain.

If none of that applies, stay on Replit. Moving is real work, and Replit's own sharing is a setting.

## Will my app move?

Moves cleanly:
- Replit Agent web apps: an Express server with a React + Vite front end
- PostgreSQL tables used through Drizzle
- Replit Auth, which is removed: company login takes its place
- shadcn/ui, Tailwind, wouter, react-query and other front-end libraries

Moves with more work:
- Big apps with thousands of lines of server code
- Postgres-only queries (arrays, jsonb), rewritten for SQLite
- Live updates over WebSockets, which become a Refresh button
- Public pages and forms meant for outsiders, which become coworker-only

Doesn't move:
- Python apps: Flask, Streamlit, FastAPI, Django
- Your existing data, automatically (export it as CSV)
- Postgres extensions such as pgvector
- Mobile apps, and apps that must be public

## How do I move it?

You need the project's code on your computer, Node.js, and Claude Code or Cursor.

1. **Get the code.** In Replit, open the menu at the top of the file tree and choose Download as zip. Or connect GitHub in the Git tool, push the project and clone it.
2. **Add TeamOnly.** In the project folder run `npx teamonly init` and `npm install`. This adds the files TeamOnly apps need and instructions your AI tool reads. It never overwrites your files.
3. **Ask your AI tool to move it:** "Move this app to TeamOnly". It keeps every screen, turns the Express routes into TeamOnly server routes, rebuilds the Drizzle tables in the app's own database, removes Replit Auth, and tells you what it changed and what it couldn't move.
4. **Check it on your computer.** It runs the app locally. Click through the main screens.
5. **Put it online:** `npx teamonly login`, then `npx teamonly deploy`. You get a link like `blog.acme.teamonly.app`. Coworkers sign in with their work account.

## What happens to the Replit parts?

| In your Replit app | On TeamOnly |
|---|---|
| Replit Auth: the sign-in button, `/api/login`, the sessions and users tables | Removed. TeamOnly signs people in before the app loads; the app reads who they are. |
| The Express server (`server/routes.ts`) | Routes in the app's server code, at the same `/api` paths |
| PostgreSQL tables through Drizzle | The app's own database, created on first deploy (SQLite, on Cloudflare D1) |
| "Signed in" as the only check | Roles such as editor or approver, given out on the app's page in the dashboard or with `npx teamonly roles` |
| Replit Secrets | Secrets, set with `npx teamonly secrets set`, never sent to the browser |
| Live updates over WebSockets | A Refresh button |
| `.replit` and the Replit Vite plugins | Removed |

## How do I get my data out of Replit?

The moved app starts with an empty database. Your rows stay in Replit until you copy them.

1. In Replit, open the Database tool, choose the production database and copy the connection string from its Settings tab. Replit only lets outside tools reach the production database, not the development one.
2. Export each table as a CSV file with any PostgreSQL tool, such as psql (example below). Keep a full backup too: Replit's own docs use `pg_dump` for that.
3. In the moved app, use its import screen to load the CSV files. If it has none, ask your AI tool to add one before you put the app online.

One table to CSV with psql:

```
psql "PRODUCTION_CONNECTION_STRING" \
  -c "\copy your_table TO 'your_table.csv' CSV HEADER"
```

We have not moved a live Replit database ourselves. Check the row counts after you import.

## What about Python apps?

Python apps can't move to TeamOnly. It runs one kind of app, a React front end with a TypeScript server on Cloudflare, and there is no way to run Flask, Streamlit, FastAPI or Django on it.

If your Replit app is in Python, use Replit's own private publishing above. Asking an AI tool to rebuild it in React and TypeScript is a rewrite, not a move, and we haven't tested it.

## What did moving a real Replit app teach us?

We took a public Replit Agent app from GitHub, a blog with an editor dashboard built on Express, React, PostgreSQL with Drizzle and Replit Auth, and moved it.

- Every screen came over. 74 front-end files, and only 9 needed edits: 8 about login, 1 for a style rule the newer build tools reject.
- All 18 Express routes became TeamOnly routes at the same paths, and the 3 data tables moved to the app's own database.
- Replit Auth and its sessions and users tables were removed.
- Type checks and the build passed, and the main flows worked on a laptop: write, publish, edit and delete a post, send a message to the author.

The original had a gap that comes from how Replit Auth works: anyone with a Replit account can sign in, and the app treated every signed-in person as its admin. So anyone could edit or delete posts and read every message. After the move, editing needs the owner or the editor role, checked on the server.

No one-click import. The move is your AI tool doing real work in your project: 15 to 60 minutes for a typical app, longer for a big one. Then it is one command each time you change it.

## Questions people ask

### How do I make my Replit app private?
In the Publishing tool, under Sharing, choose Workspace only or Invite only. Visitors then sign in with a Replit account. There is also Password protected, which needs no account but is one shared password. Replit says private publishing is on Starter and Core plans and up since May 2026.

### Do people need a Replit account to open a private Replit app?
For Workspace only and Invite only, yes: visitors are asked to sign in through Replit. People you add to your Replit team as viewers get an email to create an account if they don't have one. Only the Password protected setting works without an account.

### Can I export my app from Replit?
Yes. In the project, open the menu at the top of the file tree and choose Download as zip, or connect GitHub in the Git tool and push the code there. Your database is separate: see the next question.

### Does my Replit database come over?
Not automatically. The app moves with an empty database. Export your tables from the production database (its connection string is in the Database tool, Settings tab) as CSV files, then load them through an import screen in the moved app. If the app has none, ask your AI tool to add one.

### What happens to Replit Auth?
It is removed. Replit Auth signs people in with Replit accounts. On TeamOnly people sign in with their work Google or Microsoft account, or a 6-digit code sent to their work email, before the app loads, and the app is told who they are.

### Can I move a Python app from Replit?
No. TeamOnly runs one kind of app: a React front end with a TypeScript server. Flask, Streamlit, FastAPI and Django apps can't run on it. For those, use Replit's own private publishing.

### Do my coworkers need a TeamOnly account?
No. They open the link and sign in with the work account they already have. People who only use apps are free.

### How long does the move take?
For a typical Replit Agent app, 15 to 60 minutes of your AI tool working in your project, plus you checking the screens. Apps with thousands of lines of server code take longer. The one-minute part comes after: from deploy to a coworker using it.

## Keep reading

- [Move from Lovable, Bolt or v0](https://teamonly.dev/move-from-lovable-bolt-v0.md): the same move for apps built on Supabase.
- [Every option, side by side](https://teamonly.dev/compare.md): Replit, Lovable, Vercel, Netlify, Retool and Cloudflare, with sources.
- [Lovable alternatives for internal apps](https://teamonly.dev/compare/lovable-alternatives.md): Lovable, Bolt, v0, Replit, Base44 and Retool on who can get in and what private costs.
- [Host a Claude Code app for your team](https://teamonly.dev/claude-code.md): keep changing the moved app in Claude Code, then deploy with one command.

Try it free for 14 days, no card: https://teamonly.dev/pricing#trial. Or subscribe: https://teamonly.dev/pricing#subscribe (Builder $19/mo, Team $249/mo, Business $899/mo)
