rama-0.3.0-alpha.4 #782
GlenDC
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
This will be the last alpha release of rama 0.3.0. Besides some minor stuff there are still
two big features that we want to have done before shipping 0.3.0:
get info such as path and Uri from input in a stateless simplified way (implement protocol indepdendent IRI/URI support in rama-net #724)
These changes will also unlock some other minor improvements that we still plan to do.
You can check https://github.com/plabayo/rama/milestone/2 for the full 0.3 milestone,
Note that not everything in that list will be done prior to 0.3. Some of it we will probably
drop or move to another milestone.
Once the Uri, Grpc and some other minor improvements and feature work (e.g. multi-part support)
is done we will start with release candidates (
rc) for rama.We plan to do 1 or 2 of these with a final
0.3release at the end of January (2026).Once we released rama
0.3we plan to start doing a regular release train of six weeks.The idea is to release whatever is in main, which will be a patch- or major release depending if we have
breaking changes or not.
Community
Thank you to the contributors of this release: Glen De Cauwsemaecker [glen@plabayo.tech], Abdelkader Boudih [terminale@gmail.com], Nicolas Trippar [ntrippar@gmail.com], M-Kusumgar [98405247+M-Kusumgar@users.noreply.github.com], Brecht Stamper [stamper.brecht@gmail.com], Ali Tariq [raja.ali945@gmail.com], Camille Louédoc-Eyriès [clouedoc@icloud.com], sim-hash [84858164+sim-hash@users.noreply.github.com], Irfan - ئىرفان [irfanabliz914@gmail.com], Yukun Wang [airycanon@airycanon.me], hafihaf123 [misobuchta@gmail.com], Aydan Pirani [aydanpirani@gmail.com], Kenny Lau [72945813+lauk20@users.noreply.github.com], and MeerKatDev [lcampobasso@gmail.com]. We also want to extend our thanks to all the individuals in the wider ecosystem and the maintainers of the third-party crates that make this work possible.
Huge shoutout to Brecht Stamper [stamper.brecht@gmail.com] for stepping up to help maintain rama and driving major changes this release. His work was instrumental in the service and state API redesign, ACME support, TLS improvements, and Pooled Connections, among many other contributions.
Major Architectural Refactor
Removal of Context
In a fundamental shift for the 0.3 milestone, the centralized
Contexttype has been removed in favor of a decentralized, extension-based architecture. This aligns Rama more closely with standard Rust middleware patterns and improves flexibility for complex service stacks.Contextobject is no longer passed through services. Data, state, and executors are now managed via Extensions attached directly to theRequest,Response, orConnection(Move executor to extensions #711, Issue 462/revisit service api (core) design in 0.3 milestone#4 removing context #714).httpcrate's request/response modules into Rama to provide native support for our specificExtensionrequirements and performance optimizations (Issue 692/integrate / fork http crate into rama#partially #696).rama-http-corefor both HTTP/1.1 and HTTP/2 (Issue 462/revisit service api (core) design in 0.3 milestone#2 moving extensions #706, extensions inside rama-http-core #727).ContexttoExtensions. New utilities likeAddInputExtensionLayer,AddOutputExtensionLayerandIntoEndpointServiceWithStatehave been introduced to handle state injection (Issue 462/revisit service api (core) design in 0.3 milestone# removing state from context #685, Issue 462/revisit service api (core) design in 0.3 milestone#4 state for http endpoints #720).
During this process we played at some point with the concept of Parent Extensions (#715).
We have however simplified, the concept even further and at this point it is
a list of extensions which can be forked.
We are not yet 100% finished with this design and there will probably be some more minor changes
prior to the actual release of rama 0.3. The biggest design changes around these concepts
are however behind our back.
Input/Output
the
Servicetrait now uses the type parameters:Input, instead ofRequest;Output, instead ofResponse;This aligns much better with
Rama's future but even for its present.For example service and layers also operate on the transport and tls layers,
where the parameter types
RequestandResponsemake no sense.Added
rama-clinow features a restructured command hierarchy withsend(unified HTTP/WS client),serve, andprobesubcommands (Patch/rama cli refactor #732).rama-clito support TLS tunneling use cases (support stunnel-like use cases in rama-cli as well as document it #453, Support stunnel-like use cases in rama-cli #629).curlcommands directly from the CLI or via service layers (addcurlmodule to rama-http-types #509, add curl export support (#509) #699).probe tcpcommand and support for the--resolveflag in thesendcommand to override DNS for specific domains.boring(e.g.,X25519MLKEM768) (Rama using boring tls is not using X25519MLKEM768 when emulating Tls Profile #721, upgrade rama-boring boring C++ lib deps + re-integrate PQ encryption #722).ramacrate to reduce external dependency overhead.X-Robots-Tag(support X-Robots-Tag as a typed http header XRobotsTag #382, support X-Robots-Tag as a typed http header #707),X-Clacks-Overhead(support X-Clacks-Overhead (response) http header #620, [620] - add X-Clacks-Overhead header support #734),DNT(Do Not Track), andSec-GPC.rama-acmeand TXT record lookups inrama-dns.rama-netand better wildcard handling in theDynamicIssuer.Changed
try_(fallible),maybe_(optional),set_(&mut self) andwith_(self). These can also be combined for example for a fallible setter:try_set. For Setters we also have a macro to easily define these which we also started to use and apply more (generate_set_and_with);AddExtensiontoAddInputExtensionand introducedAddOutputExtensionfor clearer lifecycle management (Issue 756/Rename GetExtension to GetInputExtension and create GetOutputExtension #759, Issue 756/Rename AddExtension to AddInputExtension and add AddOutputExtension #761).HashMap/HashSetwith fasterahashversions (replace std hashmap/hashet with faster version from ahash #709).async-streamwithasynk-strimfor better performance and DX.SmallVecandSmolStrto reduce allocations across the workspace.rama-utilshyper,h2(1xx informational responses support),tungstenite, andtower-http.connector_builderand support forjit_layers.Fixed
tower-httppatch).endpoints such as SSE or chunked encoding;
Cookieheaders (instead of a single merged header), causing request failures #768, Adapt HTTP/2/3 requests to HTTP/1.x by merging multiple Cookie headers (RFC 6265 5.4) #770).Removed
RequestInspectorconcept; all inspection is now handled via standard services/layers (Remove request inspectors #750).UdpSocketwrapper in favor of re-exportingtokio::net::UdpSocket.remove(), ensuring a predictable "breadcrumb" trace of information (Issue 462/revisit service api (core) design in 0.3 milestone#3 no remove from extensions #715).This discussion was created from the release rama-0.3.0-alpha.4.
Beta Was this translation helpful? Give feedback.
All reactions