Skip to content

WordPress Databases Support: SQLite, PostgreSQL, DuckDB, JSON, CSV, Parquet, S3

WordPress Databases Support is an experimental database drop-in collection for running WordPress on SQLite, PostgreSQL, DuckDB native files, DuckDB-backed JSON, CSV, Parquet, S3-compatible object storage, attached SQLite databases, and custom DuckDB SQL backends while preserving the MySQL-facing wpdb API expected by WordPress core and plugins.

Use the Docker example when you want the fastest proof: a local WordPress site whose database is a directory of JSON files managed through DuckDB.

Terminal window
curl -fsSL https://github.com/adamziel/wordpress-databases-support/archive/trunk.tar.gz | tar -xz
cd wordpress-databases-support-trunk/examples/duckdb-json-wordpress
docker compose up --build

Open http://localhost:8080 and log in with admin / password. See the examples/duckdb-json-wordpress/ directory in the repository for the Docker files.

After startup, table files are written under examples/duckdb-json-wordpress/data/duckdb-json/; for example, wp_options.json stores wp_options rows as newline-delimited JSON:

{"option_id":1,"option_name":"siteurl","option_value":"http://localhost:8080","autoload":"yes"}
{"option_id":2,"option_name":"home","option_value":"http://localhost:8080","autoload":"yes"}

Install On A WordPress Site With JSON File Storage

Section titled “Install On A WordPress Site With JSON File Storage”

Run this from a WordPress root to install the plugin, install the DuckDB PHP client, configure the drop-in, and store WordPress tables as JSON files. A WordPress root is a directory that already contains WordPress core files such as wp-load.php and wp-content/; this command does not download WordPress core:

Terminal window
curl -fsSL https://github.com/adamziel/wordpress-databases-support/releases/latest/download/install-database-support.php | php -- \
--engine=duckdb \
--install-duckdb-client \
--duckdb-backend=json \
--yes \
--force

The same command works before the WordPress installer runs and on an already installed site. --force only allows setup to update an existing wp-config.php or wp-content/db.php; it does not migrate existing MySQL content into JSON. Test on a copy before touching a real site. DuckDB JSON also needs PHP FFI, Composer/network access for satur.io/duckdb, and the current JSON storage path is best treated as an experiment rather than a busy production database.

For every supported backend setup command, use Set Up Each Backend.

Download the latest release package when you want to install the plugin through the WordPress plugin uploader or place it in wp-content/plugins yourself:

https://github.com/adamziel/wordpress-databases-support/releases/latest/download/wordpress-databases-support.zip

The one-command installer downloads that same latest release package by default. See Releases for release pinning and local package verification.

If you want the mental model before changing a site, read How It Works. It explains the installer, the db.php drop-in, backend drivers, DuckDB connection modes, and DuckDB external storage.

Read this before choosing DuckDB for mutable WordPress storage. You need performance numbers and production tradeoffs, not just the install command: Performance and Production Readiness.

Backend What it is best for Status
SQLite Small sites, local development, and simple deployments. Routed through the upstream WordPress SQLite Database Integration package.
PostgreSQL PostgreSQL-backed WordPress experiments and compatibility testing. Local driver with WordPress core test coverage.
DuckDB Embedded analytics-style storage, local file formats, S3-compatible object storage, and backend research. Local driver with native files, sidecar transports, and external storage proofs.

The plugin installs wp-content/db.php, then routes WordPress database calls to the configured backend. WordPress core and plugins still use wpdb; the drop-in translates and executes the queries through the selected driver.

  • It does not migrate existing MySQL databases.
  • It does not make every DuckDB storage format a production OLTP database.
  • It does not remove the need to test plugins against the backend you choose.

For production-like DuckDB deployments, read Production Readiness and Performance before deciding on a runtime shape.