This release is a pre-release and may not be stable for production use.
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) and backends (like StableHLO, SPU).
Getting Started
Installation
You'll need a modern Python environment (3.11+). 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 as mp
from numpy.random import randint
# Use a decorator to compile this function for multi-party execution
@mp.function
def millionaire():
# Alice's value, placed on device P0
x = mp.device("P0")(randint)(0, 1000000)
# Bob's value, placed on device P1
y = mp.device("P1")(randint)(0, 1000000)
# The comparison happens on a secure device (SPU)
z = mp.device("SP0")(lambda a, b: a < b)(x, y)
return z
# Set up a local simulator with 2 parties
sim = mp.Simulator.simple(2)
# Evaluate the compiled function
result = mp.evaluate(sim, millionaire)
# Securely fetch the result (reveals SPU value)
print("Is Alice poorer than Bob?", mp.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.
Metadata
Release files for mplang-nightly 0.1.dev339
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| mplang_nightly-0.1.dev339.tar.gz | 432.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mplang_nightly-0.1.dev339-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 800.5 kB
Release files / mplang_nightly-0.1.dev339.tar.gz
| Download URL | mplang_nightly-0.1.dev339.tar.gz |
|---|---|
| Size | 432.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1d80b75fe5c145a4817afb9e0a6bafb0f423e63cf0ea57ef9c737e5589b80d49
|
|
BLAKE2b-256 checksum How to use checksums |
849daa9ed0ce3a5aefc55995e4421466612d98ff6ce42803c45cde903f0646cd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
Hatch/1.17.0 {"ci":true,"cpu":"x86_64","distro":{"id":"noble","libc":{"lib":"glibc","version":"2.39"},"name":"Ubuntu","version":"24.04"},"implementation":{"name":"CPython","version":"3.11.15"},"installer":{"name":"hatch","version":"1.17.0"},"openssl_version":"OpenSSL 3.0.13 30 Jan 2024","python":"3.11.15","system":{"name":"Linux","release":"6.17.0-1018-azure"}} HTTPX2/2.5.0
|
Release files / mplang_nightly-0.1.dev339-py3-none-any.whl
| Download URL | mplang_nightly-0.1.dev339-py3-none-any.whl |
|---|---|
| Size | 368.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4bd05d332158cb9a8924c3d68125038b3048f29a4279c79c9da3e8b36c3c0a65
|
|
BLAKE2b-256 checksum How to use checksums |
5aa9b88d2f45ab5da6713e93adaff259033651aceaf6d2c01f9a793ba527fe08
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
Hatch/1.17.0 {"ci":true,"cpu":"x86_64","distro":{"id":"noble","libc":{"lib":"glibc","version":"2.39"},"name":"Ubuntu","version":"24.04"},"implementation":{"name":"CPython","version":"3.11.15"},"installer":{"name":"hatch","version":"1.17.0"},"openssl_version":"OpenSSL 3.0.13 30 Jan 2024","python":"3.11.15","system":{"name":"Linux","release":"6.17.0-1018-azure"}} HTTPX2/2.5.0
|