rifts 0.3.10

Rift Realtime Protocol / 1.0 — server + client implementation
Documentation

= Rift Realtime Protocol / 1.0 — rifts

image:https://github.com/rift-proto/rift-rust/actions/workflows/ci.yml/badge.svg[CI,link=https://github.com/rift-proto/rifts/actions/workflows/ci.yml] image:https://img.shields.io/crates/v/rifts.svg[Crates.io,link=https://crates.io/crates/rifts] image:https://img.shields.io/badge/License-MIT-blue.svg[License,link=LICENSE-MIT]

The rifts crate is a Rust server implementation of the Rift Realtime Protocol (Rift/1) — a modern, real-time bidirectional messaging protocol designed to replace raw WebSocket + event-string models with stronger semantics, similar to Socket.IO but with explicit guarantees.

== Crate Features

[cols="1,2"] |=== | Feature | Description

| websocket (default) | Standalone WebSocket transport via tokio-tungstenite

| axum | Axum framework WebSocket adapter

| actix-web | Actix-web WebSocket adapter

| warp | Warp framework WebSocket adapter

| ntex | Ntex framework WebSocket adapter

| tokio-frameworks | Shortcut: axum + warp

| all-frameworks | Shortcut: all framework adapters |===

== Quick Start

[source,rust]

use rifts::RiftServer; use std::sync::Arc; use tokio::sync::Notify;

#[tokio::main] async fn main() -> rifts::Result<()> { let shutdown = Arc::new(Notify::new()); let server = RiftServer::builder() .websocket_transport() .build()?; server.run("127.0.0.1:9000".parse().unwrap(), shutdown).await?; Ok(()) }

== Module Structure

[cols="1,2"] |=== | Module | Purpose

| frame | Frame envelope, types, flags, codec, priority

| codec | CBOR + JSON codecs with negotiation

| protocol | Version, close codes, error codes, heartbeat, handshake

| message | Eight message classes (event, command, reply, state, …)

| topic | Topic profiles, retention, ordering, in-memory store

| session | Sessions, auth, resume, offset tracking

| broker | In-memory broker, router, fanout, dedupe, snapshots

| ack | Acknowledgement system (9 ack types)

| flow | Backpressure controller + token-bucket rate limiter

| transport | Transport abstraction + WebSocket, framework adapters

| server | RiftServer builder and event loop

| connection | Per-connection state machine (spec §5 lifecycle) |===

== License

Licensed under either of

at your option.

== Contributing

Contributions are welcome! Please open an issue or pull request.

== Benchmarks

The benches/ directory contains a Criterion-based benchmark suite covering the full crate surface: wire codec, serialization, frame/message models, flow control, fanout engine, topic store, storage backends (memory and optional sled), InMemoryBroker, session/resume, ack/metrics, in-process E2E, loopback WebSocket, and throughput.

[source,sh]

Build the entire suite

cargo bench --no-run --all-features

Run stable benchmarks (no network, no disk)

cargo bench

Feature-gated benchmarks

cargo bench --features sled --bench sled_store cargo bench --features client --bench websocket_loop

Throughput benchmarks (ops/s via Throughput::Elements)

cargo bench --bench throughput

Full benchmark data: link:BenchMark.adoc[BenchMark.adoc] — generated by cargo run --example update_benchmark_readme -- BenchMark.adoc.

Results are from the last local run. They are not performance commitments and vary with CPU, load, compiler version, and system configuration.