File Organization
Best practices for organizing your GraphQL code in Nitro GraphQL applications.
Recommended Structure
Small Project
server/
└── graphql/
├── schema.graphql
├── hello.resolver.ts
└── context.tsMedium Project
server/
└── graphql/
├── schema.graphql
├── users/
│ ├── user.graphql
│ ├── queries.resolver.ts
│ └── mutations.resolver.ts
├── posts/
│ ├── post.graphql
│ └── post.resolver.ts
└── directives/
└── auth.directive.tsLarge Project
server/
└── graphql/
├── schema.graphql
├── auth/
│ ├── user.graphql
│ ├── user-queries.resolver.ts
│ ├── user-mutations.resolver.ts
│ └── user-types.resolver.ts
├── content/
│ ├── post.graphql
│ ├── comment.graphql
│ └── media.graphql
├── directives/
│ ├── auth.directive.ts
│ ├── permission.directive.ts
│ └── cache.directive.ts
└── utils/
├── validators.ts
└── helpers.tsNaming Conventions
Schema Files
- Use
.graphqlextension - Singular names:
user.graphql,post.graphql - Main schema:
schema.graphql
Resolver Files
- Must end with
.resolver.ts - Examples:
user.resolver.ts,queries.resolver.ts
Directive Files
- Must end with
.directive.ts - Examples:
auth.directive.ts,cache.directive.ts
Organizing by Feature
Group related files together:
server/graphql/
├── users/
│ ├── user.graphql # Types
│ ├── queries.resolver.ts # User queries
│ ├── mutations.resolver.ts # User mutations
│ └── types.resolver.ts # Field resolversOrganizing by Type
Separate queries, mutations, and types:
server/graphql/
├── schema.graphql
├── queries/
│ ├── user-queries.resolver.ts
│ └── post-queries.resolver.ts
├── mutations/
│ ├── user-mutations.resolver.ts
│ └── post-mutations.resolver.ts
└── types/
├── user-types.resolver.ts
└── post-types.resolver.tsBest Practices
- One schema file per domain:
user.graphql,post.graphql - Split resolvers: Separate queries, mutations, and types
- Named exports: Always use named exports in resolvers
- Consistent naming: Follow a naming pattern across your project
- Group related code: Keep related schemas and resolvers together