This guide is for web services, background workers, cron jobs and static sites on Render. dply reads your render.yaml on the first deploy, so the build and start commands, routes and headers come with you. Web services run as container apps; static sites are served from the edge.
How the pieces map
| Render | dply |
|---|---|
| Web service | A container app |
| Static site | A static site (Static & hybrid sites) |
| Background worker | Queue workers on the web app (Queue workers) |
| Cron job | A Scheduled task (Scheduled tasks) |
render.yaml |
Imported on the first deploy (see below) |
| Build and start commands | Build settings; a Procfile also works (Procfile) |
| Pre-deploy command | The release command: build.release in dply.yaml or a Procfile release: line |
| Environment variables and groups | Environment (Environment variables) |
| Render Postgres | dply Postgres (Postgres, MySQL & MongoDB) |
| Render Key Value | dply Valkey (Valkey (Redis)) |
| Persistent disk | Not available. Use object storage |
| Instance type and scaling | Instance size and instances (Scaling & sleep) |
| Pull request previews | Preview deployments |
*.onrender.com |
The app's *.on-dply.live hostname (Domains) |
| Rollbacks | Roll back (Deployments) |
| Shell | The app's Console |
What render.yaml import covers
When the repository has a render.yaml and no dply.yaml, dply takes the web service (the first web or static service) and uses its:
buildCommandandstartCommand, ahead of what dply would detect.staticPublishPathas the output directory.routesandheaders, saved under Routing on the first deploy. After that the rules are yours to edit; the file isn't read for them again.
The create page and the first build log note what it didn't import:
- A
rootDir: set the app's Repository root to it yourself. - Other services: create each as its own app, or a worker service as queue workers.
- Databases: add one under Add resource.
envVars: the create page lists their names; set the values under Environment.
See Configuration files.
1. Deploy the app
- Choose New app, connect your source control, and select the repository and branch.
- Check the detected build and start commands, then choose Deploy.
2. Copy environment variables
In the Render dashboard, open the service's Environment and copy each variable, including those from environment groups. Paste them into Environment on dply as KEY=value lines. Leave out DATABASE_URL and REDIS_URL: dply sets them from the resources you attach next.
3. Attach resources
On the app's Overview, choose Add resource and add a Database for Render Postgres and dply Valkey for Render Key Value. Redeploy so the app receives the new variables.
4. Move the database
-
Stop writes to the Render service.
-
Export with the external connection URL from Render:
pg_dump --no-owner --no-acl -Fc "$RENDER_DATABASE_URL" > app.dump -
Open the database from the app's Overview. Under Export and import, choose Get upload command, run it where
app.dumpis, then choose Load it.
For MySQL, upload isn't available: restore with mysql using the Connection URL under Connect. See Postgres, MySQL & MongoDB.
5. Switch the domain
- Check the app on its
on-dply.liveaddress. - Add the domain under Routing, Domains.
- Lower the TTL on the existing record, then point it at the CNAME target dply shows.
- Choose Verify DNS and wait for TLS to be active.
- Remove the custom domain from Render, then suspend the service.
See Domains.