Skip to content

Saikuro

A language-agnostic, easy-to-use IPC library for cross-language integration.

Saikuro lets you expose functions written in one language and call them transparently from any other supported language, with a shared typed schema, capability enforcement, and pluggable transports (TCP, Unix socket, WebSocket, or in-memory).


Supported languages

(Saikuro currently is not added to package managers yet. It will be added soon, once I finalize a few things!)

Language Package name Status
Rust (TBD)
TypeScript (TBD)
Python (TBD)
C# (TBD)
C (TBD)
C++ (TBD)

Quick start

Rust provider

use saikuro::{Provider, Result, Value};

#[tokio::main]
async fn main() -> Result<()> {
    let mut provider = Provider::new("math");

    provider.register("add", |args: Vec<Value>| async move {
        let a = args[0].as_i64().unwrap_or(0);
        let b = args[1].as_i64().unwrap_or(0);
        Ok(serde_json::json!(a + b))
    });

    provider.serve("tcp://127.0.0.1:7700").await
}

TypeScript client

import { SaikuroClient } from "@nisoku/saikuro";

const client = await SaikuroClient.connect("tcp://127.0.0.1:7700");
const result = await client.call("math.add", [1, 2]);
console.log(result); // 3

Python client

from saikuro import SaikuroClient

async def main():
    async with SaikuroClient.connect("tcp://127.0.0.1:7700") as client:
        result = await client.call("math.add", [1, 2])
        print(result)  # 3

Repository layout

Build/
  Cargo.toml          # Rust workspace root
  crates/             # Internal library crates
    saikuro-core/       Protocol types, envelope, error
    saikuro-schema/     Schema registry & validation
    saikuro-transport/  Transport backends (TCP, Unix, WebSocket, InMemory, WasmHost)
    saikuro-router/     Invocation router & provider registry
    saikuro-runtime/    Embeddable runtime (includes standalone server binary)
    saikuro-exec/       Execution backends (Tokio, WASM, Embassy)
    saikuro-storage/    Storage backends (InMemory, SQLite, Sled, IndexedDB, OPFS, …)
    saikuro-codegen/    Binding code-generator for all 6 languages
  tests/              # Rust integration tests
  adapters/
    rust/             Rust adapter (saikuro crate)
    typescript/       TypeScript/JS adapter
    python/           Python adapter
    csharp/           C# adapter
    c/                C FFI adapter
    cpp/              C++ RAII adapter
Demo/                 Browser WASM demo (Rust, C, C++, Python, C# providers)
Docs/                 Documentation site
Examples/             Standalone example projects

Documentation

Full documentation is available at the project's GitHub Pages site:

Repository docs sources:

  • Docs/docs/index.md
  • Docs/docs/adapters/index.md
  • Docs/docs/guide/

Contributing

Contributions are welcome! Here’s how to get started:

  1. Fork the repository.
  2. Create a branch for your feature, adapter, or bug fix (git checkout -b feature/name).
  3. Commit your changes (git commit -m "Description of change").
  4. Push your branch (git push origin feature/name).
  5. Open a Pull Request.

Please make sure your changes follow the existing style and that all tests pass before submitting.

See CONTRIBUTING for more details.


Star History

Star History Chart

License

Apache-2.0. See LICENSE.

About

A language agnostic, easy to use, IPC library for cross-language integration.

Resources

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages