[![Crates.io](https://img.shields.io/crates/v/interprocess)](https://crates.io/crates/interprocess "Interprocess on Crates.io")
[![Docs.rs](https://img.shields.io/badge/documentation-docs.rs-informational)](https://docs.rs/interprocess "interprocess on Docs.rs")
[![Build status](https://github.com/kotauskas/interprocess/actions/workflows/checks_and_tests.yml/badge.svg)](https://github.com/kotauskas/interprocess/actions/workflows/checks_and_tests.yml)
![maintenance-status](https://img.shields.io/badge/maintenance-actively%20developed-brightgreen)
[![Rust version: 1.75+](https://img.shields.io/badge/rust%20version-1.75+-orange)][blogpost]
Interprocess communication toolkit for Rust programs that aims to expose as many
platform-specific features as possible while maintaining a uniform interface for all platforms and
encouraging portable, correct code.
## Interprocess communication primitives
Interprocess provides both OS-specific IPC interfaces and cross-platform abstractions for them.
##### Cross-platform IPC APIs
- **Local sockets** – similar to TCP sockets, but use filesystem or namespaced paths instead of
ports on `localhost`, depending on the OS, bypassing the network stack entirely; implemented
using named pipes on Windows and Unix domain sockets on Unix
##### Platform-specific, but present on both Unix-like systems and Windows
- **Unnamed pipes** – anonymous file-like objects for communicating privately in one direction,
most commonly used to communicate between a child process and its parent
##### Unix-only
- **FIFO files** – special type of file which is similar to unnamed pipes but exists on the
filesystem, often referred to as "named pipes" but completely different from Windows named pipes
- *Unix domain sockets* – Interprocess no longer provides those, as they are present in the
standard library; they are, however, exposed as local sockets
##### Windows-only
- **Named pipes** – resemble Unix domain sockets, use a separate namespace instead of on-drive
paths
## Asynchronous I/O
Currently, only Tokio for local sockets, Unix domain sockets and Windows named pipes is supported.
Support for `async-std` is planned.
## Platform support
Interprocess supports Windows and all generic Unix-like systems. Additionally, platform-specific
extensions are supported on select systems. The policy with those extensions is to put them behind
`#[cfg]` gates and only expose on the supporting platforms, producing compile errors instead of
runtime errors on platforms that have no support for those features.
Four levels of support (not called *tiers* to prevent confusion with Rust target tiers, since those
work completely differently) are provided by Interprocess. It would be a breaking change for a
platform to be demoted, although promotions quite obviously can happen as minor or patch releases.
##### Explicit support
*OSes at this level: **Windows**, **Linux**, **macOS***
- Interprocess is guaranteed to compile and succeed in running all tests – it would be a critical
bug for it not to
- CI, currently provided by GitHub Actions, runs on all of those platforms and displays an ugly red
badge if anything is wrong on any of those systems
- Certain `#[cfg]`-gated platform-specific features are supported with stable public APIs
##### Explicit support without CI
*OSes at this level: **FreeBSD***
- Interprocess is expected to compile and succeed in running all tests – it would be a bug for it
not to
- Manual testing on local VMs is usually done before every release; CI is not provided solely
because GitHub Actions selfishly ignores the existence of those wonderful systems
- Certain `#[cfg]`-gated platform-specific features are supported with stable public APIs
##### Support by association
*OSes at this level: **Dragonfly BSD**, **OpenBSD**, **NetBSD**, **Redox**, **Android**,
**Fuchsia**, **iOS**, **tvOS**, **watchOS***
- Interprocess is expected to compile and succeed in running all tests – it would be a bug for it not to
- No manual testing is performed, and CI is unavailable because GitHub Actions does not provide it
- Certain `#[cfg]`-gated platform-specific features that originate from other platforms are
supported with stable public APIs because they behave here identically to how they do on an OS with
a higher support level
##### Assumed support
*OSes at this level: POSIX-conformant `#[cfg(unix)]` systems not listed above for which the `libc` crate compiles*
- Interprocess is expected to compile and succeed in running all tests – it would be a bug for it
not to
- Because this level encompasses a practically infinite amount of systems, no manual testing or CI
can exist
## Feature gates
- **`tokio`**, *off* by default – enables support for Tokio-powered efficient asynchronous IPC.
## License
This crate, along with all community contributions made to it, is dual-licensed under [MIT] and
[Apache 2.0].
[MIT]: https://choosealicense.com/licenses/mit/
[Apache 2.0]: https://choosealicense.com/licenses/apache-2.0/
[blogpost]: https://blog.rust-lang.org/2023/12/28/Rust-1.75.0.html