Skip to content

Releases: dymmond/ravyn

Version 0.3.8

09 Feb 11:13
54f1774

Choose a tag to compare

!!! Note
This release focuses on performance and request-path optimization while preserving
existing routing and middleware behavior.

Added

  • New benchmark_mode setting 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 + path fast 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

09 Feb 09:52
263449c

Choose a tag to compare

!!! 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 createproject now generates a pyproject.toml instead of a requirements folder.

Version 0.3.6

28 Jan 13:53
243932a

Choose a tag to compare

Added

  • createproject allows to pass multiple names instead of only one if you want to create multiple projects in one go.
  • createapp allows 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 createdeployment directive files (nginx and docker) updated to the latest stable versions.
  • The createproject directive tests was not placing the right contents in conftest.py.
  • Default loader for exception handler from the settings.

Version 0.3.5

14 Jan 14:59
72a7846

Choose a tag to compare

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 CommandBus for dispatching command messages that mutate application state.
  • New QueryBus for 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

02 Dec 11:29
5575784

Choose a tag to compare

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 original property from the @scheduler wrapper.
  • 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

11 Nov 15:12
53f2389

Choose a tag to compare

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

10 Nov 11:33
cde5fe7

Choose a tag to compare

Changed

  • Unified lazy caching mechanism for permission evaluation across WebSocketHandler, Include, and BaseRouter.
  • 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_permissions in nested routing structures.
  • Prevented potential state mutation during concurrent permission evaluation.

Version 0.3.1

03 Nov 17:58
a559f1f

Choose a tag to compare

Added

Changed

  • Cleanup gateways.py to 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

01 Nov 19:23
8a1864a

Choose a tag to compare

Added

  • runserver_theme to Ravyn settings and runserver directive. This allows you to customise the theme of the
    ravyn runserver command.

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

15 Oct 14:23
5df9890

Choose a tag to compare

Note

This is an exception deployment as the some internals were in conflict

Changed

Fixed

  • Parsing query parameters with multiple datastructures was not parsing it properly