# Moving to Guv

> Import a project from Heroku, Railway, Render, Fly.io or Docker Compose into guv.yaml.

Guv uses the same mental model as Railway and Heroku: projects, environments, services and add-on databases. Moving is mostly a matter of translating configuration, and `guv import` does that for you.

## Import your configuration

From your repository:

```bash
guv import
```

It reads whichever of these it finds and writes a `guv.yaml`:

| From | Files read |
| --- | --- |
| Railway | `railway.json`, `railway.toml`, `railway.ts` |
| Render | `render.yaml` |
| Fly.io | `fly.toml` |
| Heroku | `Procfile`, `app.json` |
| Docker Compose | `compose.yaml`, `docker-compose.yml` |

Review the file, then see what Guv would create, with the monthly cost:

```bash
guv plan
guv apply
```

## Move your data

1. Create the database in Guv (`guv apply` does this from the manifest).
2. Dump from your old provider with `pg_dump`, and restore through a short-lived tunnel:

   ```bash
   guv db connect main < dump.sql
   ```

3. Set your secrets. The CLI prompts for each value so nothing ends up in your shell history:

   ```bash
   guv secrets set stripe-secret-key --env production
   ```

## Switch traffic

Add your domain with `guv domains add`, check the app on its generated address first, then update DNS. Keep the old provider running until the new DNS has settled.

:::tip[Coming from Heroku?]
Heroku moved to sustaining engineering in February 2026. Guv runs Procfile-style apps without changes, and your `web` process becomes a Guv service with a port.
:::
