Appsync Unified Repo -
Because everything lives in packages/api , any frontend change that expects a new field forces you to update the resolver in the same PR . The magic of the monorepo happens in package.json scripts. After every schema change, regenerate all clients automatically.
export function response(ctx: any) { return ctx.result; }
If you have ever worked on a project with multiple frontends (React, iOS, Android) talking to a single GraphQL API, you know the pain: Schema drift, duplicated resolver logic, and the "it works on my machine" syndrome for GraphQL transformations.
Enter the (monorepo). By managing your AWS AppSync configuration—schema, resolvers (VTL or JavaScript), datasources, and even client code—in a single repository, you can enforce consistency, improve developer experience, and streamline CI/CD. appsync unified repo
Example resolver ( getPost.ts ):
import { util } from '@aws-appsync/utils'; import { get } from 'aws-appsync-resolver-helpers'; // your own helpers export function request(ctx: any) { return { operation: 'GetItem', key: util.dynamodb.toMapValues({ id: ctx.args.id }), }; }
Taming the GraphQL Beast: Managing AWS AppSync in a Unified Repository Because everything lives in packages/api , any frontend
In packages/web/package.json :
// Attach a resolver using the new JS runtime postDS.createResolver('getPostResolver', { typeName: 'Query', fieldName: 'getPost', code: appsync.Code.fromAsset('graphql/resolvers/getPost.js'), runtime: appsync.FunctionRuntime.JS_1_0_0, }); In a unified repo, you can write resolvers in TypeScript and transpile them to the AppSync JS runtime. Store resolvers as .ts files and build them to resolvers/ during deployment.
How to share schemas, resolvers, and logic across multiple frontends without losing your mind. export function response(ctx: any) { return ctx
// packages/api/lib/appsync-stack.ts import * as appsync from 'aws-cdk-lib/aws-appsync'; import * as dynamodb from 'aws-cdk-lib/aws-dynamodb'; const api = new appsync.GraphqlApi(this, 'MyUnifiedApi', { name: 'UnifiedBlogApi', schema: appsync.Schema.fromAsset('graphql/schema.graphql'), // single source of truth });
Start with a simple two-package structure ( api + one client), then expand. The tooling (CDK, GraphQL Codegen, npm workspaces) is mature enough for production today.