Skip to main content
The Railway importer reads a Railway project and recreates it on one of your servers: one Symplax app per service that builds from GitHub, a new empty database per database service, and the variables that go with them. Nothing in Railway is changed or deleted.
Databases are created empty. Symplax does not copy any data out of Railway. Move your data across yourself before you point anything live at the new databases.

Before you start

  • Connect a server to Symplax and make sure it is online. Everything in the import is created on that one server.
  • Connect the GitHub account that owns each service’s repository. Symplax builds from GitHub only.
  • Check you have room for the databases on your plan: Free allows 2, Pro 5, Team unlimited. See Databases.

Get a Railway token

In Railway, open your account menu at the bottom left, then Account Settings, then Tokens. Create a token with no team selected. A project token cannot list your projects, so it will not work. Symplax stores the token encrypted and only reads from it when you ask for a project. You can remove it at any time with Disconnect.

Import a project

1

Open Integrations

Click Integrations in the sidebar. On the Railway card, click Connect and import.
2

Connect Railway

Paste the token into API token and click Connect.
3

Choose a project

Pick the project. Symplax reads each service, which can take a moment on a large project.
4

Review what will be created

Check Will be created and Will not be imported. Fix anything flagged as cannot be imported or needs a different name (use Rename, which only changes the name in Symplax).
5

Choose a server and import

Pick the server, then click the import button, which names what it will create, for example Import 2 apps and 1 database. Each app starts its first build straight away.

What comes across

Apps. Each service with a GitHub repository becomes an app, with its root directory, build command, start command and health check path. If the service has a Railway domain, its port is used and PORT is set. Otherwise the app listens on port 3000. Databases. Each database service becomes a new, empty Symplax database of the same engine: PostgreSQL, MySQL, MariaDB, MongoDB, Redis, Valkey or ClickHouse. Symplax picks the version from the image tag, using the nearest version it offers at or above Railway’s. When it cannot match exactly, the review shows a note. Variables. Your own service variables come across. Railway’s injected RAILWAY_* variables do not. References to a database, such as ${{Postgres.DATABASE_URL}}, PGHOST or REDIS_URL, are rewritten to point at the new Symplax database over the server’s private network. Apps that wait on a database start building once it is running.

What does not come across

If a Railway service builds from a branch other than main, change the app’s branch in Symplax after importing. If the repository has no main branch, the first build fails until you do.
A Railway database without a public endpoint blocks the import. In Railway, open the database, then Settings, Networking, Add Public Access, and refresh the review in Symplax.
If the project has several environments and none is called production, the import cannot pick one and stops with a message listing them.

After importing

1

Watch the first builds

Each app shows Building now, watch the log. A failed build is an ordinary failed deploy, nothing else is undone.
2

Fill in unset variables

If the import lists Some variables were left unset, set them on the app’s Variables tab and redeploy.
3

Move your data

Dump each Railway database and load it into the new one, for example over public access with your usual tools.
4

Check the branch, cron jobs and volumes

Fix the branch if it is not main, recreate cron jobs, and add storage for any volumes.
5

Move your domains

When everything works on the *.symplax.app address, point your DNS at the server and add your custom domains.
If anything fails while the import itself is running, Symplax removes what it had created and tells you nothing was left behind.