Appose

Interprocess cooperation with shared memory.
Build environments, run scripts, share data across Java, Python and more.

Build Environments

Dynamically construct isolated environments with dependencies from conda-forge, PyPI, Maven, and more. No manual setup needed.

Run Scripts

Execute code asynchronously in separate processes. Scripts receive inputs and return outputs via a simple stdio-based protocol.

Share Memory

Zero-copy access to large data structures via shared memory buffers. Perfect for tensor and array operations across processes.

Why Appose?

Appose was built to enable easy execution of Python-based deep learning from Java without copying tensors. But its utility extends far beyond that.

The problem: You need to use code written in another language (Python for ML, Java for image processing, Node.js for web services), but copying large arrays between processes is slow and memory-intensive.

The solution: Appose lets multiple language runtimes cooperate seamlessly with zero-copy shared memory access. Build an environment with the dependencies you need, spawn workers, and execute routines with minimal overhead.

Guiding principles: Simplicity and efficiency.

Quick Start

The basic workflow is simple:

  1. Build an Environment with your dependencies
  2. Create a Service connected to a worker process
  3. Execute Scripts on the worker by launching Tasks
  4. Receive Results asynchronously with progress updates

Appose Workshop

Language Implementations

Appose is designed so that each language has its own implementation, all speaking the same JSON protocol. This keeps each library lightweight and simple.

Java

Use Python deep learning models from your Java code. Build Maven-based environments.

Learn More
Python

Call Java code or Node.js functions from Python. Build Python and conda environments.

Learn More