sindum/fedibook
2
11
Fork
You've already forked fedibook
1
Fedibook is a ActivityPub based Social Media platform with a familier interface for keeing in touch with friend and groups. You can deploy your own instans, become user on some one elses or join our showcase server to follow to progress on the platform https://fedibook.net
  • JavaScript 46.6%
  • Go 32.4%
  • Svelte 10.8%
  • TypeScript 7.7%
  • Python 1.5%
  • Other 1%
2026年05月22日 20:07:18 +02:00
.claude lost of federated profile changes 2026年05月20日 05:41:26 +00:00
__pycache__ Mastodon friend and group makeover 2026年04月29日 22:19:04 +00:00
backend Bidirectional unfriend fix 2026年05月20日 06:58:30 +00:00
frontend lightbox for image click 2026年05月20日 09:10:39 +00:00
traefik Refactor: combine docker setup, remove separate traefik compose 2026年03月26日 21:57:57 +00:00
.env.example defails about STORAGE folder added to .env.example and README.md 2026年04月19日 21:18:58 +00:00
.gitignore Show images used for profile and banner + new layout 2026年05月18日 21:38:12 +00:00
.testenv.example Mastodon friend and group makeover 2026年04月29日 22:19:04 +00:00
CONTRIBUTING.md Docs: add CONTRIBUTING.md 2026年03月25日 14:14:18 +00:00
deploy-demo.sh Refactor: dead code cleanup and robustness fixes 2026年05月18日 20:43:20 +00:00
deploy.sh Refactor: dead code cleanup and robustness fixes 2026年05月18日 20:43:20 +00:00
dev_guide.md lost of federated profile changes 2026年05月20日 05:41:26 +00:00
docker-compose.yml lost of federated profile changes 2026年05月20日 05:41:26 +00:00
fedibook-icon-dark-mono.png new about page and some layout updates 2026年04月05日 18:16:02 +00:00
fedibook-icon-dark.png now with logo 2026年04月03日 23:27:07 +00:00
fedibook-icon.png Fixed mixup of friend and follow for Mastodon 2026年04月05日 23:39:40 +00:00
ops_guide.md New ops_guide.md for guide to fediverse site operators 2026年03月28日 19:54:56 +00:00
README.md defails about STORAGE folder added to .env.example and README.md 2026年04月19日 21:18:58 +00:00
test_federation.py Mastodon friend and group makeover 2026年04月29日 22:19:04 +00:00
test_readme.md Mastodon friend and group makeover 2026年04月29日 22:19:04 +00:00
USER_GUIDE.md git join fixes 2026年03月30日 22:07:53 +00:00

Fedibook

Fedibook is an open-source, self-hosted social network inspired by the simplicity of early Facebook — with full ActivityPub federation support. Run your own instance and stay connected with Mastodon, Pixelfed, and every other Fediverse platform, all from a familiar friends-and-groups interface.

A live showcase instance is available at fedibook.net .

License: GNU Affero General Public License v3.0 (AGPL-3.0)


Features

Social graph

  • Friends — mutual connections with a confirmation step. Friend posts can be shared with friends-only visibility, keeping them off public timelines and out of federation.
  • Follows — one-directional subscriptions to any ActivityPub account on the Fediverse (Mastodon users, Pixelfed photographers, PeerTube channels, etc.). Their public posts appear in your feed.
  • Mutual-follow upgrade — when a follow becomes mutual, Fedibook automatically promotes it to a full friendship.
  • Follow import — paste a Mastodon follows CSV and Fedibook resolves each account across the Fediverse in batches, with real-time progress feedback.

Feed and posts

  • Reverse-chronological feed mixing friends, follows, and group posts.
  • Real-time updates via Server-Sent Events — a banner appears when new content arrives.
  • Post visibility: Public (federated) or Friends-only (private).
  • Image attachments with automatic resize on upload.
  • Video support via an optional PeerTube integration.
  • Post editing, deletion (with federated Delete activity), likes, shares (Announce), and threaded comments.

Groups

Groups are shared spaces that work like Facebook groups but are also full ActivityPub actors — users on Mastodon, Pixelfed, and other platforms can join and participate without a Fedibook account.

  • Each group has a fediverse address of the form @handle-grp@yourdomain.com, chosen (or auto-generated) at creation time and fixed thereafter.
  • Closed groups are publicly listed; joining requires admin approval.
  • Hidden groups are invite-only and do not appear in any listing.
  • Admins can invite any fediverse address — Fedibook resolves it automatically and sends a Follow activity to the remote actor.
  • Remote members (Mastodon etc.) join by accepting the follow request in their own client; they receive group posts as Announce (boost) activities in their home timeline.
  • Group posts from remote members are delivered as Direct Messages addressed to the group actor and fanned out to all members.
  • A built-in Everyone system group automatically includes all local users — useful for instance-wide announcements.

Fediverse federation

  • Full ActivityPub inbox/outbox for both user and group actors.
  • HTTP Signature verification on all incoming activities.
  • WebFinger discovery for users (@user@domain) and groups (@handle-grp@domain).
  • NodeInfo endpoint for instance discovery.
  • Supported incoming activity types: Follow, Accept, Undo{Follow}, Create{Note}, Delete, Invite, Announce.
  • Outbound delivery via an asynchronous worker with three priority queues.

