Oct 26, 202610 min read

AWS Amplify Alternatives in 2026

Options for teams that want to keep building on AWS without Amplify's GraphQL and DynamoDB model or its cloud sandbox.

AWS Amplify is the AWS toolkit for frontend teams, and in Gen 2 you describe auth, data, storage and functions in TypeScript files that it turns into CDK and CloudFormation in your account. It works well while the app fits a GraphQL API on AppSync, DynamoDB tables and Lambda resolvers.

It gets harder when the backend grows past that, with relational queries, background workers, scheduled jobs or several services that call each other. Local development also runs through a cloud sandbox, so each change is a deploy to AWS rather than a process on your laptop.

Amplify Gen 2 reached general availability in 2024 with a TypeScript, code-first backend model. Reasons teams look for Amplify alternatives:

  • Amplify Data is a GraphQL API on AppSync backed by DynamoDB, so access patterns, joins and reporting queries have to be designed around a NoSQL table model.
  • Business logic beyond CRUD lives in Lambda functions wired in as custom queries, mutations or triggers, rather than in a normal backend service.
  • npx ampx sandbox deploys a CloudFormation stack per developer to your AWS account, and changing a DynamoDB global secondary index in the sandbox recreates the table.
  • Queues, schedulers and anything else Amplify does not model are added as raw CDK in a custom stack, which brings back the infrastructure code Amplify was meant to hide.

AWS Amplify alternatives at a glance

AlternativeApproachBest fit
EncoreBackend services, Postgres, Pub/Sub, buckets and cron jobs declared in TypeScript, run locally and provisioned in your AWS or GCP accountApps that need a full backend with Postgres and queues in their own AWS account, beyond what AppSync resolvers cover
SSTTypeScript config that defines AWS resources through components, with live Lambda developmentTeams that want to stay serverless on AWS and define resources themselves
Vercel plus your own backendFrontend hosting on Vercel, with APIs and data running elsewhereTeams that mostly used Amplify Hosting for a Next.js frontend
FirebaseGoogle's backend-as-a-service with Firestore, Auth, Cloud Functions and hostingMobile and web apps that want client SDKs and realtime data without running a backend
SupabaseHosted Postgres with auth, storage, realtime and edge functionsTeams that want Amplify's backend-as-a-service feel on Postgres instead of DynamoDB
AWS CDKAWS's infrastructure-as-code framework, the layer Amplify Gen 2 generatesTeams that want full control over every AWS resource and are fine writing it
Compare features across all six alternatives
CapabilityEncoreSSTVercel plus backendFirebaseSupabaseAWS CDK
Where it runsYour AWS or GCP accountYour AWS accountVercel, plus wherever the backend runsGoogle Cloud, managed by FirebaseSupabase's platform, or self-hostedYour AWS account
Backend modelServices with typed APIs, on ECS Fargate or EKSLambda functions and containers you defineVercel Functions or a separate backendCloud Functions and client SDKsPostgres APIs, edge functionsWhatever you define
DatabasePostgres, declared in code, RDS on AWSRDS, Aurora or DynamoDB componentsBring your ownFirestore or Realtime DatabasePostgresAny AWS database you configure
Queues / Pub/SubDeclared in code, SNS/SQS on AWSQueue and SNS componentsBring your ownPub/Sub triggers through Cloud FunctionsQueues extension on PostgresSQS and SNS constructs
File storageBuckets declared in code, S3 on AWSBucket component on S3Vercel Blob or your ownCloud Storage for FirebaseSupabase StorageS3 constructs
Local developmentencore run starts services, Postgres, Pub/Sub and buckets locallysst dev runs functions locally against resources deployed in your accountNext.js dev server, backend separatelyEmulator SuiteSupabase CLI local stackUnit tests and cdk synth, deploy to test
Infrastructure codeNone to write for declared resourcessst.config.tsDepends on the backendFirebase config and rulesMigrations and dashboard configCDK constructs

Encore: backend services and AWS infrastructure from TypeScript

Encore

Encore combines a TypeScript backend with the AWS resources it uses, so instead of a schema that generates AppSync resolvers you write ordinary API endpoints and declare the Postgres database, Pub/Sub topics and buckets next to them. The same declarations run locally under encore run and become RDS, SNS/SQS and S3 in your own AWS account when you deploy.

Application code passes through Encore and infrastructure guardrails to resources provisioned in your own AWS or GCP account.
Encore provisions the infrastructure your application needs in your own AWS or GCP account.

File uploads are a common reason Amplify apps reach for Amplify Storage. With Encore, a bucket and a topic are declared in the service that uses them, and the endpoint hands the browser a signed URL so the file goes straight to the bucket:

