# Install libplctag with Homebrew, Nix

Portable and simple API for accessing AB PLC data over Ethernet. Version 2.7.0 via Homebrew; verified from local package data. Also installable with nix: nix profile install nixpkgs#libplctag.

## Install

```sh
sudo av install brew:libplctag
```

Additional install commands:

### macOS

- Homebrew (100%):

```sh
brew install libplctag
```

  Evidence: local Homebrew formula metadata

### Linux

- Nix (92%):

```sh
nix profile install nixpkgs#libplctag
```

  Evidence: nixpkgs package indexes: pkgs/by-name/li/libplctag/package.nix from https://api.github.com/repos/NixOS/nixpkgs/git/trees/master?recursive=1

## Package facts

- **Package key:** brew:libplctag
- **Package manager:** Homebrew
- **Package manager page:** <https://formulae.brew.sh/formula/libplctag>
- **Version:** 2.7.0
- **Source summary:** Portable and simple API for accessing AB PLC data over Ethernet
- **Homepage:** <https://github.com/libplctag/libplctag>
- **Repository:** <https://github.com/libplctag/libplctag>
- **License:** LGPL-2.0-or-later OR MPL-2.0
- **Source archive:** <https://github.com/libplctag/libplctag/archive/refs/tags/v2.7.0.tar.gz>
- **Generated:** 2026-08-04T22:13:35+00:00

## Executables

- modbus_server (cli)
- tag_rw2 (cli)
- modbus_server (alias)
- tag_rw2 (alias)

## Build dependencies

- cmake

## Install behavior

- Post-install hook: not defined
- Bottle: available on arm64_linux, arm64_sequoia, arm64_sonoma, arm64_tahoe, sonoma, x86_64_linux

## Freshness

- Page generated: 2026-08-04
- Package-manager version: 2.7.0
- Local data: ok
- Upstream repository: https://github.com/libplctag/libplctag
- Upstream latest detected: v2.7.0 (current)
- info: No package-manager update timestamp was available.
## Project history and usage

libplctag is an open-source C library for reading and writing programmable-logic-controller tags over EtherNet/IP and Modbus TCP. It targets industrial automation users who need a small portable API instead of a broad OPC stack.

### Project history

The upstream history page says the project began because the maintainers wanted the practical PLC access they needed without the cost, size, Windows/OLE dependency, and licensing constraints they associated with OPC implementations. They evaluated older PCCC libraries and TuxEIP, found licensing, portability, maintainability, and API-shape problems, then wrote their own library without copying TuxEIP code.

The README states that libplctag has been in production use since early 2012. Over time the project kept a C core, a deliberately small API, and examples/wrappers for higher-level languages.

### Adoption history

Upstream describes production use across radio telescopes, manufacturing, fitness equipment, food handling, and other industrial settings. That adoption pattern is narrower than a general developer library but unusually practical: it is used where software talks to physical PLC-controlled systems.

The project also grew a wrapper ecosystem, including .NET, Go, Java, Julia, C++, Python, and Pascal bindings or examples. That made the C library a common native core for language-specific automation clients.

### How it is used

Developers use libplctag to read and write PLC tag values, list tags, handle callbacks, and build small command-line or service tools around Allen-Bradley/Rockwell and Modbus TCP devices.

Package users see helper executables such as `tag_rw2` and examples, but the package's main role is as a native library dependency for industrial-control applications.

### Why package nerds care

libplctag is notable because it packages industrial automation access as a normal open-source C dependency. That is unusual territory for package managers: real machinery, proprietary protocol history, cross-platform binaries, and wrappers all meet in one modest library.

The dual MPL-2.0/LGPL-2.0-or-later licensing also matters for integrators who need something less restrictive than GPL-only PLC code.

### Timeline

- 2012: The README states that libplctag has been in production use since early 2012.
- 2022: The API wiki history records updates for 2.4.0 and 2.5.0 API changes.
- 2026: The README lists tier-one platform testing across Linux, macOS, and Windows combinations.

