All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
2.0.0 - 2026-09-12
This release changes the default socket location and replaces filesystem-only
connection isolation with explicit kernel peer-credential authorization. Review
socket paths and allowed_uids before upgrading.
Added
- Support
UDS_DIST_DIRas a boot-time socket directory source. - Add
allowed_uidsapplication configuration and boot arguments. The policy defaults to the process's effective UID and acceptsanyor a list of trusted numeric UIDs.
Changed
- Breaking: Replace the working-directory socket default with
/tmp/uds-dist-<node-name>.sock. Path selection now follows application configuration,UDS_DIST_DIR, then the host-global fallback. - Breaking: Explicit filesystem socket directories now use mode
0755, and socket files use mode0666. A missing directory leaf is created automatically; an existing leaf must be a real directory owned by the process's effective UID with mode0755. - Breaking: Change the overlong-path exception from
{socket_path_too_long, #{bytes => Bytes, max_bytes => Limit}}to{socket_path_too_long, Path, Limit}, and extend path-length validation to the supported BSD platforms. - Breaking: Require Linux, macOS, FreeBSD, NetBSD, OpenBSD, or DragonFly BSD so peer credentials can be enforced. Unsupported platforms fail at listener startup.
- Retain the listener's resolved socket directory and UID policy until it closes, ensuring inbound and outbound connections use the same settings even if the environment changes.
- Log the resolved socket path and accepted-peer UID policy when the listener starts.
- Building from source now requires
makeand a C compiler for the small POSIX helper NIF, built throughelixir_make.
Security
- Authorize both inbound and outbound connections from kernel-supplied peer credentials before exchanging distribution-handshake data.
- Fail closed when peer credentials or the POSIX helper are unavailable, reject Linux's
overflowuidsentinel in explicit UID policies, and rate-limit rejected-connection logs.
Before a rolling upgrade from 1.0.x, configure every node with the new socket location; otherwise old and upgraded nodes will resolve different defaults and cannot connect. Change an existing mode-0700 configured socket directory to 0755. Cross-user release commands need an allowed UID policy and access to the daemon's distribution cookie.
1.0.1 - 2026-09-12
Changed
- Publish tagged package versions to Hex.pm after the complete CI matrix passes.
- Require Erlang/OTP 27 or newer, matching the Erlang syntax used by the library.
- Report distribution socket statistics as packet counts, consistent with OTP's
recv_cntandsend_cntsemantics.
Fixed
- Recognise binary
socket_dirvalues beginning with@as Linux abstract namespace paths. - Return stale socket deletion errors instead of retrying indefinitely.
- Close the accepted socket and distribution controller when the kernel rejects a protocol handshake.
- Raise a descriptive error when a Unix socket path exceeds Linux or macOS address limits.
Security
- Document filesystem directory permissions and the local-access implications of abstract namespace sockets.
1.0.0 - 2026-05-14
Added
- Initial
uds_distmodule — custom Erlang distribution over Unix domain sockets using the:socketmodule, supporting both filesystem-backed and Linux abstract namespace sockets. Path selection is driven by thesocket_dirapplication environment value, with a leading@selecting the abstract namespace.