tin
tin copied to clipboard
Rust GraphQL Template 🏗️
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.
- Fast and tiny image container. Using cargo-chef and
scratchordistrolessimage. - 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.
- [ ] Database name and other values in
- [ ] 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