# GraphQL and AppSync

> Over-engineering. Schema maintenance isn't worth it; plain web APIs are enough.

- Verdict: Never
- Vendor: AWS
- Layer: [APIs, queues and events](https://cloudlesslabs.com/stack/layers/api-events.md)
- Last reviewed: 18 October 2026, by Nicolas Dao (Cloudless Labs, Sydney)
- Web page: https://cloudlesslabs.com/stack/aws-appsync/. The whole stack in one file: https://cloudlesslabs.com/stack/brief.md

I adopted GraphQL early and went back to plain web APIs. The schema becomes a second product to maintain, and almost no client benefits from it.

## Don't use it when

- Always, for the apps I build. For real-time, AppSync Events cost about $310 a month in my auction example vs $15–30 on Durable Objects.

## In my words: what hurts

- I was an early adopter of GraphQL. I don't use it any more.

## Provisioning

Official Pulumi package · Official Terraform provider

## Use instead

Plain HTTP APIs on Lambda function URLs, and Durable Objects for real-time.

## Alternatives

- [Lambda function URLs](https://cloudlesslabs.com/stack/aws-lambda-function-urls/index.md): Plain HTTP APIs.
- [Cloudflare Durable Objects](https://cloudlesslabs.com/stack/cloudflare-durable-objects/index.md): Real-time.

## Worked examples

- [A live auction on Durable Objects](https://cloudlesslabs.com/stack/guides/live-auction/index.md): How do thousands of bidders share one live auction without races, and what happens when it ends?

## Where it fits

- [An API for my app](https://cloudlesslabs.com/stack/use-cases/api.md): don't. GraphQL turns your schema into a second product to maintain, and almost no app benefits from it. Plain HTTP endpoints on function URLs do the same job with nothing extra to keep in sync. Instead: [Lambda function URLs](https://cloudlesslabs.com/stack/aws-lambda-function-urls/index.md).
- [Something live that many people watch at once](https://cloudlesslabs.com/stack/use-cases/realtime.md): don't. AppSync Events cost about $310 for the same auction, and bring GraphQL-era tooling. A Durable Object is the room and the referee in one. Instead: [Cloudflare Durable Objects](https://cloudlesslabs.com/stack/cloudflare-durable-objects/index.md).

## Related

- [APIs, queues and events](https://cloudlesslabs.com/stack/layers/api-events.md): every tool in this layer, with its verdict
- [The whole stack in one file](https://cloudlesslabs.com/stack/brief.md): every use case and tool, for questions that span many
- [Map of every Markdown file on cloudlesslabs.com, with what each one answers](https://ask.cloudlesslabs.com)
