Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit

See tag for changelog.


Failed to load latest commit information.
Latest commit message
Commit time
March 28, 2009 12:42
March 2, 2023 21:23
April 27, 2009 22:34
January 7, 2023 00:22

Build Status Coverity status


Freenet is a platform for censorship-resistant communication and publishing. It is peer-to-peer software which provides a distributed, encrypted, decentralized datastore. Websites and applications providing things like forums and chat are built on top of it.

Fred stands for Freenet REference Daemon.


We've included the Gradle Wrapper as recommended by the Gradle project. If you trust the version we've committed you can build immediately:

POSIX / Windows PowerShell:

$ ./gradlew jar

Windows cmd:

> gradlew jar

We've configured it to verify the checksum of the archive it downloads from

Build with ant

$ mkdir -p lib; cd lib && grep -o CHK.* ../  | xargs -P16 -I {} bash -c 'fcpget -v {} "$(echo {} | sed s,^.*/,,)"'
$ ant -propertyfile -f build-clean.xml -Dtest.skip=true -Dfindbugs.skip=true


Run Tests

To run all unit tests, use

./gradlew --parallel test

You can run specifics tests with a test filter similar to the following:

./gradlew --parallel test --tests *M3UFilterTest

TODO: how to run integration tests.

Run your changes as node

To test your version of Freenet, build it with ,./gradlew jar, stop your node, replace freenet.jarin your Freenet directory withbuild/libs/freenet.jar`, and start your node again.

To override values set in build.gradle put them into the file in the format variable = value. For instance:

org.gradle.parallel = true
org.gradle.daemon = true
org.gradle.jvmargs=-Xms256m -Xmx1024m

tasks.withType(Test)  {
  maxParallelForks = Runtime.runtime.availableProcessors()


See our contributor guidelines.

Add a new dependency

All dependencies must be available via Freenet, so it must be added to

  • Add it to build.gradle dependencies and dependencyVerification. Run ./gradlew jar --debug to find files that fail the verification.
  • fcpupload {dependencyfile.jar}
  • add it to all installers: wininstaller-innosetup, java_installer, mactray. Search for jna-platform to find out where to put and register the dependency.
  • add dependency and the CHK to
  • update scripts/ and res/wrapper.conf and res/unix/ in java_installer to include the dependency.

With the example of pebble: The filename is just the jarfile. The key is what fcpupload returns. Size is wc -c filename.jar, sha256 is sha256sum filename.jar, order is where it should be put in wrapper.conf in



Freenet is under the GPL, version 2 or later - see LICENSE.Freenet. We use some code under the Apache license version 2 (mostly apache commons stuff), and some modified BSD code (Mantissa). All of which is compatible with the GPL, although arguably ASL2 is only compatible with GPL3. Some plugins are GPL3.