HN user

coldstartops

67 karma

Building encrypted P2P file systems. https://keibidrop.com

Posts0
Comments47
View on HN
No posts found.

I went full meme, and stacked like 3 level of generators on top of eachother.

Level 1: A basic generator does the same stuff: Raw Structs to SoA + Wire Codecs + Bitfields to not waste space.

Level 2: Then on top of this one, I got a generator for relation between entities.

Level 3: And on top of this one one for "game" design and schema behavior.

And then all this runs on the simluator engine that handles Collision, Flow Fields, Events, Genetic Algorithms, Networking, etc.

The flow is something like this:

You ask claude to read a story, novel, w/e and extract relations, entities, etc.

Then it edits a Schema.go with the High Level DSL adnotations, like 10 lines per entity.

Then I run the Level 2 Generator: That creates the primitives and a high level API.

Then it combines the high level API rules in main.go and just compiles it to the final gamestate.

And runs benchmarks to see how many allocs/ops per entity are.

And one more fun thing, it encodes the gamestate on 1400 bytes, in order to fit on a UDP datagram such that it can support networking, quite fun. Once you get the primitives correct.

For all this + networking + disk i/o; works on 4 cores (threds) only. But the simulation in itself is on 1 core 1 thread. The networking offloaded to 1 core (1 thread), and disk i/o to a different core (thread), and the painting on screen (to a different core (thread))

What is driving us towards these tools?

Why did your group use the AI, how would you answer the Conclusion questions?

As an anectdote: I like low-fi punk music because of the energy, and low skill for entry level. So when I started playing music, I went for this genre. I used it as a hobby over 10 years as it brought me joy, and enjoyed the process, without the grind for leveling up the skill.

It's also fun to do low effort things that are good enough. Much more fun than being l33t.

Hi ogig, funilly enough I was also running this boids experiment a few months ago. Managed to get around 8k at 60 fps on 1 thread on my cpu, using golang.

My goal for this experiment was to encode the optimal cache data structures into meta programming generators such that claude can write high level DSL and generate down to this level of simulations. I am curious if you had such an approach also.

Two weeks ago presented current state of KEIBIDROP at Pass The SALT 2026, and now I am planning the push for the next version 0.4.0.

KEIBIDROP: Makes remote files appear as local (it hides the network latency in order to let you open and edit a peers file without downloading it upfront or re-uploading it fully back).

For version 0.4.0 I am planning multi-user support, using UDP (QUIC) instead of TCP as the networking layer, optimization of live-edit regions of files, and to test it even more for data heavy workflows.

Here is the website: https://keibidrop.com/

And here is the github: https://github.com/KeibiSoft/KeibiDrop/

I think OPs mantra is "Scrape. Automate. Scale." It feels like people who consent to this "passive" income, do not understand what they consent to. The business model seems grey towards black. "Signup to be part of 3rd party bot farms exit node, you get paid, all will be good. Nothing bad happens, you consent"

I am curious if I got it right, but the business of the company is providing exit nodes for AI bots/ strangers via peoples residential IP's? This is my impression from accessing the website. I was interested at first, but now I got a bit of ethical doubts about it.

Got a Bachelor + Master, best investment in my life (in terms of time, as I did not pay for education, EU and such).

Job stuff not much related with stuff learned in school, sometimes related to some degree.

Skill stuff very closely tied to constantly applying stuff learned in school, but mostly on how to attack problems.

Me learn stuff because me like know stuff and level up. (edit: do not get me wrong, learning is still painful, and thinking even more painful)

Me job stuff because me like food and amneties, until the learn stuff transfers into sustainable food and amneties.

I did not measure agents, but lets take the following example:

Assume you have a 10 GB blu ray movie that you want to watch without waiting for upload/ donwload time.

Maybe you host it on a server on another continent, where you got a 200ms RTT.

And your wire at home supports around 500Mbps - approx 62 MB/s.

Thus to Download it fully, would take around: 161 seconds if you use the full wire and on the happy case.

But to actually watch it and skim through it, you do not need to use the full wire, but around ~11 Mbps for a 2-hour 10 GB film, which is like 2% of the wire. The only hard part is random jumps, as each seek is a full RTT.

