Skip to main content
Version: 0.23
note

Last checked with Wasp 0.23 and Render (as of Apr 15, 2026).

This guide depends on external libraries or services, so it may become outdated over time. We do our best to keep it up to date, but make sure to check their documentation for any changes.

Render

Deploy Wasp to Render server client database

This guide shows you how to deploy the server, client, and provision a database on Render.

Unlike the other providers listed here, Render builds your Wasp app from source on its servers, so you don't need to run wasp build locally before deploying. You'll define your entire deployment setup in a render.yaml file that Render uses as a Blueprint to create and configure all services.

Prerequisites

To get started, follow these steps:

  1. Create a Render account.
  2. Push your Wasp project to a Git repository (GitHub, GitLab, or Bitbucket).
  3. Generate your initial database migrations locally by running wasp db migrate-dev and commit the migrations/ directory. Render needs these migration files in the repo to set up your database.

Create the render.yaml Blueprint

Create a render.yaml file in the root of your repository. This defines all three services (database, server, and client):

render.yaml
services:
# Node.js server -- Render installs Wasp and builds from source
- type: web
name: <app-name>-server
runtime: node
plan: <plan>
region: <region>
branch: main
buildCommand: >-
npm install -g @wasp.sh/wasp-cli@<wasp-version> &&
export PATH="$(npm prefix -g)/bin:$PATH" &&
wasp build &&
cd .wasp/out/server &&
npm install &&
npx prisma generate --schema=../db/schema.prisma &&
npm run bundle
startCommand: cd .wasp/out/server && npm run start-production
envVars:
- key: DATABASE_URL
fromDatabase:
name: <app-name>-db
property: connectionString
- key: JWT_SECRET
generateValue: true
- key: WASP_SERVER_URL
sync: false # you'll fill this in after the first deploy
- key: WASP_WEB_CLIENT_URL
sync: false # you'll fill this in after the first deploy
- key: NODE_VERSION
value: "24"

# React client -- static site built with Vite
- type: web
name: <app-name>-client
runtime: static
branch: main
buildCommand: >-
npm install -g @wasp.sh/wasp-cli@<wasp-version> &&
export PATH="$(npm prefix -g)/bin:$PATH" &&
wasp build &&
npx vite build
staticPublishPath: .wasp/out/web-app/build
envVars:
- key: REACT_APP_API_URL
sync: false # you'll fill this in after the first deploy
- key: NODE_VERSION
value: "24"
routes:
- type: rewrite
source: /*
destination: /200.html

databases:
- name: <app-name>-db
plan: <plan>
region: <region>
postgresMajorVersion: "18"

You should replace the following values for your app:

VariableValueExample
<app-name>A unique name for your appmy-wasp-app
<wasp-version>The Wasp CLI version you're using0.23
<plan>The Render plan for your servicesfree
<region>The Render region closest to your usersoregon
caution

The Render free-tier PostgreSQL database expires after 30 days. Use the Starter plan or an external provider for production.

Commit this file and push to your repository:

git add render.yaml
git commit -m "Add Render Blueprint"
git push origin main

Deploy with the Blueprint

  1. In the Render Dashboard, click New > Blueprint.
  2. Connect your Git repository and select the branch with the render.yaml.
  3. Render will parse the Blueprint and show the resources it will create. Do not fill out the environment variables form yet. Click Apply.

This will try to create all three services. It will fail initially, as some environment variables are missing.

Set the Environment Variables

Wait until all services are created. Go to each one in the Render Dashboard and note its URL (usually https://<app-name>-server.onrender.com and https://<app-name>-client.onrender.com).

On the server Web Service, go to Settings > Environment and set the following variables. When you're done, click Save and rebuild:

VariableValue
WASP_SERVER_URLhttps://<app-name>-server.onrender.com
WASP_WEB_CLIENT_URLhttps://<app-name>-client.onrender.com
Using an external auth method?

If your app is using an external authentication method(s) supported by Wasp (such as Google or GitHub), make sure to additionally set the necessary environment variables specifically required by these method(s).

On the client Static Site, go to Settings > Environment and set the following variables. When you're done, click Save and rebuild:

VariableValue
REACT_APP_API_URLhttps://<app-name>-server.onrender.com
caution

REACT_APP_API_URL must be set before the client build runs. Vite embeds it into the compiled JavaScript at build time. If it's missing, all API calls from the client will fail.

Using a Render Environment Group

Rather than setting variables on each service separately, you can create an Environment Group and link it to both services to manage shared variables in one place. This is a best practice on the Render platform.

Redeploying After Changes

Render auto-deploys when it detects a new commit on the configured branch. Just push your changes:

git push origin main

If you have new database model changes, make sure to run wasp db migrate-dev locally first and commit the generated migration files along with your code changes. The server runs prisma migrate deploy on startup, so new migrations are applied automatically on each deploy.

Build time

Both services install Wasp and compile the app from source on each deploy. On the free tier, this can take 10-15 minutes. If builds consistently time out, consider upgrading to the Starter plan.