Railway

Deploy OpenSaas

A ready-made starter app with logins, billing and an admin panel

Deploy OpenSaas

Just deployed

/var/lib/postgresql/data

Just deployed

Just deployed

/data

opensaas-files

Bucket

Just deployed

Open SaaS logo

Deploy and Host Open SaaS on Railway

Open SaaS is a free, MIT-licensed SaaS starter kit that gives you a working product on day one instead of an empty repository: email authentication, payments wired to Stripe, Polar or Lemon Squeezy, an admin dashboard, S3 file uploads and an OpenAI demo app. It is built on Wasp, a framework that compiles one spec into a React client and a Node.js API server backed by Prisma and Postgres. Founders use it to skip the weeks spent re-implementing auth and billing.

Self-host Open SaaS on Railway and the whole stack comes up talking to itself. This template builds the React client and Node API server from source, provisions Postgres with the schema already migrated, attaches an object storage bucket for uploads, and runs Mailpit so signup and password-reset email works before you have a mail provider. Browsers load the client, the client calls the API over HTTPS with a bearer token, and the server reaches Postgres and Mailpit over the private network.

Diagram of the Open SaaS client, server, Mailpit and Postgres services

Getting Started with Open SaaS on Railway

Set ADMIN_EMAILS before you deploy — the address you intend to sign up with. Any account registering with a listed address becomes an administrator automatically, and there are no default credentials to change because no account exists until you make one.

When the deploy finishes, open the client service's URL, click Get Started and register with your admin address. Then open the mailpit service's URL and sign in with the credentials from MP_UI_AUTH: your verification email is waiting there, and its link activates the account. Catching mail locally is what makes the first signup work with no external account.

Logging in lands you on the AI Day Scheduler. Add a task — it saves through the API to Postgres, so if it survives a reload your database wiring is correct. Then upload an image on File Upload: it goes to your bucket through a presigned URL and the download button returns it, confirming object storage end to end. Finally open /admin for the dashboard and user table.

Open SaaS marketing landing page with hero and call to action

Open SaaS AI Day Scheduler listing three saved work tasks

Open SaaS file upload page showing an uploaded PNG

Open SaaS admin users table with filters and one account

About Hosting Open SaaS

Open SaaS is a template you own outright. You get the source for every screen, so you customise by editing code rather than fighting a configuration UI. Teams self-host it to avoid per-seat boilerplate pricing and keep customer data in their own infrastructure.

Key features:

  • Email authentication with verification and password reset, plus optional Google, GitHub and Discord sign-in
  • Payments through Stripe, Polar or Lemon Squeezy, with subscriptions and one-off credit purchases
  • Admin dashboard covering users, revenue, signups and page views
  • File uploads to any S3-compatible bucket via presigned URLs
  • Scheduled and background jobs on pg-boss, needing no separate queue service
  • End-to-end type safety between client and server

The Railway architecture splits the app the way Wasp's own documentation does. server is the Node.js API: it applies Prisma migrations on startup, serves every authenticated operation, and runs scheduled jobs in-process. client is the compiled React bundle served by Caddy, with SPA routing and prerendered marketing pages. Postgres holds all application data. Mailpit gives you private SMTP plus a web inbox. The bucket holds uploads, keeping them off the container filesystem so they survive redeploys.

Why Deploy Open SaaS on Railway

Railway removes the setup work between a starter kit and a running product.

  • Postgres, object storage and mail provisioned and wired together
  • Client and server build from source on every push, no local toolchain
  • Private networking keeps the database and SMTP off the internet
  • HTTPS domains for client and API issued on deploy
  • Vertical scaling and replicas with no config change

Common Use Cases for Self-Hosted Open SaaS

  • Launching a subscription product with billing, auth and an admin panel already built
  • Prototyping an AI product where the scheduler demo becomes the real feature
  • Running an internal tool that needs accounts, roles and storage

Dependencies for Open SaaS

  • Client and server — built from github.com/gridalpha/opensaas-railway, packaging wasp-lang/open-saas with Wasp CLI 0.25.0
  • PostgreSQL 18ghcr.io/railwayapp-templates/postgres-ssl:18, application database and pg-boss job queue
  • Mailpitaxllent/mailpit:latest, SMTP server and web inbox for account email
  • Railway object storage — S3-compatible bucket for uploads

