---
name: dotclear
description: Dotclear recipe for open-forge. Blogging platform with full admin control — multi-blog, static pages, media manager, theme/plugin system. PHP + MySQL/PostgreSQL/SQLite. Source: https://git.dotclear.org/dev/dotclear
---

# Dotclear

A mature, full-featured blog platform giving you complete control over your content. Supports multiple blogs, multiple users with role-based access, static pages, rich media manager, import/export, comment moderation, themes, and plugins. GPL-2.0 licensed, written in PHP. Actively maintained since 2003. Upstream: <https://git.dotclear.org/dev/dotclear>. Website: <https://dotclear.org>

## Compatible Combos

| Infra | Runtime | Database | Notes |
|---|---|---|---|
| Any Linux | PHP 8.1+ + NGINX/Apache | MySQL / MariaDB | Most common setup |
| Any Linux | PHP 8.1+ + NGINX/Apache | PostgreSQL | Supported |
| Any Linux | PHP 8.1+ + NGINX/Apache | SQLite | Supported — good for low-traffic single blogs |
| Docker | PHP-FPM + NGINX | MySQL / MariaDB | Community images available |

## Inputs to Collect

### Phase 1 — Preflight

| Prompt | Format | Notes |
|---|---|---|
| "Domain?" | FQDN | e.g. blog.example.com |
| "Database type?" | MySQL / PostgreSQL / SQLite | MySQL/MariaDB most common |
| "Database host, name, user, password?" | Connection details | Skip for SQLite |
| "Admin email?" | email | First admin account |

### Phase 2 — Deploy

| Prompt | Format | Notes |
|---|---|---|
| "Blog name?" | string | Set during web installer |
| "Timezone?" | TZ string | e.g. Europe/Paris |

## Software-Layer Concerns

- **PHP 8.1+ required**: Dotclear 2.x requires PHP ≥8.1. Check upstream changelog for exact version requirements per release.
- **Web installer**: After uploading files, visit the domain — a guided web installer sets up the database and first admin account.
- **Public directory**: The web root should be `/path/to/dotclear/public/` — not the full source tree.
- **Write permissions**: `cache/`, `public/`, and `plugins/` directories must be writable by the web server user.
- **Media uploads**: Stored under `public/` — back up this directory along with the database.
- **Multi-blog**: One Dotclear install can host multiple blogs, each with its own URL, theme, and user set.
- **Theme/plugin marketplace**: Available through the admin interface — themes and plugins download directly from dotclear.org.

## Deployment

### NGINX + PHP-FPM

```bash
# Download latest release from https://dotclear.org/download/
wget https://download.dotclear.org/latest.zip -O dotclear.zip
unzip dotclear.zip -d /var/www/
chown -R www-data:www-data /var/www/dotclear/
```

NGINX vhost:
```nginx
server {
    listen 443 ssl;
    server_name blog.example.com;
    root /var/www/dotclear;
    index index.php;

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

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

    # Deny access to sensitive dirs
    location ~ /(inc|locales|themes|plugins|cache|db)(/|$) {
        deny all;
    }
}
```

PHP extensions required:
```bash
apt install php8.2-fpm php8.2-mysql php8.2-mbstring php8.2-xml php8.2-gd php8.2-zip php8.2-curl
```

### Database setup

```sql
CREATE DATABASE dotclear CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'dotclear'@'localhost' IDENTIFIED BY 'yourpassword';
GRANT ALL ON dotclear.* TO 'dotclear'@'localhost';
```

Visit `https://blog.example.com` to run the web installer.

## Upgrade Procedure

1. Back up database and `public/` media directory.
2. Download new release zip from https://dotclear.org/download/.
3. Extract and overwrite files — preserve `config.php` in the root (or regenerate if structure changed).
4. Visit admin panel — Dotclear auto-runs database migrations on first admin login after upgrade.
5. Check release notes at https://dotclear.org/news/ for manual steps.

## Gotchas

- **`config.php` is the key config file**: Generated by the web installer at the root of the install directory. Back it up — it contains DB credentials.
- **Directory write permissions**: `cache/` must be writable, or the admin panel will show errors. `public/` must be writable for media uploads.
- **PHP versions**: Dotclear tracks PHP releases — check compatibility before upgrading PHP.
- **Permalink structure**: Rewrite rules must be configured in NGINX/Apache for clean URLs to work.
- **Plugin/theme updates**: Can be done from admin UI, but auto-update requires the web server user to have write access to `plugins/` and `themes/` directories.

## Links

- Source: https://git.dotclear.org/dev/dotclear
- Website: https://dotclear.org/
- Download: https://dotclear.org/download/
- Documentation: https://dotclear.org/documentation/
- Themes: https://themes.dotaddict.org/
- Plugins: https://plugins.dotaddict.org/
