cidrmerge 0.2.0 adds offline crawler-prefix JSON ingestion and exact-byte detached SHA-256 generation while consolidating address-range and exact-coverage math in swift-cidr 0.5.0. Existing exact-coverage semantics and deterministic IPv4-first range/CIDR serialization are preserved.
Highlights
--input-format searchbotcompiles saved Google/Bing/Apple/OpenAI-compatible crawler-prefix JSON from local files or standard input.--checksumwith--outputwrites<output>.sha256for the exact rendered raw or JSON bytes.- Range, containment, normalization, exact-coverage, and summarization behavior now comes directly from
swift-cidr 0.5.0. - New
CIDRMergeCoverageprovides a deterministic mixed-family facade with IPv4-first ranges, CIDRs, and containment lookup. - Expanded DocC, external-consumer checks, dependency-floor validation, and four-platform release verification.
Exact coverage and deterministic output
cidrmerge coalesces duplicate, contained, overlapping, and adjacent address coverage. It never fills an uncovered gap merely to shorten output.
- RouteObjects IP List Text v1 remains the default input grammar.
rangesremains the default representation and produces the fewest disjoint closed intervals.--representation cidrproduces an exact canonical CIDR cover throughswift-cidr.- Raw output remains line-oriented and pipeline-ready.
- JSON records the selected representation and uses separate, stable
ipv4andipv6arrays. - Parsing, merging, and rendering are buffered, so those failures produce no partial standard output.
Searchbot input
Each searchbot operand is one complete UTF-8 document using the de facto Google/Bing/Apple/OpenAI-compatible crawler-prefix JSON grammar. Every entry must contain exactly one string-valued ipv4Prefix or ipv6Prefix; descriptive metadata is tolerated. Malformed, ambiguous, duplicate policy-bearing, wrong-family, or trailing JSON fails the whole invocation with source and JSON-path diagnostics.
cidrmerge does not download vendor data. Acquire changing inputs explicitly with curl, CI tooling, or another explicit acquisition step, then compile the saved file offline. Selecting this grammar does not prove file provenance or provider identity.
Library upgrade notes
This release intentionally makes a pre-1.0 source-breaking CIDRMergeCore cleanup. CIDRMergeCore no longer declares IPAddressRange<Family>, AnyIPAddressRange, IPv4AddressRange, IPv6AddressRange, or IPAddressCoverage<Family>.
Library clients should:
- Depend directly on
swift-cidr 0.5.0. - Import
CIDRand use its canonical range and coverage declarations. - Continue importing
CIDRMergeCoreonly when the mixed-familyCIDRMergeCoveragefacade is useful.
IPAddressCoverage.summarizedNetworks() preserves address membership; it does not reconstruct the original prefix fragmentation or prefix lengths. Swift Crypto remains confined to the CLI artifact boundary and is not imported or linked by CIDRMergeCore.
SwiftPM consumers can select this release with:
.package(
url: "https://github.com/RouteObjects/cidrmerge.git",
.upToNextMinor(from: "0.2.0")
)Detached SHA-256 integrity
The detached checksum covers the exact rendered bytes and uses standard lowercase SHA-256 checksum syntax:
<64 lowercase hexadecimal characters><two spaces><output basename><LF>
It detects changed bytes; it is not a signature and does not authenticate provenance, freshness, a vendor, or crawler identity. It also does not bind independent allow and deny files into one generation.
Each checksum and output path is atomically replaced where supported, but the pair is not one filesystem transaction. Checksum-first replacement leaves a mismatch or missing output if the second replacement fails, so a consumer configured to require verification fails closed. Use immutable or versioned generations when pair-level rollout atomicity is required.
Installation and platforms
Prebuilt archives are provided for macOS and Linux on ARM64 and x86-64. Each archive contains only cidrmerge, LICENSE, and THIRD_PARTY_NOTICES.txt. Download the matching archive together with SHA256SUMS and verify it before extraction. See the archive installation guide.
- Runtime: macOS 15+ or Ubuntu 22.04+
- Source builds and
CIDRMergeCore: Swift 6.1+ - Apple applications using
CIDRMergeCore: iOS 18+
Security and scope
cidrmerge compiles address coverage only:
- It performs no HTTP fetching, DNS, IRRd, RPKI, admission-policy role assignment, or hot reload.
- Raw IP List Text is the intended admission-list interchange; cidrmerge JSON is compiler output, not an admission-policy schema.
- BGP and RPKI metadata such as ASN, AS path, communities,
maxLength, TAL, source, and validation state is not retained. - Output is not a route advertisement or ROA.
Validation
The release gate passed 56 tests in seven suites, 16 locked one-million-record benchmark runs, DocC and external-consumer checks, macOS/iOS builds, Linux ARM64/x86-64 builds, and native archive/checksum smoke tests.
Full Changelog: 0.1.0...0.2.0