Install the tools
Choose one path. Use the CLI to inspect, Python to automate, or Rust to embed. For the local client/server lab, start with Python; the CLI is optional.
Install a CLI executable
Section titled “Install a CLI executable”Download the file for the machine that will run the tool. These are v0.11.0 release assets, not an automatic platform recommendation.
bacnet-macos-arm64Release build: BACnet/SCmacOS Intelbacnet-macos-amd64Release build: BACnet/SCLinux x86-64bacnet-linux-amd64Release build: BACnet/SC · packet captureLinux ARM64bacnet-linux-arm64Release build: BACnet/SC · packet captureWindows x86-64bacnet-windows-amd64.exeRelease build: BACnet/SCWindows ARM64 is not listed in this release. The feature labels reflect the release workflow, not a blanket transport or conformance guarantee.
Run it from the download directory
Section titled “Run it from the download directory”CLI on macOS or Linux
Section titled “CLI on macOS or Linux”For Apple silicon, after downloading bacnet-macos-arm64:
chmod +x ./bacnet-macos-arm64./bacnet-macos-arm64 --version./bacnet-macos-arm64 --helpOn Intel Macs or Linux, substitute the exact filename you downloaded. Do not run a filename intended for another processor architecture.
CLI on Windows
Section titled “CLI on Windows”In PowerShell, from the download directory:
.\bacnet-windows-amd64.exe --version.\bacnet-windows-amd64.exe --helpThe .\ prefix means “run the file in this directory.” You do not need to change PowerShell’s script-execution policy to run this executable. Follow your organization’s executable approval process; do not disable operating-system protections to follow a tutorial.
The guides use bacnet for readability. Rename the executable to bacnet / bacnet.exe and place it on your PATH, or substitute its downloaded filename in commands. On Windows, Get-Command bacnet; on macOS/Linux, command -v bacnet helps identify which executable will run.
Prefer a source build?
Section titled “Prefer a source build?”With Rust 1.93 or later and the toolchain’s platform prerequisites installed:
git clone --branch v0.11.0 https://github.com/jscott3201/rusty-bacnet.git rusty-bacnet-v0.11cd rusty-bacnet-v0.11cargo install --path crates/bacnet-cli --lockedbacnet --versionThat basic build does not enable packet capture. To include BACnet/SC without adding packet capture:
cargo install --path crates/bacnet-cli --locked --features sc-tlspcap is a separate optional Cargo feature and needs native development dependencies when building. Add it only when packet capture is needed.
Install the Python package
Section titled “Install the Python package”The package is named rusty-bacnet; the import is rusty_bacnet. It does not install the documented bacnet CLI executable.
The package minimum is Python 3.11. The reviewed release workflow builds ordinary CPython 3.11, 3.12, and 3.13 wheels. Start with one of those interpreters; newer or free-threaded Python builds are not implied by that minimum. These are build targets, not a promise that every machine has a compatible downloadable wheel.
Python on macOS or Linux
Section titled “Python on macOS or Linux”Check that python3 is an appropriate interpreter, then create a local environment:
python3 --versionpython3 -m venv .venv.venv/bin/python -m pip install --only-binary=:all: rusty-bacnet==0.11.0Verify that the native module loads, not just that package metadata exists:
.venv/bin/python -c "from rusty_bacnet import BACnetClient; from importlib.metadata import version; print(version('rusty-bacnet'))"Python on Windows
Section titled “Python on Windows”This example explicitly selects Python 3.13. Use an installed, supported interpreter:
py -3.13 -m venv .venv.\.venv\Scripts\python.exe -m pip install --only-binary=:all: rusty-bacnet==0.11.0.\.venv\Scripts\python.exe -c "from rusty_bacnet import BACnetClient; from importlib.metadata import version; print(version('rusty-bacnet'))"Using the environment’s interpreter directly avoids a separate activation step or an execution-policy change.
“No matching distribution found”
Section titled ““No matching distribution found””--only-binary=:all: deliberately prevents an unexpected native source build. Check the interpreter version, operating system, architecture, and configured package index. A missing wheel is not a BACnet network failure.
A source build is a different installation path: it needs Rust and the native prerequisites for the release’s PyO3/Maturin build. Review the Python packaging source before choosing it. Do not silently drop the binary-only option and call that an equivalent install.
CONTINUETry the local client/server labRead an example point without a physical controller or building network.Add the Rust crates
Section titled “Add the Rust crates”Rust 1.93 or later is the reviewed workspace minimum. Use the bacnet-* crates; rusty-bacnet is the Python package name, not the Rust client crate.
Start with the exact release baseline while learning:
[dependencies]bacnet-client = "=0.11.0"bacnet-types = "=0.11.0"bacnet-encoding = "=0.11.0"tokio = { version = "1", features = ["macros", "rt-multi-thread"] }Keep related BACnet crate versions aligned. Add transport features only when the application needs them. The Rust quickstart supplies a directed-read example and explains the address format.
CONTINUEEmbed the Rust clientBuild a small client, then choose the transport your application needs.Installation is not connectivity
Section titled “Installation is not connectivity”A working executable or Python import is the first checkpoint. Network reachability, certificate trust, and serial timing are separate checks. Start locally, then move to a known authorized device.
Sources and release scope
Section titled “Sources and release scope”Guides target v0.11.0. Release assets · Release build matrix · CLI feature flags · Python packaging · Workspace minimum.
Release v0.11.0 ·Current development. Follow the scope named on each page. Pre-1.0 APIs; partial conformance.Support & limitations