import { api } from "encore.dev/api"; import { Bucket } from "encore.dev/storage/objects"; import { Topic } from "encore.dev/pubsub"; // An S3 bucket on AWS, a local bucket under encore run. export const photos = new Bucket("photos", { versioned: false }); export const photoUploaded = new Topic<{ key: string }>("photo-uploaded", { deliveryGuarantee: "at-least-once", }); // The browser uploads straight to the bucket with the signed URL. export const uploadUrl = api( { expose: true, method: "POST", path: "/photos/:id/upload-url" }, async ({ id }: { id: string }): Promise<{ url: string }> => { const { url } = await photos.signedUploadUrl(`${id}.jpg`, { ttl: 300 }); return { url }; }, ); export const markUploaded = api( { expose: true, method: "POST", path: "/photos/:id/uploaded" }, async ({ id }: { id: string }): Promise<void> => { await photoUploaded.publish({ key: `${id}.jpg` }); }, );
A bucket, a topic and two endpoints, which run locally with encore run and become S3 and SNS/SQS on AWS.

Thumbnailing or virus scanning then lives in a subscriber on the photo-uploaded topic, in the same service or another one, instead of an S3 trigger wired up in a custom CDK stack. The local development environment runs the bucket, the topic and Postgres on your machine with tracing for each request, so the edit and test loop does not wait on a CloudFormation deploy. An AI coding agent that adds the upload endpoint declares the bucket in the same change and can call it locally before anything is deployed.

Key features

  • Services run on ECS Fargate or EKS in your account, as described in the AWS infrastructure docs, and Encore provisions an IAM role for each service.
  • Postgres databases with SQL migrations replace the DynamoDB table model, and RDS is provisioned for you.
  • Pub/Sub topics become SNS/SQS with retries and dead-letter queues, and cron jobs and secrets are declared in code as well.
  • Public buckets can be served through CloudFront.
  • The same code deploys to GCP on Cloud Run or GKE if you ever need it.

Good to know

Encore is a backend for your APIs and infrastructure, not a frontend host or a set of client SDKs for auth and realtime data, so the frontend usually moves to Amplify Hosting, Vercel or another host and calls the Encore API, and Encore can generate a typed TypeScript client for it. Moving data out of DynamoDB into Postgres means remodeling single-table items into relational tables and backfilling them, and the Amplify to AWS migration guide walks through doing it step by step.

Get started
brew install encoredev/tap/encore &&
encore app create
Copy

Run in your terminal to get started locally.

SST: TypeScript-defined AWS resources with live Lambda development

SST

SST is an open-source framework where sst.config.ts defines AWS resources through high-level components such as functions, buckets, queues, Postgres and Next.js sites. Since v3 the components are built on Pulumi and Terraform providers rather than CDK and CloudFormation.

~/app
$ npx sst dev$ npx sst deploy --stage production
sst dev deploys the stage and proxies Lambda invocations to your machine.

Key features

  • sst dev runs Lambda functions on your machine through a stub in AWS, so code changes reload without a deploy.
  • Components cover the pieces Amplify users rely on, including buckets, queues, Cognito, DynamoDB and Postgres on RDS or Aurora.
  • Containers on ECS are supported alongside Lambda.

Good to know

SST is close to Amplify in one respect, since the databases, queues and buckets used during sst dev are real resources deployed to a stage in your AWS account, and you still write and maintain the resource definitions. It suits teams who are happy to own sst.config.ts. The SST alternatives guide compares it with other options.

Vercel plus your own backend

Vercel

Many teams used Amplify mainly through Amplify Hosting for a Next.js or React frontend. Vercel covers that part with git-based deploys, preview URLs per branch and Vercel Functions for server-side code.

Key features

  • First-class Next.js support from the team that maintains it.
  • Preview deployments for every branch and pull request.
  • Storage and databases are available through Vercel's marketplace of providers.

Good to know

Vercel runs on its own infrastructure rather than in your AWS account, and its functions are request-scoped, so long-running workers, queues and scheduled jobs that need IAM access to AWS usually end up in a separate backend. That split works when the backend has a clear home, and the Vercel alternatives guide covers the trade-offs.

Firebase: Google's backend-as-a-service

Firebase

Firebase is the closest match to Amplify's original idea, with Firestore, Authentication, Cloud Storage, Cloud Functions and hosting behind client SDKs for web and mobile.

Key features

  • Realtime listeners and offline support in the Firestore client SDKs.
  • The Emulator Suite runs Firestore, Auth, Functions and Storage locally.
  • Security rules control data access directly from the client.

