2018-06-24 16:47:01 +03:00
# Hasura GraphQL Engine
2020-05-04 07:13:53 +03:00
[![Latest release ](https://img.shields.io/github/v/release/hasura/graphql-engine )](https://github.com/hasura/graphql-engine/releases/latest)
[![Docs ](https://img.shields.io/badge/docs-v1.x-brightgreen.svg?style=flat )](https://hasura.io/docs)
2018-07-11 15:07:49 +03:00
[![CircleCI ](https://circleci.com/gh/hasura/graphql-engine.svg?style=shield )](https://circleci.com/gh/hasura/graphql-engine)
2018-07-11 07:57:03 +03:00
2018-07-12 16:31:46 +03:00
2018-12-20 11:48:06 +03:00
< a href = "https://discord.gg/vBPpJkS" > < img src = "https://img.shields.io/badge/chat-discord-brightgreen.svg?logo=discord&style=flat" > < / a >
2018-07-12 16:40:15 +03:00
< a href = "https://twitter.com/intent/follow?screen_name=HasuraHQ" > < img src = "https://img.shields.io/badge/Follow-HasuraHQ-blue.svg?style=flat&logo=twitter" > < / a >
2018-10-04 07:19:40 +03:00
< a href = "https://eepurl.com/dBUfJ5" > < img src = "https://img.shields.io/badge/newsletter-subscribe-yellow.svg?style=flat" > < / a >
2018-07-11 07:57:03 +03:00
2018-11-23 16:02:46 +03:00
Hasura GraphQL Engine is a blazing-fast GraphQL server that gives you **instant, realtime GraphQL APIs over Postgres** , with [**webhook triggers** ](event-triggers.md ) on database events, and [**remote schemas** ](remote-schemas.md ) for business logic.
2018-09-06 15:37:03 +03:00
2020-07-03 14:04:54 +03:00
Hasura helps you build [GraphQL ](https://hasura.io/graphql/ ) apps backed by Postgres or incrementally move to GraphQL for existing applications using Postgres.
2018-07-11 07:57:03 +03:00
2020-07-03 14:04:54 +03:00
Read more at [hasura.io ](https://hasura.io ) and the [docs ](https://hasura.io/docs/ ).
2018-07-16 15:55:05 +03:00
2018-07-16 13:52:27 +03:00
------------------
2018-07-11 07:57:03 +03:00
2018-09-20 07:24:05 +03:00
![Hasura GraphQL Engine Demo ](assets/demo.gif )
2018-09-13 09:30:07 +03:00
------------------
2018-09-20 07:24:05 +03:00
![Hasura GraphQL Engine Realtime Demo ](assets/realtime.gif )
2018-07-16 13:52:27 +03:00
-------------------
2018-09-13 09:30:07 +03:00
## Features
2018-08-06 17:07:03 +03:00
* **Make powerful queries**: Built-in filtering, pagination, pattern search, bulk insert, update, delete mutations
* **Realtime**: Convert any GraphQL query to a live query by using subscriptions
2019-04-15 11:16:32 +03:00
* **Merge remote schemas**: Access custom GraphQL schemas for business logic via a single GraphQL Engine endpoint. [**Read more** ](remote-schemas.md ).
2018-09-05 16:04:29 +03:00
* **Trigger webhooks or serverless functions**: On Postgres insert/update/delete events ([read more](event-triggers.md))
2018-07-16 13:52:27 +03:00
* **Works with existing, live databases**: Point it to an existing Postgres database to instantly get a ready-to-use GraphQL API
* **Fine-grained access control**: Dynamic access control that integrates with your auth system (eg: auth0, firebase-auth)
* **High-performance & low-footprint**: ~15MB docker image; ~50MB RAM @ 1000 req/s; multi-core aware
* **Admin UI & Migrations**: Admin UI & Rails-inspired schema migrations
2018-10-02 07:55:31 +03:00
* **Postgres** ❤️: Supports Postgres types (PostGIS/geo-location, etc.), turns views to *graphs* , trigger stored functions or procedures with mutations
2018-07-11 15:07:49 +03:00
2020-07-03 14:04:54 +03:00
Read more at [hasura.io ](https://hasura.io ) and the [docs ](https://hasura.io/docs/ ).
2018-07-16 13:52:27 +03:00
2018-09-13 09:30:07 +03:00
## Table of contents
<!-- markdown - toc start - Don't edit this section. Run M - x markdown - toc - refresh - toc -->
**Table of Contents**
- [Quickstart: ](#quickstart )
- [One-click deployment on Heroku ](#one-click-deployment-on-heroku )
- [Other deployment methods ](#other-deployment-methods )
- [Architecture ](#architecture )
- [Client-side tooling ](#client-side-tooling )
- [Add business logic ](#add-business-logic )
2018-11-23 16:02:46 +03:00
- [Remote schemas ](#remote-schemas )
2018-09-13 09:30:07 +03:00
- [Trigger webhooks on database events ](#trigger-webhooks-on-database-events )
- [Demos ](#demos )
- [Realtime applications ](#realtime-applications )
- [Videos ](#videos )
- [Support & Troubleshooting ](#support--troubleshooting )
- [Contributing ](#contributing )
2018-09-27 14:14:50 +03:00
- [Brand assets ](#brand-assets )
2018-09-13 09:30:07 +03:00
- [License ](#license )
2019-03-26 08:45:46 +03:00
- [Translations ](#translations )
2018-09-13 09:30:07 +03:00
<!-- markdown - toc end -->
2018-07-11 15:07:49 +03:00
2019-04-15 11:16:32 +03:00
## Quickstart:
2018-07-11 15:07:49 +03:00
2020-07-07 15:52:56 +03:00
### One-click deployment on Hasura Cloud
2018-07-11 15:07:49 +03:00
2020-07-07 15:52:56 +03:00
The fastest and easiest way to try Hasura out is via [Hasura Cloud ](https://hasura.io/docs/cloud/1.0/manual/getting-started/index.html ).
2018-07-11 15:07:49 +03:00
2020-07-07 15:52:56 +03:00
1. Click on the following button to deploy GraphQL engine on Hasura Cloud including Postgres add-on or using an existing Postgres database:
2018-07-11 15:07:49 +03:00
2020-07-07 15:52:56 +03:00
[![Deploy to Hasura Cloud ](https://graphql-engine-cdn.hasura.io/img/deploy_to_hasura.png )](https://cloud.hasura.io/)
2018-07-16 13:52:27 +03:00
2. Open the Hasura console
2020-07-07 15:52:56 +03:00
Click on the button "Launch console" to open the Hasura console.
2018-07-11 15:07:49 +03:00
3. Make your first GraphQL query
2020-02-27 13:13:07 +03:00
Create a table and instantly run your first query. Follow this [simple guide ](https://hasura.io/docs/1.0/graphql/manual/getting-started/first-graphql-query.html ).
2018-07-11 15:07:49 +03:00
2019-03-06 08:15:45 +03:00
### Other one-click deployment options
Check out the instructions for the following one-click deployment options:
| **Infra provider** | **One-click link** | **Additional information** |
|:------------------:|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------------------------------------------------------------------:|
2020-07-07 15:52:56 +03:00
| Heroku | [![Deploy to Heroku ](https://www.herokucdn.com/deploy/button.svg )](https://heroku.com/deploy?template=https://github.com/hasura/graphql-engine-heroku) | [docs ](https://hasura.io/docs/1.0/graphql/manual/guides/deployment/heroku-quickstart.html ) |
2020-02-27 13:13:07 +03:00
| DigitalOcean | [![Deploy to DigitalOcean ](https://graphql-engine-cdn.hasura.io/img/create_hasura_droplet_200px.png )](https://marketplace.digitalocean.com/apps/hasura?action=deploy& refcode=c4d9092d2c48& utm_source=hasura& utm_campaign=readme) | [docs ](https://hasura.io/docs/1.0/graphql/manual/guides/deployment/digital-ocean-one-click.html#hasura-graphql-engine-digitalocean-one-click-app ) |
| Azure | [![Deploy to Azure ](http://azuredeploy.net/deploybutton.png )](https://portal.azure.com/#create/Microsoft.Template/uri/https%3a%2f%2fraw.githubusercontent.com%2fhasura%2fgraphql-engine%2fmaster%2finstall-manifests%2fazure-container-with-pg%2fazuredeploy.json) | [docs ](https://hasura.io/docs/1.0/graphql/manual/guides/deployment/azure-container-instances-postgres.html ) |
2020-04-01 12:55:28 +03:00
| Render | [![Deploy to Render ](https://render.com/images/deploy-to-render-button.svg )](https://render.com/deploy?repo=https://github.com/render-examples/hasura-graphql) | [docs ](https://hasura.io/docs/1.0/graphql/manual/guides/deployment/render-one-click.html ) |
2019-03-06 08:15:45 +03:00
2018-07-11 15:07:49 +03:00
### Other deployment methods
2018-09-13 12:33:13 +03:00
For Docker-based deployment and advanced configuration options, see [deployment
2020-02-27 13:13:07 +03:00
guides](https://hasura.io/docs/1.0/graphql/manual/getting-started/index.html) or
2018-09-13 12:33:13 +03:00
[install manifests ](install-manifests ).
2018-07-11 15:07:49 +03:00
## Architecture
2018-07-16 13:52:27 +03:00
The Hasura GraphQL Engine fronts a Postgres database instance and can accept GraphQL requests from your client apps. It can be configured to work with your existing auth system and can handle access control using field-level rules with dynamic variables from your auth system.
2018-07-11 15:07:49 +03:00
2018-11-23 16:02:46 +03:00
You can also merge remote GraphQL schemas and provide a unified GraphQL API.
2018-07-11 15:07:49 +03:00
2018-07-16 13:52:27 +03:00
![Hasura GraphQL Engine architecture ](assets/hasura-arch.svg )
2018-07-11 15:07:49 +03:00
## Client-side tooling
2018-07-16 13:52:27 +03:00
Hasura works with any GraphQL client. We recommend using [Apollo Client ](https://github.com/apollographql/apollo-client ). See [awesome-graphql ](https://github.com/chentsulin/awesome-graphql ) for a list of clients.
2018-07-11 15:07:49 +03:00
2018-09-13 09:30:07 +03:00
## Add business logic
2018-11-23 16:02:46 +03:00
GraphQL Engine provides easy-to-reason, scalable and performant methods for adding custom business logic to your backend:
2018-09-13 09:30:07 +03:00
2018-11-23 16:02:46 +03:00
### Remote schemas
Add custom resolvers in a remote schema in addition to Hasura's Postgres-based GraphQL schema. Ideal for use-cases like implementing a payment API, or querying data that is not in your database - [read more ](remote-schemas.md ).
2018-09-13 09:30:07 +03:00
### Trigger webhooks on database events
Add asynchronous business logic that is triggered based on database events.
Ideal for notifications, data-pipelines from Postgres or asynchronous
processing - [read more ](event-triggers.md ).
2018-11-23 16:02:46 +03:00
### Derived data or data transformations
2020-02-27 13:13:07 +03:00
Transform data in Postgres or run business logic on it to derive another dataset that can be queried using GraphQL Engine - [read more ](https://hasura.io/docs/1.0/graphql/manual/queries/derived-data.html ).
2018-11-23 16:02:46 +03:00
2018-09-13 09:30:07 +03:00
## Demos
2020-03-03 07:13:02 +03:00
Check out all the example applications in the [community/sample-apps ](community/sample-apps ) directory.
2019-11-29 09:46:06 +03:00
2018-09-13 09:30:07 +03:00
### Realtime applications
- Group Chat application built with React, includes a typing indicator, online users & new
message notifications.
2018-11-27 13:31:56 +03:00
- [Try it out ](https://realtime-chat.demo.hasura.app/ )
2019-09-26 07:39:20 +03:00
- [Tutorial ](community/sample-apps/realtime-chat )
2018-11-27 13:31:56 +03:00
- [Browse APIs ](https://realtime-chat.demo.hasura.app/console )
2018-09-13 09:30:07 +03:00
- Live location tracking app that shows a running vehicle changing current GPS
2019-04-15 11:16:32 +03:00
coordinates moving on a map.
2018-11-27 13:31:56 +03:00
- [Try it out ](https://realtime-location-tracking.demo.hasura.app/ )
2019-09-26 07:39:20 +03:00
- [Tutorial ](community/sample-apps/realtime-location-tracking )
2018-11-27 13:31:56 +03:00
- [Browse APIs ](https://realtime-location-tracking.demo.hasura.app/console )
2018-09-13 09:30:07 +03:00
- A realtime dashboard for data aggregations on continuously changing data.
2018-11-27 13:31:56 +03:00
- [Try it out ](https://realtime-poll.demo.hasura.app/ )
2019-09-26 07:39:20 +03:00
- [Tutorial ](community/sample-apps/realtime-poll )
2018-11-27 13:31:56 +03:00
- [Browse APIs ](https://realtime-poll.demo.hasura.app/console )
2018-09-13 09:30:07 +03:00
### Videos
* [Add GraphQL to a self-hosted GitLab instance ](https://www.youtube.com/watch?v=a2AhxKqd82Q ) (*3:44 mins*)
* [Todo app with Auth0 and GraphQL backend ](https://www.youtube.com/watch?v=15ITBYnccgc ) (*4:00 mins*)
* [GraphQL on GitLab integrated with GitLab auth ](https://www.youtube.com/watch?v=m1ChRhRLq7o ) (*4:05 mins*)
* [Dashboard for 10million rides with geo-location (PostGIS, Timescale) ](https://www.youtube.com/watch?v=tsY573yyGWA ) (*3:06 mins*)
2018-07-11 15:07:49 +03:00
2018-07-11 16:42:49 +03:00
## Support & Troubleshooting
2018-07-18 09:22:42 +03:00
The documentation and community will help you troubleshoot most issues. If you have encountered a bug or need to get in touch with us, you can contact us using one of the following channels:
2018-07-11 16:42:49 +03:00
2020-07-03 14:04:54 +03:00
* Support & feedback: [Discord ](https://discord.gg/hasura )
2018-10-04 07:09:47 +03:00
* Issue & bug tracking: [GitHub issues ](https://github.com/hasura/graphql-engine/issues )
2018-07-16 13:52:27 +03:00
* Follow product updates: [@HasuraHQ ](https://twitter.com/hasurahq )
* Talk to us on our [website chat ](https://hasura.io )
2018-07-11 16:42:49 +03:00
We are committed to fostering an open and welcoming environment in the community. Please see the [Code of Conduct ](code-of-conduct.md ).
2018-07-11 07:57:03 +03:00
2018-10-13 11:29:18 +03:00
If you want to report a security issue, please [read this ](SECURITY.md ).
2018-07-11 07:57:03 +03:00
## Contributing
2018-07-11 16:42:49 +03:00
Check out our [contributing guide ](CONTRIBUTING.md ) for more details.
2018-07-11 09:51:11 +03:00
2018-09-27 14:14:50 +03:00
## Brand assets
Hasura brand assets (logos, the Hasura mascot, powered by badges etc.) can be
found in the [assets/brand ](assets/brand ) folder. Feel free to use them in your
application/website etc. We'd be thrilled if you add the "Powered by Hasura"
badge to your applications built using Hasura. ❤️
< div style = "display: flex;" >
2019-04-26 07:35:52 +03:00
< img src = "assets/brand/powered_by_hasura_blue.svg" width = "150px" / >
2018-09-27 14:14:50 +03:00
< img src = "assets/brand/powered_by_hasura_white.svg" width = "150px" / >
< / div >
```html
<!-- For light backgrounds -->
< a href = "https://hasura.io" >
2019-04-26 07:35:52 +03:00
< img width = "150px" src = "https://graphql-engine-cdn.hasura.io/img/powered_by_hasura_blue.svg" / >
2018-09-27 14:14:50 +03:00
< / a >
<!-- For dark backgrounds -->
< a href = "https://hasura.io" >
< img width = "150px" src = "https://graphql-engine-cdn.hasura.io/img/powered_by_hasura_white.svg" / >
< / a >
```
2018-07-11 09:51:11 +03:00
## License
2019-04-15 11:16:32 +03:00
The core GraphQL Engine is available under the [Apache License 2.0 ](https://www.apache.org/licenses/LICENSE-2.0 ) (Apache-2.0).
2018-07-11 09:51:11 +03:00
2018-10-11 09:07:05 +03:00
All **other contents** (except those in [`server` ](server ), [`cli` ](cli ) and
[`console` ](console ) directories) are available under the [MIT License ](LICENSE-community ).
2018-09-13 09:30:07 +03:00
This includes everything in the [`docs` ](docs ) and [`community` ](community )
directories.
2019-03-26 08:45:46 +03:00
## Translations
This readme is available in the following translations:
2019-04-15 11:16:32 +03:00
- [Japanese :jp: ](translations/README.japanese.md ) (:pray: [@moksahero ](https://github.com/moksahero ))
- [French :fr: ](translations/README.french.md ) (:pray: [@l0ck3 ](https://github.com/l0ck3 ))
2019-12-25 20:36:02 +03:00
- [Bosnian :bosnia_herzegovina: ](translations/README.bosnian.md ) (:pray: [@hajro92 ](https://github.com/hajro92 ))
2019-11-29 09:46:06 +03:00
- [Russian :ru: ](translations/README.russian.md ) (:pray: [@highflyer910 ](https://github.com/highflyer910 ))
2019-10-21 13:54:51 +03:00
- [Greek 🇬🇷 ](translations/README.greek.md ) (:pray: [@MIP2000 ](https://github.com/MIP2000 ))
2019-12-24 15:55:58 +03:00
- [Spanish 🇲🇽 ](/translations/README.mx_spanish.md )(:pray: [@ferdox2 ](https://github.com/ferdox2 ))
2019-11-28 14:55:56 +03:00
- [Indonesian :indonesia: ](translations/README.indonesian.md ) (:pray: [@anwari666 ](https://github.com/anwari666 ))
2019-11-19 08:49:24 +03:00
- [Brazilian Portuguese :brazil: ](translations/README.portuguese_br.md ) (:pray: [@rubensmp ](https://github.com/rubensmp ))
2019-11-28 14:38:04 +03:00
- [German 🇩🇪 ](translations/README.german.md ) (:pray: [@FynnGrandke ](https://github.com/FynnGrandke ))
2020-01-06 10:18:28 +03:00
- [Chinese :cn: ](translations/README.chinese.md ) (:pray: [@jagreetdg ](https://github.com/jagreetdg ) & [@johnbanq ](https://github.com/johnbanq ))
2020-03-03 07:13:02 +03:00
- [Turkish :tr: ](translations/README.turkish.md ) (:pray: [@berat ](https://github.com/berat ))
2020-02-18 11:32:23 +03:00
- [Korean :kr: ](translations/README.korean.md ) (:pray: [@라스크 ](https://github.com/laskdjlaskdj12 ))
2019-04-15 11:16:32 +03:00
2019-04-26 07:35:52 +03:00
Translations for other files can be found [here ](translations ).