Administration

  • Instance admin panel for user management and content moderation.
  • Configurable registration modes: open, approval-required, or invitation-only.
  • Optional email verification on signup.
  • Admin-level post deletion.

Documentation

Document Audience
USER_GUIDE.md End users — how to use every feature
dev_guide.md Contributors and operators — architecture, data flows, gotchas

What's included

The Docker Compose project bundles everything needed to run a production-ready instance:

Service Purpose
Traefik Reverse proxy with automatic Let's Encrypt TLS and load balancing
PostgreSQL 16 Primary database
Redis 7 Job queue and token blacklist
App1 / App2 Two identical Go API server instances behind the Traefik load balancer
Worker Background job processor (single instance — two workers would compete for the same jobs)
Frontend SvelteKit UI

Before you start

Fedibook is designed to run on a dedicated server — a small VPS or cloud instance works great. The bundled setup takes over ports 80 and 443 and manages its own TLS certificates, so it assumes there is no other web proxy already running on the machine.

Minimum requirements:

  • 2 GB RAM
  • 10 GB disk
  • Docker and Docker Compose v2
  • A domain name pointed at the server

If you already run your own Traefik setup, you can remove the Traefik service from docker-compose.yml and wire Fedibook into your existing proxy. The routing labels are already in place — you just need to attach the correct network.


Installation

1. Clone the repository

git clone https://codeberg.org/sindum/fedibook.git
cd fedibook

2. Create your configuration file

cp .env.example .env

Edit .env with your settings (see Configuration below).

Make STORAGE folder configured in .env writeable to allow media upload

3. Start the stack

docker compose up -d

Traefik will automatically obtain a TLS certificate for your domain. The application will be available at https://your-domain.com within a minute or so.


Updating

Use deploy.sh for zero-downtime updates:

./deploy.sh

The script pulls the latest code, builds fresh images, then performs a rolling restart so the site stays up throughout the deploy:

  1. Builds new images for all services.
  2. Restarts app1 and waits until it is healthy before continuing.
  3. Restarts app2 and waits until it is healthy before continuing.
  4. Restarts the worker (brief pause acceptable — it handles background jobs, not user traffic).
  5. Restarts the frontend.

Because two app instances run behind Traefik, there is always at least one healthy instance serving requests while the other restarts. If an instance does not become healthy within 60 seconds the script prints an error and stops rather than proceeding to the next step.

Database migrations run automatically on startup of the new app containers.

First-time or emergency restart: docker compose up -d --build still works and will bring up everything from scratch, but it restarts all services simultaneously and causes a brief outage.


Configuration

Copy .env.example to .env and fill in the values. Here is a breakdown of each section:

Identity

Variable Description
SITE_DOMAIN The domain your instance runs on — used in ActivityPub identifiers, WebFinger, and email links. Must match your DNS.
STACK_NAME Docker Compose stack name, used internally for Traefik routing. Default: fedibook
INSTANCE_NAME Display name shown in the UI and NodeInfo.
INSTANCE_DESCRIPTION Short description of the instance.

Application

Variable Description
APP_SECRET_KEY Secret used to sign JWT tokens. Generate with openssl rand -hex 32. Never change this in production — it will invalidate all sessions.
APP_ENV production or development
LOG_LEVEL debug, info, warn, or error
REGISTRATION_MODE open allows anyone to sign up. approval requires admin approval.
EASY_SIGNUP Set to true to skip email verification. Useful for local testing, not recommended in production.

Admin user

An admin account is created automatically on first startup using these values.

Variable Description
ADMIN_USERNAME Username for the admin account
ADMIN_FULL_NAME Display name
ADMIN_EMAIL Email address
ADMIN_PASSWORD Password — change this immediately after first login

Database and Redis

The default values connect to the bundled PostgreSQL and Redis containers. Only change these if you are using external database services.

Email (SMTP)

Variable Description
SMTP_HOST SMTP server hostname. Leave empty to disable email — a no-op mailer will log emails instead.
SMTP_PORT 587 for STARTTLS, 465 for TLS
SMTP_USER / SMTP_PASSWORD SMTP credentials
SMTP_FROM_ADDRESS The sender address used for outgoing emails

Email is used for account verification and password resets. For testing without email, you can set EASY_SIGNUP=true to skip email verification entirely.

TLS

Variable Description
ACME_EMAIL Email address for Let's Encrypt notifications (certificate expiry warnings etc.)

Storage

Variable Description
STORAGE_DRIVER local stores uploads on disk. s3 uses an S3-compatible object store.
STORAGE_LOCAL_PATH Path for local uploads. Default: ./uploads in the data folder.

PeerTube (optional)

If set, Fedibook will use a PeerTube instance for video uploads. Leave these commented out to disable video support.

PEERTUBE_URL=https://peertube.example.com
PEERTUBE_USERNAME=
PEERTUBE_PASSWORD=

Contributing

Contributions are welcome — bug fixes, features, documentation, and feedback alike.

See CONTRIBUTING.md for how to get started, the branch workflow, and coding conventions.

You can also follow the project and join the conversation at fedibook.net in the group "About the Fedibook project".