Skip to content

Release notes

These notes cover versions 1.0.8 through 1.0.12 and link to the updated usage guides. Run Reactor examples from the application root using its Python environment.

The new Debug facade provides access to the debugging service:

from orionis.support.facades import Debug
data = {"ready": True, "items": [1, 2, 3]}
Debug.dump(data)
Debug.dd(data)

Debug.dump() prints values to the console and allows execution to continue. Debug.dd() displays values and stops execution: in HTTP with debugging enabled, it interrupts the request with an HTML diagnostic response; in the console, it terminates the process. Both calls are synchronous and require an initialized application. See Debug for options, return values, and behavior outside debug mode.

The HTTP path uses fewer locks and redundant calls. ASGI/RSGI request admission uses a per-kernel counter on the worker event loop; public routes without middleware skip unnecessary steps, and endpoint policy lookups are skipped when no policies are registered.

HTML, JSON, redirect, streaming, SSE, and file responses prepare standard headers with fewer calls. Each response keeps independent mutable headers; precedence rules, subclass hooks, serialization behavior, and stream behavior are preserved. See request limits and response headers.

The local validation reported for this release recorded 320 passing tests. The overall estimate is approximately 10–15% less time per request along the measured Python path, without networking. Each measurement has its own scope:

Area or responseEstimated time reductionWhat was measured
HTTP ASGI≈15%Per-request path, without networking.
HTTP RSGI≈13%Per-request path, without networking.
HTML≈10%Small response construction.
Compact JSON≈23%Small payload construction and serialization.
Redirects≈11%Construction and headers.
Streaming≈19%Construction, not transfer.
SSE≈24%Construction, not stream duration.
Formatted JSONNo stable improvementVariable results.
Files and downloadsNo stable improvementResults vary with I/O.

These figures describe the reported local validation of 1.0.11; they are not a new benchmark of each later release. Behavioral tests cover, among other cases, execution resources, request limits, and response construction.

The table schema creation stub used by make:database-schema has been updated: generated modules declare TABLE: Final[TableDefinition | None] = None instead of a wrapper class. Replace None with the table definition and import that constant in migrations and models. Review the generated schema example and the generator reference.

A new command explicitly prepares tables for database-backed queues:

Terminal window
python reactor queue:migrate

If you use uv to select the project environment, the equivalent invocation used in these guides is:

Terminal window
uv run python -B reactor queue:migrate

See queue drivers and preparation to select the connection and review which tables are prepared. This command handles queue infrastructure; application migrations run through reactor migrate.

This release corrects details in the uvloop integration tests and the Orionis application used in HTTP comparisons. That application’s periodic readiness check changes from 0.01 to 0.1 seconds. This adjusts benchmark startup; it does not establish per-request latency or an RPS improvement.

The HTTP comparison application belongs to the framework development repository. For your own application tests, continue using the testing guide.

Loop has been refactored to make event loop registration, ownership, and cleanup predictable on Python 3.14. Synchronous entry points reject calls from an active loop, synchronous work delegated to threads preserves context, and owned loops are closed through asyncio.Runner without closing borrowed loops.

When updating code that uses these utilities, review Loop.runSync(), Loop.createTask(), and Loop.eventLoopContext() in particular. createTask() is synchronous and returns the task that you can subsequently await. The asynchronous execution guide contains current signatures and examples.