A concise ledger based accounting system for small charities.
BJ McGill 24-02-2026 Note:
There are some bugs in this program. Nonetheless I have been using it succesfully to keep the accounts of the charity I work for. Sometimes some extraneous transactions or splits are saved when you click on save transaction. These will appear in the ledger window, and can easily be deleted.
I hope to write a web based version of this app using Typescript and mySQL in the second half of 2026. This will be a lot cleaner and should be free of bugs. Keep looking in my parent folder for this to appear
You will need the following software installed on your computer :
python
git
sqlite tools
DB Browser (or an alternative such as DBeaver)
Once you have installed git you can clone the repository by entering :
git clone https://github.com/bjmcgill/Tallis-Ledger
This will create a directory called Tallis-Ledger in your current directory. Now type :
cd Tallis-Ledger
python -m venv venv
This will create a virtual environment into which you can install the necessary libraries. Now on Windows PCs type:
venv\Scripts\activate
or on a macOS or Linux computer type :
source venv/bin/activate
Now to install the necessary libraries on a Windows, macOS or Linux computer type :
pip install -r requirements.txt
When I was testing my program on Windows, I got the error message library numpy=2.3.1 not available. I fixed this by entering :
pip install pandas
pip install tksheet
This seemed to work fine. You can see what library versions were installed by typing :
pip freeze
You just need to create the tables now by typing :
sqlite3 your_ledger.db < createtables.sql
You can insert sample data now by typing :
sqlite3 your_ledger.db < insertdata.sql
For some reason Windows sqlite doesn't like literal strings in double quotes. It seemed to work fine when I changed double quotes to single quotes.
If you wish to enter data into your own Account and Fund tables use DB Browser. DB Browser is also useful for creating your own reports by entering SQL Select Queries.
To start the application type :
python main.py
This program gives users the power and flexibility of double entry bookkeeping without the hassle of complicated accounting software like Sage and Gnucash. On opening the application (and selecting a valid database), you are met with a simple ledger window which you can filter on fund or account. There are three modes: Initial - Where you can add or select a transaction; Add - Where you can add a transaction; and Edit - Where you can select and edit a previous transaction.
Each transaction consists of two or more splits. The sum of all split amounts in a transaction will sum to zero. That is the double entry feature.
The Add and Edit modes give you the capability to cancel, save a transaction, add a split, delete a split, balance a split or delete a transaction.
Suppose you received a £100 from the council as a restricted grant. You would create a restricted income fund called "Council Fund", a "Council Income" account, and you would put the money in the Bank.
You would create the following rows in the Fund and Account tables using DB Browser
Fund
| Id | Name | Type |
|---|---|---|
| 100 | Council Fund | Restricted Fund |
Accounts
| Id | Name | Type |
|---|---|---|
| 100 | Bank | Current Asset |
| 200 | Council Income | Restricted Income |
Then you would enter the following double entry in the main ledger window
Ledger
| UserDate | Description | FundChoice | AccountChoice | Amount |
|---|---|---|---|---|
| 2025-07-22 | Grant from Council | Council Fund | Bank | 100 |
| 2025-07-22 | Grant from Council | No Fund | Council Income | -100 |
Note that the second split (row) in the ledger is negative. Money is coming from the income account and going into the bank account. The income is always negative because it is a credit, and the current asset is always positive because it is a debit. This is not what you might expect from looking at a bank statement, but bookkeepers always do it this way.
Once the Accounts and Fund have been entered into the tables using DB Browser, you will be able to select them in the ledger by means of a drop down box.
If you are still confused, I will write more extensive documentation for the application in this repository's wiki.
Tallis Ledger includes a sql file called views.sql which you can use to create reports on entered data.
To add the views into the database yourledger.db enter the following command:
sqlite3 yourledger.db < views.sql
The createtables.sql file must have been entered into the database first.
After you have typed in the preceeding command, you can launch DB Browser and you can select the views.
LedgerViewWithFundBalance2 shows all the transactions which have been entered partitioned by Fund, and containing a balance column.
If you only want to see the transactions for a particular fund you can enter the following sql and execute it within DB Browser:
SELECT * FROM LedgerViewWithFundBalance2 WHERE FundId=200
LedgerViewWithAccountBalance2 has the same functions as LedgerViewWithFundBalance2 but partitioned by Account.
If you want to list all the funds in your database and examine their balances you can use the view FundSummaryView.
AccountSummaryView has the same functionality as FundSummaryView but with respect to accounts.
Finally you can use the AccountTypeSummaryView to find the totals of transaction amounts grouped by AccountType.
Thankyou for choosing Tallis Ledger.
BJ McGill 22-07-2025
