Skip to content
/ tin Public

Rust GraphQL Template 🏗️

License

Notifications You must be signed in to change notification settings

azzamsa/tin

Repository files navigation


Rust GraphQL Template 🏗️

Build status

Features

  • Async-GraphQL: GraphQL server library.
    • Supports Relay-compatible cursor-based pagination.
    • Automatically disables Playground in the production environment for performance reasons.
    • Automatically stores GraphQL schema to file.
  • SQLx: SQL toolkit.
  • Axum: web framework.
  • Tracing: includes local timestamps.
  • Frunk: avoids writing repetitive boilerplate.
  • utoipa: automatically generates OpenAPI documentation.
  • git-cliff: Changelog Generator.
  • Includes exhaustive integration tests.
    • Uses Cynic as GraphQL client.
    • Uses Hurl for API collection.
  • Utilizes fast and tiny image containers, leveraging cargo-chef and scratch or distroless images.
  • Implements GitHub Actions for CI and release workflows.
  • Removed Git hooks for continuous development (formatting, linting, testing) commit link.
  • Ensures consistent formatting using dprint for non-Rust files (Markdown, Dockerfiles, etc.).
  • Supports cargo-binstall.
  • Includes 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 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