Multi-Party Programming Language
Project description
MPLang: A Programming Language for Multi-Party Computation
MPLang is a Python-native library for building and executing multi-party and multi-device programs. It simplifies secure computation by allowing developers to write a single program that orchestrates multiple parties in a synchronous, SPMD (Single Program, Multiple Data) fashion.
Features
- Single-Controller SPMD: Write one program that runs across multiple parties in lockstep.
- Explicit Device Placement: Clearly annotate and control where data lives and computation happens (e.g., on party
P0,P1, or a secureSPU). - Function-Level Compilation: Use the
@mplang.functiondecorator to compile Python functions into an auditable, optimizable graph representation. - Pluggable Architecture: Easily extend MPLang with new frontends (like JAX, Ibis) and backends (like StableHLO, SPU).
Getting Started
Installation
You'll need a modern Python environment (3.10+). We recommend using uv for fast installation.
# Install uv (if not already installed)
curl -LsSf https://astral.sh/uv/install.sh | sh
# Install MPLang from PyPI
uv pip install mplang
Quick Example
Here's a taste of what MPLang looks like. This example shows a "millionaire's problem" where two parties compare their wealth without revealing it.
import mplang
import mplang.device as mpd
from numpy.random import randint
# Use a decorator to compile this function for multi-party execution
@mplang.function
def millionaire():
# Alice's value, placed on device P0
x = mpd.device("P0")(randint)(0, 1000000)
# Bob's value, placed on device P1
y = mpd.device("P1")(randint)(0, 1000000)
# The comparison happens on a secure device (SPU)
z = mpd.device("SPU")(lambda a, b: a < b)(x, y)
return z
# Set up a local simulator with 2 parties
sim = mplang.Simulator(2)
# Evaluate the compiled function
result = mplang.eval(sim, millionaire)
# Securely fetch the result
print("Is Alice poorer than Bob?", mplang.fetch(sim, result))
Learn More
- Tutorials: Check out the
tutorials/directory for in-depth, runnable examples covering conditions, loops, and more. - Contributing: We welcome contributions! See our Contributing Guide to get started with the development setup.
License
MPLang is licensed under the Apache 2.0 License.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mplang_nightly-0.1.dev169.tar.gz.
File metadata
- Download URL: mplang_nightly-0.1.dev169.tar.gz
- Upload date:
- Size: 328.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-httpx/0.28.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
844e3828201c3e8d8f68447c6eb418e07ed1fe502e1564dc7a9cb4ae0798fc99
|
|
| MD5 |
83ee61743f6c53f2067de1f1f1a55eea
|
|
| BLAKE2b-256 |
cffd6b8f952ef2e3caf72c2803bc4cd693bc1fabb843e7439e596410df198050
|
File details
Details for the file mplang_nightly-0.1.dev169-py3-none-any.whl.
File metadata
- Download URL: mplang_nightly-0.1.dev169-py3-none-any.whl
- Upload date:
- Size: 218.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-httpx/0.28.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a0b27a8be6a01f81291e88b4d54bce29b95dcecc57d65c5c515b10432fde68a2
|
|
| MD5 |
3f1c40dd261d8759347064f1f4e26a86
|
|
| BLAKE2b-256 |
d2e1368ca78634b5524f14bc65a5168e67067a80a45aba1c733f3c0a2f809e56
|