Release Notes
Latest Changes
Internal
0.10.0
Features
- ✅ Add items and admin tests, and refactor existing ones. PR #2146 by @alejsdev.
- ✨ Add created_at field to User and Item models and update endpoints. PR #2144 by @alejsdev.
- 🔧 Migrate from npm to Bun. PR #2097 by @alejsdev.
- 🔧 Set up node monorepo. PR #2095 by @alejsdev.
- 🧑💻 Implement uv workspaces. PR #2090 by @alejsdev.
- 🔧 Add recommended VS Code extensions. PR #1386 by @tobiase.
- ✨ Use pwdlib with Argon2 by default, adding logic (and tests) to autoupdate old passwords using Bcrypt. PR #2104 by @tiangolo.
- 🔨 Generate frontend SDK on pre-commit, remove custom workflow. PR #2111 by @tiangolo.
Fixes
- 🐛 Add user authentication check in admin route to restrict access for non-superusers. PR #2145 by @alejsdev.
- 🐛 Handle non-existing user IDs in
read_user_by_id. PR #1396 by @saltie2193.
Refactors
- 🔥 Remove debugpy from recommended extensions, it’s included by the Python extension. PR #2143 by @tiangolo.
- 🔧 Update the frontend build context for prod with the new top level setup. PR #2108 by @tiangolo.
- 🚚 Rename Docker Compose files to new names,
compose.yml. PR #2106 by @tiangolo.
- 🔒️ Ensure authentication takes constant time, to avoid enumeration attacks. PR #2105 by @tiangolo.
- ✅ Fix incorrect mocking in unit tests (issue #1780). PR #1781 by @vicaya.
- 🐛Update
items.py to return status code 403 in case of insufficient permissions. PR #1543 by @jpizquierdo.
- ✅ Use proper
is_active field in test_user.py. PR #1479 by @nauanbek.
- ♻️ Simplify reset password logic by removing duplicate code. PR #1440 by @youneshenniwrites.
Upgrades
Docs
Internal
0.9.0
Features
Fixes
- 🐛 Fix
EMAILS_FROM_NAME type to be str instead of EmailStr. PR #1940 by @martin0258.
- 🐛 Fix
parse_cors function to be consistent for both empty string and empty list. PR #1672 by @rolkotaki.
- 🐛 Close sidebar drawer on user selection. PR #1515 by @dtellz.
- 🐛 Fix required password validation when editing user fields. PR #1508 by @jpizquierdo.
Refactors
Upgrades
Docs
Internal
0.8.0
Features
Fixes
Refactors
- ♻️ Redirect the user to
login if we get 401/403. PR #1501 by @alejsdev.
- 🐛 Refactor reset password test to create normal user instead of using super user. PR #1499 by @alejsdev.
- ♻️ Replace email types from
str to EmailStr in config.py. PR #1492 by @jpizquierdo.
- 🔧 Remove unused context from router creation. PR #1498 by @alejsdev.
- ♻️ Remove redundant item deletion code leveraging cascade delete. PR #1481 by @nauanbek.
- ✏️ Fix a couple of spelling mistakes. PR #1485 by @rjmunro.
- 🎨 Move
prefix and tags to routers. PR #1439 by @patrick91.
- ♻️ Remove modify id script in favor of openapi-ts config. PR #1434 by @patrick91.
- 👷 Improve Playwright CI speed: sharding (parallel runs), run in Docker to use cache, use env vars. PR #1405 by @tiangolo.
- ♻️ Add PaginationFooter component. PR #1381 by @saltie2193.
- ♻️ Refactored code to use encryption algorithm name from settings for consistency. PR #1160 by @sameeramin.
- 🔊 Enable logging for email utils by default. PR #1374 by @ihmily.
- 🔧 Add
ENV PYTHONUNBUFFERED=1 to log output directly to Docker. PR #1378 by @tiangolo.
- 💡 Remove unnecessary comment. PR #1260 by @sebhani.
Upgrades
Docs
- 📝 Removing deprecated manual client SDK step. PR #1494 by @chandy.
- 📝 Update Frontend README.md. PR #1462 by @getmarkus.
- 📝 Update
frontend/README.md to also remove Playwright when removing Frontend. PR #1452 by @youben11.
- 📝 Update
deployment.md, instructions to install GitHub Runner in non-root VMs. PR #1412 by @tiangolo.
- 📝 Add MailCatcher to
development.md. PR #1387 by @tobiase.
Internal
0.7.1
Highlights
- Migrate from Poetry to
uv.
- Simplifications and improvements for Docker Compose files, Traefik Dockerfiles.
- Make the API use its own domain
api.example.com and the frontend use dashboard.example.com. This would make it easier to deploy them separately if you needed that.
- The backend and frontend on Docker Compose now listen on the same port as the local development servers, this way you can stop the Docker Compose services and run the local development servers without changing the frontend configuration.
Features
Refactors
- ♻️ Update settings to use top level
.env file. PR #1359 by @tiangolo.
- ⬆️ Migrate from Poetry to uv. PR #1356 by @tiangolo.
- 🔥 Remove logic for development dependencies and Jupyter, it was never documented, and I no longer use that trick. PR #1355 by @tiangolo.
- ♻️ Use Docker Compose
watch. PR #1354 by @tiangolo.
- 🔧 Use plain base official Python Docker image. PR #1351 by @tiangolo.
- 🚚 Move location of scripts to simplify file structure. PR #1352 by @tiangolo.
- ♻️ Refactor prestart (migrations), move that to its own container. PR #1350 by @tiangolo.
- ♻️ Include
FRONTEND_HOST in CORS origins by default. PR #1348 by @tiangolo.
- ♻️ Simplify domains with
api.example.com for API and dashboard.example.com for frontend, improve local development with localhost. PR #1344 by @tiangolo.
- 🔥 Simplify Traefik, remove www-redirects that add complexity. PR #1343 by @tiangolo.
- 🔥 Enable support for Arm Docker images in Mac, remove old patch. PR #1341 by @tiangolo.
- ♻️ Remove duplicate information in the ItemCreate model. PR #1287 by @jjaakko.
Upgrades
Docs
Internal
0.7.0
Lots of new things! 🎁
- E2E tests with Playwright.
- Mailcatcher configuration, to develop and test email handling.
- Pagination.
- UUIDs for database keys.
- New user sign up.
- Support for deploying to multiple environments (staging, prod).
- Many refactors and improvements.
- Several dependency upgrades.
Features
- ✨ Add User Settings e2e tests. PR #1271 by @alejsdev.
- ✨ Add Reset Password e2e tests. PR #1270 by @alejsdev.
- ✨ Add Sign Up e2e tests. PR #1268 by @alejsdev.
- ✨ Add Sign Up and make
OPEN_USER_REGISTRATION=True by default. PR #1265 by @alejsdev.
- ✨ Add Login e2e tests. PR #1264 by @alejsdev.
- ✨ Add initial setup for frontend / end-to-end tests with Playwright. PR #1261 by @alejsdev.
- ✨ Add mailcatcher configuration. PR #1244 by @patrick91.
- ✨ Introduce pagination in items. PR #1239 by @patrick91.
- 🗃️ Add max_length validation for database models and input data. PR #1233 by @estebanx64.
- ✨ Add TanStack React Query devtools in dev build. PR #1217 by @tomerb.
- ✨ Add support for deploying multiple environments (staging, production) to the same server. PR #1128 by @tiangolo.
- 👷 Update CI GitHub Actions to allow running in private repos. PR #1125 by @tiangolo.
Fixes
- 🐛 Fix welcome page to show logged-in user. PR #1218 by @tomerb.
- 🐛 Fix local Traefik proxy network config to fix Gateway Timeouts. PR #1184 by @JoelGotsch.
- ♻️ Fix tests when first superuser password is changed in .env. PR #1165 by @billzhong.
- 🐛 Fix bug when resetting password. PR #1171 by @alejsdev.
- 🐛 Fix 403 when the frontend has a directory without an index.html. PR #1094 by @tiangolo.
Refactors
Upgrades
Docs
Internal
0.6.0
Latest FastAPI, Pydantic, SQLModel 🚀
Brand new frontend with React, TS, Vite, Chakra UI, TanStack Query/Router, generated client/SDK 🎨
CI/CD - GitHub Actions 🤖
Test cov > 90% ✅
Features
- ✨ Adopt SQLModel, create models, start using it. PR #559 by @tiangolo.
- ✨ Upgrade items router with new SQLModel models, simplified logic, and new FastAPI Annotated dependencies. PR #560 by @tiangolo.
- ✨ Migrate from pgAdmin to Adminer. PR #692 by @tiangolo.
- ✨ Add support for setting
POSTGRES_PORT. PR #333 by @uepoch.
- ⬆ Upgrade Flower version and command. PR #447 by @maurob.
- 🎨 Improve styles. PR #673 by @alejsdev.
- 🎨 Update theme. PR #666 by @alejsdev.
- 👷 Add continuous deployment and refactors needed for it. PR #667 by @tiangolo.
- ✨ Create endpoint to show password recovery email content and update email template. PR #664 by @alejsdev.
- 🎨 Format with Prettier. PR #646 by @alejsdev.
- ✅ Add tests to raise coverage to at least 90% and fix recover password logic. PR #632 by @estebanx64.
- ⚙️ Add Prettier and ESLint config with pre-commit. PR #640 by @alejsdev.
- 👷 Add coverage with Smokeshow to CI and badge. PR #638 by @estebanx64.
- ✨ Migrate to TanStack Query (React Query) and TanStack Router. PR #637 by @alejsdev.
- ✅ Add setup and teardown database for tests. PR #626 by @estebanx64.
- ✨ Update new-frontend client. PR #625 by @alejsdev.
- ✨ Add password reset functionality. PR #624 by @alejsdev.
- ✨ Add private/public routing. PR #621 by @alejsdev.
- 🔧 Add VS Code debug configs. PR #620 by @tiangolo.
- ✨ Add
Not Found page. PR #595 by @alejsdev.
- ✨ Add new pages, components, panels, modals, and theme; refactor and improvements in existing components. PR #593 by @alejsdev.
- ✨ Support delete own account and other tweaks. PR #614 by @alejsdev.
- ✨ Restructure folders, allow editing of users/items, and implement other refactors and improvements. PR #603 by @alejsdev.
- ✨ Add Copier, migrate from Cookiecutter, in a way that supports using the project as is, forking or cloning it. PR #612 by @tiangolo.
- ➕ Replace black, isort, flake8, autoflake with ruff and upgrade mypy. PR #610 by @tiangolo.
- ♻ Refactor items and services endpoints to return count and data, and add CI tests. PR #599 by @estebanx64.
- ✨ Add support for updating items and upgrade SQLModel to 0.0.16 (which supports model object updates). PR #601 by @tiangolo.
- ✨ Add dark mode to new-frontend and conditional sidebar items. PR #600 by @alejsdev.
- ✨ Migrate to RouterProvider and other refactors . PR #598 by @alejsdev.
- ✨ Add delete_user; refactor delete_item. PR #594 by @alejsdev.
- ✨ Add state store to new frontend. PR #592 by @alejsdev.
- ✨ Add form validation to Admin, Items and Login. PR #616 by @alejsdev.
- ✨ Add Sidebar to new frontend. PR #587 by @alejsdev.
- ✨ Add Login to new frontend. PR #585 by @alejsdev.
- ✨ Include schemas in generated frontend client. PR #584 by @alejsdev.
- ✨ Regenerate frontend client with recent changes. PR #575 by @alejsdev.
- ♻️ Refactor API in
utils.py. PR #573 by @alejsdev.
- ✨ Update code for login API. PR #571 by @tiangolo.
- ✨ Add client in frontend and client generation. PR #569 by @alejsdev.
- 🐳 Set up Docker config for new-frontend. PR #564 by @alejsdev.
- ✨ Set up new frontend with Vite, TypeScript and React. PR #563 by @alejsdev.
- 📌 Add NodeJS version management and instructions. PR #551 by @alejsdev.
- Add consistent errors for env vars not set. PR #200.
- Upgrade Traefik to version 2, keeping in sync with DockerSwarm.rocks. PR #199.
- Run tests with
TestClient. PR #160.
Fixes
- 🐛 Fix copier to handle string vars with spaces in quotes. PR #631 by @estebanx64.
- 🐛 Fix allowing a user to update the email to the same email they already have. PR #696 by @alejsdev.
- 🐛 Set up Sentry only when used. PR #671 by @tiangolo.
- 🔥 Remove unnecessary validation. PR #662 by @alejsdev.
- 🐛 Fix bug when editing own user. PR #651 by @alejsdev.
- 🐛 Add
onClose to SidebarItems. PR #589 by @alejsdev.
- 🐛 Fix positional argument bug in
init_db.py. PR #562 by @alejsdev.
- 📌 Fix flower Docker image, pin version. PR #396 by @sanggusti.
- 🐛 Fix Celery worker command. PR #443 by @bechtold.
- 🐛 Fix Poetry installation in Dockerfile and upgrade Python version and packages to fix Docker build. PR #480 by @little7Li.
Refactors
- 🔧 Add missing dotenv variables. PR #554 by @tiangolo.
- ⏪ Revert “⚙️ Add Prettier and ESLint config with pre-commit”. PR #644 by @alejsdev.
- 🙈 Add .prettierignore and include client folder. PR #648 by @alejsdev.
- 🏷️ Add mypy to the GitHub Action for tests and fixed types in the whole project. PR #655 by @estebanx64.
- 🔒️ Ensure the default values of “changethis” are not deployed. PR #698 by @tiangolo.
- ◀ Revert “📸 Rename Dashboard to Home and update screenshots”. PR #697 by @alejsdev.
- 📸 Rename Dashboard to Home and update screenshots. PR #693 by @alejsdev.
- 🐛 Fixed items count when retrieving data for all items by user. PR #695 by @estebanx64.
- 🔥 Remove Celery and Flower, they are currently not used nor recommended. PR #694 by @tiangolo.
- ✅ Add test for deleting user without privileges. PR #690 by @alejsdev.
- ♻️ Refactor user update. PR #689 by @alejsdev.
- 📌 Add Poetry lock to git. PR #685 by @tiangolo.
- 🎨 Adjust color and spacing. PR #684 by @alejsdev.
- 👷 Avoid creating unnecessary *.pyc files with PYTHONDONTWRITEBYTECODE=1. PR #677 by @estebanx64.
- 🔧 Add
SMTP_SSL option for older SMTP servers. PR #365 by @Metrea.
- ♻️ Refactor logic to allow running pytest tests locally. PR #683 by @tiangolo.
- ♻ Update error messages. PR #417 by @qu3vipon.
- 🔧 Add a default Flower password. PR #682 by @tiangolo.
- 🔧 Update VS Code debug config. PR #676 by @tiangolo.
- ♻️ Refactor code structure for tests. PR #674 by @tiangolo.
- 🔧 Set TanStack Router devtools only in dev mode. PR #668 by @alejsdev.
- ♻️ Refactor email logic to allow re-using util functions for testing and development. PR #663 by @tiangolo.
- 💬 Improve Delete Account description and confirmation. PR #661 by @alejsdev.
- ♻️ Refactor email templates. PR #659 by @alejsdev.
- 📝 Update deployment files and docs. PR #660 by @tiangolo.
- 🔥 Remove unused schemas. PR #656 by @alejsdev.
- 🔥 Remove old frontend. PR #649 by @tiangolo.
- ♻ Move project source files to top level from src, update Sentry dependency. PR #630 by @estebanx64.
- ♻ Refactor Python folder tree. PR #629 by @estebanx64.
- ♻️ Refactor old CRUD utils and tests. PR #622 by @alejsdev.
- 🔧 Update .env to allow local debug for the backend. PR #618 by @tiangolo.
- ♻️ Refactor and update CORS, remove trailing slash from new Pydantic v2. PR #617 by @tiangolo.
- 🎨 Format files with pre-commit and Ruff. PR #611 by @tiangolo.
- 🚚 Refactor and simplify backend file structure. PR #609 by @tiangolo.
- 🔥 Clean up old files no longer relevant. PR #608 by @tiangolo.
- ♻ Re-structure Docker Compose files, discard Docker Swarm specific logic. PR #607 by @tiangolo.
- ♻️ Refactor update endpoints and regenerate client for new-frontend. PR #602 by @alejsdev.
- ✨ Add Layout to App. PR #588 by @alejsdev.
- ♻️ Re-enable user update path operations for frontend client generation. PR #574 by @alejsdev.
- ♻️ Remove type ignores and add
response_model. PR #572 by @alejsdev.
- ♻️ Refactor Users API and dependencies. PR #561 by @alejsdev.
- ♻️ Refactor frontend Docker build setup, use plain NodeJS, use custom Nginx config, fix build for old Vue. PR #555 by @tiangolo.
- ♻️ Refactor project generation, discard cookiecutter, use plain git/clone/fork. PR #553 by @tiangolo.
- Refactor backend:
- Simplify configs for tools and format to better support editor integration.
- Add mypy configurations and plugins.
- Add types to all the codebase.
- Update types for SQLAlchemy models with plugin.
- Update and refactor CRUD utils.
- Refactor DB sessions to use dependencies with
yield.
- Refactor dependencies, security, CRUD, models, schemas, etc. To simplify code and improve autocompletion.
- Change from PyJWT to Python-JOSE as it supports additional use cases.
- Fix JWT tokens using user email/ID as the subject in
sub.
- PR #158.
- Simplify
docker-compose.*.yml files, refactor deployment to reduce config files. PR #153.
- Simplify env var files, merge to a single
.env file. PR #151.
Upgrades
Docs
- 🦇 Add dark mode to
README.md. PR #703 by @alejsdev.
- 🍱 Update GitHub image. PR #701 by @tiangolo.
- 🍱 Add GitHub image. PR #700 by @tiangolo.
- 🚚 Rename project to Full Stack FastAPI Template. PR #699 by @tiangolo.
- 📝 Update
README.md. PR #691 by @alejsdev.
- ✏ Fix typo in
development.md. PR #309 by @graue70.
- 📝 Add docs for wildcard domains. PR #681 by @tiangolo.
- 📝 Add the required GitHub Actions secrets to docs. PR #679 by @tiangolo.
- 📝 Update
README.md and deployment.md. PR #678 by @alejsdev.
- 📝 Update frontend
README.md. PR #675 by @alejsdev.
- 📝 Update deployment docs to use a different directory for traefik-public. PR #670 by @tiangolo.
- 📸 Add new screenshots . PR #657 by @alejsdev.
- 📝 Refactor README into separate README.md files for backend, frontend, deployment, development. PR #639 by @tiangolo.
- 📝 Update README. PR #628 by @tiangolo.
- 👷 Update GitHub Action latest-changes and move release notes to independent file. PR #619 by @tiangolo.
- 📝 Update internal README and referred files. PR #613 by @tiangolo.
- 📝 Update README with in construction notice. PR #552 by @tiangolo.
- Add docs about reporting test coverage in HTML. PR #161.
- Add docs about removing the frontend, for an API-only app. PR #156.
Internal
0.5.0
- Make the Traefik public network a fixed default of
traefik-public as done in DockerSwarm.rocks, to simplify development and iteration of the project generator. PR #150.
- Update to PostgreSQL 12. PR #148. by @RCheese.
- Use Poetry for package management. Initial PR #144 by @RCheese.
- Fix Windows line endings for shell scripts after project generation with Cookiecutter hooks. PR #149.
- Upgrade Vue CLI to version 4. PR #120 by @br3ndonland.
- Remove duplicate
login tag. PR #135 by @Nonameentered.
- Fix showing email in dashboard when there’s no user’s full name. PR #129 by @rlonka.
- Format code with Black and Flake8. PR #121 by @br3ndonland.
- Simplify SQLAlchemy Base class. PR #117 by @airibarne.
- Update CRUD utils for users, handling password hashing. PR #106 by @mocsar.
- Use
. instead of source for interoperability. PR #98 by @gucharbon.
- Use Pydantic’s
BaseSettings for settings/configs and env vars. PR #87 by @StephenBrown2.
- Remove
package-lock.json to let everyone lock their own versions (depending on OS, etc).
- Simplify Traefik service labels PR #139.
- Add email validation. PR #40 by @kedod.
- Fix typo in README. PR #83 by @ashears.
- Fix typo in README. PR #80 by @abjoker.
- Fix function name
read_item and response code. PR #74 by @jcaguirre89.
- Fix typo in comment. PR #70 by @daniel-butler.
- Fix Flower Docker configuration. PR #37 by @dmontagu.
- Add new CRUD utils based on DB and Pydantic models. Initial PR #23 by @ebreton.
- Add normal user testing Pytest fixture. PR #20 by @ebreton.
0.4.0
-
Fix security on resetting a password. Receive token as body, not query. PR #34.
-
Fix security on resetting a password. Receive it as body, not query. PR #33 by @dmontagu.
-
Fix SQLAlchemy class lookup on initialization. PR #29 by @ebreton.
-
Fix SQLAlchemy operation errors on database restart. PR #32 by @ebreton.
-
Fix locations of scripts in generated README. PR #19 by @ebreton.
-
Forward arguments from script to pytest inside container. PR #17 by @ebreton.
-
Update development scripts.
-
Read Alembic configs from env vars. PR #9 by @ebreton.
-
Create DB Item objects from all Pydantic model’s fields.
-
Update Jupyter Lab installation and util script/environment variable for local development.
0.3.0
- PR #14:
- Update CRUD utils to use types better.
- Simplify Pydantic model names, from
UserInCreate to UserCreate, etc.
- Upgrade packages.
- Add new generic “Items” models, crud utils, endpoints, and tests. To facilitate re-using them to create new functionality. As they are simple and generic (not like Users), it’s easier to copy-paste and adapt them to each use case.
- Update endpoints/path operations to simplify code and use new utilities, prefix and tags in
include_router.
- Update testing utils.
- Update linting rules, relax vulture to reduce false positives.
- Update migrations to include new Items.
- Update project README.md with tips about how to start with backend.
- Upgrade Python to 3.7 as Celery is now compatible too. PR #10 by @ebreton.
0.2.2
- Fix frontend hijacking /docs in development. Using latest https://github.com/tiangolo/node-frontend with custom Nginx configs in frontend. PR #6.
0.2.1
0.2.0
PR #2:
- Simplify and update backend
Dockerfiles.
- Refactor and simplify backend code, improve naming, imports, modules and “namespaces”.
- Improve and simplify Vuex integration with TypeScript accessors.
- Standardize frontend components layout, buttons order, etc.
- Add local development scripts (to develop this project generator itself).
- Add logs to startup modules to detect errors early.
- Improve FastAPI dependency utilities, to simplify and reduce code (to require a superuser).
0.1.2
- Fix path operation to update self-user, set parameters as body payload.
0.1.1
Several bug fixes since initial publication, including:
- Order of path operations for users.
- Frontend sending login data in the correct format.
- Add https://localhost variants to CORS.