Skip to main content
`Ctrl`+`K`

# Developer Handbook

This book is intended to be an introduction for programmers that want to extend the GNUnet framework. GNUnet is more than a simple peer-to-peer application.

For developers, GNUnet is:

- developed by a community that believes in the GNU philosophy

- Free Software (Free as in Freedom), licensed under the GNU Affero General Public License

- A set of standards, including coding conventions and architectural rules

- A set of layered protocols, both specifying the communication between peers as well as the communication between components of a single peer

- A set of libraries with well-defined APIs suitable for writing extensions

In particular, the architecture specifies that a peer consists of many processes communicating via protocols. Processes can be written in almost any language. `C`, `Java` and `Guile` APIs exist for accessing existing services and for writing extensions. It is possible to write extensions in other languages by implementing the necessary IPC protocols.

GNUnet can be extended and improved along many possible dimensions, and anyone interested in Free Software and Freedom-enhancing Networking is welcome to join the effort. This Developer Handbook attempts to provide an initial introduction to some of the key design choices and central components of the system.

This part of the GNUnet documentation is far from complete, and we welcome informed contributions, be it in the form of new chapters, sections or insightful comments.

- Contributing
  - Licenses of contributions
  - Copyright Assignment
  - Contributing to the Reference Manual
  - Contributing testcases
- Style and Workflow
  - Naming conventions
  - Coding style
  - Continuous integration
  - Commit messages and developer branches
- Repository Structure
  - `src` Overview
- libgnunetutil
- System Architecture
  - Internal dependencies
  - Subsystem stability
- Services
  - ATS — Automatic transport selection
  - CADET — Confidential Ad-hoc Decentralized End-to-end Transport
  - CORE — GNUnet link layer
  - DHT — Distributed Hash Table
  - FS — File sharing over GNUnet
  - GNS and GNS Support
  - HOSTLIST — HELLO bootstrapping and gossip
  - IDENTITY — Ego management
  - MESSENGER — Room-based end-to-end messaging
  - NSE — Network size estimation
  - PEERINFO — Persistent HELLO storage
  - PEERSTORE — Extensible local persistent data storage
  - REGEX — Service discovery using regular expressions
  - REST — RESTful GNUnet Web APIs
  - REVOCATION — Ego key revocation
  - RPS — Random peer sampling
  - Peer-to-Peer Set Operations
  - STATISTICS — Runtime statistics publication
  - TRANSPORT-NG — Next-generation transport management
  - TRANSPORT — Overlay transport management
  - VPN and VPN Support
- REST API
  - Configuration
  - Conventions
  - Identity
  - Namestore
  - GNS
  - Peerinfo
  - Config
- C Tutorial
  - Introduction to GNUnet Architecture
  - First Steps with GNUnet
  - Developing Applications
  - GNU Free Documentation License
- Specifications
- Doxygen