Your books, workflow by workflow

The workspace keeps Home and the Daily work, Sales, Purchases, Inventory, Banking, Reports and Setup groups in one sidebar. Search and jump to any screen with Ctrl K, while the active company and book stay visible. This page walks through each group with real screens from a fictional sample business.

Illustrative screenshots show Willow Corner Shop in version 1.0.0. Current capabilities are described in the text; the release media kit identifies its verified screenshots.

Home

See what needs attention before opening a register. Quick actions create the day's common documents, while cash, receivables, payables and recent activity stay together on one screen.

Begin with the work that needs attention

Home shows drafts waiting for review, the cash and bank position, overdue receivables and payables, and the most recent posted activity. Quick actions start an expense, a receipt, an invoice, a bill or a journal from the same place, so the morning starts with a decision rather than a search through menus.

HomeSample business

Daily work

Record everyday money movements directly, or use a general journal when an entry needs several accounts. Every path ends in the same balanced posting service.

Receipts and expenses start as drafts

Record money in or money out against one category. Drafts stay outside the books until you post them, and the register keeps Draft, Posted and Reversed transactions apart, so a half-finished entry never distorts a report while it waits for the receipt to turn up.

Receipts and expensesSample business

Preview the journal before an expense posts

Enter the date, amount, counterparty, cash or bank account and category. The posting preview shows the exact journal lines before the transaction changes the books, which is how a bookkeeper checks that an electricity bill lands in the right expense account rather than discovering it at month end.

Expense editorSample business

General journals remain balanced and traceable

Filter drafts, posted journals and reversals in one register. Each row shows equal debits and credits, and the detail panel preserves the reference, the date, the lines and the history of the entry, so an auditor can read a journal without opening the database.

General journalsSample business

Corrections use linked reversals

Build a journal with up to 100 lines and inspect the balance before posting. Posted entries are never edited: a correction records its reason and links the reversal to the original entry, so the trail from the wrong figure to the right one stays readable in every account statement.

General journal editorSample business

Sales

Create invoices and customer credits, then follow what has been paid and what remains open, all from one register.

Enter an invoice one line at a time

Choose the customer, the dates, the currency and whether entered prices include or exclude tax. Add a product, an account, a quantity, a unit price and a tax code on each line; totals are recomputed when you preview or save, so the figure on screen is always the figure that will post.

Invoice editorSample business

Keep invoice status and open amount together

The register separates Draft, Unpaid, Overdue, Paid and Reversed documents. Open an invoice to see its due date, reference, entered-price mode and remaining balance, then record a receipt without leaving the list. Customer credits appear in the same place, so an allocation is one click rather than a hunt.

Invoices registerSample business

Purchases

Follow a supplier commitment from order and receipt to bill and payment, with the received-but-unbilled position always visible.

Bills show what is due and what remains

Filter bills by status and date, review the ageing, and open the selected supplier document beside the register. Supplier payments can be allocated across several open items in one go, and the remaining amount on each bill stays visible until it reaches zero.

Bills registerSample business

Purchase orders track receipts and supplier billing

Record ordered quantities, receive goods and record returns against the order. The workflow keeps received quantities visible and supports the reconciliation of goods received but not yet billed, which is where stock and accounts payable usually drift apart in a spreadsheet.

Purchase ordersSample business

One party can be a customer, a supplier or both

Keep the legal name, country, contacts and activity in one shared record. Receivable and payable balances remain separate even when the same party has both roles, so the wholesaler who also buys from you never has the two sides netted off by accident.

Customers and suppliersSample business

Inventory

Keep saleable stock and non-stock products in one register without turning stock into a separate set of books.

Keep quantity and carrying value together

Stock counts preview their accounting effect before posting. Weighted-average cost flows into cost of sales on the profit and loss, and non-stock products remain available for document lines without a quantity balance, so a service line and a stock line can share one invoice.

Products and stockSample business

Banking

Reconcile imported statement lines against the transactions already in the books, and keep each completed statement with its account.

Preview, match and retain the statement

Preview a CSV statement import before anything posts. Matching suggestions require explicit confirmation, unexplained lines stay visible until someone deals with them, and the completed statement history remains with the bank account so next month starts from a reconciled opening balance.

Bank reconciliationSample business

Reports

Move from a financial total to the journals and source documents behind it. Choose a calendar preset or a custom period, then export the result to CSV.

Open every financial report from one place

Choose a report and a calendar preset or a custom period. Reports use posted journals only and export their result to CSV, and the reports screen itself summarises cash and bank, income year to date, costs and expenses and net profit before you open anything.

ReportsSample business

Read assets, liabilities and equity at a date

The balance sheet groups account balances and keeps the accounting equation visible at the date you choose. Every account name opens the underlying statement, so the total for cash and bank can be followed to the bank accounts and from there to the journals that moved them.

Balance sheetSample business

Check every account in the trial balance

Compare debit and credit balances for the selected period, account by account, and drill down from any account to the entries behind the figure. The trial balance proves the arithmetic; the drill-down is how you check that the arithmetic describes what happened.

Trial balanceSample business

Review receivables and payables by age

Ageing separates current and overdue open items into time bands, for customers and for suppliers. Move from a band total to the customer, supplier or source document that makes it up, which is the list a small business actually needs on a Friday afternoon.

Receivables and payables ageingSample business

Follow an account from opening to closing balance

The account statement lists each posted movement in date order with its journal reference, so the opening balance, the debits, the credits and the closing balance reconcile on one page and each line can be opened to the document that caused it.

Account statementSample business

Test a cash scenario from assumptions you enter

Enter expected weekly receipts and payments to inspect a possible cash path over the coming weeks. The cash scenario uses your assumptions, not a prediction, and it does not change the books; it exists so that an owner can see whether next month's rent is covered before it is due.

Cash scenarioSample business

Setup

Set the accounting structure before daily work begins, then control dates, modules and reporting access as the company changes.

Start with a chart of accounts for the business

Use a country package or build the account structure you need. Accounts carry their type and reporting position into journals and financial reports, so a new account appears in the right place on the balance sheet the moment it is created.

Chart of accountsSample business

Keep tax codes and rate history explicit

Define tax codes and dated rates, then choose whether document prices include or exclude tax. Historical documents keep the rate that applied when they were posted, and no national tax rules are inferred: regional certification and e-invoicing are later releases, stated as such.

Tax codesSample business

Bring opening balances through a reviewed cutover

Enter opening account balances and convert unpaid customer and supplier documents separately, then preview the result before the cutover posts. A business that starts from zero simply records that no cutover is needed, and the screen says so.

Opening balances and cutoverSample business

Close accounting periods to stop late posting

Set the dates available for posting and close a period when its work is complete. Later drafts cannot post into a closed date range, and a closed period can be reopened deliberately by someone with the right to do so, with the change recorded.

Accounting periodsSample business

Switch optional workflows on or off

Inventory, Purchasing and the illustrative cash point of sale are modules. A company can show only the work its people need, hide receivables and payables navigation it does not use, and record a reason for each change so the setup history explains itself later.

ModulesSample business

Connect reporting without allowing writes

Report-only OAuth connections and personal tokens expose approved reporting access to an accountant's tool or a dashboard, with tokens that expire after 30 days. API writes are not part of PHP Ledger 1.0, which keeps every posting inside the reviewed paths above.

ConnectionsSample business

Install and updates

Install from the browser, then keep each release and its matched recovery path together. No terminal, Composer, Node or Docker is needed for setup.

  1. Upload the folder and open it

    Unzip the package, upload the phpledger folder anywhere inside your website and open its address. The installer starts by itself and checks PHP 8.2+, MySQL 8.0.19+ (8.4 recommended) or MariaDB 10.4+ and the required extensions and settings. Then connect the database, choose a username for the first account and set up the first company from the browser.

  2. Update from /maintenance.php

    Apply a signed release from the maintenance page. An automatic matched backup of the files and the database is taken before anything changes, and the signature is verified before the package is unpacked.

  3. Recover if the host interrupts the update

    Automatic recovery restores the matched state if a migration fails or the host cuts the request short. A CLI recovery companion is available for hosts that need it.

What is in 1.0 and what is not yet

The first stable release covers the core accounting workflows below. The limits are published rather than implied, and none of them were added; maintenance has stopped for lack of funds.

In 1.0

  • Home, receipts and expenses, and balanced general journals with linked reversals
  • Invoices, customer credits, bills, supplier payments, purchase orders and goods receipts
  • Customers, suppliers, products, stock counts and weighted-average cost of sales
  • Bank statement import, explicit matching and reconciliation history
  • Profit and loss, balance sheet, trial balance, ageing, account statements, cash scenario and CSV exports
  • Accounting periods, opening balances, tax codes, country account packages and ten base currencies
  • Switchable Inventory, Purchasing and cash point-of-sale modules
  • Multiple stock locations (warehouses, vans and transfers at carrying value), shipped in 1.1.1 as an optional module; documented in 1.2
  • Report-only OAuth, multi-company workspace, search and jump with Ctrl K

Not yet

  • Regional tax certification and e-invoicing
  • A production shop point of sale; the bundled cash counter is illustrative
  • Serial numbers and batches
  • Payroll and multi-currency posting
  • Translations; Urdu and Arabic are planned releases
  • Offline use, card payments and API writes

Help fund a year of open-source work

Questions about the product

Four questions that come up in the first demo, answered the way the software behaves.

Can I switch off the parts my business does not use?

Yes. Inventory, Purchasing and the cash point of sale are modules that a company switches on or off under Setup, and accounts receivable and payable navigation can be hidden. Switching a module off does not delete its history.

Do reports change when I enter a draft?

No. A draft never touches the books. Reports use posted journals only, so a receipt or expense affects the profit and loss only after someone reviews and posts it.

How are mistakes corrected?

Posted entries are never edited. A correction records its reason and posts a linked reversal, so the original entry, the reversal and the replacement stay connected in the history and in the account statements.

Which currencies does version 1.0 support?

Ten base currencies: USD, EUR, GBP, PKR, INR, MYR, BDT, LKR, NPR and SGD, one per company. Multi-currency posting inside one company is not part of 1.0.

Payroll, schedules and a reviewed close

These workflows use the same reviewed drafts, exact amounts, source references and immutable posting controls as the rest of the books.

Payroll accounting

Record aggregate payroll accruals, staff advances, deductions and partial settlements. Keep per-person information in the confidential employee register. This is accounting for reviewed totals, not a pay-run engine, payslips or statutory payroll calculation.

Recurring work and loans

Prepare recurring, accrual and loan journal drafts. Review dates, principal, interest and disclosed rate/day conventions before posting. A schedule does not certify agreement with a lender contract.

Period and year end

Use the close checklist, cash counts, dated reversals and fiscal-year preview. Select a legal treatment and destination accounts explicitly; partnership allocations require reviewed ratios. Reopen through traceable controls.

People, packages and your hosting

The confidential employee register connects to existing sales-staff and driver identities through explicit mappings, preserving historical names. Employment does not imply a related-party designation. Basic trade matching uses only collected fields; bank matching is not provided.

Install optional data-only CC0 sample packages from the reviewed directory or upload a validated archive. Choose a zero-balance structure or a separate fictional practice company. The core keeps its neutral starter. Plugins retain a separate reviewed lifecycle and encrypted private secret storage.

Install in a browser on PHP 8.2+ with MySQL 8.0.19+ (8.4 recommended) or MariaDB 10.4+. Configure a validated table prefix and database TLS where needed. The official container channels are GHCR and Docker Hub. Arabic has RTL support as a draft translation awaiting native review.

Try the shared installer demo, follow the installation guide, or help test and improve a workflow.

Product screen

Screens show a fictional sample business

Scroll the image to explore it. With a keyboard, focus the image area and use the arrow keys.