Installation guide

Get up and running in under a minute.

Drop a folder into your web server. Open it in a browser. Run the 3-step installer. You're managing databases. Pick the method that fits your stack — git, zip, or Docker.

~60 seconds No build step No Composer MIT licensed
~/htdocs — bash
$ cd /path/to/htdocs
$ git clone https://github.com/ClearanceClarence/Ledger.git ledger
Cloning into 'ledger'...
Receiving objects: 100% (482/482), done.
$ open http://localhost/ledger/
✓ Installer ready
Pick your method

Three ways to install.
Same destination.

Clone

Clone into your web root.

Open a terminal, navigate to your web server's document root, and clone the repository. The destination folder name becomes your URL path — choose whatever fits your setup.

cd /path/to/htdocs
git clone https://github.com/ClearanceClarence/Ledger.git ledger
Common web roots: XAMPP uses C:\xampp\htdocs\. MAMP uses /Applications/MAMP/htdocs/. Most Linux setups use /var/www/html/.
Open

Visit the URL in your browser.

Open http://localhost/ledger/ in your browser (or whatever path matches the folder name you chose). The installer page loads automatically when no config.php exists yet.

open http://localhost/ledger/
Configure

Run the 3-step installer.

The visual installer walks you through database connection, admin account, and confirmation. Each step validates before proceeding — connection tested live, password strength checked, common passwords rejected.

3.1
Database connection

Host, port, username, password. Tested before proceeding — failures show the exact PDO error with suggestions.

3.2
Admin account

Username and password (min 6 chars, common passwords rejected). Bcrypt-hashed immediately.

3.3
Done

config.php is generated. You're redirected to the login page.

Download

Get the release zip.

Download the latest release from GitHub. Source code zip is fine — no separate build artifact needed.

Download v1.0.0-beta
Extract

Extract into your web root.

Unzip to a folder inside your web server's document root. Rename the folder if you want a shorter URL path — Ledger-1.0.0-beta/ becomes ledger/ for cleaner URLs.

On Windows: right-click the zip and use "Extract All", not the preview view. The preview lets you copy files individually, which is slower and sometimes corrupts paths.
Configure

Open the URL and run the installer.

Same 3-step wizard as the Git method — database connection, admin account, done. Open http://localhost/ledger/ and follow the prompts.

open http://localhost/ledger/
Clone

Clone the repository.

The repository ships with a Dockerfile and docker-compose.yml at the root. No separate Docker image to pull.

git clone https://github.com/ClearanceClarence/Ledger.git
cd Ledger
Start

Bring up the stack.

Two containers come up: Ledger on PHP 8.2 + Apache, and MySQL 8.0. Three named volumes persist data across restarts.

docker-compose up -d
Ports: Ledger on 8080. MySQL exposed on 3307 for external clients.
Configure

Open and configure.

Visit http://localhost:8080/. In the installer, use db as the host (the container name on the internal Docker network) and the default root password ledger_root_pass.

open http://localhost:8080/
Production note: change ledger_root_pass in docker-compose.yml before deploying anywhere reachable.
Requirements

What you'll need.

Ledger runs on the same stack you already have. No special anything.

PHP
Minimum 7.4
Recommended 8.2+
MySQL
Minimum 5.7
Recommended 8.0+
MariaDB
Minimum 10.3
Recommended 10.11+
Web server
Minimum Apache 2.4
Recommended + mod_rewrite
PHP extensions
Required PDO, PDO_MySQL
Plus session
Verified on XAMPP WAMP MAMP Laragon DDEV Herd Docker Apache + PHP-FPM
Troubleshooting

Things that occasionally go wrong.

The most common install issues. If yours isn't here, file a bug report — real questions help everyone.

The installer loads but the connection test fails

Usually one of three things. Check in order:

  1. MySQL/MariaDB isn't running. Check your service status. On XAMPP, the control panel needs both Apache and MySQL started.
  2. Wrong host. 127.0.0.1 works almost always. localhost sometimes fails on Linux because PHP tries the socket path instead of TCP.
  3. Wrong port. Default is 3306. MAMP uses 8889 sometimes. Check your installation docs.
"Could not write config.php" during step 3

The web server user (typically www-data on Linux or SYSTEM on Windows) can't write to the install directory. Two options:

  • Make the install directory writable: chmod 755 ledger/ on Linux, or check folder permissions on Windows.
  • Manually create config.php by copying config.template.php and filling in your values. The installer skips this step if the file already exists.
500 error on every page after install

Usually a missing PHP extension or an unreadable config.php. Check the PHP error log first — it's the fastest path to the actual cause.

  • Apache: usually logs/error.log inside your Apache directory.
  • PHP-FPM: usually /var/log/php-fpm/error.log or wherever error_log points in php.ini.
  • XAMPP: xampp/apache/logs/error.log and xampp/php/logs/.

The most common missing extension is pdo_mysql. Run php -m | grep pdo from the command line to verify.

Login works but every page is blank or broken

Usually a session or .htaccess issue. Try:

  • Check the browser console for 404s on js/ledger.js or CSS files. If they 404, your web server doesn't have the right rewrite rules or alias.
  • If your install lives at a subpath like /admin/ledger/, make sure mod_rewrite is enabled and .htaccess is being read (AllowOverride All in Apache).
I'm running on shared hosting and ____ doesn't work

Shared hosting varies wildly. Some common ones:

  • cPanel hosts usually work out of the box. Upload via File Manager, set permissions, open the URL.
  • open_basedir restrictions can block logs/ writes. Set 'log_dir' => '/tmp/ledger/' in config.php if you can't relax the restriction.
  • PHP version pinning — many hosts still default to 7.4. The dropdown to switch is usually in cPanel under "MultiPHP Manager".
  • If nothing works, open an issue with the hosting provider name and PHP version. Real-world testing on hosts the author doesn't have is exactly the kind of contribution welcomed.

Need help with something specific?

Open an issue on GitHub. Include your PHP version, MySQL/MariaDB version, OS, and the exact error. Real bug reports get real responses.

Open an issue Discussions