A FastAPI based starter that relies heavily on existing plugins/frameworks to create an almost no-code experience. The goal is to build a template that can be used as a starting point for any FastAPI based project.
You need Python 3 and pip installed locally. Run the cookiecutter command (at least 1.7) and you'll be asked a few prompts.
pip3 install cookiecutter
cookiecutter https://github.com/gaganpreet/fastapi-starter
If you want to keep up to date with upstream changes (i.e. changes in this template), then it's better to use Cruft, which is fully compatible with Cookiecutter.
pip3 install cruft
cruft create https://github.com/gaganpreet/fastapi-starter
Using cruft will generate a metadata file named .cruft.json
(don't delete it). Later on you can update to the current version of this cookiecutter and import the changes to your generated project by running this command:
cruft update
- Sane defaults with few prompts
- Secure
- KISS principle
View live demo here.
- Uses best practices: Factory pattern and environment variables for configuration
- User registration, models, authentication using FastAPI Users
- Modern admin interface using React-Admin
- Github Action for building docker images and running automated tests
- Dependabot config to keep project dependencies up to date
- Create Typescript bindings for front-end automatically from OpenAPI spec using OpenAPI-Generator, no need to write/update code when backend changes
- SQLAlchemy (async with 2.0 future API) and Alembic for database migrations
- pytest with example tests included
- Integration tests with Cypress
- Docker images for frontend and backend
- Includes extra Dockerfile (backend serves frontend) for straightforward deployment
- Pre-commit hooks with Black, autoflake, isort, flake8, prettier, eslint for consistent code standards
The following features were left out in favour of simplicity:
- Celery/Flower/Redis - Not needed for simple projects, Celery can be easily replaced with background tasks.
- Traefik configuration - I prefer NGINX Proxy automation
- Fix docker setup
- Create Github action
- Dependabot config
- Add pre-commit hooks: Black, isort, flake8, mypy, tslint
- Setup FastAPI CRUD example
- Deploy with gunicorn as process manager (recommended for production)
- Coverage report in tests
- Email templates
- Deployment instructions: Possibly provide an option to create a single docker image (where FastAPI serves static assets) that can be easily deployed
- Async SQLAlchemy