# Install libnl with Homebrew, Nix, pacman

Netlink Library Suite. Version 3.12.0 via Homebrew; verified from local package data. Also installable with nix: nix profile install nixpkgs#libnl.

## Install

```sh
sudo av install brew:libnl
```

Additional install commands:

### macOS

- Homebrew (100%):

```sh
brew install libnl
```

  Evidence: local Homebrew formula metadata

### Linux

- Nix (92%):

```sh
nix profile install nixpkgs#libnl
```

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

- pacman (92%):

```sh
sudo pacman -S libnl
```

  Evidence: Arch Linux sync databases: libnl from https://geo.mirror.pkgbuild.com/core/os/x86_64/core.db.tar.gz

## Package facts

- **Package key:** brew:libnl
- **Package manager:** Homebrew
- **Version:** 3.12.0
- **Source summary:** Netlink Library Suite
- **Homepage:** <https://github.com/thom311/libnl>
- **Repository:** <https://github.com/thom311/libnl>
- **Generated:** 2026-08-03T19:37:03+00:00

## Executables

- genl-ctrl-list (alias)
- idiag-socket-details (alias)
- nf-ct-add (alias)
- nf-ct-events (alias)
- nf-ct-list (alias)
- nf-exp-add (alias)
- nf-exp-delete (alias)
- nf-exp-list (alias)
- nf-log (alias)
- nf-monitor (alias)
- nf-queue (alias)
- nl-addr-add (alias)
- nl-addr-delete (alias)
- nl-addr-list (alias)
- nl-class-add (alias)
- nl-class-delete (alias)
- nl-class-list (alias)
- nl-classid-lookup (alias)
- nl-cls-add (alias)
- nl-cls-delete (alias)
- nl-cls-list (alias)
- nl-fib-lookup (alias)
- nl-link-enslave (alias)
- nl-link-ifindex2name (alias)
- nl-link-list (alias)
- nl-link-name2ifindex (alias)
- nl-link-release (alias)
- nl-link-set (alias)
- nl-link-stats (alias)
- nl-list-caches (alias)
- nl-list-sockets (alias)
- nl-monitor (alias)
- nl-neigh-add (alias)
- nl-neigh-delete (alias)
- nl-neigh-list (alias)
- nl-neightbl-list (alias)
- nl-nh-list (alias)
- nl-pktloc-lookup (alias)
- nl-qdisc-add (alias)
- nl-qdisc-delete (alias)
- nl-qdisc-list (alias)
- nl-route-add (alias)
- nl-route-delete (alias)
- nl-route-get (alias)
- nl-route-list (alias)
- nl-rule-list (alias)
- nl-tctree-list (alias)
- nl-util-addr (alias)

## Install behavior

- Bottle: not available

## Freshness

- Page generated: 2026-08-03
- Package-manager version: 3.12.0
## Project history and usage

libnl is the Netlink Protocol Library Suite, a set of C libraries for Linux applications that talk to kernel netlink interfaces. Netlink replaced many ioctl-style networking control paths with a message-based IPC mechanism between user space and the kernel.

### Project history

The Infradead project page describes libnl as a suite split into smaller libraries: libnl for socket and message fundamentals, libnl-route for NETLINK_ROUTE interfaces, libnl-genl for generic netlink, and libnl-nf for netfilter interfaces. The split is explicitly intended to avoid forcing every application to link one large library.

The project history includes a long-lived 1.1.x branch and a 3.x branch. The Infradead page warns that 1.1.x support is limited and tells new applications to target libnl3, while also documenting distribution package names for CentOS, Debian, Fedora, OpenSUSE, Slackware, and Ubuntu.

### Adoption history

libnl became a standard dependency for Linux networking software that needed structured access to routes, addresses, links, traffic control, generic netlink families, and netfilter state. Its inclusion in many distribution package sets reflects netlink's role as the Linux kernel's preferred extensible networking control API.

### How it is used

Callers use libnl core primitives for netlink sockets, message construction, parsing, send, receive, and cache handling, then add family-specific libraries when they need route, generic netlink, or netfilter support. The Homebrew package exposes many nl-* and nf-* command-line helpers around those APIs.

### Why package nerds care

libnl matters to package maintainers because it is Linux-specific, ABI-sensitive, and central to network managers, firewall tools, wireless stacks, containers, and low-level diagnostics. The project's documented SONAME problems in releases 3.2.18 and 3.2.19 show why distributions track its ABI carefully.

### Timeline

- 1.1.x era: The project maintained a stable branch but later advised new applications to use libnl3.
- 3.2.10: The project reverted an unnecessary SONAME bump after discussion to reduce distribution-maintainer pain.
- 3.2.18-3.2.19: The project documented an incorrect SONAME that required affected binaries to be relinked for compatibility with 3.2.20 and later.
- 2014-07-16: The Infradead project page records libnl 3.2.25 as released.

### Related projects

- Related kernel interfaces include netlink, NETLINK_ROUTE, generic netlink, and netfilter.
- The libnl suite's related libraries include libnl, libnl-route, libnl-genl, and libnl-nf.

### Sources

- <https://github.com/thom311/libnl>
- <https://www.infradead.org/~tgr/libnl/>


## Security Notes

library-like package without higher-risk signals.

- **Geiger risk:** green / low
- library-like package without higher-risk signals

## Other Package-Manager Records

- Nix - libnl: normalized package name match | nixpkgs package indexes: pkgs/by-name/li/libnl/package.nix from https://api.github.com/repos/NixOS/nixpkgs/git/trees/master?recursive=1
- pacman - libnl - 3.12.0-1: normalized package name match | Arch Linux sync databases: libnl from https://geo.mirror.pkgbuild.com/core/os/x86_64/core.db.tar.gz | Library for applications dealing with netlink sockets | https://github.com/thom311/libnl/


## Combined YAML source

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


## Sources

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