# GNU social Developer's handbook

The book in your hands was written to teach you
the art of contributing to the GNU social codebase.

It starts by introducing the Modules system and architecture,
then the plugin development process and finally the exciting internals
of GNU social for those looking forward to making the most advanced contributions.

# What you need to dive in

 - A working [Docker](https://www.docker.com/) and [`docker-compose`](https://docs.docker.com/compose/) setup

This is the recommended setup, for simplicity and integration with the provided [tools](./tools.md).

OR

 - At least a webserver such as [nginx](https://nginx.org/) and a DBMS such as [postgresql](https://www.postgresql.org/).
 - Depending on what you want to do, you may want to setup a queues (and caching) system such as [redis](https://redis.io/).

To learn how to set all of that up, you may refer to the [System Administrator's handbook](/administrator).

Understand that this book assumes prior programming knowledge, if that doesn't sound like you, refer to our [study
resources](https://www.gnusocial.rocks/soc/study_resources.html) to get started.

# The other documentations are equally relevant to a developer

The [User](/user) one is intended to illustrate the various common use cases, possibilities regarding customization and introduce the existing functionalities.

The [Administrator](/administrator) one explains the step by step of how to install and maintain a GNU social instance, be it as node of The Free Network or as an intranet social network in a company setting.

The [Designer](/designer) one is an in-depth overview of the design motifs, and the design language used. Useful for creating new plugins and help as a basis for new themes.

# Tests

When what you're looking for (usage instructions of anything), refer to the `tests` directory.
The unit tests are properly commented and are very extensive, they try to cover every use scenario.
