Releases: dymmond/ravyn
Version 0.3.8
!!! Note
This release focuses on performance and request-path optimization while preserving
existing routing and middleware behavior.
Added
- New
benchmark_modesetting for Ravyn applications.
When enabled, Ravyn uses a minimal middleware pipeline that runs directly through the router,
making micro-benchmark runs more representative of pure routing/handler overhead.
Changed
- Optimized static HTTP route dispatch with an exact
method + pathfast lookup for safe route layouts. - Added a zero-kwargs handler fast path for simple endpoints, reducing per-request overhead when no request-bound kwargs are required.
- Improved internal routing activation flow to precompute and refresh fast dispatch structures.
Fixed
- Preserved route precedence guarantees for complex routing trees while introducing fast dispatch (includes, hosts, and dynamic routes continue to behave as expected).
- Added tests validating benchmark mode wiring and middleware stack behavior.
Version 0.3.7
!!! Note
There was a release of Lilya to version 0.24.0 that internally had a performance boost but broken a small
interface in Ravyn that needed to be there. If you are having issues with Ravyn prior to version 0.3.7, you
just need to upgrade to 0.3.7 and it should be it.
Changed
- Update to the latest fastest Lilya and fix broken internal interface.
- Directive
createprojectnow generates apyproject.tomlinstead of a requirements folder.
Version 0.3.6
Added
createprojectallows to pass multiple names instead of only one if you want to create multiple projects in one go.createappallows to pass multiple names instead of only one if you want to create multiple apps in one go.
Fixed
- Transformers regex was moved to outter function speeding up the handling.
ravyn createdeploymentdirective files (nginx and docker) updated to the latest stable versions.- The
createprojectdirective tests was not placing the right contents in conftest.py. - Default loader for exception handler from the settings.
Version 0.3.5
Added
- Introspection graph accessible via
app.graph. This is particularly useful if you want to create any
visuals from your Lilya application or even for framework creators and developers that want to understand in a graph manner, the
state and internals of the current application. - CQRS (Command Query Responsibility Segregation) support under
ravyn.contrib.cqrs. - New
CommandBusfor dispatching command messages that mutate application state. - New
QueryBusfor executing query messages that return data without side effects. - Explicit command and query handler registration with one-handler-per-message enforcement.
- Optional decorator-based handler registration for quick prototyping.
- CQRS-scoped middleware pipeline supporting logging, validation, mutation, auditing, and short-circuiting.
- Message envelopes with metadata support, fully compatible wit encoders (
apply_structure,json_encode).
Changed
- Bump Lilya to 0.23.1.
Version 0.3.4
Added
- add_asgi_app() is now supported and serves as an utility if you want to add any ASGI
compatible application into a Lilya/ChildLilya instance.
Changed
- Remove noisy warning on loading directives.
- Expose
originalproperty from the@schedulerwrapper. - Updated internal security to start raising 401 instead of 403 to be consistent with Not authenticated errors and when credentials are missing.
Version 0.3.3
Changed
- Started full support for url_for instead of path_for.
!!! Warning
path_for will be deprecated in future versions in favor of url_path_for.
If you want to avoid any break, please start updating from path_for to url_path_for as soon as possible. Same interface.
Breaking
To make sure you don't hit performance issues, we are moving directly to url_path_for, so if you use those you simply
need to update from path_for to url_path_for. We understand this is breaking but it is required for the upcoming features.
Version 0.3.2
Changed
- Unified lazy caching mechanism for permission evaluation across
WebSocketHandler,Include, andBaseRouter. handle_permissions()now caches the effective permissions on first evaluation instead of mutating per-request state.- Internal
__slots__updated for clarity and memory optimization.
Fixed
- Avoided redundant recomputation of permissions and
lilya_permissionsin nested routing structures. - Prevented potential state mutation during concurrent permission evaluation.
Version 0.3.1
Added
- Allow
XORandNORoperators in permissions.
Changed
- Cleanup
gateways.pyto make it maintainable and non redundant.
Fixed
- Duplicate check on Gateway permissions and WebsocketGateway permissions.
- Allowing async operators to work in permissions.
Version 0.3.0
Added
runserver_themetoRavynsettings andrunserverdirective. This allows you to customise the theme of the
ravyn runservercommand.
Changed
- Rewritten the internals for OpenAPI representation models with Pydantic and compatible with Python 3.14+.
Fixed
- Regression in runserver with a path provided.
- Fix permissions operations AND,OR,NOT by @egorvavilov. PR #627.
- Lilya permissions and Ravyn permissions cannot be combined and now Ravyn raises an assertation error when it happens.
Version 0.2.4
Note
This is an exception deployment as the some internals were in conflict
Changed
- Query Parameters documentation updated with generics (list, dict) examples.
Fixed
- Parsing query parameters with multiple datastructures was not parsing it properly