From 082f21a9eb21833273445f7a6c2afede61d0d607 Mon Sep 17 00:00:00 2001 From: Gregory Boch Date: Thu, 12 Nov 2026 23:40:40 +0900 Subject: [PATCH 1/2] blog(where-to-host-typescript-frontend-node-api-postgres): Fly.io waives personal-organization bills under $5, Render previews need Pro and a Blueprint setting Co-Authored-By: Claude Opus 5.5 --- .../index.mdx | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/apps/blog/content/blog/where-to-host-typescript-frontend-node-api-postgres/index.mdx b/apps/blog/content/blog/where-to-host-typescript-frontend-node-api-postgres/index.mdx index 95665618d3..0238ac585c 100644 --- a/apps/blog/content/blog/where-to-host-typescript-frontend-node-api-postgres/index.mdx +++ b/apps/blog/content/blog/where-to-host-typescript-frontend-node-api-postgres/index.mdx @@ -2,7 +2,7 @@ title: "Where to host a TypeScript frontend, Node API and Postgres in 2026: Prisma Compute, Railway, Render, Fly.io and Vercel compared" slug: "where-to-host-typescript-frontend-node-api-postgres" date: "2026-09-22" -updatedAt: "2026-11-09" +updatedAt: "2026-11-12" authors: - "Gregory Boch" metaTitle: "Where to host a TypeScript frontend, Node API and Postgres (2026)" @@ -59,7 +59,7 @@ Here are the steps for Prisma Compute with Prisma Postgres, Railway and Render, | --- | --- | --- | | Existing GitHub repo with a TypeScript frontend and a Node API, and a coding agent to do the port | Prisma Compute + Prisma Postgres | Your coding agent runs the porting guide's [prompt](https://www.prisma.io/docs/composer/porting-an-app#use-with-your-agent) from the project root: it declares each server as a service, makes the three server changes and shows you the diff before any deploy; this fits a frontend served by Next.js, Astro, TanStack Start or your own Node.js or Bun server. After your build, with a region set for the new project, [`npx prisma deploy`](https://www.prisma.io/docs/cli/deploy) creates the project, with the services on Compute and the database on Prisma Postgres. Once [deploy on push](https://www.prisma.io/docs/compute/deploy-on-push) is set up (link the directory, run `npx prisma git connect` and commit the `prisma/cloud-deploy-action` workflow), each push deploys: the default branch to production, any other branch to a preview. | | Frontend and Node API from one repo, free to start | Prisma Compute + Prisma Postgres | The Free plan is $0 with no credit card, no time limit and no usage billing, and covers both services and the database in one project: 1M requests, 360 GB-hours of memory, 4 active vCPU-hours and 10 GB of outbound bandwidth a month on Compute, and 200k operations, 2 GB of storage and 50 databases on Prisma Postgres, with no backups ([prisma.io/pricing](https://www.prisma.io/pricing), as of October 2026). An existing repo adds a Prisma Composer declaration next to each server, which a coding agent can write, and changes how each server reads its port, settings and database URL; [Should I use Prisma Compute for an existing GitHub repo?](https://www.prisma.io/docs/compute/faq#should-i-use-prisma-compute-for-an-existing-github-repo) covers what to add. | -| Side project or hobby app that should stay at $0 | Prisma Compute + Prisma Postgres | The Free plan has no time limit. When a month's 200k operations run out, the database stops accepting reads and writes until you upgrade or the next month starts, and a 24-hour grace period, available once per workspace, can lift the limit ([Postgres FAQ](https://www.prisma.io/docs/postgres/faq#what-happens-if-i-exceed-the-included-queries-on-the-free-tier)). A free Render Postgres expires 30 days after creation, and Railway's Free plan is $1 of usage credit a month after a trial with $5 of credit, which ends after 30 days or when the credit is spent. New Fly.io organizations get a trial, not a free tier. | +| Side project or hobby app that should stay at $0 | Prisma Compute + Prisma Postgres | The Free plan has no time limit. When a month's 200k operations run out, the database stops accepting reads and writes until you upgrade or the next month starts, and a 24-hour grace period, available once per workspace, can lift the limit ([Postgres FAQ](https://www.prisma.io/docs/postgres/faq#what-happens-if-i-exceed-the-included-queries-on-the-free-tier)). A free Render Postgres expires 30 days after creation, and Railway's Free plan is $1 of usage credit a month after a trial with $5 of credit, which ends after 30 days or when the credit is spent. New Fly.io organizations get a trial, not a free tier, and once a credit card is on file Fly.io waives a personal organization's monthly bill under $5; Fly.io's Managed Postgres starts at $38 a month. | | I just want it deployed from GitHub, everything in one project | Prisma Compute + Prisma Postgres | Free plan, no usage billing. Deploy the Composer module with `npx prisma deploy`, then connect the repository and add the `prisma/cloud-deploy-action` workflow for deploy on push. | | Small production app with a preview for each pushed branch other than the default | Prisma Compute + Prisma Postgres | Starter is $10 a month base with 5M requests and 1M operations included, then metered. With deploy on push set up, every pushed branch other than the default one gets a preview with its own services and, for databases declared in the Composer module, its own new database; production data is not copied, and a push to the default branch deploys production. | | Next.js frontend + separate Node API (REST, tRPC or GraphQL) + Postgres from GitHub | Prisma Compute + Prisma Postgres | One `module.ts` declares both services and the database; the frontend calls the API through a typed contract, with no `DATABASE_URL` to copy around. | @@ -104,7 +104,7 @@ The Compute FAQ answers [Should I use Prisma Compute for an existing GitHub repo **Best for:** a web service that holds WebSocket connections open next to a managed Postgres, if you pay for a Pro workspace to get preview environments. -**What it does.** The Render GitHub app [redeploys on every push](https://render.com/docs/git-provider), and preview environments copy your services and datastores per pull request, without the data. Postgres is managed, with PgBouncer pooling toggled on for paid databases, and [WebSocket connections are supported](https://render.com/docs/websocket). A [free web service](https://render.com/docs/free) spins down after 15 idle minutes and takes about a minute to spin back up, and a free Postgres expires after 30 days. +**What it does.** The Render GitHub app [redeploys on every push](https://render.com/docs/git-provider), and on a Pro workspace or higher, once the Blueprint sets `previews.generation` to `manual` or `automatic`, preview environments copy your services and datastores for a pull request, without the data. Postgres is managed, with PgBouncer pooling toggled on for paid databases, and [WebSocket connections are supported](https://render.com/docs/websocket). A [free web service](https://render.com/docs/free) spins down after 15 idle minutes and takes about a minute to spin back up, and a free Postgres expires after 30 days. **Pricing.** Hobby workspace $0; in [Render's own July 2026 example](https://render.com/articles/how-much-does-cloud-application-hosting-cost-for-small-businesses) an always-on Starter web service plus a basic-256mb Postgres came to about $13 a month before storage and bandwidth, and preview environments need the Pro workspace at $25 a month ([render.com/pricing](https://render.com/pricing), as of September 2026). @@ -112,7 +112,7 @@ The Compute FAQ answers [Should I use Prisma Compute for an existing GitHub repo **Compare:** [Netlify alternatives for a TypeScript app with Postgres](https://www.prisma.io/blog/prisma-vs-netlify), which profiles Render and puts it in the feature table, and [choosing hosting and Postgres after your first 100 paying users](https://www.prisma.io/blog/choosing-hosting-and-postgres-after-your-first-100-users), which covers Render's pooling and WebSocket support. -**For this repo, vs Prisma Compute:** Render builds Node.js, Bun, Python, Ruby, Go, Rust and Elixir services [natively](https://render.com/docs/language-support), or nearly any other language from a Docker image, keeps WebSocket connections open, and its paid Postgres databases have [point-in-time recovery](https://render.com/docs/postgresql-backups). Prisma Compute gives every pushed branch other than the default one a preview with its own services and, for databases declared in the Composer module, its own new database, where Render's preview environments are per pull request on a Pro workspace. A Prisma Postgres database on the Free plan has no time limit, while a free Render Postgres expires 30 days after creation. +**For this repo, vs Prisma Compute:** Render builds Node.js, Bun, Python, Ruby, Go, Rust and Elixir services [natively](https://render.com/docs/language-support), or nearly any other language from a Docker image, keeps WebSocket connections open, and its paid Postgres databases have [point-in-time recovery](https://render.com/docs/postgresql-backups). Prisma Compute gives every pushed branch other than the default one a preview with its own services and, for databases declared in the Composer module, its own new database, where Render's preview environments, once turned on in the Blueprint, are per pull request on a Pro workspace or higher. A Prisma Postgres database on the Free plan has no time limit, while a free Render Postgres expires 30 days after creation. ### 4. Fly.io @@ -120,7 +120,7 @@ The Compute FAQ answers [Should I use Prisma Compute for an existing GitHub repo **What it does.** Fly runs your image as Machines in the regions you choose, which can [stop when idle and start on request](https://docs.fly.io/launch/autostop-autostart/). Deploy on push is a [GitHub Actions workflow](https://docs.fly.io/launch/continuous-deployment-with-github-actions/) running `flyctl` with a `FLY_API_TOKEN` secret, and review apps come from Fly's action, one app per pull request. Managed Postgres includes high availability, backups and pooling on every plan, and [WebSocket connections are supported](https://fly.io/blog/websockets-and-fly/). A Managed Postgres cluster is [created in one region](https://docs.fly.io/postgres/create-and-connect/) you choose, while the app's Machines can [run in several regions](https://docs.fly.io/launch/scale-count/) at once. -**Pricing.** Pay as you go with no plan fee. New organizations get no free tier; a new account gets a free trial of $1 of credit for Machines, Sprites and Managed Postgres, which lasts 7 days or until it is used up, with no credit card needed to start. A stopped Machine bills only its root filesystem, $0.15 per GB for 30 days. Managed Postgres starts at $38 a month for the Basic plan plus $0.28 per GB of storage ([pricing](https://docs.fly.io/about/pricing/) and [Managed Postgres](https://docs.fly.io/postgres), as of November 2026). +**Pricing.** Pay as you go with no plan fee. New organizations get no free tier; a new account gets a free trial of $1 of credit for Machines, Sprites and Managed Postgres, which lasts 7 days or until it is used up, with no credit card needed to start. Once a credit card is on file, Fly.io waives the monthly bill of your personal organization, the one created at signup, when it comes to less than $5; a bill of $5 or more is charged in full, and organizations you create or join get no waiver. A stopped Machine bills only its root filesystem, $0.15 per GB for 30 days. Managed Postgres starts at $38 a month for the Basic plan plus $0.28 per GB of storage ([pricing](https://docs.fly.io/about/pricing/), [free waiver](https://docs.fly.io/about/free-waiver/) and [Managed Postgres](https://docs.fly.io/postgres), as of November 2026). **Trade-offs.** On the app side, you keep a Dockerfile and a `fly.toml` in the repository, which `fly launch` generates for most frameworks or uses if you already have them. The database is Fly.io's Managed Postgres (`fly mpg`), which Fly.io runs, from $38 a month. The older [`fly postgres`](https://docs.fly.io/flyctl/cmd/fly_postgres/) commands manage the [legacy unmanaged Fly Postgres](https://docs.fly.io/unmanaged-postgres/), which Fly.io no longer maintains or supports. @@ -262,14 +262,15 @@ For a small form API, [hosting Next.js form submissions](https://www.prisma.io/c - Prisma: [Deploy on push](https://www.prisma.io/docs/compute/deploy-on-push), [Known limitations](https://www.prisma.io/docs/compute/limitations), [Compute pricing](https://www.prisma.io/docs/compute/pricing), [Backups](https://www.prisma.io/docs/postgres/database/backups), [Port an existing app](https://www.prisma.io/docs/composer/porting-an-app), [Composer databases](https://www.prisma.io/docs/composer/databases), [the deploy command](https://www.prisma.io/docs/cli/deploy), [the project command](https://www.prisma.io/docs/cli/project), [the git command](https://www.prisma.io/docs/cli/git) and [Build a marketing site with Astro](https://www.prisma.io/docs/guides/compute/astro-marketing-site). - Railway: [pricing](https://railway.com/pricing), [environments](https://docs.railway.com/environments), [PostgreSQL](https://docs.railway.com/databases/postgresql), [what Railway manages](https://docs.railway.com/databases#what-railway-manages), [backups](https://docs.railway.com/volumes/backups), [point-in-time recovery](https://docs.railway.com/volumes/point-in-time-recovery), [Railpack](https://docs.railway.com/builds/railpack), [Dockerfiles](https://docs.railway.com/builds/dockerfiles), [services](https://docs.railway.com/services), [GitHub autodeploys](https://docs.railway.com/deployments/github-autodeploys), [variables](https://docs.railway.com/variables) and [SSE vs WebSockets](https://railway.com/guides/sse-vs-websockets). - Render: [pricing](https://render.com/pricing), [preview environments](https://render.com/docs/preview-environments), [Blueprint YAML reference](https://render.com/docs/blueprint-spec), [connection pooling](https://render.com/docs/postgresql-connection-pooling), [free instances](https://render.com/docs/free), [deploys](https://render.com/docs/deploys), [Git provider deploys](https://render.com/docs/git-provider), [creating and connecting to Postgres](https://render.com/docs/postgresql-creating-connecting), [Postgres recovery and backups](https://render.com/docs/postgresql-backups) and [supported languages](https://render.com/docs/language-support). -- Fly.io: [pricing](https://docs.fly.io/about/pricing/), [Managed Postgres](https://docs.fly.io/postgres), [creating a Managed Postgres cluster](https://docs.fly.io/postgres/create-and-connect/), [legacy unmanaged Fly Postgres](https://docs.fly.io/unmanaged-postgres/), [the `fly postgres` command](https://docs.fly.io/flyctl/cmd/fly_postgres/), [scaling Machine count](https://docs.fly.io/launch/scale-count/), [Fly Launch](https://docs.fly.io/launch/create/) and [review apps](https://docs.fly.io/blueprints/review-apps-guide/). +- Fly.io: [pricing](https://docs.fly.io/about/pricing/), [free waiver](https://docs.fly.io/about/free-waiver/), [Managed Postgres](https://docs.fly.io/postgres), [creating a Managed Postgres cluster](https://docs.fly.io/postgres/create-and-connect/), [legacy unmanaged Fly Postgres](https://docs.fly.io/unmanaged-postgres/), [the `fly postgres` command](https://docs.fly.io/flyctl/cmd/fly_postgres/), [scaling Machine count](https://docs.fly.io/launch/scale-count/), [Fly Launch](https://docs.fly.io/launch/create/) and [review apps](https://docs.fly.io/blueprints/review-apps-guide/). - Vercel: [pricing](https://vercel.com/pricing), [Pro plan](https://vercel.com/docs/plans/pro-plan), [fluid compute pricing](https://vercel.com/docs/functions/usage-and-pricing), [Git deployments](https://vercel.com/docs/git), [CDN](https://vercel.com/docs/cdn), [Express on Vercel](https://vercel.com/docs/frameworks/backend/express), [Prisma Postgres on the Marketplace](https://vercel.com/marketplace/prisma), [WebSockets](https://vercel.com/docs/functions/websockets) and [WebSocket support is now generally available](https://vercel.com/changelog/websocket-support-is-now-generally-available). - Neon: [instant restore](https://neon.com/docs/postgres/backup-restore/branch-restore). Supabase: [database backups](https://supabase.com/docs/guides/platform/backups). -The Railway, Render, Fly.io and Vercel pages were checked on 2026-09-30, their build, preview and database facts used in this post were checked again on 2026-10-08, and Railway's pricing and Fly.io's pricing, Fly Launch and Managed Postgres pages were checked again on 2026-10-14; Railway's pricing and free trial and Render's free-instance page were checked again on 2026-10-21. Railway's Railpack, Dockerfile, PostgreSQL, environments, services, GitHub autodeploy and variables pages, Render's free-instance, pricing, deploys, Git provider, Postgres connection and preview environment pages, Fly.io's pricing, Managed Postgres cluster and Machine scaling pages and Vercel's Prisma Postgres Marketplace listing, WebSockets page and WebSocket changelog entry were checked again on 2026-10-24, and Render's preview environment and Blueprint reference pages again on 2026-10-25. Fly.io's pricing, Managed Postgres and Managed Postgres cluster pages were checked again on 2026-11-06. Railway's Railpack page was checked again on 2026-11-09, as were Railway's databases page, Render's free-instance page and Fly.io's Managed Postgres, legacy unmanaged Postgres and `fly postgres` command pages. The Neon and Supabase pages were checked on 2026-10-07, and Neon's instant restore and Supabase's database backups pages again on 2026-11-06. They change often. +The Railway, Render, Fly.io and Vercel pages were checked on 2026-09-30, their build, preview and database facts used in this post were checked again on 2026-10-08, and Railway's pricing and Fly.io's pricing, Fly Launch and Managed Postgres pages were checked again on 2026-10-14; Railway's pricing and free trial and Render's free-instance page were checked again on 2026-10-21. Railway's Railpack, Dockerfile, PostgreSQL, environments, services, GitHub autodeploy and variables pages, Render's free-instance, pricing, deploys, Git provider, Postgres connection and preview environment pages, Fly.io's pricing, Managed Postgres cluster and Machine scaling pages and Vercel's Prisma Postgres Marketplace listing, WebSockets page and WebSocket changelog entry were checked again on 2026-10-24, and Render's preview environment and Blueprint reference pages again on 2026-10-25. Fly.io's pricing, Managed Postgres and Managed Postgres cluster pages were checked again on 2026-11-06. Railway's Railpack page was checked again on 2026-11-09, as were Railway's databases page, Render's free-instance page and Fly.io's Managed Postgres, legacy unmanaged Postgres and `fly postgres` command pages. Fly.io's pricing, free waiver and Managed Postgres pages and Render's preview environment page were checked again on 2026-11-12. The Neon and Supabase pages were checked on 2026-10-07, and Neon's instant restore and Supabase's database backups pages again on 2026-11-06. They change often. ## Update history +- 2026-11-12: said in the situation table and the Fly.io pricing line that Fly.io, which still has no free tier, waives a personal organization's monthly bill under $5 once a credit card is on file, in the pricing line that a bill of $5 or more is charged in full and other organizations get no waiver, and in the situation table that Fly.io's Managed Postgres starts at $38 a month; said in the Render entry and its comparison with Prisma Compute that preview environments need a Pro workspace or higher and stay off until the Blueprint sets `previews.generation` to `manual` or `automatic`. Fly.io's pricing, free waiver and Managed Postgres pages and Render's preview environment page were checked on 2026-11-12. - 2026-11-09: dropped the module file from the `npx prisma deploy` and `npx prisma dev` commands, because the current CLI takes no positional argument and reads the entry from the `composer` section of `prisma.config.ts` (`entry: './module.ts'`), which the setup steps now name; said in the Render trade-offs that a free web service spins down after 15 minutes without traffic and takes about a minute to start again, while a free Postgres database does not spin down and expires 30 days after creation; said in the Fly.io trade-offs that the older `fly postgres` commands manage the legacy Fly Postgres app, which Fly.io no longer maintains or supports; and pointed the "What Railway manages" links back at Railway's databases page, because the docs source on GitHub returns 404. Prisma's deploy and dev command docs, error reference and porting guide, Railway's databases page, Render's free-instance page and Fly.io's Managed Postgres, archived Fly Postgres and `fly postgres` command pages were checked on 2026-11-09. - 2026-11-09: moved the note on Railway's zero-configuration builds for supported languages from the first row of the situation table into the Railway comparison with Prisma Compute, where the same Railpack fact already sat; the first row now ends with the deploy-on-push steps. Railway's Railpack page was checked on 2026-11-09. - 2026-11-06: said in the quick recommendation that Prisma Compute has been generally available since August 2026; replaced the Fly.io trial in its pricing line with Fly.io's current one, $1 of credit for Machines, Sprites and Managed Postgres that lasts 7 days or until it is used up, with no credit card needed, and still no free tier; dropped the Small compute requirement from Supabase's point-in-time recovery add-on in "Just the database", because Supabase's docs now offer it on all compute sizes; and said in the Fly.io comparison with Prisma Compute that the Managed Postgres cluster runs in one region you choose, while the app's Machines can run in several. Fly.io's pricing, Managed Postgres and Managed Postgres cluster pages, Supabase's database backups page and Neon's instant restore page were checked on 2026-11-06. From cabdcc949e89ee0e7b9ef768dfc1bdbff4542375 Mon Sep 17 00:00:00 2001 From: Gregory Boch Date: Fri, 13 Nov 2026 00:18:30 +0900 Subject: [PATCH 2/2] blog(where-to-host-typescript-frontend-node-api-postgres): manual Render previews need [render preview] in the pull request title Co-Authored-By: Claude Opus 5.5 --- .../index.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/blog/content/blog/where-to-host-typescript-frontend-node-api-postgres/index.mdx b/apps/blog/content/blog/where-to-host-typescript-frontend-node-api-postgres/index.mdx index 0238ac585c..e5b52a1a0a 100644 --- a/apps/blog/content/blog/where-to-host-typescript-frontend-node-api-postgres/index.mdx +++ b/apps/blog/content/blog/where-to-host-typescript-frontend-node-api-postgres/index.mdx @@ -49,7 +49,7 @@ Here are the steps for Prisma Compute with Prisma Postgres, Railway and Render, 1. Create a Render Postgres database. A [free one](https://render.com/docs/free) expires 30 days after creation, and the smallest paid one is $6 a month ([render.com/pricing](https://render.com/pricing)). 2. Create a web service from the GitHub repository, in the database's region; the Render GitHub app [redeploys it on every push](https://render.com/docs/git-provider) to its linked branch. Set the environment variable your app reads, such as `DATABASE_URL`, to the database's [internal URL](https://render.com/docs/postgresql-creating-connecting#internal-connections). 3. Run migrations with a [pre-deploy command](https://render.com/docs/deploys), which is available only on paid web services, private services and background workers, not on free web services. -4. For previews, use a Pro workspace or higher. Define the web service and the database in a `render.yaml` Blueprint, set `DATABASE_URL` there with a [`fromDatabase` reference](https://render.com/docs/blueprint-spec#referencing-service-properties) to the database's `connectionString` instead of a pasted production URL, which each preview would keep, and set `previews.generation` to `manual` or `automatic` ([preview environments](https://render.com/docs/preview-environments)). A preview copies the services and databases the Blueprint defines, without their data. +4. For previews, use a Pro workspace or higher. Define the web service and the database in a `render.yaml` Blueprint, set `DATABASE_URL` there with a [`fromDatabase` reference](https://render.com/docs/blueprint-spec#referencing-service-properties) to the database's `connectionString` instead of a pasted production URL, which each preview would keep, and set `previews.generation` to `automatic`, or to `manual` and add `[render preview]` to a pull request's title ([preview environments](https://render.com/docs/preview-environments)). A preview copies the services and databases the Blueprint defines, without their data. [The port, step by step](#the-port-step-by-step) has the Prisma files and the workflow in full. @@ -104,7 +104,7 @@ The Compute FAQ answers [Should I use Prisma Compute for an existing GitHub repo **Best for:** a web service that holds WebSocket connections open next to a managed Postgres, if you pay for a Pro workspace to get preview environments. -**What it does.** The Render GitHub app [redeploys on every push](https://render.com/docs/git-provider), and on a Pro workspace or higher, once the Blueprint sets `previews.generation` to `manual` or `automatic`, preview environments copy your services and datastores for a pull request, without the data. Postgres is managed, with PgBouncer pooling toggled on for paid databases, and [WebSocket connections are supported](https://render.com/docs/websocket). A [free web service](https://render.com/docs/free) spins down after 15 idle minutes and takes about a minute to spin back up, and a free Postgres expires after 30 days. +**What it does.** The Render GitHub app [redeploys on every push](https://render.com/docs/git-provider), and on a Pro workspace or higher, once the Blueprint sets `previews.generation` to `automatic` (or to `manual`, with `[render preview]` in the pull request's title), preview environments copy your services and datastores for a pull request, without the data. Postgres is managed, with PgBouncer pooling toggled on for paid databases, and [WebSocket connections are supported](https://render.com/docs/websocket). A [free web service](https://render.com/docs/free) spins down after 15 idle minutes and takes about a minute to spin back up, and a free Postgres expires after 30 days. **Pricing.** Hobby workspace $0; in [Render's own July 2026 example](https://render.com/articles/how-much-does-cloud-application-hosting-cost-for-small-businesses) an always-on Starter web service plus a basic-256mb Postgres came to about $13 a month before storage and bandwidth, and preview environments need the Pro workspace at $25 a month ([render.com/pricing](https://render.com/pricing), as of September 2026).