chaifeng/zidr
A fast CIDR merger written in Zig, supports IPv4/IPv6
A fast CIDR merger written in Zig. Reads CIDR blocks from stdin, merges adjacent and overlapping ranges, and outputs the minimal set of CIDRs to stdout.
# are ignoredRequires Zig 0.15.2 or later.
# Clone the repository
git clone https://github.com/chaifeng/zidr.git
cd zidr
# Build release binary
zig build -Doptimize=ReleaseFast
# Binary is at ./zig-out/bin/zidr
# Basic usage - pipe CIDR list
echo -e "192.168.0.0/24\n192.168.1.0/24" | zidr
# Output: 192.168.0.0/23
# From file
cat cidrs.txt | zidr > merged.txt
# Or redirect
zidr < input.txt > output.txt
# Process only IPv4 addresses
zidr -4 < mixed.txt
# Process only IPv6 addresses
zidr -6 < mixed.txt
10 → 10.0.0.0/8 (1 octet = /8)10.20 → 10.20.0.0/16 (2 octets = /16)10.20.30 → 10.20.30.0/24 (3 octets = /24)10.20.30.40 → 10.20.30.40/32 (4 octets = /32)1/8, 1.128/9, 1.2.3/24 - explicit prefix with partial IP# are comments (ignored)Example input:
# Private networks
10.0.0.0/8
192.168.0.0/24
192.168.1.0/24
# IPv6
2001:db8::/32
2001:db9::/32
Output:
10.0.0.0/8
192.168.0.0/23
2001:db8::/31
make # Build release binary
make build # Same as above
make test # Run tests
make install # Install to /usr/local/bin
make uninstall # Remove from /usr/local/bin
make clean # Remove build artifacts
make cross-build # Build for all platforms (output in dist/)
# Debug build
zig build
# Release build
zig build -Doptimize=ReleaseFast
# Run directly
zig build run
# Run all tests (unit + integration)
zig build test