A backend is an API, a database, a worker and a schedule. How Encore, Render, Railway, Fly.io, DigitalOcean App Platform, Northflank and ECS Express Mode handle all four.
A backend has more parts than a web service: an API, a Postgres database, a worker that handles jobs in the background, and schedules that run without anyone watching.
This list compares backend platforms on what a team usually weighs: how each part of the backend is set up, what it costs to start, where the backend runs, how much of the operations you own, and when the platform is the better fit.
Encore combines an open source infrastructure SDK for TypeScript and Go with a platform that provisions and deploys what the code declares into your own AWS or GCP account. The API, the database, the worker and the schedule are declarations in the same codebase, and encore run starts Postgres locally with the API and delivers Pub/Sub messages to the worker, so the whole backend runs before the first deploy.

Here is a signup service that publishes an event:
// signups/signups.ts
import { api } from "encore.dev/api";
import { SQLDatabase } from "encore.dev/storage/sqldb";
import { Topic } from "encore.dev/pubsub";
const db = new SQLDatabase("signups", { migrations: "./migrations" });
export interface SignedUp { userId: number; email: string }
export const signedUp = new Topic<SignedUp>("signed-up", {
deliveryGuarantee: "at-least-once",
});
export const signup = api(
{ expose: true, method: "POST", path: "/signup" },
async ({ email }: { email: string }): Promise<{ userId: number }> => {
const row = await db.queryRow<{ id: number }>`
INSERT INTO users (email) VALUES (${email})
ON CONFLICT (email) DO UPDATE SET email = EXCLUDED.email RETURNING id`;
await signedUp.publish({ userId: row!.id, email });
return { userId: row!.id };
},
);
The worker lives in a second service with its own database, a secret for the email provider and a weekly schedule:
// email/email.ts
import { api } from "encore.dev/api";
import { SQLDatabase } from "encore.dev/storage/sqldb";
import { Subscription } from "encore.dev/pubsub";
import { CronJob } from "encore.dev/cron";
import { secret } from "encore.dev/config";
import log from "encore.dev/log";
import { signedUp } from "../signups/signups";
const db = new SQLDatabase("email", { migrations: "./migrations" });
const resendKey = secret("ResendApiKey");
// The background worker, in its own service with its own database.
new Subscription(signedUp, "welcome-email", {
handler: async ({ userId, email }) => {
const first = await db.queryRow`
INSERT INTO welcomed (user_id) VALUES (${userId})
ON CONFLICT DO NOTHING RETURNING user_id`;
if (!first) return; // redelivered message, email already sent
log.info("sending welcome email", { email, keySet: resendKey() !== "" });
},
});
export const weeklyDigest = api({}, async (): Promise<void> => {
log.info("weekly digest queued");
});
new CronJob("weekly-digest", {
title: "Send the weekly digest",
schedule: "0 9 * * 1",
endpoint: weeklyDigest,
});
Signing up the same address twice under encore run produces one welcome email, because the welcomed table turns a second delivery into a no-op. Production secret values are set with encore secret set, as the secrets docs describe.
On deploy, Encore provisions each database as RDS on AWS or Cloud SQL on GCP, the topic and subscription as SNS and SQS or GCP Pub/Sub, and the services on Fargate, Cloud Run or Kubernetes. The AWS infrastructure docs list the resources created, including the dead-letter queue for each subscription and an IAM role for the service.
encore run.Encore needs an AWS or GCP account to deploy into, and the cloud resources are billed by the provider. Fargate tasks and a Multi-AZ RDS instance cost more than one small instance on a hosted platform, so a hobby project with little traffic is often cheaper on Render, Railway or Fly.io. Encore supports TypeScript and Go today, and teams on other languages can sign up for early access to Python or Rust.
Run in your terminal to get started locally.
Render maps each part of a backend to its own service type in a render.yaml Blueprint: web for the API, worker for background jobs, cron with a schedule for recurring work, and a databases entry for Postgres. Environment variables can pull the database URL straight from the database with fromDatabase, which keeps wiring simple. Every push to the connected branch builds and deploys, web services switch over without downtime once the new instance passes its health check.
Render bills each service as its own instance, so an API, a worker and a cron job are three line items, and a cron job starts a fresh instance for each run. Render is a better fit than Encore for a team that does not want to own an AWS or GCP account at all and is happy with Render's regions and Postgres offering. Free web services spin down after 15 minutes without traffic, and free Postgres databases expire after 30 days. More detail is in Render alternatives.
Railway builds a service from a repository with little configuration, adds Postgres from a template and connects services through variable references such as ${{Postgres.DATABASE_URL}}. A worker is another service in the project, and a scheduled job is a service with a cron schedule that runs its start command and exits. The project canvas shows every service, database and connection in one view, and pull request environments give each branch its own copy of the project. Usage is billed at about $20 per vCPU per month and $10 per GB of memory per month (Railway pricing page, October 28, 2026).
Cron runs cannot be closer together than 5 minutes, and a run is skipped while the previous one is still going. The Postgres database lives in Railway's infrastructure. Railway is a better fit than Encore for prototypes and small teams who want a running backend in minutes, any language that builds in a container, and billing that follows actual usage. See Railway alternatives and Render vs Railway.
Fly.io runs an app as Machines in regions you choose, and one app can define several processes, such as a web process and a worker, from the same image. Pricing is per second with no platform fee: a shared-cpu-1x Machine with 512 MB costs $3.69 a month running continuously, and a performance-1x Machine with 2 GB costs $33 a month, per Fly.io's pricing page on October 28, 2026. Machines can also stop when idle and start again on the next request, which keeps the cost of quiet services low, and scheduled work runs either as a Machine on a schedule or as a cron process inside the app.
Fly.io gives you more control over the machine than Render or Railway, which also means more of the operational decisions, such as volumes and region placement, are yours. Fly.io is a better fit than Encore when the backend has to run close to users in several regions, or when a team wants per-second billing on small, long-running processes. The Fly.io alternatives guide covers it in depth.
App Platform groups a backend into one app with components: services for the API, workers for background processing, and jobs that run before or after a deploy or on a cron schedule, according to DigitalOcean's jobs docs on October 28, 2026. A development database costs $7 a month (App Platform pricing page, same date).
One app spec describes the whole backend, and the API, the worker, the jobs and the database binding are reviewed and versioned together. App Platform bills per container, and a separate worker adds a container to the bill. App Platform suits teams already using DigitalOcean Droplets, Spaces or Managed Databases who want the backend in the same place, with one invoice and predictable monthly prices. It is a better fit than Encore for a team that already runs on DigitalOcean and has no plans to use AWS or GCP.
NorthflankNorthflank deploys services from Git or container images, runs jobs on a cron schedule or on demand, and adds databases and other stateful services as addons. It can also deploy its platform into your own AWS, GCP, Azure, Oracle or CoreWeave account. Pipelines move a build through environments, and preview environments can be created per pull request. The free Sandbox includes two services, two jobs and one database with no sleeping, and pay-as-you-go compute is $0.01667 per vCPU-hour and $0.00833 per GB-hour (Northflank pricing page, October 28, 2026).
The worker, the job and the database are still configured as platform resources in Northflank's UI or templates, separately from the application code. Bring-your-own-cloud nodes are billed at $0.02083 per vCPU-hour on top of what the cloud provider charges. Northflank is a better fit than Encore for teams with many languages and existing container images that need a general container platform rather than infrastructure tied to application code.
ECS Express Mode turns a container image into a Fargate service with a URL, a load balancer with TLS, auto scaling and monitoring, with no charge beyond the underlying resources. It replaces App Runner, which AWS has closed to new customers.
Express Mode covers the API. AWS describes it for stateless web applications and APIs, so RDS, SQS, the worker service and the scheduler are each set up separately, with their own IAM grants, usually in Terraform or CloudFormation. In return, every setting is yours: VPC layout, instance sizes, IAM policies and deployment rules all stay in standard AWS resources that any AWS engineer can read. It is a better fit than Encore for a platform team that already has Terraform modules and wants plain AWS with nothing in between.
Moving an existing app? See Render to AWS and Railway to AWS.
Render and Railway are the quickest managed platforms when hosting on their infrastructure is fine, Northflank offers a similar model with bring-your-own-cloud, and ECS Express Mode is the AWS-native option for a single container.
Declare the worker as a Pub/Sub subscription and the schedule as a CronJob next to your API. With Encore in TypeScript, a Topic is published from the API endpoint, a Subscription in another service handles each message, and a CronJob calls an endpoint on a schedule. encore run tests the API and the worker locally, and a deploy creates the queues, the database and the schedule in your cloud account.
Northflank can run its platform in your own AWS, GCP or Azure account, and ECS Express Mode creates a Fargate service with a load balancer from a container image in your account. The difference is how much of the surrounding database, queue and scheduler setup you still define yourself.
Deploy to your cloud on AWS and Google Cloud
without managing infrastructure
Encore lets developers and agents define application infrastructure directly in code, then automatically provisions it from local development to production in your AWS or GCP account.