diff options
| author | Xavier Del Campo Romero <xavi92@disroot.org> | 2025-09-22 17:32:44 +0200 |
|---|---|---|
| committer | Xavier Del Campo Romero <xavi92@disroot.org> | 2026-02-13 09:57:39 +0100 |
| commit | 78bf2fe4a5bf37514f6dfd203ef969da0bf40c2e (patch) | |
| tree | 33f9440b8ee0fa7a3b3ad033616d722d2101bb4d /README.md | |
| parent | 107a2e43d54f9a42fb85b00b83cb0d9abb194680 (diff) | |
Diffstat (limited to 'README.md')
| -rw-r--r-- | README.md | 176 |
1 files changed, 176 insertions, 0 deletions
diff --git a/README.md b/README.md new file mode 100644 index 0000000..43fb259 --- /dev/null +++ b/README.md @@ -0,0 +1,176 @@ +# nanobbs, a tiny forums software + +`nanobbs` is a simple and lightweight implementation of a forums software, +commonly known as "bulletin board software" or simply "BBS", written in C99 +plus POSIX.1-2008 extensions. + +## Disclaimer + +Intentionally, `nanobbs` does not share some of the philosophical views from the +[suckless project](https://suckless.org). However, it still strives towards +portability, minimalism, simplicity and efficiency. + +## Features + +- No JavaScript. +- Typical forums software features: categories, sections, topics and posts. +- Create/delete users from the web interface. +- Uses [`libweb`](https://gitea.privatedns.org/xavi/libweb), a tiny web framework. +- Uses [`libsodium`](https://www.libsodium.org/) as its cryptography backend. +- Uses [SQLite](https://sqlite.org/) as its database backend. + +### TLS + +In order to maintain simplicity and reduce the risk for security bugs, `nanobbs` +does **not** implement TLS support. Instead, this should be provided by a +reverse proxy, such as [`caddy`](https://caddyserver.com/). + +### Root permissions + +`nanobbs` is expected to listen to connections from any port number so that `root` +access is not required. So, in order to avoid the risk for security bugs, +**please do not run `nanobbs` as `root`**. + +## Requirements + +- A POSIX environment. +- [`libsodium`](https://www.libsodium.org/). +- [SQLite](https://sqlite.org/) >= 3.0.0 (tentative). +- [`dynstr`](https://gitea.privatedns.org/xavi/dynstr) +(provided as a `git` submodule by `libweb`). +- [`libweb`](https://gitea.privatedns.org/xavi/libweb) +(provided as a `git` submodule). +- CMake (optional). + +### Ubuntu / Debian + +#### Mandatory packages + +```sh +sudo apt install build-essential libsqlite3-dev libsodium-dev +``` + +#### Optional packages + +```sh +sudo apt install cmake +``` + +## How to use +### Build + +Two build environments are provided for `nanobbs` - feel free to choose any of +them: + +- A [`configure`](configure) POSIX shell and mostly POSIX-compliant +[`Makefile`](Makefile). +- A [`CMakeLists.txt`](CMakeLists.txt). + +`nanobbs` can be built using the standard build process: + +#### Make + +```sh +$ ./configure +$ make +``` + +#### CMake + +```sh +$ cmake -B build +$ cmake --build build/ +``` + +### Setting up + +`nanobbs` consumes a path to a directory with the following tree structure: + +``` +. +├── nanobbs.db +├── style.css +└── TERMS +``` + +Where: + +- `nanobbs.db` is the SQLite database. + - **Note:** `nanobbs` creates a database with one administrator account, + namely `admin`, if not found, with file mode bits set to `0600`. +- `style.css` is the site stylesheet. It can be freely modified. + - **Note:** `nanobbs` creates a default stylesheet file, if not found. +- `TERMS` is a text file containing the terms of service for the instance. +It can be freely modified. + - **Note:** `nanobbs` creates a default terms file, if not found. + +**Note:** `nanobbs` creates the given directory if it does not exist. + +### Running + +To run `nanobbs`, simply run the executable with the path to a directory including +the files listed above. By default, `nanobbs` will listen to incoming connections +on a random TCP port number. To set a specific port number, use the `-p` +command line option. For example: + +```sh +nanobbs -p 7822 ~/my-db/ +``` + +`nanobbs` requires a temporary directory where files uploaded by users are +temporarily stored until moved to the user directory. By default, `nanobbs` +attempts to retrieve the path to the temporary directory by inspecting the +`TMPDIR` environment variable, and falls back to `/tmp` if undefined. + +If a custom temporary directory is required, it can be defined via command +line option `-t`. For example: + +```sh +nanobbs -t ~/my-tmp -p 7822 ~/my-db +``` + +**Note:** system-level temporary directories such as `/tmp` might reside +on a filesytem different than the one where the database resides. This +would force `nanobbs` to copy the contents from uploaded files from the +temporary directory to the database, which might be an expensive operation. +Therefore, in order to avoid expensive copies, define a custom temporary +directory that resides on the same filesystem. + +## Why this project? + +When looking up a forums software for +[Speed Dreams](https://www.speed-dreams.net/), traditional forums software +solutions had been considered, such as [phpBB](https://www.phpbb.com/), +[myBB](https://mybb.com/) or [Discourse](https://www.discourse.org/), +yet raised concerns related to perceived software bloat and/or excessive +use of client-side JavaScript. + +As of the time of this writing, there was no forums software written in C +other than `nanobbs`, +[according to Wikipedia](https://en.wikipedia.org/wiki/Comparison_of_Internet_forum_software). +Since [`slcl`](https://gitea.privatedns.org/xavi/slcl), another project with +the same philosophy, was motivated by similar goals back then, `nanobbs` was seen +as a good opportunity to show how a solution written in C can be both simple, +efficient and safe. + +## License + +``` +nanobbs, a tiny forums software. +Copyright (C) 2025-2026 Xavier Del Campo Romero + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see <https://www.gnu.org/licenses/>. +``` + +Also, see [`LICENSE`](LICENSE). |
