rustbridge
[!CAUTION] Beta Software — This project is under active development and not yet recommended for production use.
- Bundle format (
.rbp) should be stable, but may require additional extensions before the 1.0 release- JSON transport is also approaching stability
- Binary transport is experimental
- Installed locally from source: Not yet published to package registries (Maven Central, NuGet, PyPI)
- API documentation is incomplete
rustbridge lets you write plugins in Rust that can be called from Java, Kotlin, C#, or Python—without dealing with the C ABI directly.
The Problem
flowchart LR
subgraph chasm["🕳️ The C ABI Chasm"]
direction TB
ub["Undefined Behavior"]
seg["Segfaults"]
ptr["Raw Pointers"]
align["Memory Alignment"]
leak["Memory Leaks"]
types["Primitive C Types"]
style chasm fill: #1a1a1a, stroke: #ff4444, color: #ff6666
end
Calling Rust from other languages typically means writing C bindings. That means dealing with:
- Undefined behavior from incorrect memory handling
- Segfaults from null pointers or use-after-free
- Memory leaks from forgotten deallocations
- Type mismatches between languages
- No error handling (C has no exceptions or Result types)
- Manual serialization of complex data structures
A Solution
With rustbridge, you can write a plugin once, and call it from various languages without needing to cross the C ABI chasm yourself:
flowchart LR
subgraph safe_rust["🦀 Rust"]
plugin["Your Plugin<br/><code>impl Plugin</code>"]
end
subgraph crossing[" "]
direction TB
bridge["🌉 rustbridge"]
chasm["🕳️ C ABI"]
end
subgraph safe_host["☕ Host Language"]
java["Java / Kotlin"]
csharp["C#"]
python["Python"]
end
plugin -- " .rbp bundle " --> bridge
bridge --> java
bridge --> csharp
bridge --> python
style chasm fill: #1a1a1a, stroke:#ff4444, color: #ff6666
style bridge fill:#22aa22, stroke: #44ff44, color: #ffffff
style crossing fill: none, stroke: none
style safe_rust fill: #f5a623, stroke: #ff8c00,color: #000000
style safe_host fill: #4a90d9,stroke: #2e6cb5, color: #ffffff
rustbridge handles the messy bits for you. You write a simple Rust trait implementation, and rustbridge provides:
- Safe memory management across the FFI boundary
- JSON serialization for request/response data
- Structured error handling with typed error codes
- Plugin lifecycle management (startup, shutdown, health checks)
- Logging callbacks that integrate with your host language
- Portable bundles (
.rbpfiles) that work on multiple platforms
Get Started
The fastest way to understand rustbridge is to build something:
📖 Getting Started Guide — Create your first plugin and call it from Java
Or dive into the tutorials (more to come):
| Tutorial | What You'll Learn |
|---|---|
| Production Bundles | Code signing, schemas, SBOMs |
| Cross-Compilation | Building for multiple platforms |
| Backpressure Queues | Bounded queues, blocking callers, flow control |
| Binary Transport | High-performance binary FFI, image processing |
Quick Example
Rust plugin:
use *;
;
rustbridge_entry!;
Java consumer:
try
Kotlin, C#, and Python are just as simple. See the language guides below.
The .rbp Bundle
Plugins are distributed as .rbp bundles—portable ZIP files containing libraries for multiple platforms:
# Create a multi-platform bundle
Load from any language—rustbridge auto-detects the platform:
Plugin plugin ;
Language Guides
| Language | Version | Guide |
|---|---|---|
| Java | 21+ | docs/using-plugins/JAVA_FFM.md |
| Kotlin | 21+ | docs/using-plugins/KOTLIN.md |
| C# | .NET 8.0+ | docs/using-plugins/CSHARP.md |
| Python | 3.10+ | docs/using-plugins/PYTHON.md |
Note: Java 21 users must add
--enable-previewflag. Java 22+ is recommended.
Install from Source
rustbridge is not yet published to package registries. Install from source to get started.
📖 Full Installation Guide — Set up your workspace, install the CLI, and configure host language libraries.
Quick start:
# 1. Set up workspace (add to ~/.bashrc or ~/.zshrc)
# 2. Clone and install CLI
# 3. Verify
See the full guide for host language library setup (Java/Kotlin, C#, Python).
Project Status
Here are the components planned for a 1.0 release:
| Component | Status |
|---|---|
| JSON Transport | Approaching stability |
| Plugin Lifecycle | Stable |
| Bundle Format | Stable |
| Java FFM Bindings | Stable |
| C# Bindings | Stable |
| Python Bindings | Stable |
| Binary Transport | In development |
Contributing
We welcome contributions! See CONTRIBUTING.md for guidelines.
Quick start:
- Check docs/TASKS.md for open tasks
- Read docs/SKILLS.md for coding conventions
- Read docs/TESTING.md for testing guidelines
Technical Documentation
For those who want to understand the internals:
- Architecture — System design and component overview
- Bundle Format — .rbp specification
- Transport Layer — JSON and binary protocols
- Memory Model — Ownership patterns across FFI
- Error Handling — Error codes and patterns
- Plugin Lifecycle — State machine details
Changelog
See CHANGELOG.md for version history.
License
MIT OR Apache-2.0
Attribution
This project includes software licensed under the Unicode License. See NOTICES for details.