Native Runtime, Zero Overhead

Each language runs in its own original runtime — no VMs, interpreters, or recompilation. MetaFFI bridges runtimes using FFI and embedding, preserving native performance.

5-15x Faster than gRPC

In-process calls eliminate network overhead, serialization, and server management. Cross-language calls complete in microseconds, not milliseconds.

Single-Language Development

Write your host code in one language. No .proto files, no generated stubs, no multi-language build systems. Just load and call.

Quick Taste

Load a Java library from Python in 6 lines:

from metaffi import MetaFFIRuntime

runtime = MetaFFIRuntime("openjdk")
module = runtime.load_module("log4j-api-2.21.1.jar;log4j-core-2.21.1.jar")

getLogger = module.load_entity(
    "class=org.apache.logging.log4j.LogManager,callable=getLogger",
    [metaffi_string8_type], [metaffi_handle_type])

logger = getLogger("mylogger")

No gRPC server. No protobuf. No code generation. Just load and call.

See more examples

Supported Languages

Language Runtime Status
Go Go runtime via cgo v1.22+
JVM OpenJDK via JNI JDK 11, 21, 22
Python 3 CPython via CPython API v3.11+

Supported Operating Systems

OS Tested
Windows Windows 11, Server 2022
Ubuntu 22.04

How It Works

MetaFFI uses Foreign Function Interface (FFI) and embedding mechanisms to link language runtimes together through a C-based hub. Each language continues to run in its own original runtime — there is no virtual machine, interpreter, or recompilation involved.

The system uses an entity path string to locate functions, methods, fields, and constructors within foreign modules, and a capabilities-based XCall calling convention to marshal data between runtimes using Common Data Types.

Read the paper Getting Started Performance