How to install DMPress
DMPress installs the same way WordPress does — download, create a database, upload, run the installer. This walks through it in full, and flags the handful of places where DMPress differs.
What you need.
Recommended
PHP8.3 or greaterMySQL8.0+ orMariaDB10.6+- The Apache
mod_rewritemodule - HTTPS
Access to your server
FTP/SFTP or a shell, so you can upload files and, ideally, unpack them server-side.
A database and a database user
An empty MySQL or MariaDB database, plus a user with full privileges on it.
A text editor
Only if you configure by hand. The installer writes wp-config.php for you in most cases.
About five minutes
Genuinely — most of the time is spent creating the database.
If you have done this before.
The whole install in five steps. Each one is expanded in the detailed instructions below.
- Download and unpack the
dmpress-<version>.zipasset, and verify its signature. - Create a database and a MySQL user with full privileges on it.
- Upload the files to your web root, or to a subdirectory if you want DMPress in one.
- Optionally copy
wp-config-sample.phptowp-config.phpand fill in your database details. The installer does this for you if it can write to the directory. - Run the installer — open your site in a browser, or go straight to
wp-admin/install.php.
Step by step.
Download and unpack DMPress
Get the latest release from the releases page and download the dmpress-<version>.zip asset.
Don't use "Source code (zip)"
GitHub auto-attaches a "Source code (zip)" archive to every release. That is the raw repository — it includes build tooling and is unsigned. Always take the dmpress-<version>.zip asset, and verify its signature before installing.
If you have shell access, downloading and unpacking on the server is quicker than uploading thousands of files over FTP:
# replace VERSION with the release you are installing
curl -LO https://github.com/gerharddt/dmpress/releases/latest/download/dmpress-VERSION.zip
unzip dmpress-VERSION.zip
The archive unpacks into a dmpress/ directory.
Create the database and a user
DMPress stores everything in a MySQL or MariaDB database. You need an empty database and a user with full privileges on it.
Check with your host first. Many hosts create a database for you, or give you a control panel to do it. If yours does, use that and skip ahead — you only need the database name, username, password and hostname.
Using phpMyAdmin or cPanel
- Create a new database. Any name will do; note it down.
- Create a database user with a strong password.
- Grant that user all privileges on the new database.
- Note the database hostname. It is usually
localhost, but some hosts use a separate database server.
Using the MySQL command line
CREATE DATABASE dmpress DEFAULT CHARACTER SET utf8mb4;
CREATE USER 'dmpressuser'@'localhost' IDENTIFIED BY 'a-strong-password';
GRANT ALL PRIVILEGES ON dmpress.* TO 'dmpressuser'@'localhost';
FLUSH PRIVILEGES;
Use utf8mb4 — it is what DMPress sets as DB_CHARSET.
Upload the files
Where you put the files decides your site's URL.
- At the root of your domain (
https://example.com/) — upload the contents of thedmpressdirectory, not the directory itself. - In a subdirectory (
https://example.com/cms/) — renamedmpressto the subdirectory name and upload the whole directory.
DMPress renders no front end
Because DMPress is headless, the directory you install into serves your active theme's index.html rather than pages rendered by the CMS. The admin lives at /wp-admin/ and the REST API at /wp-json/ under the same path.
Set up wp-config.php (usually optional)
The installer creates this file for you if it can write to the install directory. Do this by hand only if it cannot — you will know, because it will show you the file contents and ask you to create it yourself.
Copy wp-config-sample.php to wp-config.php and fill in the database settings:
define( 'DB_NAME', 'dmpress' ); define( 'DB_USER', 'dmpressuser' ); define( 'DB_PASSWORD', 'a-strong-password' ); define( 'DB_HOST', 'localhost' ); define( 'DB_CHARSET', 'utf8mb4' ); define( 'DB_COLLATE', '' );
Then replace each of the eight authentication keys and salts with long, random, unique strings. You can generate a full set at api.wordpress.org/secret-key/1.1/salt/ — the same service the sample config points to. Changing them later logs everyone out, which is a useful thing to know.
The table prefix is dmp_, not wp_
DMPress ships $table_prefix = 'dmp_'; and the installer's Table Prefix field defaults to the same. Only change it if you are running more than one install in a single database — and never change it after installing, or the site will think it has not been installed.
Keep wp-config.php out of version control. It holds your database credentials and security keys.
Run the installer
Open your site in a browser. With no wp-config.php present, DMPress hands off to the setup screen automatically, so the site root is enough — you do not have to know the URL of the install script. If you prefer, go straight to it:
- Root install —
https://example.com/wp-admin/install.php - Subdirectory install —
https://example.com/cms/wp-admin/install.php
Fill in your site title, the username and password you want, and your email address. Then sign in at wp-login.php with those credentials.
If you did not choose a password
Note down the one you are given — it is shown once. If you did not choose a username, it is admin.
Two things worth knowing.
Permalinks are set for you
A fresh install checks whether your web server routes unknown paths to index.php, then sets /%postname%/. If the check fails it falls back to the /index.php/… structure, and then to Plain — so it installs cleanly either way. Since DMPress renders nothing, this structure is the URL contract your front end routes on.
Content types seed on first admin load
The default content types and taxonomies are created the first time you open the admin, not during the install itself. They are ordinary Content-Type Builder entries — rename, disable or delete them as you like.
Nginx needs one directive
Apache is configured automatically via .htaccess. On Nginx, add this so unknown paths reach index.php:
location / {
try_files $uri $uri/ /index.php?$args;
}
Without it only / resolves and /wp-json/ will 404 — REST still works at ?rest_route=, and the install will have fallen back to a structure that works.
Common installation problems.
The browser shows a directory listing instead of the site
Your web server is not treating index.php as a directory index. Add index.php to the DirectoryIndex directive on Apache, or index on Nginx. If you only see the listing at the root, check you uploaded the contents of the dmpress directory rather than the directory itself.
The page shows PHP code instead of running it
PHP is not enabled, or is not handling .php files on this host. Nothing about DMPress can fix that — it is a server configuration issue, so ask your host.
"Error establishing a database connection"
The credentials in wp-config.php do not match a database the server can reach. Check DB_NAME, DB_USER, DB_PASSWORD and especially DB_HOST — a few hosts use something other than localhost. Confirm the user actually has privileges on that database.
"Headers already sent" errors
Almost always a syntax slip in wp-config.php. Open it and check there is nothing before the opening <?php — no blank lines, no spaces, no byte-order mark — and nothing after the closing tag.
The installer says it cannot create wp-config.php
The install directory is not writable by the web server. Either loosen the permissions temporarily, or take the file contents the installer displays, save them as wp-config.php yourself, upload it, and reload the page. See Step 4.
Only the home page works — everything else 404s
Your web server is not routing unknown paths to index.php. On Apache, check mod_rewrite is enabled and that .htaccess files are permitted (AllowOverride). On Nginx, add the try_files directive shown above. This is also why /wp-json/ would 404 while ?rest_route= still works.
The site shows a placeholder instead of my theme
That is the built-in headless placeholder, shown when no theme front end is being served. Check that a theme is active and that it ships an index.html — in DMPress a theme is a theme.json manifest plus that file, rather than PHP templates.
Credit where it is due. This guide follows the structure of the WordPress Advanced Administration handbook's How to install WordPress, and is adapted from it. The steps have been rewritten for DMPress — the dmp_ table prefix, the signed release packages, the headless front end and the permalink behaviour all differ from stock WordPress.
"WordPress" is a registered trademark of the WordPress Foundation. DMPress is an independent fork and is not affiliated with, sponsored by, or endorsed by the WordPress Foundation, Automattic, or the WordPress project.