Good to know

Firebase replaces Amplify by leaving AWS for Google Cloud, and Firestore is a document database, so the NoSQL modeling trade-offs of DynamoDB stay. Anything outside Firebase's services is set up in Google Cloud separately. The Firebase alternatives guide compares it with options that keep relational data.

Supabase: hosted Postgres as a backend-as-a-service

Supabase

Supabase gives you a Postgres database with auto-generated APIs, authentication, file storage, realtime subscriptions and edge functions, and it is the usual pick for Amplify users who want relational data instead of DynamoDB.

Key features

  • A full Postgres database with row-level security policies.
  • Auth, storage and realtime built on top of the database.
  • The Supabase CLI runs a local stack for development.

Good to know

Supabase runs on its own platform rather than in your AWS account unless you self-host it, and backend logic outside the database lives in edge functions or a separate service. The Supabase alternatives guide goes through where teams go when the backend grows.

AWS CDK: the layer underneath Amplify Gen 2

AWS CDK

AWS CDK defines AWS resources in TypeScript and synthesizes them into CloudFormation, which is what Amplify Gen 2 does behind its higher-level definitions. Teams that keep running into Amplify's limits sometimes drop down to plain CDK and define AppSync, DynamoDB, Lambda, SQS and RDS themselves.

Key features

  • Every AWS service is available, through L1 constructs that map to CloudFormation and higher-level L2 and L3 constructs.
  • Amplify's own custom resources are already CDK, so that code carries over.
  • cdk diff shows the CloudFormation changes before a deploy.

Good to know

CDK gives full control and makes you responsible for all of it, including networking, IAM, environments and a local setup for testing, and CloudFormation deploys are what you wait on during development. The AWS CDK alternatives guide covers tools that generate more of this for you.

How to choose

  • Encore if the backend has outgrown resolvers and Lambda triggers and you want services, Postgres, queues and buckets defined in TypeScript, running locally and provisioned in your own AWS account.
  • SST if you want to stay serverless on AWS and are happy to define the resources yourself in sst.config.ts.
  • Vercel plus your own backend if Amplify was mostly hosting a Next.js frontend.
  • Firebase for client-heavy mobile and web apps that want realtime data and do not need to stay on AWS.
  • Supabase for a hosted backend-as-a-service on Postgres.
  • AWS CDK for full control over every AWS resource, written by hand.

Amplify does not have to go all at once, since the frontend can stay on Amplify Hosting while new backend work moves to an Encore service in the same AWS account, and the quickstart walks through a first one.

Frequently asked questions

What is the best alternative to AWS Amplify?

Encore if you want backend APIs, Postgres, Pub/Sub and object storage declared in TypeScript, running locally and provisioned in your own AWS account. SST if you want to define AWS resources yourself in TypeScript with a fast Lambda dev loop. Vercel for frontend hosting paired with a separate backend, Firebase or Supabase for a hosted backend-as-a-service, and raw AWS CDK if you want full control of what Amplify generates.

Is Amplify Gen 2 built on AWS CDK?

Yes. Amplify Gen 2 defines the backend in TypeScript files under the amplify/ folder and deploys them as CloudFormation stacks generated with AWS CDK. Resources Amplify does not cover can be added with CDK constructs in a custom stack created with backend.createStack.

What database does Amplify use?

Amplify Data deploys a GraphQL API on AWS AppSync backed by Amazon DynamoDB by default. It can also connect to an existing PostgreSQL database, and custom logic runs in AWS Lambda functions that are attached as resolvers or handlers.

Does Amplify have local development?

Amplify Gen 2 uses a cloud sandbox. Running npx ampx sandbox deploys a per-developer CloudFormation stack into your AWS account and redeploys it as you change files, using CDK hot swapping where it can. Some changes, such as modifying a DynamoDB global secondary index, recreate the table in the sandbox.

Amplify vs Vercel: which should I use?

Both host frontends such as Next.js with git-based deploys. Amplify also generates a backend in your AWS account, while Vercel hosts on its own infrastructure and leaves the backend to you, so teams moving the frontend to Vercel usually pair it with a separate backend on AWS.

How do I add file uploads to a TypeScript backend on AWS with Encore?

Declare a bucket with new Bucket("photos") from encore.dev/storage/objects and return photos.signedUploadUrl(key, { ttl: 300 }) from an api endpoint, so the browser uploads straight to the bucket. encore run serves a local bucket, and a deploy to AWS creates an S3 bucket in your account.

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.

~/orders — claude
Claude Code
Claude Code v2.1.180Opus 5.5~/orders