If you prefetch too aggresivelly you hide this RTT, but if the wire is saturated, and if you have a cache miss, then you will hang and wait until the request goes through. Might be upt to 1-2 seconds. The whole game is to pace yourself such that you stay ahead of the consumption rate, without saturating the wire.

I just had a talk (power-rushed a bit) yesterday at Pass The SALT 2026 talking about (my version of) latency hiding filesystems in userspace over the network. My benchmarks, setups, and how to make the magic wawaweewa work.

Basically it went the "sshfs over iroh" approach, and instead of OP's post, it has eager metadata file sharing, and on demand file access. It is still a work on progress, but you can use git juse fine over the fuse mount points without introducing a new tool (edit: but do note that I did not encounter problems with large worktrees, as I do not use them in my flow, and still has some quirks). And still have similar "cold path" access times.

I touch on some insights of hiding the latency, the direct Alice to Bob connection, and has some recorded demos. Goes the generic approach.

You can watch it here if you are interested, but its around 25 minutes.

The first part is about the Post Quantum Crypto, and making direct IPv6 connections work.

The second part is about the filesystems in userspace that hide the latency. (The second part is around minute 12:00, and I think it is the relevant part to this discussion/ thread).

https://passthesalt.ubicast.tv/videos/2026-keibidrop-post-qu...

I see nothing wrong with something probabilistic. I think it is all about offsetting the risk and reducing the odds of bad outcomes. There is this concept of Defence in Depth, thus I assume some sort of binomial formula also applies here.

Couldn't run your benchmarks, as I did not create an account, and a bit of a different beast that I am comparing against (P2P distributed filesystem), but these are my numbers and setup, and the on-demand part lines up with what I have observed:

Setup: a Linux box on the other side of Romania (compared to where I am living) reading from a Windows box in Singapore (~200 ms RTT)

- reading 1 MiB of a 1 GB remote file pulls only 16 MiB (~98% avoided) - this is because of my fine tuning optimization choice - first byte approx: 2.3s - git-LFS repos also clone cold over the mount byte-perfect (separate Mac - Linux run on a ~20 ms RTT)

The thing that I do differently is that my metadata is eagerly pushed, as I optimized for content streaming.

And 100k-file tree mounts I did not test yet.

But my goal was to have instant file access for generic files between apps, and peer to peer, supports also Windows :D

here is the tool: https://github.com/KeibiSoft/KeibiDrop

I am curious, how do you handle latency issues for on demand access? I saw you use FUSE (and FSKit), and from my experience it is pain to make filesystems in userspace work on-demand over WAN because a) latency, and variable RTT; and b) you can't saturate the wire and aggressively read ahead things, otherwise native apps will freeze, lag, or just make the UX unpleasant, especially if there are too many placeholder files, or large files with random jumps in them.

Google hits 50% IPv6, very good for accessing websites.

But my TP-Link router blocks by default inbound IPv6 connections, without any option to configure it, still bad for pure IPv6 bidirectional streaming, gaming or services on home networks.

KEIBIDROP: Peer to Peer Instant file sharing

https://keibidrop.com

https://github.com/KeibiSoft/KeibiDrop/

It leverages virtual mount points to make file metadata available between Alice and Bob, and make the files appear as if locally.

So for example instead of waiting to upload then download a Blu Ray movie, or a large game, you can just add it into the virtual mountpoint and your recipient can instantly play it, or install it, and the download happens in the background with random offset jumps, and caches it locally.

Let me know how it goes, or frustrations. I admit that currently it is not the most friendly UX. And found out a bug that if no direct P2P possible, it fails to fallback to the STUN-ish data relay. However LAN mode and WAN via direct P2P works on latest releases.

As soon as I merge this one, will create another release that fixes the fallback; and hopefully also get the apps in ios and gplay stores. https://github.com/KeibiSoft/KeibiDrop/pull/143

Mythical Man Month 2 months ago

It is possible. I tell to use cli app, and for the agent to ad timer and check the status once in a while. Especially if there is something with a long wait. Also if it can run some validators/ same tools locally, would be much faster.

Might tend to deviate and waste time, needs guiding once in a while, and to check what is it spewing out, point it in the correct direction.

