Errordon is a Mastodon fork designed for instance operators who want to run a legally compliant social media platform under European and German law β with AI-assisted content moderation.
Profile View with Media Tabs |
Live Feeds with Matrix Rain |
|
Every upload is automatically scanned by AI. Pornographic content is immediately deleted and accounts are frozen. |
Hate speech, antisemitism, and incitement (Β§130 StGB) trigger automatic review and escalating bans. |
Nazi symbols, Holocaust denial, and unconstitutional content (Β§86a StGB) result in permanent bans. |
Errordon includes a revolutionary AI-powered content moderation system that helps instance administrators enforce European law with minimal manual effort. It is optionional - you can install with or with out. The deploy scripts let you choose. But I thought Porn-Filter would be a need.
Here some Thoughts about the wide Range of AI-Usecases - from helping handicaped people to masssurveilance and masskilling weapons.
A call to look closer and not stay shortminded: https://hearthis.at/lino.casu/ai-lino/
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β NSFW-PROTECT AI PIPELINE β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β π€ UPLOAD π€ AI ANALYSIS β
β βββββββββββ ββββββββββββββ β
β User uploads Ollama AI checks: β
β image/video β’ Pornographic content β
β β β’ Hate symbols β
β βΌ β’ Illegal material β
β βββββββββββββββ β β
β β INTERCEPT ββββββββββββββββββββββΆβ β
β βββββββββββββββ βΌ β
β ββββββββββββββββββ β
β β SAFE? βββΆ β
β β
β β PORN? βββΆ π« ββββΆ Auto-delete + Strike β
β β HATE? βββΆ π« ββββΆ Review + Strike β
β β CSAM? βββΆ π¨ ββββΆ Ban + Authorities β
β ββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| Strike | Porn Violation | Hate Violation |
|---|---|---|
| 1st | 24 hours freeze | Warning + Review |
| 2nd | 3 days freeze | 3 days freeze |
| 3rd | 7 days freeze | 7 days freeze |
| 4th | 30 days freeze | PERMANENT |
| 5th+ | PERMANENT | β |
| Job | Schedule | Purpose |
|---|---|---|
| Blocklist Update | 3:00 AM | Update porn domain list |
| GDPR Cleanup | 4:00 AM | Delete expired data, anonymize IPs |
| AI Snapshot Cleanup | 4:30 AM | Delete SAFE snapshots after 14 days |
| Video Cleanup | 5:00 AM | Shrink old videos to 480p |
| Freeze Cleanup | Hourly | Unfreeze expired accounts |
| Weekly Summary | Mon 9 AM | Email stats to admin |
- 10+ active alarms β Instance posting freeze for flagged accounts
- CSAM detection β Immediate permanent ban + law enforcement notification
- Admin email alerts β Real-time notifications for all violations
This instance software is designed to help operators comply with:
| Law | Description | Errordon Response |
|---|---|---|
| Β§130 StGB | Volksverhetzung (Incitement) | AI detection + auto-ban |
| Β§184b StGB | Child pornography | Immediate ban + authorities |
| Β§86a StGB | Unconstitutional symbols | AI detection + permanent ban |
| Β§131 StGB | Glorification of violence | AI review + escalating bans |
| NetzDG | Network Enforcement Act | IP logging, content removal |
| DSGVO/GDPR | Data protection | Privacy-first defaults |
- β Terms of Service (German law compliant)
- β Privacy Policy (DSGVO/GDPR compliant)
- β Community Guidelines (Clear rules with legal references)
Errordon supports invite-only registration with mandatory checks:
βββββββββββββββββββββββββββββββββββββββββββββ
β REGISTRATION FLOW β
βββββββββββββββββββββββββββββββββββββββββββββ€
β 1. βοΈ Invite Code Required β
β ββ Max 3 uses per code β
β β
β 2. π Age Verification β
β ββ Checkbox: "I am 18 or older" β
β β
β 3. π Legal Acceptance β
β ββ Terms of Service β
β ββ Privacy Policy β
β ββ Community Guidelines β
β β
β 4. β
Email Verification β
ββββββββββββββββββββββββββββββββββββββββββββ
# Install Ollama for AI content moderation
curl -fsSL https://ollama.com/install.sh | sh
ollama pull llava # Vision model for images/videos
ollama pull llama3 # Text model for hate speech
# Enable in .env.production
ERRORDON_NSFW_PROTECT_ENABLED=true
ERRORDON_NSFW_OLLAMA_ENDPOINT=http://localhost:11434
ERRORDON_NSFW_ADMIN_EMAIL=admin@your-instance.com
ERRORDON_INVITE_ONLY=true
ERRORDON_REQUIRE_AGE_18=truecurl -fsSL https://raw.githubusercontent.com/error-wtf/errordon/main/install-docker.sh -o install-docker.sh
bash install-docker.shWhy this way: piping into bash can break interactive prompts on some terminals because stdin is not a TTY (you can end up typing into your shell instead of the installer). Downloading first keeps the installer fully interactive and makes failures (like 404) obvious.
Interactive prompts for:
- Domain & Admin Email
- Admin Username
- SMTP Configuration
- Matrix Terminal Theme
- Ollama AI (NSFW-Protect)
git clone https://github.com/error-wtf/errordon.git
cd errordon
bash install-docker.shBeyond legal compliance, Errordon includes:
| Feature | Description |
|---|---|
| π¬ Profile Media Tabs | Separate Videos/Audio/Images tabs |
| π¨ Matrix Theme | Cyberpunk green UI (Ctrl+Shift+M) |
| π₯οΈ Matrix Terminal | Interactive landing page with games |
| π 165 Custom Emojis | Matrix/Hacker/Nerd/CCC/DevOps/Security themed |
| π€ 99MB Uploads | With server-side transcoding |
| π Privacy-First | Strict defaults via ENV |
| πΎ Dynamic Storage Quota | 60% disk shared equally, profile display |
| π Media Filters | Originals only, Alt text, Public |
| πΉ Auto Video Cleanup | Shrink videos >7 days to 480p |
| ποΈ GDPR Compliance | Auto-delete expired data |
| π§ Evidence Emails | Forensic reports for violations |
Errordon includes an optional Matrix-style cyberpunk theme with:
- Green neon color palette (
#00ff00) - VT323 hacker font for headings (UTF-8 compatible)
- Glitch effects on hover
- Dark background with white text for readability
- 100% Fediverse-compatible (opt-in, no structural changes)
Keyboard: Ctrl + Shift + M
Or set default via environment:
ERRORDON_THEME=matrix # Options: matrix, default, light127 Matrix/Hacker/Nerd/CCC/DevOps/Security themed emojis in 14 categories:
| Category | Emojis |
|---|---|
| Matrix | :matrix_code: :red_pill: :blue_pill: :skull_matrix: :matrix_cat: :glitch: :neon: :synthwave: :hologram: |
| Hacker | :hacker: :terminal: :binary: :encrypt: :access_granted: :access_denied: :anonymous: :wifi_hack: :firewall: :sudo: :tor: :vpn: :ssh: :darknet: :exploit: :overflow: :injection: :phishing: |
| Nerd | :nerd: :keyboard: :code: :bug: :cyber_eye: :robot: :coffee_code: :git: :loading: :hacker_cat: :night_owl: :headphones: |
| Coding | :python: :javascript: :rust: :docker: :linux: :vim: :emacs: :api: :json: :regex: :null: :undefined: :commit: :merge: :branch: :pull_request: :opensource: :foss: :debug: :segfault: :bash: :zsh: :root: :chmod: :ping: :404: :500: :200: |
| Hardware | :cpu: :ram: :gpu: :server: :database: :raspberry_pi: :arduino: :usb: :ethernet: |
| Coffee | :coffee: :espresso: :latte: :energy_drink: :pizza: |
| CCC | :ccc: :chaos: :hackspace: :soldering: |
| Cyberpunk | :cyborg: :ai: :neural: :blockchain: :crypto: :vr: :retro: :pixel: :arcade: :gamepad: |
bundle exec rails errordon:import_emojis| Endpoint | Method | Description |
|---|---|---|
/api/v1/errordon/quotas/current |
GET | Current user's quota stats |
/api/v1/errordon/storage_quota |
GET | Dynamic disk-based quota |
/api/v1/errordon/quotas |
GET | Admin: All user quotas |
/api/v1/errordon/quotas/:id |
GET/PUT | Admin: User quota details/update |
/api/v1/errordon/transcoding/:media_id/status |
GET | Transcoding status for media |
| Endpoint | Enhancement |
|---|---|
/api/v1/accounts/:id/statuses |
New media_type param: video|audio|image |
- Profile Media Columns: Separate tabs for Videos, Audio, Images in user profiles
- Filter UI: Filter by "originals only", "with alt text", visibility
- Large Uploads: Up to 250MB for video/audio with automatic transcoding
- Privacy Defaults: Strict preset inspired by chaos.social principles
errordon/
βββ app/
β βββ controllers/api/v1/errordon/ # Errordon API controllers
β β βββ quotas_controller.rb # Quota management
β β βββ transcoding_controller.rb # Transcoding status
β βββ services/errordon/ # Business logic
β β βββ storage_quota_service.rb # Dynamic disk quotas
β β βββ media_upload_checker.rb # NSFW-Protect AI
β β βββ domain_blocklist_service.rb # Porn/fascism blocklist
β β βββ security_service.rb # File validation
β β βββ audit_logger.rb # Security logging
β β βββ video_transcoder_service.rb # Video transcoding
β βββ workers/errordon/ # Background jobs
β β βββ media_transcode_worker.rb # Sidekiq worker
β βββ javascript/
β βββ mastodon/features/errordon/ # React components
β β βββ matrix_theme.ts # Theme controller
β β βββ admin_quotas.tsx # Admin UI
β β βββ video_grid.tsx # Video grid
β βββ styles/errordon_matrix.scss # Matrix theme styles
βββ config/
β βββ initializers/errordon_*.rb # Feature configs
β βββ routes/errordon.rb # API routes
β βββ locales/errordon.*.yml # Translations
βββ public/emoji/errordon/ # 127 custom SVG emojis
βββ lib/tasks/errordon_emojis.rake # Emoji import task
βββ deploy/ # Production configs
βββ docs/ # Documentation
βββ spec/initializers/ # Tests
| Document | Description |
|---|---|
| π Deployment Guide | Complete production deployment |
| π Tutorials | Step-by-step guides |
| βοΈ Configuration | All environment variables |
| π§ Troubleshooting | Common issues & solutions |
| Document | Description |
|---|---|
| NSFW_PROTECT_ARCHITECTURE.md | AI moderation system details |
| STORAGE_QUOTA.md | Dynamic disk-based quotas |
| GDPR_COMPLIANCE.md | Data retention & privacy |
| VIDEO_CLEANUP.md | Auto video shrinking |
| TRANSCODING_PIPELINE.md | Media transcoding |
| SECURITY.md | Security best practices |
| Document | Description |
|---|---|
| Terms of Service | Legal terms (DE/EN) |
| Privacy Policy | DSGVO/GDPR compliant |
| Community Guidelines | Rules with legal references |
| Document | Description |
|---|---|
| Contributing Guide | How to contribute |
| Changelog | Version history & changes |
Running a social media instance in Germany/EU comes with legal responsibilities:
- NetzDG requires removal of illegal content within 24 hours
- Β§184b StGB criminalizes hosting of CSAM
- Β§130 StGB prohibits hosting hate speech and incitement
- Instance operators can be held personally liable
Errordon helps you comply by automating detection and enforcement β so you can run a safe community without becoming a full-time moderator.
This software is for you if:
- β You want to run a safe, family-friendly Fediverse instance
- β You want EU/German law compliance out of the box
- β You want AI assistance for content moderation
- β You want clear legal documents for your users
- β You believe in free speech within the law (no fascism, no porn, no hate)
AGPLv3 - Compatible with Mastodon's license.
All Errordon additions are also AGPLv3.
- Mastodon - Upstream project
- Ollama - AI backend for NSFW-Protect
- German Criminal Code (StGB) - Legal framework
Errordon β A Safe Fediverse for Europe πͺπΊπ©πͺ
NO PORN β’ NO HATE β’ NO FASCISM

