Installing Plugins
Plugins extend FediSuite with additional features, for example Bluesky as another platform. Installation runs through Docker and requires no programming knowledge.
On this page
What are Plugins?
Plugins are optional extensions for FediSuite. Each plugin is a folder containing a plugin.json. All plugin folders live in the plugins/ directory next to your docker-compose.yml and are mounted into the containers as a volume at /app/plugins. The Docker image stays unchanged, so you can update FediSuite independently of your plugins.
The plugins are maintained in the FediSuite/FediSuite-Plugins-Repository (opens in new tab) repository on Forgejo. A single git clone fetches every plugin it contains. Newly detected plugins start out disabled. Only what an admin switches on in plugin management becomes active.
Included in the repository
fedisuite-plugin-bluesky
v1.0.0
Bluesky as an additional platform: connect an account (handle, app password, optionally your own PDS host), publish posts, import history, and refresh statistics and posts.
my-plugin
Template
An example for plugin developers, generated with the scaffold (a simple admin page). It also shows up in plugin management after cloning, but you do not need it in production and do not have to enable it.
Prerequisites
Before you install plugins, FediSuite should already be running and the following should be in place:
The self-hosting repository is set up, docker-compose.yml and .env are configured, and the containers are running. The Docker installation page explains how.
The commands on this page use docker compose. Plugins need no additional software on the server.
To clone and update the plugin repository. Check with: git --version
You must be able to create a subfolder in the folder that contains docker-compose.yml.
Plugins can only be enabled and disabled in the admin area.
Clone the Plugin Repository
Change into your FediSuite installation folder, that is, the folder that contains your docker-compose.yml, and clone the plugin repository as a subfolder named plugins:
cd /path/to/your/fedisuite-folder
git clone https://forge.chrislo.de/FediSuite/FediSuite-Plugins-Repository.git plugins
plugins. The docker-compose.yml from the self-hosting repository mounts ./plugins. Without the target name at the end of the command, git clone creates a folder named FediSuite-Plugins-Repository, and the mount points at nothing. An existing empty plugins folder is fine, though: git clone fills it.
Then check that the folder was created correctly:
ls -la plugins/
Among other things, you should see these entries:
.git/
LICENSE
PLUGIN-AUTHORING.de.md
PLUGIN-AUTHORING.md
README.de.md
README.md
fedisuite-plugin-bluesky/
my-plugin/
Your folder structure now looks like this:
Folder structure
fedisuite/
├── .env
├── docker-compose.yml
├── logs/
├── postgres/
├── uploads/
└── plugins/ ← newly cloned
├── .git/
├── fedisuite-plugin-bluesky/
│ └── plugin.json
├── my-plugin/
│ └── plugin.json
├── README.md
└── README.de.md
Check docker-compose.yml
For the containers to see the plugins folder, it has to be mounted as a volume. The docker-compose.yml from the self-hosting repository already contains the mount for the three services app, worker1 and worker2 and also sets the plugin variables. All three containers read the plugin folder themselves at startup, which is why each of them needs the mount.
This is the excerpt for app in the default file (worker1 and worker2 contain the same plugin lines):
app:
image: ${FEDISUITE_IMAGE:-christinloehner/fedisuite:latest}
...
environment:
- PLUGINS_ENABLED=true
- PLUGIN_SCAN_ON_START=true
- PLUGIN_API_VERSION=1
...
volumes:
- ./uploads:/app/uploads
- ./plugins:/app/plugins
- ./logs:/app/logs
What do these entries mean?
./plugins
The folder on your server that you cloned in step 1. The dot stands for the directory that contains docker-compose.yml.
/app/plugins
The path inside the container where FediSuite looks for plugins. This path is fixed and must not be changed.
PLUGINS_ENABLED
Switches the plugin system on (default: true). With false (also 0, no or off), FediSuite loads no plugins.
PLUGIN_SCAN_ON_START
Reads the plugin folder at startup (default: true). With false it is not read and no plugins are loaded.
PLUGIN_API_VERSION
The plugin API version this FediSuite version expects (currently 1). Plugins with a different version are rejected. You should not change the value.
Use this command to check that the mount is active. The output lists the path to plugins and the target /app/plugins for each of the three services:
docker compose config | grep plugins
- ./plugins:/app/plugins to the volumes: section of app, worker1 and worker2, and copy the three plugin variables from the example above into the respective environment: section. You do not need a mount in the db container.
Restart FediSuite
FediSuite only reads the plugin folder when the containers start. After cloning, app, worker1 and worker2 therefore have to restart. If the Compose file already contained the mount and you have not changed it, restarting these containers is enough:
docker compose restart app worker1 worker2
If you changed docker-compose.yml (for example by adding the mount), re-read it with this command. It recreates the affected containers:
docker compose up -d
What happens at startup:
- 1 The containers start and read the /app/plugins folder. The db container is left alone.
- 2 FediSuite looks for a plugin.json in every subfolder. Folders without that file, such as .git, are skipped.
- 3 The manifest of each plugin is checked: required fields, plugin API version, permissions and paths.
- 4 New plugins are recorded in the database and initially kept as disabled. Plugins that were already enabled are started.
docker compose up -d: The Compose file from the self-hosting repository sets pull_policy: always. The command therefore also pulls a newer FediSuite image and updates FediSuite along the way. If you only want to re-read plugins, use docker compose restart app worker1 worker2, or pin a fixed image tag in your .env.
Enable the Plugin
Detected plugins are switched off after installation. Sign in as an admin, open Admin area / Plugins in the sidebar and click Enable on the plugin you want. The plugin starts right away in the running application, so the web interface needs no restart. More details are on the Plugin Management page.
docker compose restart worker1 worker2. The same applies after disabling.
Verify Installation
After the restart you can see in the FediSuite interface or in the container logs whether the plugins were detected.
Option 1: In the FediSuite interface
Open FediSuite in your browser and sign in as an admin.
In the sidebar, open the "Admin area" section and then the "Plugins" entry.
The plugins from the folder should be listed as cards, with the status "Disabled" after the first installation.
For an entry with the status "Failed", the cause is shown in the expanded details.
Option 2: In the container logs
docker compose logs app | grep -i plugin
After the scan, FediSuite reports something like Plugin discovery finished. 2 plugin directory/directories scanned. The number is the count of folders found that contain a plugin.json. If the mount is missing entirely, you will see Plugin directory /app/plugins does not exist instead. If the plugin system is switched off through PLUGINS_ENABLED or PLUGIN_SCAN_ON_START, a message names the variable concerned. Why an individual plugin does not start is not written to the logs. It appears as an error message in the expanded details of plugin management.
docker compose ps # are all containers running?
docker compose config | grep plugins # is the plugin mount active?
docker compose exec app ls /app/plugins # what does the container see?
Applying Plugin Updates
Because the plugin folder is a Git repository, git pull fetches all changes. The containers then have to restart, since plugins are only re-read at startup. A plain docker compose up -d does not restart unchanged containers and is therefore not enough.
cd plugins
git pull
cd ..
docker compose restart app worker1 worker2
docker compose pull && docker compose up -d), the plugins/ folder stays as it is. If a new FediSuite version brings a different plugin API version, older plugins are rejected and show the status "Failed" until you update them.
Removing or Switching Off Plugins
There are three ways: disable a single plugin, delete a single plugin permanently, or switch off the whole plugin system.
Disable a single plugin
Click "Disable" on the plugin in plugin management. The files stay in place and you can enable the plugin again at any time. This is the normal choice when you only do not need a plugin for a while.
Remove a single plugin permanently
First disable the plugin in plugin management, then delete the plugin folder and restart the containers. The rm -rf command deletes the folder irreversibly, so check the path beforehand. On the next start the plugin no longer appears in plugin management.
rm -rf plugins/fedisuite-plugin-bluesky
docker compose restart app worker1 worker2
Switch off the whole plugin system
In docker-compose.yml, set the variable PLUGINS_ENABLED to false for app, worker1 and worker2. The plugin folder and the mount can stay, but FediSuite will no longer load any plugins.
environment:
- PLUGINS_ENABLED=false # before: true
docker compose up -d
Troubleshooting
If a plugin does not appear in plugin management after installation, work through this checklist:
Checklist: plugin does not show up
- The folder is named exactly plugins and sits next to docker-compose.yml (not FediSuite-Plugins-Repository or similar).
- The volume mount ./plugins:/app/plugins is set for app, worker1 and worker2.
- PLUGINS_ENABLED and PLUGIN_SCAN_ON_START are not set to false.
- The containers were restarted after cloning or changing anything, because plugins are only read at startup.
- A plugin.json sits directly in the plugin subfolder (ls plugins/fedisuite-plugin-bluesky/). An additional folder level in between is not found.
- The plugin is enabled in plugin management. A plugin's pages, widgets and connectors only appear once it is active.
Common causes at a glance
docker compose restart app worker1 worker2, then docker compose exec app ls /app/plugins
Read the error message in the expanded details of plugin management, update the plugin with git pull and restart
mv FediSuite-Plugins-Repository plugins, or clone again with: git clone … plugins
docker compose config shows syntax errors
docker compose restart worker1 worker2
ls -la plugins/ # folder present and contents correct?
ls -la plugins/fedisuite-plugin-bluesky/ # plugin.json present?
docker compose config | grep plugins # volume mount configured?
docker compose ps # are all containers running?
docker compose exec app ls /app/plugins # what does the container see?
docker compose logs app # check app logs for errors
docker compose logs app | grep -i plugin # search for plugin messages