Project Name | Stars | Downloads | Repos Using This | Packages Using This | Most Recent Commit | Total Releases | Latest Release | Open Issues | License | Language |
---|---|---|---|---|---|---|---|---|---|---|
Apollo Server | 13,272 | 5,326 | 1,153 | a day ago | 305 | August 26, 2022 | 39 | mit | TypeScript | |
🌍 Spec-compliant and production ready JavaScript GraphQL server that lets you develop in a schema-first way. Built for Express, Connect, Hapi, Koa, and more. | ||||||||||
Graphql Shield | 3,429 | 2 months ago | 89 | mit | TypeScript | |||||
🛡 A GraphQL tool to ease the creation of permission layer. | ||||||||||
Vulcain | 3,358 | 2 | a month ago | 15 | October 14, 2021 | 22 | agpl-3.0 | Go | ||
Fast and idiomatic client-driven REST APIs. | ||||||||||
Meatier | 3,115 | 5 years ago | 36 | JavaScript | ||||||
:hamburger: like meteor, but meatier :hamburger: | ||||||||||
Strawberry | 3,047 | 10 hours ago | 338 | mit | Python | |||||
A GraphQL library for Python that leverages type annotations 🍓 | ||||||||||
Async Graphql | 2,773 | 52 | 2 days ago | 386 | September 26, 2022 | 83 | apache-2.0 | Rust | ||
A GraphQL server library implemented in Rust | ||||||||||
Graphpack | 1,992 | 12 | 1 | 2 years ago | 14 | February 26, 2019 | 34 | mit | JavaScript | |
☄️ A minimalistic zero-config GraphQL server. | ||||||||||
Ariadne | 1,977 | 10 | 29 | 3 days ago | 34 | April 22, 2022 | 50 | bsd-3-clause | Python | |
Python library for implementing GraphQL servers using schema-first approach. | ||||||||||
Reactql | 1,833 | 4 months ago | 71 | November 18, 2017 | 41 | mit | TypeScript | |||
Universal React+GraphQL starter kit: React 16, Apollo 2, MobX, Emotion, Webpack 4, GraphQL Code Generator, React Router 4, PostCSS, SSR | ||||||||||
Json Graphql Server | 1,811 | 40 | 5 | 3 months ago | 21 | August 24, 2022 | 8 | mit | JavaScript | |
Get a full fake GraphQL API with zero coding in less than 30 seconds. |
☄️ A minimalistic zero-config GraphQL server
Check out the demo on CodeSandbox: https://codesandbox.io/s/k3qrkl8qlv
Graphpack lets you create GraphQL servers with zero configuration. It uses webpack
with nodemon
and Apollo Server
under the hood, so we get features like Live Reloading, GraphQL Playground, GraphQL Imports and many more right out of the box.
import()
's thanks to Babel
yarn add --dev graphpack
src/schema.graphql
and src/resolvers.js
src
├── resolvers.js
└── schema.graphql
In your schema, add some sample types in SDL:
type Query {
hello: String
}
In src/resolvers.js
:
const resolvers = {
Query: {
hello: () => 'world!',
},
};
export default resolvers;
package.json
run scriptsAdd following scripts to your package.json
:
"scripts": {
"dev": "graphpack",
"build": "graphpack build"
},
To start the development server, simply run:
yarn dev
To create a production-ready build run following command:
yarn build
Add following script that executes our build:
"scripts": {
"start": "node ./build/index.js"
},
The following command will run the build and start the app
yarn start
Make sure to create a build before running the start script.
graphpack
(alias graphpack dev
)Runs graphpack in development mode. After a successful build your output should look something like this:
Graphpack will watch for changes in your ./src
folder and automatically reload the server.
graphpack build
Creates a production-ready build under the project roots build
folder.
src/resolvers.js
(required)In this file you define all your resolvers:
// src/resolvers.js
const resolvers = {
Query: {
article: (obj, args) => getArticleById(args.id),
articles: () => getArticles(),
},
};
export default resolvers;
You can use any of these folder/file structure:
src/resolvers.js
src/resolvers/index.js
src/schema.graphql
(required)Here you define all your GraphQL type definitions:
# src/schema.graphql
type Article {
title: String
body: String
}
type Query {
article: Article
articles: [Article!]!
}
Alternatively you can create a src/schema.js
and use the template literal tag gql
by graphql-tag
:
// src/schema.js
import { gql } from 'graphql-tag';
const typeDefs = gql`
type Article {
title: String
body: String
}
type Query {
article: Article
articles: [Article!]!
}
`;
export default typeDefs;
Note that in this case, you will need to install graphql-tag
.
Graphpack can resolve both
.js
and.graphql
files. This means you can use any of these folder/file structures:
src/schema.js
src/schema/index.js
src/schema.graphql
src/schema/index.graphql
src/context.js
Create src/context.js
and do following:
const context = req => ({
/* context props here */
});
export default context;
You can use any of these folder/file structures:
src/context.js
src/context/index.js
For custom configuration you can create a graphpack
config file in cosmiconfig format:
graphpack.config.js
(recommended)graphpack
field in package.json
.graphpackrc
in JSON or YAML.graphpackrc
with the extensions .json
, .yaml
, .yml
, or .js
Note that the config file (eg. graphpack.config.js) is not going through babel transformation.
In your graphpack.config.js
configure your server as follows:
// graphpack.config.js
module.exports = {
server: {
introspection: false,
playground: false,
applyMiddleware: { app, path }, // app is from an existing (Express/Hapi,...) app
},
};
Return config as a function to get the env variable:
// graphpack.config.js
// `mode` will be either `development` or `production`
module.exports = (mode) => {
const IS_DEV = mode !== 'production';
server: {
introspection: IS_DEV,
playground: IS_DEV,
mocks: IS_DEV,
mocks: IS_DEV,
// ...
}
};
export default config;
Refer to the Apollo Server docs for more details about the options.
Note that it's not possible to set
resolvers
,typeDefs
orcontext
in the config file. For this please refer to entry files.
Configure the server port with:
module.exports = {
server: {
port: 4000, // default,
},
};
In your graphpack.config.js
add your applyMiddleware field as follows:
// graphpack.config.js
const express = require('express');
const app = express();
app.get('/hello', (req, res) => {
res.send('Hello world!');
});
module.exports = {
server: {
applyMiddleware: {
app,
path: '/graphql', // default
},
},
};
Your GraphQL endpoint will be available under http://localhost:4000/graphql
. To configure the server options refer to https://www.apollographql.com/docs/apollo-server/api/apollo-server.html#ApolloServer-applyMiddleware
To extend webpack, you can define a function that extends its config via the config file:
// graphpack.config.js
module.exports = {
webpack: ({ config, webpack }) => {
// Add customizations to config
// Important: return the modified config
return config;
},
};
Add an optional babel.config.js
to your project root with the following preset:
// babel.config.js
module.exports = api => {
// Cache the returned value forever and don't call this function again
api.cache(true);
return {
presets: ['graphpack/babel'],
// ... Add your plugins and custom config
};
};
Graphpack was heavily inspired by:
Thanks to @richardbmx for designing the logo! 🙌
This project exists thanks to all the people who contribute.
Thank you to all our backers! 🙏 [Become a backer]
Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]
MIT