
Exporta lo que Railway sabe
Variables por servicio con railway variables --kv; un pg_dump de cada base de datos. Quita las entradas RAILWAY_*: Skiffly provee los equivalentes SKIFFLY_*.

Migración · Railway → Skiffly
Los conceptos se corresponden uno a uno: espacio de trabajo, proyecto, entorno, servicio, ${{Postgres.DATABASE_URL}}. La mayoría de documentos de la API corre sin cambios y los comandos de la CLI comparten nombre. Lo que cambia es a quién pagas y dónde viven tus datos.
Exportar, desplegar, cambiar. La terminal de abajo es toda la mudanza, de principio a fin.

Variables por servicio con railway variables --kv; un pg_dump de cada base de datos. Quita las entradas RAILWAY_*: Skiffly provee los equivalentes SKIFFLY_*.

skiffly init en cada repositorio y luego skiffly up. Define las variables, despliega la plantilla de Postgres, restaura el dump por skiffly connect.

Prueba en el dominio generado *.skiffly.cloud, agrega el dominio propio, cambia el CNAME cuando se emita el certificado. Mantén Railway funcionando hasta que el DNS se propague.

Variables por servicio con railway variables --kv; un pg_dump de cada base de datos. Quita las entradas RAILWAY_*: Skiffly provee los equivalentes SKIFFLY_*.

skiffly init en cada repositorio y luego skiffly up. Define las variables, despliega la plantilla de Postgres, restaura el dump por skiffly connect.

Prueba en el dominio generado *.skiffly.cloud, agrega el dominio propio, cambia el CNAME cuando se emita el certificado. Mantén Railway funcionando hasta que el DNS se propague.
# 1. export
railway variables --kv > vars.env
pg_dump "$RAILWAY_DATABASE_URL" -Fc -f db.dump
# 2. deploy
skiffly init && skiffly up
skiffly deploy --template postgres
skiffly connect postgres --print # → pg_restore -d <url> db.dump
skiffly variables set --skip-deploys $(grep -v '^RAILWAY_' vars.env | xargs)
skiffly variables set 'DATABASE_URL=${{Postgres.DATABASE_URL}}'
skiffly redeploy
# 3. cut over
skiffly domain app.example.com # prints the CNAME + TXT recordsskiffly up, skiffly logs -f, skiffly variables set, skiffly domain, skiffly connect. Mismos nombres que la CLI de Railway donde la función existe.
Apunta Claude Code, Cursor o Codex al servidor MCP de Skiffly y deja que el agente haga la mudanza: skiffly mcp install claude. Los nombres de herramientas replican al servidor MCP de Railway.
projects, deployments(input:), variables, serviceInstanceUpdate, templateDeployV2 y el resto de campos compatibles funcionan tal cual. Cambia el endpoint y el token.
Un railway.ts de railway/iac se convierte en .skiffly/skiffly.ts con defineRailway → defineSkiffly. Todo lo demás conserva su nombre.
$PORT (8080 por defecto si no lo defines).*.railway.internal ni de red privada IPv6.
Una app y una base de datos sin tarjeta para probar el build. Recarga cuando estés listo para cambiar el DNS.