FuzzrNet / Fuzzr

P2P platform for publishing content, self-hosting, decentralized curation, and more.
https://fuzzr.net
The Unlicense
61 stars 8 forks source link
censorship-resistance ipfs p2p rust rust-gui self-hosted

Fuzzr v0.0.1 technical demo screen capture. Stores cute kitty image in IPFS and returns CID, then retrieves and displays the image by CID.

Our Iced UI and IPFS technical demo

Crates.io Build status Matrix License: Unlicense Lines of code

Fuzzr

Fuzzr is intended to be a censorship-resistant platform for publishing, curation, and browsing of all content (with the explicit exception of HTML).

A major focus of our project is ensuring content distribution, censorship resistance, and keeping users as anonymous as they care to be. No user registration is required. Encryption of content at rest isn't necessarily a focus for this project, but ensuring secure, unfettered encrypted connections to all anonymized peers is.

This project is built with Rust for native desktop (and laptop) OS platforms, using iced for UI and embedded IPFS for data.

FuzzrWeb vs FuzzrNet

We want to reinvent the web to be much, much simpler, and to move past it. The Web is mostly centralized (including much of "DWeb" infrastructure), but the broader Internet mostly isn't. That's why the FuzzrWeb should eventually move to the FuzzrNet, and the Fuzzr client can both serve FuzzrWeb sites, access other Fuzzr sites on the FuzzrNet, and also mine to compensate contributors, and stream video and audio.

This is an architecture for an actual locally-run p2p app, not a simple web-based "decentralized app".

To learn more about our plans for FuzzrWeb, Fuzzr's bridge to the web, take a look at this document: Fuzzr Web Publishing

Status

This project is a massive work in progress. Not all of these goals are currently met, but we do intend to. More thoughts in the docs directory. Feedback always appreciated, so feel free to drop us an issue. Also, some docs may be out of sync with others. If you notice something that needs improvement, contributions are welcome.

Please be aware, the overwhelming majority of our contributors run Linux, so if you would like the project to build on the platform of your choice, contributions are welcome.

Support is eventually planned for all platforms except for web. As with anything, if you see something you would like to see, or if something seems broken, let us know. Contributions take a variety of forms, not just writing code.

This project is intended to make the web and all web technologies less necessary than they once were by doing what people use the web for in a standardized and hyper-minimal way.

For more, see our milestones document: Periodic Project Milestones and Goals

Contributing

We love to hear feedback and ideas. Feel free to leave some issues, or go through our current issues and PRs, and give us your thoughts. Contributions welcome.

If you'd like to reach out and learn more, we use a Discord community server to coordinate:

Discord

(There's also a link to join our server at the top of this README.)

Feel free to send some Monero to the address below. And if you do so, feel free to reach out, or promote what we're doing. Any little bit helps, it's a form of encouragement.

XMR: 8ADbBKaunVWjdg5aWQ5ZBNDACdPVMTUBnKETaZbUZ8gMfDfpwhcBeo31kfUgCJKATMPaqmsUoxBwicTpRLg4p4F57kPJ5ab

For more, see our Contributions document

Building

Dependencies

To run the project, all you need to do is install Rust, check out the code using git, and run cargo run in the project directory. It's usually pretty straightforward, but if there are any issues, please reach out via Discord.

Ubuntu (20.04+)

You will need some dependancies installed before you build:

sudo apt install pkg-config libx11-dev libasound2-dev libudev-dev mold lld clang

Optimizations

It's sometimes useful to use the nightly Rust toolchain for improvements in incremental builds and runtime speed. Nightly-only code must also have stable equivalents in feature conditional compilation attribute blocks, like so: #[cfg(feature="nightly"...)]

To install the nightly toolchain: rustup toolchain install nightly

Cargo watch can be installed (and/or updated) with this command:

cargo install --force cargo-watch

Then run in a sort of live-reload mode with this command:

cargo watch -w src -x run

See also this section on Enabling Fast Compiles for your system:

https://bevyengine.org/learn/book/getting-started/setup/#enable-fast-compiles-optional

Then run: rustup override set nightly for nightly builds for just this project.

Build & Run

Once all Dependancies are satisfied, in the Fuzzr working directory (or sub directories) run:

cargo build -release

This will build the bin in <fuzzr-working-dir>/target/release. To run:

cargo run -release
# OR
./target/release/fuzzr