Skip to content

Transit

Write functions in Rust, Java, Python, C, or C++ and then call them from JavaScript as if they were normal async functions. No REST APIs, no JSON schemas, no glue code.

No Glue Code

Write your logic in the language that fits the job. Transit handles serialization, process management, and function discovery automatically.

Zero Changes

The scanner discovers your existing public functions automatically. No decorators, no annotations, no source modifications.

Optimal Transport

Rust, C, and C++ run in-process via N-API for zero overhead. Java and Python run as resident processes with a binary TCP protocol.

Works Everywhere

Supports Rust, Java, Python, C, C++, and JavaScript/TypeScript. Works on Linux, macOS, and Windows.

Transit/Rust eliminates IPC overhead with zero-copy serialization, offering up to or more than 100x better performance* than standard HTTP or RPC microservices.

TO perform benchmarks on your own hardware, you can go to the benchmark branch

Benchmarks (Compute and Chat Server)

Average Operations per second across all benchmarks (Higher is better)
Benchmarks performed on every update/patch

Transit (Python, Rust, Java)
100,000.00 ops/s (0.01ms)
ZeroMQ
8,333.33 ops/s (0.12ms)
Thrift
7,142.86 ops/s (0.14ms)
PyO3 / Python
5,000.00 ops/s (0.20ms)
gRPC
4,000.00 ops/s (0.25ms)
Redis
2,222.22 ops/s (0.45ms)
FastAPI (HTTP)
1,162.79 ops/s (0.86ms)
import { transit } from "transit"
import { resolve } from "node:path"
const __dirname = import.meta.dirname
const rs = transit.rust(resolve(__dirname, "./rust"))
const jv = transit.java(resolve(__dirname, "./java/src/main/java"))
const py = transit.python(resolve(__dirname, "./python"))
const c = transit.c(resolve(__dirname, "./c"))
const cpp = transit.cpp(resolve(__dirname, "./cpp"))
// Call functions across language boundaries
const rustResult = await rs.processFile({ id: "job-001", bytes: [72, 101, 108] })
const javaResult = await jv.handleSpecialized(rustResult)
const pythonResult = await py.analyzeData(javaResult)
const cResult = await c.processChunk({ data: [1, 2, 3] })
const cppResult = await cpp.fastCompute({ n: 42 })

* performance is dependent on hardware, language and other factors