Greetings everyone! I’d like to introduce the concept of “plcbundle” that I’ve been working on for some time, and I’d love to get your thoughts and feedback.
If you’ve ever worked with PLC data, you know how annoying and slow it is to clone the directory via the official /export endpoint. But beyond just speed, there’s a bigger issue: when you need to replicate the entire dataset, you have to blindly trust that someone else’s copy is complete and accurate. There’s no easy way to verify it.
I ran into this while building an indexer - I needed to be sure my copy of the PLC directory was actually identical to the source, without constantly hammering the main endpoint. Existing solutions like Allegedly or Parakeet do a great job serving individual DIDs, but they’re not really designed for verifiable full replication.
plcbundle tries to solve these problems until we have something better directly at the PLC level. I wrote more about the motivations here:
It’s basically a deterministic system for packaging PLC operations into “bundles” - compressed files that are chained using hashes. This means you can build your own copy from scratch and cryptographically verify it matches other sources, or compare your collection against any mirror to grab only the missing pieces. Pretty useful if you’re building an indexer or doing research, but not just for that.
The draft of the first format specification is done, and the reference implementation and CLI in Go is almost finished. Planning to wrap up V1 within a few weeks. There’s also experimental Websocket support for real-time updates, though it’s still pretty rough.
BTW, although the project is still highly experimental, we already have 5 public instances that provide PLC data to anyone!
I’d really appreciate your help validating this concept. If you’re interested:
Experiment with it and let me know how it goes. Try writing your own implementation in whatever language you prefer. Test the spec and report issues or edge cases you find. Any feedback on the format design is welcome too.
This is still early and rough around the edges, so community input would be super valuable to make sure I’m not missing something obvious or heading in the wrong direction. ![]()