.. _quart_extensions: Using Quart Extensions ====================== There are a number of extensions for Quart, some of which are listed here, - `Quart-Auth `_ Secure cookie sessions, allows login, authentication and logout. - `Quart-Babel `_ Implements i18n and l10n support for Quart. - `Quart-Bcrypt `_ Provides bcrypt hashing utilities for your application. - `Quart-compress `_ compress your application's responses with gzip. - `Quart-compress2 `_ A package to compress responses in your Quart app with gzip . - `Quart-CORS `_ Cross Origin Resource Sharing (access control) support. - `Quart-DB `_ Managed connection(s) to postgresql database(s). - `Quart-events `_ event broadcasting via WebSockets or SSE. - `Quart-Login `_ a port of Flask-Login to work natively with Quart. - `Quart-minify `_ minify quart response for HTML, JS, CSS and less. - `Quart-Mongo `_ Bridges Quart, Motor, and Odmantic to create a powerful MongoDB extension. - `Quart-Motor `_ Motor (MongoDB) support for Quart applications. - `Quart-OpenApi `_ RESTful API building. - `Quart-Keycloak `_ Support for Keycloak's OAuth2 OpenID Connect (OIDC). - `Quart-Rapidoc `_ API documentation from OpenAPI Specification. - `Quart-Rate-Limiter `_ Rate limiting support. - `Quart-Redis `_ Redis connection handling - `Webargs-Quart `_ Webargs parsing for Quart. - `Quart-WTF `_ Simple integration of Quart and WTForms. Including CSRF and file uploading. - `Quart-Schema `_ Schema validation and auto-generated API documentation. - `Quart-session `_ server side session support. - `Quart-Uploads `_ File upload handling for Quart. Supporting sync code in a Quart Extension ----------------------------------------- Extension authors can support sync functions by utilising the :meth:`quart.Quart.ensure_async` method. For example, if the extension provides a view function decorator add ``ensure_async`` before calling the decorated function, .. code-block:: python def extension(func): @wraps(func) async def wrapper(*args, **kwargs): ... # Extension logic return await current_app.ensure_async(func)(*args, **kwargs) return wrapper