This roadmap tracks release objectives, acceptance criteria, and current progress. It is intentionally concise and focuses on user-visible outcomes.
"Make PCAP processing feel native in Clojure data workflows (EDN/maps/seq/transducers)."
v0.2 (completed): OSS baseline (:xform, BPF DSL expansion, minimal L2/L3/L4 decode, CI hardening)v0.3 (completed, 2025-12-05): data-first UX improvements and decode extension stabilizationv0.4 (completed, 2025-12-10): DNS observability tooling (dns-topn, dns-qps, async behavior)v1.0.0 (released, 2026-02-23): API freeze and stable release artifactsv1.0.1 (released, 2026-02-23): documentation and publication pipeline polishv1.1.0 (released, 2026-07-27): measured high-throughput paths and
staged live-capture observabilityv1.2.0 (release validation): controlled capture execution, synchronous
reports, and managed single-consumer capture lifecyclesThe v1.0 release roadmap is complete.
Completed release artifacts:
v1.0.0-rc and v1.0.0-rc.1 tags/releasesv1.0.0 tag and GitHub Release (latest)v1.0.1 patch release for docs/publication follow-uporg.clojars.nanto/paclo)CURRENT page and successful build)docs/migration-0.4-to-1.0.md)docs/cljdoc-api-contract.md)clojure -M:perf-gate) with warn/fail thresholdsnvd-clojure) in GitHub Actionseastwood, clj-kondo) and regression testsv1.0 is shipped; next work is maintenance and incremental improvements.
reduce-packets API with transducer fusionflow-topn migration to the numeric fast pathv1.1.0 to Clojars and verify cljdocv1.1.0 GitHub Releasev1.2.0 to Clojars and verify cljdocThe v1.2 scope intentionally excludes multiple consumers, pub/sub, dynamic BPF replacement, pause/resume, borrowed buffers, batching, parallel decode, mmap, and PCAPNG. These capabilities require separate evidence and contracts.
The performance track preserves the v1 data-first API and advances only when the preceding measurement gate provides evidence for the next change.
North-star targets on the reference Mac are 1.5M pps raw read, 1M pps flow projection, 200k pps compatible full decode, and a continuously improving 60-second live rate below 0.1% drop. Phase-1 measurements may revise these targets when the reason and baseline are documented.
The first reference run reached all three offline targets: 1.58M pps raw, 1.02M pps flow projection, and 299k pps compatible full decode. Parser profiling did not justify replacing the compatible parser with a second offset-based implementation. Phase 5 therefore remains focused on sustained live drop behavior; phase 6 stays conditional rather than becoming default scope.
The first 60-second buffered-immediate lo0 probe sustained approximately
369k processed pps with zero reported kernel or interface drops and about
67 MB peak heap. The local UDP generator, rather than capture, limited this
probe. Phase 5 added direct, bounded-blocking, and bounded-dropping comparison
profiles; sender, libpcap, queue, and consumer stage counters; a 0.1%
sustainability classifier; and an external-generator profile for real-NIC or
separate-host tests. Controlled overload now distinguishes queue drops from
blocking backpressure.
The first separate-host probe used an Ubuntu 24.04 wired sender and the Intel Mac's Wi-Fi interface. It sustained 7,500 pps for 60 seconds at 0.002% end-to-end loss with no observable Paclo drop. This validates the external measurement path but remains network-path limited; a wired-to-wired run is still needed to find the real-NIC capture maximum.
The v1.2 managed-capture probe reused that path. Raw and full-decode managed captures each processed an exact 15,000-packet run at 1,000 pps, but repeated 15- and 60-second results varied substantially despite zero observable kernel, interface, queue, consumer-gap, or decode drops. The 60-second runs kept bounded queue depths and approximately 63-67 MB peak heap. This validates the managed lifecycle and records the required real-NIC observation, while confirming that the current wired-to-Wi-Fi path cannot provide a repeatable end-to-end throughput floor.
Phase 6 remains a post-v1.1 conditional investigation. Borrowed buffers, batching, parallel decode, and mmap should be attempted only when a measured workload remains below target after the compatible Phase 1-5 paths.
README.md, docs/README.md, docs/usage.md, docs/extensions.md).Can you improve this documentation? These fine people already did:
nanto & NantoEdit on GitHub
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |