# Schema Organisation
Lighthouse reads your schema from a single entrypoint, by default schema.graphql.
As you grow your schema, it can be useful to split it across multiple files. Use imports to include other files into your schema.
# Schema Imports
graphql/
|-- schema.graphql
|-- user.graphql
Imports start with #import, followed by the relative path to the imported file.
type Query {
user: User
}
#import user.graphql
The contents of user.graphql are pasted into the final schema.
type Query {
user: User
}
type User {
name: String!
}
# Wildcard Imports
graphql/
|-- schema.graphql
|-- blog/
|-- post.graphql
|-- category.graphql
To import all schema files in blog/ in one go, use wildcard import syntax
(works like PHP's glob function (opens new window)).
#import blog/*.graphql
# Type Extensions
Suppose you have split the definition for Post into post.graphql:
type Post {
title: String
author: User @belongsTo
}
The definition is imported from schema.graphql:
#import post.graphql
Now you want to add queries to allow fetching posts.
While you could add it to the main Query type in schema.graphql,
it is generally preferable to colocate queries with the type they return.
Make sure schema.graphql contains a Query type. You can add an empty type
if you don't have one there:
type Query
Then extend the Query type in post.graphql:
type Post {
title: String
author: User @belongsTo
}
extend type Query {
posts: [Post!]! @paginate
}
The fields in the extend type definition are merged with those of the original type.
Apart from object types type, you can also extend input, interface and enum types.
Lighthouse will merge the fields (or values) with the original definition and always
produce a single type in the final schema.