Environment Variables Reference

VariableServicePurpose
ADMIN_EMAILSserverAddresses granted admin on registration
JWT_SECRETserverSigns sessions; changing it logs everyone out
WASP_SERVER_URLserverPublic API URL used in email links
WASP_WEB_CLIENT_URLserverClient origin allowed by CORS
REACT_APP_API_URLclientAPI URL the browser calls
SMTP_HOST / SMTP_PORTserverMail server for account mail
STRIPE_API_KEYserverSet to enable checkout; inert until you do
OPENAI_API_KEYserverSet to enable the AI scheduler demo

Deployment Dependencies

Hardware Requirements for Self-Hosting Open SaaS

ResourceMinimumRecommended
CPU1 vCPU per service2 vCPU for the server
RAM512 MB server, 256 MB client1 GB server, 512 MB client
Storage1 GB Postgres volume5 GB+ with real users
RuntimeNode.js 24, PostgreSQL 18Same

Builds are heavier than runtime — compiling client and server needs roughly 2 GB — but Railway's builder handles that separately from your service allocation.

Self-Hosting Open SaaS

Open SaaS ships as source, not a prebuilt image, because the point is to edit it. To run it locally, install the Wasp CLI and create a project:

npm install -g @wasp.sh/wasp-cli@0.25.0
wasp new -t saas
cd 

Then start the database, migrate and run the app:

wasp start db
wasp db migrate-dev
wasp start

The client comes up on port 3000, the API on 3001. For production wasp build emits a Node server with its own Dockerfile plus a static client bundle. Note that REACT_APP_API_URL is compiled into the client, so a build is tied to one API URL unless you substitute it at container start — this template does that for you.

Is Open SaaS Free to Self-Host?

Open SaaS is free and open source under the MIT licence — no paid tier, no seat limits, no telemetry. You can build a commercial product on it and never pay the authors. Self-hosting on Railway costs only the compute, storage and bandwidth your services use. Stripe, OpenAI and email providers bill separately, and only if you enable them.

FAQ

What is Open SaaS?

A free, open-source SaaS starter kit built on Wasp: a React client, a Node.js API and a Prisma-managed Postgres database, with authentication, payments, an admin dashboard and file uploads already implemented.

What does this Railway template deploy?

Four services — the API server, the React client served by Caddy, PostgreSQL 18 and Mailpit — plus an object storage bucket for uploads. The schema is migrated automatically on the server's first boot.

Why does the template include Postgres and an object storage bucket?

Postgres stores users, sessions, subscriptions and job state — Open SaaS runs jobs on pg-boss, so the database is also the queue. Uploads go to the bucket rather than a disk, so they survive redeploys and are not tied to one container.

Do I need Stripe or OpenAI keys to deploy Open SaaS?

No. Every third-party integration ships with an inert default so the app boots without them. Checkout errors until you add a real Stripe key and the scheduler needs OPENAI_API_KEY, but authentication, uploads and the admin dashboard work without either.

How do I make the first admin user in self-hosted Open SaaS?

Put your address in ADMIN_EMAILS before deploying, then register through the signup page. The account is granted admin as it is created; adding an address later only affects accounts registered after the change.

How do I send real email from self-hosted Open SaaS?

Mailpit catches messages instead of delivering them, so real users cannot verify their addresses until you change that. Either point the server's SMTP_* variables at SendGrid, Mailgun or Resend, or keep Mailpit as a relay in front of one with MP_SMTP_RELAY_HOST, MP_SMTP_RELAY_PORT, MP_SMTP_RELAY_USERNAME, MP_SMTP_RELAY_PASSWORD and MP_SMTP_RELAY_ALL=true. Either way, change the defaultFrom address in the source to one your provider may send from.

How do I customise the landing page and pricing in Open SaaS?

Fork the source repository and edit it: landing page content in src/landing-page, pricing plans in src/payment/plans.ts, admin screens in src/admin. Push, and Railway rebuilds both services.


Template Content

opensaas-files

Bucket

More templates in this category

View Template
open-excalidraw
Self-hostable collaborative drawing built on Excalidraw

Prateek Mohanty
2
View Template
caring-vibrancy
Deploy and Host caring-vibrancy with Railway

5
View Template
Appsmith
Low-code platform for internal tools, dashboards, and admin panels.

Agaz Self-Host
0