Takahe on a VPS: Lightweight ActivityPub Server for Mastodon-Compatible Federated Social Media
Takahe is a lightweight ActivityPub server — think Mastodon but engineered from the ground up for minimal resource usage. While Mastodon requires 2+ GB RAM, Takahe runs in 200–400 MB and handles multiple domains on one instance. It’s compatible with Mastodon’s API, so Mastodon clients (Ivory, Tusky, Mona) work seamlessly. For individuals or small organizations wanting a presence on the Fediverse without Mastodon’s infrastructure overhead, Takahe is the right choice.
Takahe vs Mastodon
| Factor | Takahe | Mastodon |
|---|---|---|
| RAM requirement | 200–400 MB | 2–4 GB minimum |
| Multi-domain | Built-in (multi-tenancy) | Complex workarounds |
| Mastodon API | Compatible subset | Full implementation |
| Technology | Python/Django | Ruby on Rails |
| Best for | Personal/small org presence | Larger communities |
Step 1: Docker Compose Setup
<code">mkdir -p /opt/takahe && cd /opt/takahe nano docker-compose.yml
<code">version: '3.8'
services:
takahe-web:
image: jointakahe/takahe:latest
container_name: takahe-web
restart: always
command: gunicorn takahe.wsgi:application --workers 4 --bind 0.0.0.0:8000
ports:
- "127.0.0.1:8000:8000"
environment: &takahe-env
TAKAHE_SECRET_KEY: ${SECRET_KEY}
TAKAHE_DATABASE_SERVER: postgresql://takahe:${POSTGRES_PASSWORD}@takahe-db/takahe
TAKAHE_MEDIA_BACKEND: local
TAKAHE_MEDIA_ROOT: /app/media
TAKAHE_EMAIL_SERVER: smtp+tls://postmaster%40mg.yourdomain.com:${SMTP_PASSWORD}@smtp.mailgun.org:587
TAKAHE_EMAIL_FROM: [email protected]
TAKAHE_MAIN_DOMAIN: social.yourdomain.com
TAKAHE_DEBUG: "false"
volumes:
- takahe_media:/app/media
depends_on:
takahe-db:
condition: service_healthy
takahe-stator:
image: jointakahe/takahe:latest
container_name: takahe-stator
restart: always
command: python manage.py runstator
environment: *takahe-env
volumes:
- takahe_media:/app/media
depends_on:
takahe-db:
condition: service_healthy
takahe-db:
image: postgres:16-alpine
restart: always
environment:
POSTGRES_DB: takahe
POSTGRES_USER: takahe
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- takahe_db:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U takahe"]
interval: 10s
timeout: 5s
retries: 5
volumes:
takahe_media:
takahe_db:
<code">cat > .env << 'EOF' SECRET_KEY=$(python3 -c "import secrets; print(secrets.token_hex(50))") POSTGRES_PASSWORD=StrongTakaheDbPassword! SMTP_PASSWORD=your_mailgun_password EOF chmod 600 .env docker compose up -d # Run migrations: docker compose exec takahe-web python manage.py migrate
Step 2: Nginx Reverse Proxy
<code">sudo nano /etc/nginx/sites-available/takahe
<code">server {
listen 443 ssl http2;
server_name social.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/social.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/social.yourdomain.com/privkey.pem;
client_max_body_size 40M;
location /media/ {
alias /var/lib/docker/volumes/takahe_takahe_media/_data/;
expires 30d;
}
location / {
proxy_pass http://127.0.0.1:8000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
<code">sudo certbot --nginx -d social.yourdomain.com sudo systemctl reload nginx
Step 3: Create Admin and First Account
<code"># Create admin user: docker compose exec takahe-web python manage.py createsuperuser # Visit: https://social.yourdomain.com/djadmin/ → log in # Create a domain: # Admin → Domains → Add → social.yourdomain.com → Service domain # Create first user account: # Admin → Users → Add user → email, password # Then create their identity: # Admin → Identities → Add → [email protected]
Step 4: Connect Mastodon Clients
<code"># Takahe supports Mastodon's API — use any Mastodon client: # Ivory (iOS): Server → social.yourdomain.com # Tusky (Android): Instance → social.yourdomain.com # Mona (macOS/iOS): social.yourdomain.com # Or use the built-in Takahe web interface: # https://social.yourdomain.com # Post from CLI: curl -X POST https://social.yourdomain.com/api/v1/statuses \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -F "status=Hello, Fediverse! #firstpost"
Step 5: Federation (Connecting to Fediverse)
<code"># Takahe automatically federates with other ActivityPub servers: # - Follow @[email protected] → their posts appear in your feed # - People on mastodon.social, pleroma.social etc. can follow you # - Your posts are shared to your followers' home instances # Verify federation works: # 1. Find your account: @[email protected] # 2. Search for it from mastodon.social → should appear # 3. Follow someone on another instance from your Takahe account # Admin → Domains → Add external domain to federate with # (or federation happens automatically when following someone)
Getting Started
Takahe’s 200–400 MB RAM fits on a 1 GB Ubuntu VPS at VPS.DO. The stator worker process handles federation tasks asynchronously — following, liking, and boosting from remote accounts. For organizations wanting a verified presence on the Fediverse (link to your professional profile at @[email protected]), Takahe’s multi-domain support means you can host team members’ accounts on a single instance at different subdomains.
Conclusion
Takahe provides a Mastodon-compatible ActivityPub server on a fraction of Mastodon’s resource footprint — 200 MB RAM versus 2 GB. Its multi-domain architecture makes it uniquely suited for organizations hosting branded Fediverse presences for team members or departments. All standard Mastodon clients (Ivory, Tusky, Mona) work identically, and federation with the broader Fediverse (Mastodon, Pleroma, Misskey instances) happens automatically when accounts follow users on other platforms.
Rohrreinigung
October 22, 2026Hi there, everything is going well here and ofcourse every one
is sharing information, that’s truly good, keep up writing.
isochronic tones with autosuggestion for sobriety
October 22, 2026Hello to all, how is the whole thing, I think every
one is getting more from this web site, and your views are good for new visitors.
how to compare dietary supplements
October 22, 2026I found the explanation of the points raised about what to check before ordering a supplement while keeping expectations realistic.
Memoicept memory support supplement
October 22, 2026Thanks for explaining how this article covers understanding supplement labels while keeping expectations realistic.
www.spartamaxultra.com
October 22, 2026Good information about how individual experiences can vary that is practical and straightforward.
Gelatine Sculpt liquid drops
October 22, 2026I appreciate the information about healthy approaches to weight goals and encourages careful consideration.
Fast Brain Booster dosage
October 22, 2026A clear overview of the information about checking ingredient lists without overcomplicating the subject.