sudograph 0.4.3

GraphQL database for the Internet Computer
Documentation
# Sudograph

Sudograph is a [GraphQL](https://graphql.org/) database for the [Internet Computer](https://dfinity.org/) (IC).

Its goal is to become the simplest way to develop applications for the IC. Developers start by defining a [GraphQL schema](https://graphql.org/learn/schema/) using the [GraphQL SDL](https://www.digitalocean.com/community/tutorials/graphql-graphql-sdl). Once the schema is defined, it can be included within a canister and deployed to the IC. An entire relational database is generated from the schema, with GraphQL queries and mutations enabling a variety of [CRUD](https://en.wikipedia.org/wiki/Create,_read,_update_and_delete) operations, including advanced querying over relational data.

Sudograph should be considered somewhere between alpha and beta software.

## Documentation

For full documentation, see [The Sudograph Book](https://i67uk-hiaaa-aaaae-qaaka-cai.raw.ic0.app), which is hosted entirely on the IC by the way.

## Super quick start

```bash
mkdir my-new-project
cd my-new-project
npx sudograph
dfx start --background
dfx deploy
```

Once deployed, you can visit the following canisters from a Chromium browser:
* playground: [http://r7inp-6aaaa-aaaaa-aaabq-cai.localhost:8000](http://r7inp-6aaaa-aaaaa-aaabq-cai.localhost:8000)
* frontend: [http://rrkah-fqaaa-aaaaa-aaaaq-cai.localhost:8000](http://rrkah-fqaaa-aaaaa-aaaaq-cai.localhost:8000)

If the above didn't work, try [The Sudograph Book](https://i67uk-hiaaa-aaaae-qaaka-cai.raw.ic0.app).

## Major limitations

- [ ] No custom scalars, only Blob, Boolean, Date, Float, ID, Int, JSON, and String are available
- [ ] No custom input objects, only custom input scalars allowed in custom resolvers
- [ ] Each schema is limited to a single canister with ~4 GB of storage
- [ ] Very inneficient querying
- [ ] No automatic migrations, once you deploy the schema is final unless you implement your own migrations
- [ ] No authorization at the schema level, deal with it through your own custom authorization at the canister function level
- [ ] No automated tests
- [ ] No subscriptions
- [ ] No transactions

## Concrete roadmap

The following are very likely to be implemented by Sudograph in the short to medium term future:

- [ ] Robust automated tests
- [ ] Efficient querying i.e. indexes
- [ ] Automatic migrations
- [ ] Single canister transactions
- [ ] Custom scalars
- [ ] Schema authorization directives e.g. something like `@auth(role: OWNER)` for individual fields

## Tentative roadmap

The following may or may not be implemented by Sudograph, but they seem like good ideas:

- [ ] Unbounded scaling through a multi-canister architecture
- [ ] upsert
- [ ] create, update, delete many
- [ ] create, update, delete, update/upsert within mutation inputs
- [ ] order by multiple fields
- [ ] Statistics within relation results (for example total counts, averages, sums, etc)
- [ ] subscriptions
- [ ] unique constraints and capabilities

## Projects using Sudograph

* [Ethereum Archival Canister](https://github.com/lastmjs/ethereum-archival-canister)

## Inspiration

Sudograph was inspired by many previous projects:

* [Prisma](https://www.prisma.io/)
* [Graphback](https://graphback.dev/)
* [Hasura](https://hasura.io/)
* [PostGraphile](https://www.graphile.org/postgraphile/)
* [SQL Builder](https://github.com/jillsoffice/graphql-sql-builder)