Configuration

May 8, 2026 · View on GitHub

SQL-Ledger Documentation ▶ Configuration

Configuration

For more possibilities, take a look at Customization.

Storage Location

The configuration is stored either in the filesystem or in the database.

ConfigurationFileDatabase Table
Globalconfig/sql-ledger.yml
Companydefaults
Userusers/members.yml

The YAML files can be edited directly on the server. They have binary counterparts with the .bin extension, which are optimized for fast reading by SQL-Ledger.

Important: After any change to a YAML file, the util/update-config.pl script must be run to update the binary files.

Global Configuration

To set the global configuration, create a file named config/sql-ledger.yml. A detailed example is provided in config/sql-ledger-sample.yml. The configuration is exposed to the program via the global variable %slconfig. If the file itself or any of the following keys is missing, their values are set to:

  %slconfig = (
    userspath     => 'users',
    templates     => 'templates',
    spool         => 'spool',
    images        => 'images',
    notes         => 'notes',
    memberfile    => 'users/members',
    sendmail      => '| /usr/sbin/sendmail -f <%from%> -t',
    accessfolders => ['templates', 'notes'],
  );

If stylesheet is not set, horizon-flex.css will be used for the login and administrator screens..

Database Configuration

The database configuration is performed via the System → Defaults menu, which is available to administrators. Directly editing values in the database is strongly discouraged.

User Configuration

Using the HR menu, administrators can create employee accounts and grant them access to the user interface. Users can then customize their settings in Preferences.

The user configuration is stored in the file users/members.yml and a corresponding binary version. Experienced administrators frequently edit the YAML file to apply bulk changes.

Passwords

The user passwords are managed by the users themselves or by the administrators of the respective datasets through the HR menu. If administrators forget their own password or if the password of the root login at admin.pl gets lost, the script util/admin-login.pl is available to create a new one.

Localized Postal Addresses

Prerequisites

To enable localization and extended address validation, navigate to System → Defaults and check the «Localized Addresses» option. Make sure the company country is specified using a valid two-letter ISO code; otherwise, attempting to save will produce an error.

Once activated, each address entry must either omit the country field or provide a valid country code. If you prefer not to use this feature, simply leave “Loaclized Addresses” unchecked.

Customer and Vendor Screens

As noted, the 'Country' field for customers and vendors must contain a valid country code. If left blank, the address defaults to your company’s country.

Next to each address is a preview that shows how the entered values are interpreted and formatted according to the recipient's country rules. Beneath the preview, a button lets you copy the formatted address to the clipboard.

The same logic applies to shipping addresses. Each address on the screen is formatted individually. For instance, a German customer with a delivery address in France will see two distinct formats: the German format places the street name before the building number, while the French format reverses the order. As on the main screen, copy buttons are available for every address.

Templates

In the print templates, four new variables are available. The are described in Variables for Localized Addresses.

Missing Localizations

Currently, localization is limited to Europe and North America. The default address format follows the pattern: street name, building number, postal code, and city, with no text transformation applied. As a result, users outside these regions may see addresses that look incorrect. In such a case, please open an issue on GitHub.