Skip to content

azzamsa/tin

Repository files navigation


Rust GraphQL Template 🏗️

Build status

Features

  • Async-GraphQL GraphQL server library.
    • Relay-compatible cursor-based pagination.
    • Playground disabled in the production environment for performance reasons.
    • Store GraphQL schema to file automatically.
  • SQLx SQL toolkit.
  • Axum web framework.
  • Tracing with local timestamp.
  • Frunk to avoid writing repetitive boilerplate.
  • utoipa Auto-generated OpenAPI documentation.
  • git-cliff Changelog Generator.
  • Exhaustive Integration tests.
    • Uses Cynic for GraphQL client.
    • Hurl for E2E test.
  • Fast and tiny image container. Using cargo-chef and scratch or distroless image.
  • GitHub Action for CI and release.
  • Git hooks for continuous development (format, lint, test).. Removed
  • Consistent formatting using dprint for non Rust files (Markdown, Dockerfiles, Etc).
  • cargo-binstall support.
  • cargo-release workflow.

Checklist

When you use this template, try to follow the checklist to update your info properly

  • Change the author name in LICENSE
  • Change the package info in Cargo.toml
  • Change the application name:
    • Database name and other values in .env, .example.env, and other container related files.
    • The OpenAPI info in routes.rs
    • App name in release.yml
    • Project URL in cliff.toml
    • App name in the import statements across Rust source and tests files.
  • Clean up the READMEs and remove routes

And, enjoy :)

Usage

$ # Clone the repository

$ # Run the database
$ podman-compose -f docker-compose.local.yml up db -d

$ touch $SCHEMA_LOCATION # See .example.env
$ just dev  # See also `just setup`

Go to the playground http://127.0.0.1:8000/playground to see the schema.

Navigating the Code

All the features can be found in the CHANGELOG file tagged with feat. The file only contains user-facing changes, so you won't get lost navigating the code.

Credits

  • Clean and Scalable Architecture for Web Applications in Rust by Sylvain Kerkour. Article, Code.
  • Icons and emoji from Noto Emoji