Accelerate your next web development project with this FastAPI/Nuxt.js base project generator.
This project is for developers looking to build and maintain full-feature progressive web applications using Python on the backend / Typescript on the frontend, and want the complex-but-routine aspects of auth 'n auth, and component and deployment configuration, taken care of, including interactive API documentation.
This is a comprehensively updated fork of Sebastián Ramírez's Full Stack FastAPI and PostgreSQL Base Project Generator. FastAPI is updated to version 0.99 (July 2023), SQLAlchemy to version 2.0 (July 2023), and the frontend to Nuxt 3.6 (July 2023).
This FastAPI, PostgreSQL, Neo4j & Nuxt 3 repo will generate a complete web application stack as a foundation for your project development.
- Docker Compose integration and optimization for local development.
- Authentication user management schemas, models, crud and apis already built, with OAuth2 JWT token support & default hashing. Offers magic link authentication, with password fallback, with cookie management, including
access
andrefresh
tokens. - FastAPI backend with Inboard one-repo Docker images:
- SQLAlchemy version 2.0 support for models.
- MJML templates for common email transactions.
- Metadata Schema based on Dublin Core for inheritance.
- Common CRUD support via generic inheritance.
- Standards-based: Based on (and fully compatible with) the open standards for APIs: OpenAPI and JSON Schema.
- Many other features: including automatic validation, serialization, interactive documentation, etc.
- Nuxt/Vue 3 frontend:
- Authorisation via middleware for page access, including logged in or superuser.
- Model blog project, with Nuxt Content for writing Markdown pages.
- Form validation with Vee-Validate 4.
- State management with Pinia, and persistance with Pinia PersistedState.
- CSS and templates with TailwindCSS, HeroIcons, and HeadlessUI.
- PostgreSQL database.
- PGAdmin for PostgreSQL database management.
- Celery worker that can import and use models and code from the rest of the backend selectively.
- Flower for Celery jobs monitoring.
- Neo4j graph database, including integration into the FastAPI base project.
- Load balancing between frontend and backend with Traefik, so you can have both under the same domain, separated by path, but served by different containers.
- Traefik integration, including Let's Encrypt HTTPS certificates automatic generation.
- GitLab CI (continuous integration), including frontend and backend testing.
- Getting started
- Development and installation
- Deployment for production
- Authentication and magic tokens
After using this generator, your new project (the directory created) will contain an extensive README.md
with instructions for development, deployment, etc. You can pre-read the project README.md
template here too.
This current release (August 2023) is for FastAPI version 0.99 and is the last before introducing support for Pydantic 2. Since this is intended as a base stack on which you will build complex applications, there is no intention of backwards compatability between releases, and the objective is to ensure that each release has the latest long-term-support versions of the core libraries so that you can rely on your application core for as long as possible.
To align with Inboard, Poetry has been deprecated in favour of Hatch. This will also, hopefully, sort out some Poetry-related Docker build errors.
The tests are broken and it would be great if someone could take that on. Other potential roadmap items:
- Translation: docs are all in English and it would be great if those could be in other languages.
- Internationalisation: I am working on adding nuxt/i18n, but the Nuxt3 version is still pre-release.
- PWA: Would be good to review the Vite PWA plugin.
See notes and releases.
- Updates: Complete update of stack to latest long-term releases. #35 by @turukawa, review by @br3ndonland
frontend
:- Node 16 -> 18
- Nuxt 3.2 -> 3.6.5
- Latest Pinia requires changes in stores, where imports are not required (cause actual errors), and parameter declaration must happen in functions.
backend
andceleryworker
:- Python 3.9 -> 3.11
- FastAPI 0.88 -> 0.99 (Inboard 0.37 -> 0.51)
- Poetry -> Hatch
- Postgres 14 -> 15
- Fixed: Updated token url in deps.py #29 by @vusa
- Docs: Reorganised documentation #21 by @turukawa
- @nuxt/content 2.2.1 -> 2.4.3
- Fixed:
@nuxt/content
default api,/api/_content
, conflicts with thebackend
api url preventing content pages loading. - Documentation: Complete deployment guide in
DEPLOYMENT-README.md
(this has now been moved to/docs
)
- Fixed: URLs for recreating project in generated
README.md
. PR #15 by @FranzForstmayr - Fixed: Absolute path for mount point in
docker-compose.override.yml
. PR #16 by @FranzForstmayr - Fixed: Login artifacts left over from before switch to magic auth. PR #18 by @turukawa and @FranzForstmayr
- New: New floating magic login card. PR #19 by @turukawa
- New: New site contact page. PR #20 by @turukawa
- SQLAlchemy 1.4 -> 2.0
- Nuxt.js 3.0 -> 3.2.2
- Fixed:
tokenUrl
inapp/api/deps.py
. Thanks to @Choiuijin1125. - Fixed: SMTP options for TLS must be
ssl
. Thanks to @raouldo. - Fixed:
libgeos
is a dependency forshapely
which is a dependency forneomodel
, and which doesn't appear to be installed correctly on Macs. Thanks to @valsha and @Mocha-L. - Fixed:
frontend
fails to start in development. Thanks to @pabloapast and @dividor.
- New feature: magic (email-based) login, with password fallback
- New feature: Time-based One-Time Password (TOTP) authentication
- Security enhancements to improve consistency, safety and reliability of the authentication process (see full description in the frontend app)
- Requires one new
frontend
dependency: QRcode.vue
- Corrected error in variable name
ACCESS_TOKEN_EXPIRE_SECONDS
- Inboard 0.10.4 -> 0.37.0, including FastAPI 0.88
- SQLAlchemy 1.3 -> 1.4
- Authentication refresh token tables and schemas for long-term issuing of a new access token.
- Postgresql 12 -> 14
- Neo4j pinned to 5.2.0
- Nuxt.js 2.5 -> 3.0
- Pinia for state management (replaces Vuex)
- Vee-Validate 3 -> 4
- Tailwind 2.2 -> 3.2
Historic changes from original
This project is licensed under the terms of the MIT license.