# Changelog This changelog is generated automatically from [GitHub Releases](https://github.com/mikeckennedy/jinja_partials/releases). # v0.3.2 *2026-06-11* · [GitHub](https://github.com/mikeckennedy/jinja_partials/releases/tag/v0.3.2) ## \[0.3.2\] - 2026-06-11 ### Fixed - Async executor lifecycle is now exception-safe and re-entrant. Apps registered with [register_fastapi_extensions](reference/register_fastapi_extensions.html#jinja_partials.register_fastapi_extensions), [register_starlette_extensions](reference/register_starlette_extensions.html#jinja_partials.register_starlette_extensions), or [register_quart_extensions](reference/register_quart_extensions.html#jinja_partials.register_quart_extensions) can now start and stop repeatedly (e.g. multiple `TestClient` cycles) without failing, and an exception during a wrapped lifespan no longer leaks the executor ([\#14](https://github.com/mikeckennedy/jinja_partials/issues/14)). - Renders that happen outside a lifespan/serving cycle now use a lazy per-registration fallback executor that honors `max_workers`, instead of degrading to a shared 4-worker pool. ### Changed - The FastAPI and Starlette example apps now use `enable_async=True` environments and render pages via `render_async`, exercising the executor lifecycle. - Added more package keywords (Jinja, HTMX, components, fragments, and the supported frameworks) for better PyPI discoverability. # v0.3.1 *2026-01-28* · [GitHub](https://github.com/mikeckennedy/jinja_partials/releases/tag/v0.3.1) ## \[0.3.1\] - 2026-01-28 ### Added - `register_quart_extensions(app, max_workers)` - Lifecycle-managed registration for Quart apps - `register_fastapi_extensions(app, templates, max_workers)` - Lifecycle-managed registration for FastAPI apps - Updated `register_starlette_extensions(templates, app, max_workers)` - Optional app parameter for lifecycle management - Example apps for FastAPI, Starlette, and Quart in `examples/` directory ### Fixed - Async rendering now works with Quart, FastAPI, and Starlette frameworks - Fixed "asyncio.run() cannot be called from a running event loop" error when using [render_partial](reference/render_partial.html#jinja_partials.render_partial) in async environments - Templates compiled with `enable_async=True` now render correctly via ThreadPoolExecutor ### Changed - Minimum Python version is now 3.10 - Version info now uses package metadata instead of hardcoded value - Reorganized examples: `example/` renamed to `examples/` with multiple framework examples # v0.3.0 *2025-05-31* · [GitHub](https://github.com/mikeckennedy/jinja_partials/releases/tag/v0.3.0) Jinja_Partials Release Notes **Since 285d147a (15 commits)** ## 🚀 New Features - **PartialsJinjaExtension**: Added a declarative Jinja2 extension for easy integration of partials and templates. Thank you [@jenisys](https://github.com/jenisys)! - **Versioning**: Enhanced the `__all__` import list to include version information, making it easier to manage updates. ## 🔧 Improvements - **Code Cleanup**: Cleaned up code and fixed lint warnings on test files. - **Workspace Setup**: Added a workspace in Visual Studio Code for better type checking and navigation. ## 📚 Documentation - Added new environment feature and how to use it with Flask. ## 🔒 Security - No security-related changes were made during this release. ## 🏗️ Infrastructure - No infrastructure improvements or changes were made in this release. # v0.2.1 *2024-04-12* · [GitHub](https://github.com/mikeckennedy/jinja_partials/releases/tag/v0.2.1) Solves [\#9](https://github.com/mikeckennedy/jinja_partials/issues/9) requirements.txt details not added to `setup.py`. # v0.2.0 *2024-02-02* · [GitHub](https://github.com/mikeckennedy/jinja_partials/releases/tag/v0.2.0) This release adds a `register_environment(environment)` method to allow using partials with Jinja outside of a web framework like Flask. See [\#4](https://github.com/mikeckennedy/jinja_partials/issues/4) for details. Thank you to [@sam-kleiner](https://github.com/sam-kleiner) for this feature.