Appose
User Guide
Getting Started
Installation
Prerequisites
Your First Appose Program
Understanding the Code
Next Steps
Building Custom Environments
Core Concepts
Architecture Overview
Builder
Builder Types
Builder Features
Environment
Creating Workers
Service
Service Lifecycle
Creating Tasks
Task
Task Lifecycle
Executing Tasks
Task Inputs and Outputs
Non-Serializable Objects and Proxies
Task Callbacks
Canceling Tasks
Worker
Built-in Workers
Task Context in Workers
Custom Workers
Shared Memory
SharedMemory
NDArray
Data Types
Shape and Axis Order
Passing NDArrays to Workers
NumPy Integration (Python)
ImgLib2 Integration (Java)
Shared Memory Lifecycle
Examples
Basic Examples
Simple Calculation
With Inputs and Outputs
Progress Tracking
Golden Ratio Approximation
Environment Building
Conda Environment
Pixi Environment
uv Environment
From Environment Files
Wrapping Existing Environments
Advanced Examples
Multiple Tasks in Sequence
Error Handling
Real-World Use Cases
Deep Learning Inference
Data Science Pipeline
Python Environment Best Practices
Choosing an Environment Manager
Pixi: Single-Platform Quickstart
Pixi: Multi-Platform Configuration
Pixi: CUDA Feature Pattern
Pixi: Apple Silicon and the
nometal
Pattern
Combining Features: Dev + CUDA
Using a
pixi.toml
with Appose
Detecting GPU Availability at Runtime
Complete Example: TensorFlow Worker
Summary of Best Practices
Capturing Output
Environment Building
subscribeOutput / subscribe_output
subscribeError / subscribe_error
subscribeProgress / subscribe_progress
logDebug / log_debug
Catching BuildException
Service and Worker Communication
service.debug
service.invalidLines / service.invalid_lines
service.errorLines / service.error_lines
Task Events
task.listen / task.listen
The Stderr Attribution Gap
Worker Protocol
Protocol Overview
Worker Contract
Request Format
Common Fields
Request Types
EXECUTE
CANCEL
Response Format
Common Fields
Response Types
LAUNCH
UPDATE
COMPLETION
CANCELATION
FAILURE
Task Context
Required Properties
Required Methods
Example Implementation Flow
Reference Implementations
Python Worker
Groovy Worker
Creating Custom Workers
Minimal Worker Example
Best Practices
Data Type Considerations
Beyond JSON-Native Types
Supported Extended Types
SharedMemory
NDArray
WorkerObject (Remote Object Proxies)
Encoding Rules
Decoding Rules
Testing Your Worker
Reference
Frequently Asked Questions
General Questions
What is Appose?
What languages does Appose support?
Why use Appose instead of other IPC solutions?
What was Appose originally designed for?
Installation and Setup
Where are environments stored by default?
Can I use an existing conda/pixi environment?
Which environment builder should I use?
Usage Questions
How do I pass data between processes?
How do I handle long-running tasks?
Can I run multiple tasks in parallel?
How do I handle errors in tasks?
Advanced Questions
Can I create custom workers?
Can I use other transport layers besides pipes+JSON?
Can Appose work across machines?
Can I add custom data type converters?
Troubleshooting
My environment build is hanging
The worker process crashes immediately
My task outputs are empty
Tasks are slow to start
How do I debug worker communication?
Community and Support
Where can I report bugs or request features?
Where is the source code?
How can I contribute?
Is Appose production-ready?
What’s the license?
Alternatives and Complements
Alternatives
Apache Arrow
NATS.io
CuVec
gRPC
ZeroMQ
Complementary Tools
Conda/Mamba/Pixi
uv
NumPy/PyTorch/TensorFlow
Docker/Podman
Comparison Matrix
Choosing the Right Tool
Can I use multiple tools together?
Links
GitHub Repository
Issue Tracker
Java Implementation
Python Implementation
Appose
Index
Index