An unofficial Freenet node/server for Android
See the codeThis is an unofficial, community-built application. It is not published, maintained, or endorsed by the Freenet Project. The app is permitted to display the Freenet logo, but that use does not imply official status.
Freenet Android Node runs a real Freenet node (currently core 0.2.136) on your phone. It starts and stops the node for you, shows what it's doing, and otherwise gets out of the way so Freenet core's own web dashboard can do the rest. This is an early, alpha-stage prototype — expect battery drain, rough edges, and the occasional bug.
.apk).Each release also includes SHA256SUMS.txt, so anyone who wants to confirm
the download wasn't altered in transit can check it against the APK with any
SHA-256 tool.
Nothing here is hidden. If you'd rather not run a binary someone else built, build the same app yourself and read every line that goes into it:
git clone https://github.com/HostFat/freenet-android-node.git
git clone https://github.com/freenet/freenet-core.git
cd freenet-android-node
git checkout v0.2.136 # optional: build the exact commit behind a specific release
docker compose build dev
docker compose run --rm dev scripts/build-debug.sh
adb install -r artifacts/apk/freenet-android-node-debug.apk
Docker Compose handles the entire toolchain (Android SDK/NDK, Rust, Gradle) —
you only need Docker and ADB on your own machine. The two repositories must
sit side by side; see docs/DEVELOPING.md for the full
layout and every option.
This produces a debug-signed build rather than the signed release from the Releases page. Android treats differently-signed builds of the same app as distinct apps for update purposes, so uninstall one before installing the other if you already sideloaded the release build.
Everything Android-specific lives behind the hamburger menu (☰) in the top-left; the rest of the screen is Freenet core's own dashboard once a node is running.
Starting the node
Stopping the node
Node runs when — when the node should start automatically:
Automatic modes keep a lightweight controller and notification alive while waiting for eligible conditions, and the chosen policy survives app and device restarts.
Network data — which connections the node is allowed to use once it's trying to join the network:
If your active connection stops meeting the selected policy while the node is running (for example, leaving Wi-Fi for metered cellular), the node shuts down gracefully rather than keep running out of policy.
For nerds — a live JSON snapshot of node status, metrics, and recent logs, with a Copy JSON button for bug reports. Never includes identity secrets or raw databases.
Closing the app or removing it from Recents doesn't stop the node — it keeps running via a persistent notification, which has its own Pause/Resume and Stop actions.
Freenet core — the peer-to-peer software this app embeds — is the work of the Freenet Project. The Freenet mark is used with permission from Ian. Both are gratefully acknowledged for their work and support; neither is affiliated with, endorses, or is responsible for this unofficial app.
Build instructions, checks, architecture notes, and the manual/automated
device proofs used during development live in
docs/DEVELOPING.md. Cutting a signed release is
covered in docs/RELEASING.md. New Freenet core
releases are picked up automatically and published as APKs; see
docs/AUTOMATION.md.
Kotlin
64.4%
Rust
26.9%
Shell
6.6%
Python
1.4%
An unofficial Freenet node/server for Android
See the codeThis is an unofficial, community-built application. It is not published, maintained, or endorsed by the Freenet Project. The app is permitted to display the Freenet logo, but that use does not imply official status.
Freenet Android Node runs a real Freenet node (currently core 0.2.136) on your phone. It starts and stops the node for you, shows what it's doing, and otherwise gets out of the way so Freenet core's own web dashboard can do the rest. This is an early, alpha-stage prototype — expect battery drain, rough edges, and the occasional bug.
.apk).Each release also includes SHA256SUMS.txt, so anyone who wants to confirm
the download wasn't altered in transit can check it against the APK with any
SHA-256 tool.
Nothing here is hidden. If you'd rather not run a binary someone else built, build the same app yourself and read every line that goes into it:
git clone https://github.com/HostFat/freenet-android-node.git
git clone https://github.com/freenet/freenet-core.git
cd freenet-android-node
git checkout v0.2.136 # optional: build the exact commit behind a specific release
docker compose build dev
docker compose run --rm dev scripts/build-debug.sh
adb install -r artifacts/apk/freenet-android-node-debug.apk
Docker Compose handles the entire toolchain (Android SDK/NDK, Rust, Gradle) —
you only need Docker and ADB on your own machine. The two repositories must
sit side by side; see docs/DEVELOPING.md for the full
layout and every option.
This produces a debug-signed build rather than the signed release from the Releases page. Android treats differently-signed builds of the same app as distinct apps for update purposes, so uninstall one before installing the other if you already sideloaded the release build.
Everything Android-specific lives behind the hamburger menu (☰) in the top-left; the rest of the screen is Freenet core's own dashboard once a node is running.
Starting the node
Stopping the node
Node runs when — when the node should start automatically:
Automatic modes keep a lightweight controller and notification alive while waiting for eligible conditions, and the chosen policy survives app and device restarts.
Network data — which connections the node is allowed to use once it's trying to join the network:
If your active connection stops meeting the selected policy while the node is running (for example, leaving Wi-Fi for metered cellular), the node shuts down gracefully rather than keep running out of policy.
For nerds — a live JSON snapshot of node status, metrics, and recent logs, with a Copy JSON button for bug reports. Never includes identity secrets or raw databases.
Closing the app or removing it from Recents doesn't stop the node — it keeps running via a persistent notification, which has its own Pause/Resume and Stop actions.
Freenet core — the peer-to-peer software this app embeds — is the work of the Freenet Project. The Freenet mark is used with permission from Ian. Both are gratefully acknowledged for their work and support; neither is affiliated with, endorses, or is responsible for this unofficial app.
Build instructions, checks, architecture notes, and the manual/automated
device proofs used during development live in
docs/DEVELOPING.md. Cutting a signed release is
covered in docs/RELEASING.md. New Freenet core
releases are picked up automatically and published as APKs; see
docs/AUTOMATION.md.
Kotlin
64.4%
Rust
26.9%
Shell
6.6%
Python
1.4%