https://github.com/bearcove/rapace
RPC / IPC over SHM, for Rust - good for plugins and such
https://github.com/bearcove/rapace
birb ipc rpc rust shm
Last synced: 3 months ago
JSON representation
RPC / IPC over SHM, for Rust - good for plugins and such
- Host: GitHub
- URL: https://github.com/bearcove/rapace
- Owner: bearcove
- License: apache-2.0
- Created: 2025-12-08T16:19:37.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2026-01-11T19:58:38.000Z (3 months ago)
- Last Synced: 2026-01-11T23:39:29.962Z (3 months ago)
- Topics: birb, ipc, rpc, rust, shm
- Language: Rust
- Homepage: https://rapace.bearcove.eu/
- Size: 7.28 MB
- Stars: 79
- Watchers: 5
- Forks: 6
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE-APACHE
Awesome Lists containing this project
README
# rapace
[](https://coveralls.io/github/facet-rs/facet?branch=main)
[](https://crates.io/crates/rapace)
[](https://docs.rs/rapace)
[](./LICENSE)
[](https://discord.gg/JhD7CwCJ8F)
A high-performance RPC framework for Rust with support for shared memory, TCP, WebSocket, and in-process transports.
## Features
- **Multiple transports**: Choose the right transport for your use case
- Shared memory (SHM): Ultra-low latency for local processes
- TCP/Unix sockets: Network communication
- WebSocket: Browser and web clients
- In-memory: Testing and single-process RPC
- **Streaming**: Full support for server and client streaming
- **Code generation**: Write your service interface once with `#[rapace::service]`
- **Type-safe**: Compile-time verification of RPC calls
- **Cross-platform**: Linux, macOS, Windows, and WebAssembly
## Quick Start
```rust
use rapace::service;
use rapace::RpcSession;
use rapace_transport_mem::MemTransport;
#[rapace::service]
pub trait Calculator {
async fn add(&self, a: i32, b: i32) -> i32;
}
// Implement your service...
struct MyCalculator;
impl Calculator for MyCalculator {
async fn add(&self, a: i32, b: i32) -> i32 {
a + b
}
}
// Use it with any transport
let (client_transport, server_transport) = MemTransport::pair();
let session = RpcSession::new(client_transport);
let client = CalculatorClient::new(session);
```
## Documentation
See the [crate documentation](https://docs.rs/rapace) and [examples](https://github.com/bearcove/rapace/tree/main/demos).
## Crates
- **rapace**: Main framework (re-exports transports)
- **rapace-core**: Core types and protocols
- **rapace-macros**: Service macro
- **rapace-registry**: Service metadata
- **Transports**:
- rapace-transport-mem
- rapace-transport-stream (TCP/Unix)
- rapace-transport-websocket
- rapace-transport-shm
- **rapace-explorer**: Dynamic service discovery
- **rapace-testkit**: Transport conformance tests
## Sponsors
Thanks to all individual sponsors:

...along with corporate sponsors:



...without whom this work could not exist.
## Special thanks
The facet logo was drawn by [Misiasart](https://misiasart.com/).
## License
Licensed under either of:
- Apache License, Version 2.0 ([LICENSE-APACHE](https://github.com/facet-rs/facet/blob/main/LICENSE-APACHE) or )
- MIT license ([LICENSE-MIT](https://github.com/facet-rs/facet/blob/main/LICENSE-MIT) or )
at your option.