### Related projects

- TuxEIP/TuxPLC is the abandoned earlier EtherNet/IP-related codebase discussed in libplctag's origin story.
- libplctag.NET, goplctag, libplctag4j, and PLCTag.jl are related wrappers that expose the C core to other language ecosystems.
- OPC is the larger industrial-automation integration family that libplctag's maintainers explicitly wanted to avoid for their narrower use case.

### Sources

- <https://github.com/libplctag/libplctag>
- <https://github.com/libplctag/libplctag/wiki/API>
- <https://libplctag.github.io/>
- <https://raw.githubusercontent.com/libplctag/libplctag/master/README.md>
- <https://raw.githubusercontent.com/wiki/libplctag/libplctag/History.md>


## Security Notes

broad file, network, media, or database tool signal.

- **Geiger risk:** blue / medium
- broad file, network, media, or database tool signal

## Source Database Details

- **Source Database:** Homebrew formula API
- **Tap:** homebrew/core
- **Full Name:** libplctag
- **Version Scheme:** 0
- **Revision:** 0
- **Bottle Stable Root URL:** <https://ghcr.io/v2/homebrew/core>
- **Deprecated:** no
- **Disabled:** no
- **Keg Only:** no
- **URL Keys:** stable

## Other Package-Manager Records

- Nix - libplctag: normalized package name match | nixpkgs package indexes: pkgs/by-name/li/libplctag/package.nix from https://api.github.com/repos/NixOS/nixpkgs/git/trees/master?recursive=1


## Related links

- [Source-control packages](https://pkg.so/source-control-tools/) - Belongs to a source-control command family.
- [Secret-risk packages](https://pkg.so/secret-risk-packages/) - Has protected-tool coverage, approval-gate, or non-low Geiger security signals.
- [Terminal utility packages](https://pkg.so/terminal-utilities/) - Matched terminal and command-line workflow metadata.
- [Text processing packages](https://pkg.so/text-processing-tools/) - Matched text, document, or structured-data processing metadata.
- [cmake](https://pkg.so/brew/cmake/) - Build dependency declared by Homebrew.
- [pcre2](https://pkg.so/brew/pcre2/) - Shares pkgdb curated category or tags: c-library, cli, developer-tools.
- [ncurses](https://pkg.so/brew/ncurses/) - Shares pkgdb curated category or tags: c-library, cli, developer-tools.
- [expat](https://pkg.so/brew/expat/) - Shares pkgdb curated category or tags: c-library, cli, developer-tools.
- [libgpg-error](https://pkg.so/brew/libgpg-error/) - Shares pkgdb curated category or tags: c-library, cli, developer-tools.
- [libevent](https://pkg.so/brew/libevent/) - Shares pkgdb curated category or tags: c-library, cli, developer-tools.
- [oniguruma](https://pkg.so/brew/oniguruma/) - Shares pkgdb curated category or tags: c-library, cli, developer-tools.
- [libxml2](https://pkg.so/brew/libxml2/) - Shares pkgdb curated category or tags: c-library, cli, developer-tools.
- [libgit2](https://pkg.so/brew/libgit2/) - Shares pkgdb curated category or tags: c-library, cli, developer-tools.
- [fstrm](https://pkg.so/brew/fstrm/) - Local package facts share a topical domain. Shared terms: api, c-library, cli, data, developer.
- [mtbl](https://pkg.so/brew/mtbl/) - Local package facts share a topical domain. Shared terms: c-library, cli, data, developer, developer-tools.

## Combined YAML source

View the package source record on GitHub. [combined/libplctag.yml](https://github.com/mxcl/pkgdb/blob/main/combined/libplctag.yml)


## Sources

- pkg.so package database
- Geiger risk classifier
- package-page enrichment
- curated package history
- package version freshness
- pkgdb category and tag curation
- package relationship graph
- external package-manager database matches
- cross-ecosystem install command graph
