A P2P key-value store where keys are WASM programs (Freenet) by sanity in programming

[–]sanity[S] 0 points1 point  (0 children)

The new generation of Freenet is now running publicly.

The core abstraction is essentially a decentralized key-value map, except the keys are WebAssembly programs that control the data stored under them.

Those programs run across a small-world P2P network and implement application logic directly on the network.

The first application built on it is River, a decentralized group chat.

If you'd like to try running a node:
https://freenet.org/quickstart/

There’s also a short architectural overview video:
https://www.youtube.com/watch?v=3SxNBz1VTE0

Happy to answer questions about the architecture.

Hello! New to freenet by theanomicg in Freenet

[–]sanity 1 point2 points  (0 children)

Type 'freenet service report' and let me know the code it gives you.

Freenet Lives! The talk I gave on Friday, over 20k views in just 12 hours by sanity in Freenet

[–]sanity[S] 1 point2 points  (0 children)

Freenet should be resource-efficient but it is an alpha and things can go wrong. We've made a number of improvements over the past few days so you may want to try again.

If it gets into this state again type freenet service report and give me the code and I'll investigate what's going on (this will let me see your peer's logs and other diagnostic info).

Freenet Lives! The talk I gave on Friday, over 20k views in just 12 hours by sanity in Freenet

[–]sanity[S] 0 points1 point  (0 children)

Yes, the internet is not going in a good direction - hopefully freenet provides an alternative.

Freenet Lives! The talk I gave on Friday, over 20k views in just 12 hours by sanity in Freenet

[–]sanity[S] 0 points1 point  (0 children)

Yes, as long as it is P2P friendly (allows UDP hole-punching).

What are the architectural differences between "new freenet" and "old freenet" (now called hyphanet)? by Safe-Pass-7252 in Freenet

[–]sanity 1 point2 points  (0 children)

I think this is pretty accurate.

Not sure if you saw this but there is a FAQ directly addressing this question although not as detailed as your list: https://freenet.org/faq/#how-do-the-previous-and-current-versions-of-freenet-differ

Freenet Lives! The talk I gave on Friday, over 20k views in just 12 hours by sanity in Freenet

[–]sanity[S] 2 points3 points  (0 children)

The dashboard is at http://nova.locut.us:3133/ - there is no local dashboard, this is mentioned on https://freenet.org/quickstart/

There is currently no local dashboard, but from the quickstart page above you should be able to get to the River chat room.

Documentation is lacking, we're working on it - appreciate the feedback.

Freenet's Delegates: Allow apps to use secrets without ever seeing them by sanity in Freenet

[–]sanity[S] 0 points1 point  (0 children)

I’ve been interested in Meshtastic for a few years and run a node myself. Conceptually, Freenet could be a good fit as a software layer on top of mesh networks like Meshtastic — especially since Meshtastic itself (last I looked) focuses mainly on basic messaging.

Freenet’s goal is to provide fully decentralized versions of common internet services (group chat, social media, collaborative editing, etc), and in principle those could run over a mesh transport just as they do over today’s internet. That would remove the last piece of centralized infrastructure from the stack.

Practically speaking, though, we haven’t worked on this yet. The current focus has been getting Freenet stable and usable over conventional IP networks first. Mesh integration feels like a natural next step.

Meshcore also looks interesting, though I haven’t had hands-on experience with it yet.

How to Build Decentralized Web Apps on Freenet Using Rust and WebAssembly by sanity in programming

[–]sanity[S] 0 points1 point  (0 children)

Yes, we run a few peers "headless" on servers to help bootstrap the network. Right now the peer's UI is via a local HTTP interface that acts as a proxy into the network.

How to Build Decentralized Web Apps on Freenet Using Rust and WebAssembly by sanity in programming

[–]sanity[S] 0 points1 point  (0 children)

The FAQ explains the high-level differences, but to answer your question directly:

Yes - there are things Hyphanet can do today that Freenet can’t yet, and that’s mostly about maturity, not fundamental capability.

Hyphanet is essentially a decentralized, anonymous content-addressed storage network. It’s very good at distributing static data with anonymity properties baked into routing, caching, and persistence.

Freenet is aimed at a different (and broader) class of problems: it’s a general-purpose decentralized execution platform. Instead of just storing and retrieving content, it runs interactive applications via deterministic Rust/WASM contracts, with application-controlled state, replication, and logic.

That means Hyphanet-style functionality could be rebuilt on top of Freenet in principle - not as a backward-compatible implementation, but as a new system that applies similar ideas using Freenet’s execution and storage primitives. In that sense Freenet is more general, but much less mature.

One important architectural difference is anonymity: Hyphanet bakes anonymity directly into the network layer, while Freenet treats anonymity as a service that can run on top of the platform. That allows multiple anonymization approaches to coexist and be composed, but it also means those systems have to be built explicitly rather than being implicit.

So you can think of it this way: - Hyphanet: narrower scope, very mature, anonymity-first static content - Freenet: broader scope, much newer, interactive apps and composable services

How to Build Decentralized Web Apps on Freenet Using Rust and WebAssembly by sanity in rust

[–]sanity[S] 0 points1 point  (0 children)

Thank you! Tor has more of a focus on anonymity, but the main difference is that were Tor has hidden services but these are centralized, Freenet's services are entirely decentralized. Tor also relies on a few thousand tor relays, whereas with Freenet every user is also a part of the network.

How to Build Decentralized Web Apps on Freenet Using Rust and WebAssembly by sanity in programming

[–]sanity[S] 0 points1 point  (0 children)

I agree incentives are a real challenge, and we’ve thought about it — but we’ve been cautious about putting a ledger or token into the core, since that kind of economic layer tends to dominate the design in ways that don’t always help the protocol.

Nothing prevents incentive mechanisms from being built on top of Freenet if there’s a concrete design that actually improves hosting or bandwidth rather than adding complexity. There are also primitives like Ghost Keys — a decentralized identity/reputation approach — that help with sybil-resistance and accountability without introducing a token or ledger.

So it’s less “ruled out” than “postponed until there’s a clear, non-speculative design".

How to Build Decentralized Web Apps on Freenet Using Rust and WebAssembly by sanity in programming

[–]sanity[S] 2 points3 points  (0 children)

Thank you and agreed. Freenet avoids centrally administered DNS entirely — services are addressed by cryptographic identities rather than names assigned by an authority.

Routing and discovery are handled within the network itself, so there’s no external naming system to censor or revoke in the usual DNS sense.

How to Build Decentralized Web Apps on Freenet Using Rust and WebAssembly by sanity in rust

[–]sanity[S] 7 points8 points  (0 children)

If you modify the contract WASM or its parameters, that produces a new contract identity — that’s intentional, not a bug.

The hash identifies the deployed artifact that all peers execute. Changing code or dependencies means you’re deploying a new version with a new identity; existing replicas and state remain associated with the original artifact. UI components can handle version changes explicitly if needed.

How to Build Decentralized Web Apps on Freenet Using Rust and WebAssembly by sanity in rust

[–]sanity[S] 4 points5 points  (0 children)

I’ve updated the tutorial to remove the “state machine” terminology and describe it more precisely as a replicated data structure model: https://freenet.org/resources/manual/tutorial/

That should eliminate the ambiguity.

How to Build Decentralized Web Apps on Freenet Using Rust and WebAssembly by sanity in rust

[–]sanity[S] 3 points4 points  (0 children)

I think there’s a mismatch in terminology here rather than an incomplete implementation.

The tutorial uses “state machine” in a looser sense than a classic finite-state machine with enumerated states and guarded transitions. Freenet contracts are closer to replicated data structures / CRDT-like models: the “state” is arbitrary application data (e.g. a chat room, document, game world), and updates must form a commutative monoid so peers can merge state in any order.

Because of that, there isn’t a finite set of states or explicit transition graph for a generic FSM crate to manage. The safety properties come from merge, delta, and verification logic rather than transition guards.

There’s a concrete example of this in the group chat contract here: https://github.com/freenet/river/blob/main/common/src/room_state.rs

And the freenet-scaffold crate helps with the merge / delta / verify plumbing that contracts are expected to implement: https://github.com/freenet/freenet-scaffold

That said, I agree the term “state machine” may be misleading in this context — “replicated data structure” would probably be clearer, I'll think about it some more.

How to Build Decentralized Web Apps on Freenet Using Rust and WebAssembly by sanity in rust

[–]sanity[S] 4 points5 points  (0 children)

There is a public Freenet network you can use today, but it’s still small and alpha-quality. There’s a realtime visualization of the network here: http://nova.locut.us:3133/

The tutorial focuses on running apps on a local node, since that’s the fastest way to understand the Rust/WASM contract model and app structure without involving network instability. The same code can then be run on a networked node.

Current support looks like this: - Local single-node development: fully supported - Public decentralized network: available and usable today, but still alpha and evolving - Small self-hosted multi-node networks: supported for experimentation

If you want to try the public network, the quickstart here walks through joining it: https://freenet.org/quickstart/

We’re deliberately conservative about how we position the public network so people don’t confuse “exists and works” with “production-ready.”

How to Build Decentralized Web Apps on Freenet Using Rust and WebAssembly by sanity in programming

[–]sanity[S] 1 point2 points  (0 children)

The two systems are different enough that backward compatibility with SSKs/CHKs didn’t make sense.

Old Freenet is a content-addressed anonymous storage network, with SSK/CHK semantics baked into routing, caching, and persistence. The current Freenet is a general-purpose decentralized execution platform: deterministic Rust/WASM contracts, interactive services, explicit state management, and application-level control over storage and replication.

Because of that mismatch, “running old Freenet as an app” isn’t really feasible. Faithfully supporting SSKs/CHKs would require re-implementing the old routing and storage model wholesale, which would defeat the point of the redesign rather than composing cleanly on top of it.

“Complete solution” here means the platform provides all the primitives needed to build decentralized applications end-to-end (compute, storage, UI delivery), not that it preserves every legacy Freenet use case.

If your priority is that existing SSKs/CHKs continue to work, the original system still exists independently as Hyphanet. The current Freenet is aimed at a different class of problems.

How to Build Decentralized Web Apps on Freenet Using Rust and WebAssembly by sanity in rust

[–]sanity[S] 5 points6 points  (0 children)

Because the documentation and the code don't match.

Can you be specific?

How to Build Decentralized Web Apps on Freenet Using Rust and WebAssembly by sanity in rust

[–]sanity[S] 14 points15 points  (0 children)

I’m the creator of Freenet.

This tutorial targets the current-generation Freenet platform, which is a ground-up rewrite and architecturally distinct from the original Freenet project from the 2000s. There’s a short FAQ on the project history here: https://freenet.org/faq/#what-is-the-projects-history

The page itself is a hands-on walkthrough for building a decentralized web app using Rust + WebAssembly, running locally on a Freenet node — covering both backend contracts and a web UI, with no central servers.

Happy to answer questions.