Mythical Man Month 2 months ago

I treat the low level tasks as building blocks. You need a grasp and understanding of what is possible with them, but you do not need to remember the exact byte order and syntax. I think the idea is you should structure your workflow in a deterministic way, and just use Claude/ LLM as the interface. It is much easier and enjoyable to use high level language, where you give pointers to building blocks/ directions/ say hard no when you understand things deviate.

If I had to output the code myself, would take around 8 hours of constant writing to get around 1k LoC of code. For FUSE level tricky stuff, I might need to spend 3 weeks for 10 LoC. Very easy to burnout and build pain.

Mythical Man Month 2 months ago

Here is a public project.

https://github.com/KeibiSoft/KeibiDrop

It took me 2 years ago around 2k hours to build a cross platform FUSE vault, without using AI assisted tools.

The pain was debugging through logs and system traces. And understanding how things work.

Now managed to ship this one much faster, as an after hours project. Started it in may 2025, and around end of November 2025 started using claude on it.

Just by dumping logs into claude, and explaining the attack vector for the problems, saved me the FML moments of grindings walls of syscalls on 3 platforms.

I would say much easier to progress, and ship with the same rigour, minimize my time, focus and brain power involvement such that I can put the energy somewhere else.

I will add this on the roadmap. At the moment I am trying to add persistent identity, as by default it is ephemeral.

But I warn you, there are still some kinks. Only 75% pjdfstest (filesystem test suite) passes in terms of POSIX compliance. I do not support hardlinks/symlinks by design.

I was trying last to use postgresql on the virtual filesystem, then once the server is stoped, to remove the lock file, and open it on the peer. and some files got corrupted while running this test.

Yes-ish, adjacent. Syncthing usually you use it to sync to your server.

Here I skipped the server part. I just connect two devices.

If they both use the virtual mountpoint

MountAlice and MountBob

They get an underlying SaveAlice and SaveBob on disk.

so what gets dropped in MountAlice gets saved to SaveAlice, and appears in MountBob.

Once bob accesses it in MountBob it gets cached to SaveBob (like saved persistently to disk). But while the transfer happens a mmap is saved to disk to keep track of the segments that were transmited.

If changes happen on Alice for the file, GetAttr metadata is synced when the filehandler on Alice is released. and Bob knows to request the parts of the file that changed.

It did not go for the full-on folder sync. I went for a synced filesystem while the peers are connected.

And because ios and android do not have FUSE, i also added the option to add a file/ pull a file, that does the same thing.

So now, you can add folders/ files on android/ ios. and mount them as a filesystem on your desktop and do magic with them, and if they get changed you can export them back from the phone to the gallery or w/e files

hah, I feel you for 3. I was constantly hitting the loopback network interface and I was like, why no discovery. in hindisght bad idea to always get the first entry in an array, now go through a list of network interfaces that i spam.

for 1. i send a mutlicast of max 512 bytes on 224.0.0.167:26999 every 3 seconds 2. not really caching, just have a map of people that get discovered.

and god bless, I just rolled with this. if people will use the tool and they will complain about it, then it will be a problem for later. for me between my home devices did not notice inconveniences.

in total around 200 lines of golang.

No you didn't miss. I mixed the concept, UDP broadcast similar to mDNS, yes part of net library. actual mDNS like visible in Finder and actual RFC implementation not part of standard library. What I was trying to say was easy to make "mdns-ish" with just standard lib, rush typed it and ended up like that.

Hi,

I am late to the party, but I was also building in this space in the last year,

Basically I did a peer to peer filesystem named keibidrop: https://keibidrop.com/

I made it public last week. It does what local send does, but also via WAN. Still did not launch the mobile apps.

And 1 up is that it has also a virutal filesystem that is synced both ways.

repository is here: https://github.com/KeibiSoft/KeibiDrop

The code is open source, except for the UI, and I did benchmark on loopback vs localsend (local send is faster :D )

https://keibisoft.com/blog/keibidrop-benchmarks-vs-competiti...

and was also trying to get a commenting thread in /r/golang yesterday!

behind the hood I went with PQC, + gRPC + FUSE.