What a deployment platform does between git push and a running service, the main types in 2026 and the questions that decide which one fits your backend.
A deployment platform is the system between git push and a running service. It builds the code, releases it to an environment, injects configuration and secrets, keeps the process healthy and gives you logs and a way back when a release breaks something.
Every platform does some version of that loop, and the differences that matter come later: where the code and data run, whether the platform also creates the database and queue the service needs, and how much you can change once the defaults stop fitting. This guide covers the main types and how to pick between them.
The Twelve-Factor App splits the job into build, release and run stages, and that is still a good way to compare platforms:
Around those stages sit environments (staging, production, previews for pull requests), observability, custom domains and TLS. The part that varies most is infrastructure: some platforms stop at running your process, and others also provision the database, cache, queue and permissions the process needs.
A shared PaaS runs your application on the vendor's infrastructure. You connect a repository, the platform detects the runtime or uses your Dockerfile, and every push becomes a release. Managed Postgres and Redis are usually available as add-ons.
This is the shortest path from repository to URL, and it fits a single web service with a database well. The limits appear when the backend needs more of the cloud: private networking to existing systems, services such as SQS, S3 or Pub/Sub, data residency in a specific account, or a customer security review that asks where data lives. Heroku alternatives and IaaS vs PaaS vs BaaS cover this group.
Frontend platforms build static sites and server-rendered apps, serve them from a CDN and run API routes as serverless or edge functions. They make preview deployments per branch the default and handle caching and TLS well.
They are a weaker fit for backends with long-running processes, background workers, scheduled jobs or heavy database connections, which is why many products pair a frontend platform with a separate backend deployment.
Google Cloud Run, Amazon ECS on AWS Fargate and Elastic Beanstalk run containers or application bundles inside your own cloud account with no cluster to manage. You get the provider's networking, IAM and managed services next to your code.
What you do not get is the rest of the pipeline. Building and pushing images, creating databases and queues, writing IAM policies and keeping staging and production in step usually falls to a CI pipeline and Terraform. Cloud Run vs Fargate compares the two most common choices.
Platform teams often build their own deployment platform on Kubernetes: CI builds images, a GitOps controller such as Argo CD syncs manifests to the cluster, and templates or Helm charts give each service a standard shape. This scales to many services and gives full control over runtime, networking and policy.
It is also a product the platform team maintains. Cluster upgrades, add-ons, templates and the cloud resources outside the cluster are ongoing work, and the internal developer platform guide covers what that usually involves.
Open source tools such as Dokku, Coolify and Kamal give you push-to-deploy on servers you control. They are popular for side projects and cost-sensitive products, since a few VMs can host many apps.
You take on the servers: patching, backups, database operations, scaling and failover. That trade works when someone on the team is happy to own it and the load is predictable.
Encore combines an open source infrastructure SDK with a platform that provisions and deploys into your own AWS or GCP account. The application declares its services and infrastructure in TypeScript or Go, and the platform reads those declarations to build the app, provision the matching cloud resources and deploy it, an approach often called infrastructure from code.

A link service with a Postgres table as the source of truth and a Redis cache for hot lookups looks like this, with a migration in links/migrations/1_create_links.up.sql that creates links (code TEXT PRIMARY KEY, url TEXT NOT NULL):
Run in your terminal to get started locally.
// links/links.ts
import { api, APIError } from "encore.dev/api";
import { SQLDatabase } from "encore.dev/storage/sqldb";
import { CacheCluster, StringKeyspace, expireInHours } from "encore.dev/storage/cache";
const db = new SQLDatabase("links", { migrations: "./migrations" });
const cluster = new CacheCluster("links-cache", {
evictionPolicy: "allkeys-lru",
});
const targets = new StringKeyspace<{ code: string }>(cluster, {
keyPattern: "link/:code",
defaultExpiry: expireInHours(1),
});
export const resolve = api(
{ expose: true, method: "GET", path: "/links/:code" },
async ({ code }: { code: string }): Promise<{ url: string }> => {
const cached = await targets.get({ code });
if (cached !== undefined) {
return { url: cached };
}
const row = await db.queryRow<{ url: string }>`
SELECT url FROM links WHERE code = ${code}
`;
if (!row) {
throw APIError.notFound("link not found");
}
await targets.set({ code }, row.url);
return { url: row.url };
},
);
encore run starts Postgres locally and runs the cache in memory, so the cache-aside path works on a laptop with the same code that runs in production. In an environment on AWS, the database becomes RDS and the cache becomes ElastiCache in your account; on GCP they become Cloud SQL and Memorystore. Encore provisions an IAM role for the service on AWS or a service account on GCP, and compute is Fargate ECS, EKS, Cloud Run or GKE depending on what you pick for the environment.
Each environment deploys from a branch, preview environments spin up per pull request, and production can require an Admin to approve infrastructure changes before a deploy proceeds. Instance sizes, scaling and networking are configured per environment outside the code, and the resources are visible in your own cloud console. The SDK is open source, and encore build docker produces an image you can run anywhere if you later deploy it another way.
An agent asked to add the cache writes the keyspace next to the query that uses it and checks the miss and hit paths under encore run, with no separate Redis setup in another repository.
Best fit: backend teams that want push-to-deploy environments with Postgres, caches and queues running in their own AWS or GCP account, configured from the code that uses them.
If the deployment platform also needs to create the database and queue the service uses, install Encore, declare those resources in application code and deploy into your own AWS or GCP account.
Work through these questions in order, as the first ones rule out the most options:
A deployment platform takes code from a repository, builds it into an artifact, releases it to an environment and keeps it running, with configuration, secrets, logs and a way to roll back. Platforms differ mainly in where the code runs and how much of the surrounding infrastructure they provision.
A PaaS is one type of deployment platform, usually running your code on the vendor's infrastructure. Cloud container services, Kubernetes with a GitOps controller, self-hosted PaaS tools and platforms that deploy into your own cloud account are other types with different ownership and control.
Declare the database with new SQLDatabase and the cache with new CacheCluster and a keyspace in your TypeScript code, connect your AWS account in Encore and push to the branch your environment deploys from. Encore provisions RDS and ElastiCache in your account and deploys the service to Fargate ECS or EKS.
Check where workloads and data run, which managed resources it can provision, how environments and previews work, how rollback works, what you can configure as you grow and how you would leave. For regulated or enterprise customers, running in your own cloud account often decides it.
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.