A cross-platform IPC (Inter-Process Communication) library powered by Rust
Project description
ipckit
A high-performance, cross-platform IPC (Inter-Process Communication) library for Rust and Python, powered by Rust.
✨ Features
- 🚀 High Performance - Written in Rust, with zero-copy where possible
- 🔀 Cross-Platform - Works on Windows, Linux, and macOS
- 🐍 Python Bindings - First-class Python support via PyO3
- 📦 Multiple IPC Methods - Pipes, Shared Memory, Channels, and File-based IPC
- 🔒 Thread-Safe - Safe concurrent access across processes
- ⚡ Native JSON - Built-in fast JSON serialization using Rust's serde_json
- 🛡️ Graceful Shutdown - Built-in support for graceful channel shutdown
📦 Installation
Python
pip install ipckit
Rust
[dependencies]
ipckit = "0.1"
🚀 Quick Start
Anonymous Pipe (Parent-Child Communication)
Python:
import ipckit
import subprocess
# Create pipe pair
pipe = ipckit.AnonymousPipe()
# Write to pipe
pipe.write(b"Hello from parent!")
# Read from pipe
data = pipe.read(1024)
print(data)
Rust:
use ipckit::AnonymousPipe;
fn main() -> ipckit::Result<()> {
let pipe = AnonymousPipe::new()?;
pipe.write_all(b"Hello from Rust!")?;
let mut buf = [0u8; 1024];
let n = pipe.read(&mut buf)?;
println!("{}", String::from_utf8_lossy(&buf[..n]));
Ok(())
}
Named Pipe (Unrelated Process Communication)
Python Server:
import ipckit
# Create server
server = ipckit.NamedPipe.create("my_pipe")
print("Waiting for client...")
server.wait_for_client()
# Communicate
data = server.read(1024)
server.write(b"Response from server")
Python Client:
import ipckit
# Connect to server
client = ipckit.NamedPipe.connect("my_pipe")
# Communicate
client.write(b"Hello from client")
response = client.read(1024)
print(response)
Shared Memory (Fast Data Exchange)
Python:
import ipckit
# Create shared memory (owner)
shm = ipckit.SharedMemory.create("my_shm", 4096)
shm.write(0, b"Shared data here!")
# In another process, open existing
shm2 = ipckit.SharedMemory.open("my_shm")
data = shm2.read(0, 17)
print(data) # b"Shared data here!"
Rust:
use ipckit::SharedMemory;
fn main() -> ipckit::Result<()> {
// Create
let shm = SharedMemory::create("my_shm", 4096)?;
shm.write(0, b"Hello from Rust!")?;
// Open in another process
let shm2 = SharedMemory::open("my_shm")?;
let data = shm2.read(0, 16)?;
Ok(())
}
IPC Channel (High-Level Message Passing)
Python:
import ipckit
# Server
channel = ipckit.IpcChannel.create("my_channel")
channel.wait_for_client()
# Send/receive JSON
channel.send_json({"type": "greeting", "message": "Hello!"})
response = channel.recv_json()
print(response)
File Channel (Frontend-Backend Communication)
Perfect for desktop applications where Python backend communicates with web frontend.
Python Backend:
import ipckit
# Create backend channel
channel = ipckit.FileChannel.backend("./ipc_channel")
# Send request to frontend
request_id = channel.send_request("getData", {"key": "user_info"})
# Wait for response
response = channel.wait_response(request_id, timeout_ms=5000)
print(response)
# Send events
channel.send_event("status_update", {"status": "ready"})
JavaScript Frontend:
// Read from: ./ipc_channel/backend_to_frontend.json
// Write to: ./ipc_channel/frontend_to_backend.json
async function pollMessages() {
const response = await fetch('./ipc_channel/backend_to_frontend.json');
const messages = await response.json();
// Process new messages...
}
Native JSON Functions
ipckit provides Rust-native JSON functions that are faster than Python's built-in json module:
import ipckit
# Serialize (1.2x faster than json.dumps)
data = {"name": "test", "values": [1, 2, 3]}
json_str = ipckit.json_dumps(data)
# Pretty print
pretty_str = ipckit.json_dumps_pretty(data)
# Deserialize
obj = ipckit.json_loads('{"key": "value"}')
Graceful Shutdown
When using IPC channels with event loops (like WebView, GUI frameworks), background threads may continue sending messages after the main event loop has closed, causing errors. The GracefulChannel feature solves this problem.
Python:
import ipckit
# Create channel with graceful shutdown support
channel = ipckit.GracefulIpcChannel.create("my_channel")
channel.wait_for_client()
# ... use channel normally ...
data = channel.recv()
channel.send(b"response")
# Graceful shutdown - prevents new operations and waits for pending ones
channel.shutdown()
channel.drain() # Wait for all pending operations to complete
# Or use shutdown with timeout (in milliseconds)
channel.shutdown_timeout(5000) # 5 second timeout
Rust:
use ipckit::{GracefulIpcChannel, GracefulChannel};
use std::time::Duration;
fn main() -> ipckit::Result<()> {
let mut channel = GracefulIpcChannel::<Vec<u8>>::create("my_channel")?;
channel.wait_for_client()?;
// ... use channel ...
// Graceful shutdown
channel.shutdown();
channel.drain()?;
// Or with timeout
channel.shutdown_timeout(Duration::from_secs(5))?;
Ok(())
}
Key Benefits:
- Prevents
EventLoopClosedand similar errors - Thread-safe shutdown signaling
- Tracks pending operations with RAII guards
- Configurable drain timeout
📖 IPC Methods Comparison
| Method | Use Case | Performance | Complexity |
|---|---|---|---|
| Anonymous Pipe | Parent-child processes | Fast | Low |
| Named Pipe | Unrelated processes | Fast | Medium |
| Shared Memory | Large data, frequent access | Fastest | High |
| IPC Channel | Message passing | Fast | Low |
| File Channel | Frontend-backend | Moderate | Low |
| Graceful Channel | Event loop integration | Fast | Low |
🏗️ Architecture
┌─────────────────────────────────────────────────────────────┐
│ Python Application │
├─────────────────────────────────────────────────────────────┤
│ ipckit Python Bindings │
│ (PyO3) │
├─────────────────────────────────────────────────────────────┤
│ ipckit Rust Core │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────────────────┐│
│ │ Pipes │ │ SHM │ │ Channel │ │ File Channel ││
│ └─────────┘ └─────────┘ └─────────┘ └─────────────────────┘│
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Graceful Shutdown Layer ││
│ │ (GracefulNamedPipe, GracefulIpcChannel, ShutdownState) ││
│ └─────────────────────────────────────────────────────────┘│
├─────────────────────────────────────────────────────────────┤
│ Platform Abstraction Layer │
│ (Windows / Linux / macOS) │
└─────────────────────────────────────────────────────────────┘
🔧 Building from Source
Prerequisites
- Rust 1.70+
- Python 3.7+
- maturin (
pip install maturin)
Build
# Clone repository
git clone https://github.com/loonghao/ipckit.git
cd ipckit
# Build Python package
maturin develop --release
# Run tests
pytest tests/
cargo test
📝 License
This project is dual-licensed under:
🤝 Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
📚 Documentation
🙏 Acknowledgments
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
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 ipckit-0.1.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: ipckit-0.1.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 363.8 kB
- Tags: PyPy, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4bc3b12303449a88da4b339cd36f668b1371509b86e6d9e9784ba9296ecb9c35
|
|
| MD5 |
7a76b89654d734afb34fb96e4b7db6fe
|
|
| BLAKE2b-256 |
12f7a4161d4c0d30fd54493e7819597a97d8b1028319685ce94bfb8421004e1c
|
Provenance
The following attestation bundles were made for ipckit-0.1.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
release.yml on loonghao/ipckit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ipckit-0.1.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
4bc3b12303449a88da4b339cd36f668b1371509b86e6d9e9784ba9296ecb9c35 - Sigstore transparency entry: 763362265
- Sigstore integration time:
-
Permalink:
loonghao/ipckit@7179794bb86bca348a85d0609a177f2d02cc1d7f -
Branch / Tag:
refs/heads/main - Owner: https://github.com/loonghao
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@7179794bb86bca348a85d0609a177f2d02cc1d7f -
Trigger Event:
push
-
Statement type:
File details
Details for the file ipckit-0.1.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: ipckit-0.1.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 365.0 kB
- Tags: PyPy, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d2c1ee40b55138d0bdbe4d665ce5798483bfa50d8d8d0466301dae5b804dfe28
|
|
| MD5 |
85efbf433f711f80560dee42a7709e64
|
|
| BLAKE2b-256 |
5c82e6e06b5217636f7476d1019549a723eb8eeb5508c7a5e442ebe0a0ca5a86
|
Provenance
The following attestation bundles were made for ipckit-0.1.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
release.yml on loonghao/ipckit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ipckit-0.1.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
d2c1ee40b55138d0bdbe4d665ce5798483bfa50d8d8d0466301dae5b804dfe28 - Sigstore transparency entry: 763362266
- Sigstore integration time:
-
Permalink:
loonghao/ipckit@7179794bb86bca348a85d0609a177f2d02cc1d7f -
Branch / Tag:
refs/heads/main - Owner: https://github.com/loonghao
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@7179794bb86bca348a85d0609a177f2d02cc1d7f -
Trigger Event:
push
-
Statement type:
File details
Details for the file ipckit-0.1.1-cp38-abi3-win_amd64.whl.
File metadata
- Download URL: ipckit-0.1.1-cp38-abi3-win_amd64.whl
- Upload date:
- Size: 302.4 kB
- Tags: CPython 3.8+, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c40564d4ddf8c03dd6cbca399ca69086616fdc744f72d87ae3637e75b385cdb2
|
|
| MD5 |
771480feebefd2cec30889f974dc320d
|
|
| BLAKE2b-256 |
c8427acf0279b88e2f978b58073323c0ce728a796c6ca9e110e303e52f11849c
|
Provenance
The following attestation bundles were made for ipckit-0.1.1-cp38-abi3-win_amd64.whl:
Publisher:
release.yml on loonghao/ipckit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ipckit-0.1.1-cp38-abi3-win_amd64.whl -
Subject digest:
c40564d4ddf8c03dd6cbca399ca69086616fdc744f72d87ae3637e75b385cdb2 - Sigstore transparency entry: 763362268
- Sigstore integration time:
-
Permalink:
loonghao/ipckit@7179794bb86bca348a85d0609a177f2d02cc1d7f -
Branch / Tag:
refs/heads/main - Owner: https://github.com/loonghao
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@7179794bb86bca348a85d0609a177f2d02cc1d7f -
Trigger Event:
push
-
Statement type:
File details
Details for the file ipckit-0.1.1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: ipckit-0.1.1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 385.0 kB
- Tags: CPython 3.8+, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f51e849660022ac13334154c6ac57f67acdf20c65d2d73d0f4bf824ea1a69d2a
|
|
| MD5 |
413231e814963eba890e0026b7bcac2b
|
|
| BLAKE2b-256 |
9fc09e48048df4fcfc604c376fb19b00d50cc4277685193d2c761cd25e9364eb
|
Provenance
The following attestation bundles were made for ipckit-0.1.1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
release.yml on loonghao/ipckit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ipckit-0.1.1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
f51e849660022ac13334154c6ac57f67acdf20c65d2d73d0f4bf824ea1a69d2a - Sigstore transparency entry: 763362271
- Sigstore integration time:
-
Permalink:
loonghao/ipckit@7179794bb86bca348a85d0609a177f2d02cc1d7f -
Branch / Tag:
refs/heads/main - Owner: https://github.com/loonghao
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@7179794bb86bca348a85d0609a177f2d02cc1d7f -
Trigger Event:
push
-
Statement type:
File details
Details for the file ipckit-0.1.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: ipckit-0.1.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 364.7 kB
- Tags: CPython 3.8+, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b5017f60c3e4eed5c09e95795f811e013b1a14e527bbfe58a4f6f392520e8ca9
|
|
| MD5 |
6fab548071be85958bab9bb67122d3a4
|
|
| BLAKE2b-256 |
dfb5594e905e32d86c91dd83da335fef22659211a2e4a6eca0037e62a7c6bec1
|
Provenance
The following attestation bundles were made for ipckit-0.1.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
release.yml on loonghao/ipckit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ipckit-0.1.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
b5017f60c3e4eed5c09e95795f811e013b1a14e527bbfe58a4f6f392520e8ca9 - Sigstore transparency entry: 763362270
- Sigstore integration time:
-
Permalink:
loonghao/ipckit@7179794bb86bca348a85d0609a177f2d02cc1d7f -
Branch / Tag:
refs/heads/main - Owner: https://github.com/loonghao
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@7179794bb86bca348a85d0609a177f2d02cc1d7f -
Trigger Event:
push
-
Statement type:
File details
Details for the file ipckit-0.1.1-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.
File metadata
- Download URL: ipckit-0.1.1-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
- Upload date:
- Size: 708.0 kB
- Tags: CPython 3.8+, macOS 10.12+ universal2 (ARM64, x86-64), macOS 10.12+ x86-64, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a1082f536d2cade535d4fb0cd3aaf01e51d47befc40983ee9330454908a7460f
|
|
| MD5 |
2923007ae6a12be07799e2d72058f15a
|
|
| BLAKE2b-256 |
21a9a3b55f361b18d58952e8eee561d2f0efa1b85fe95631513d07a28b9c864c
|
Provenance
The following attestation bundles were made for ipckit-0.1.1-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:
Publisher:
release.yml on loonghao/ipckit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ipckit-0.1.1-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl -
Subject digest:
a1082f536d2cade535d4fb0cd3aaf01e51d47befc40983ee9330454908a7460f - Sigstore transparency entry: 763362269
- Sigstore integration time:
-
Permalink:
loonghao/ipckit@7179794bb86bca348a85d0609a177f2d02cc1d7f -
Branch / Tag:
refs/heads/main - Owner: https://github.com/loonghao
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@7179794bb86bca348a85d0609a177f2d02cc1d7f -
Trigger Event:
push
-
Statement type: