STANDALONE SINGLE-FILE PHP 8.2+ // INDIEWEB & ACTIVITYPUB

Indie in a Box

A zero-dependency, self-contained single-file PHP engine powering your personal website, social reader, publisher, and federated identity across the IndieWeb, Fediverse, Gemini, and Gopher networks.

INSTALLATION PHILOSOPHY

Zero Installation Scripts. Just Drop the File.

Indie in a Box is compiled into a single executable PHP file: indieinabox.php. You do not need complex curl-to-bash installers,Composer setups, Node toolchains, or database daemons.

Simply drop indieinabox.php into your server directory, Docker volume, or webroot. It creates its own SQLite database with WAL mode and runs immediately.

BASH / TERMINAL (10-SECOND QUICKSTART)
# 1. Download the standalone executable
curl -LO https://codeberg.org/indieinabox/indieinabox/releases/download/v1.0.0/indieinabox.php

# 2. Run the interactive setup (or pass --setup flags)
php indieinabox.php setup

# 3. Start the built-in development web server
php indieinabox.php --serve
# Listening on http://localhost:8080 - Open in browser to access Admin Dashboard!

01 // Core Architectural Pillars

Single-File PHP Runtime

The entire runtime, including routing, template rendering, Markdown parser, microformats2 engine, SQLite ORM, and cryptography, is compiled into one self-contained indieinabox.php file.

🌐

Dual Protocol Mastery

First-class support for both IndieWeb (Micropub, Microsub, Webmention, IndieAuth) and Fediverse (ActivityPub C2S and S2S, Group Actors via FEP-1b12, WebFinger).

🪐

Triple-Network Publishing

Publishing a post generates modern semantic HTML5, native Gemini protocol capsules (.gmi), and legacy Gopher protocol maps (gophermap) simultaneously.

🤖

Multi-Provider AI Translation

Built-in automated multilingual translation pipeline supporting Google Gemini, OpenAI GPT-4o, Anthropic Claude 3.5, xAI Grok, and local self-hosted Ollama models with disk caching.

🛡️

Federation Moderation Suite

Granular defederation control allowing domain-level or actor-level SUSPEND, SILENCE, and automated spam filtering with RFC 9457 structured problem details.

📦

Zero-Vendor Portability

Everything is stored locally in SQLite and flat markdown files. Create cryptographically hashed .tar.gz or .zip backups with a single CLI command or one-click export.

02 // Production Deployment Recipes

DOCKER-COMPOSE.YML
services:
  indieinabox:
    image: dunglas/frankenphp:latest-php8.3
    restart: unless-stopped
    ports:
      - "8080:80"
    environment:
      - SERVER_NAME=https://yourdomain.com
    volumes:
      - ./data:/app/data
      - ./indieinabox.php:/app/public/index.php

Mount your persistent data directory to /app/data and the single-file binary to /app/public/index.php. That's all you need!

CLI COMMAND (STANDALONE FRANKENPHP)
# Run FrankenPHP directly in worker mode
frankenphp run --root /var/www/myblog/public_html
CADDYFILE
yourdomain.com {
    root * /var/www/myblog
    php_fastcgi 127.0.0.1:9000
    file_server

    # Fallback all dynamic requests to single-file app
    try_files {path} {path}/ /indieinabox.php?{query}
}
NGINX.CONF
server {
    server_name yourdomain.com;
    root /var/www/myblog;
    index indieinabox.php index.html;

    location / {
        try_files $uri $uri/ /indieinabox.php?$args;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

03 // Documentation Index