Skip to content

Fast, reliable bookkeeping engine with native GIT SCM support for plain text accounting

License

Notifications You must be signed in to change notification settings

e257-fi/tackler-ng

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

ci status Github Release crates.io: tackler Tackler Docs GitHub Discussions matrix: tackler

Tackler-NG

Tackler is fast, reliable bookkeeping engine with native GIT SCM support for plain text accounting, written in Rust.

~/tackler-ng $ cat examples/simple/txns/journal.txn

2024-12-01 'Sweet'n Sour Candies
   Expenses:Sweets:Candy  2.50
   Assets:Cash

2024-12-22 'Hot dogs
   Expenses:Food:FastFood  12
   Assets:Visa:4012_8888_8888_1881

2024-12-22 'Strawberry ice cream
   Expenses:Sweets:Ice·Cream  3
   Assets:Cash


~/tackler-ng $ tackler --config examples/simple.toml

Balance Report
--------------
                 0.00    17.50  Expenses
                 0.00    12.00  Expenses:Food
                12.00    12.00  Expenses:Food:FastFood
                 0.00     5.50  Expenses:Sweets
                 2.50     2.50  Expenses:Sweets:Candy
                 3.00     3.00  Expenses:Sweets:Ice·Cream
=====================
                17.50

Project Status

Tackler-NG is in feature parity with the old scala based Tackler CLI, and Tackler-NG will be the basis of all future Tackler development.

Note

Tackler-NG is tested with 306 of tackler’s test vectors at the moment

All Tackler CLI functionality is supported, including Tackler Journal Format, transaction storages (Filesystem, Git SCM), all reports (Balance, Balance Group, Register) and all exports (Equity, Identity).

Other notable features are:

See tackler --help, Documentation and Tackler Configuration how to use tackler-ng.

How to build Tackler CLI application

To build rusty Tackler, you will need git and Rust installed on your environment.

If you don’t have Rust, install it e.g. by running:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

If you don’t need source code and test cases, you can just run:

cargo install tackler

To play around and for building main, get the source code and test cases:

git clone --recurse-submodules https://github.com/e257-fi/tackler-ng

And build the Tackler binary:

cd tackler-ng

# The main branch should build and pass all tests.
# To build a release, check relased versions:
git tag -l

# Get the release, e.g. v24.12.2
git checkout v24.12.2

# Build tackler
cargo build --release --locked --bin tackler

# the binary is located at 'target/release/tackler'

Simple example with Filesystem Journal

target/release/tackler --config examples/simple.toml

Complex example with Git Storage and Audit mode

Audit example uses Git SCM as journal storage, and strict and audit modes are activated by configuration.

target/release/tackler --config examples/audit.toml

Audit test data has a branch with 100_000 transactions, this query will execute in few seconds:

target/release/tackler \
   --config examples/audit.toml \
   --input.git.ref txns-1E5 \
   --accounts 'a:ay2016:am12'
Git Storage
         commit : cb56fdcdd2b56d41fc08cc5af4a3b410896f03b5
      reference : txns-1E5
      directory : txns
         suffix : .txn
        message : txns-1E5: 2016/12

Txn Set Checksum
        SHA-256 : 27060dc1ebde35bebd8f7af2fd9815bc9949558d3e3c85919813cd80748c99a7
       Set size : 100000

**********************************************************************************
Account Selector Checksum
        SHA-256 : abbcd1800caab82df857441d734b728ca18850f08f9a1c96602ee740b970cae0


Balance Report
--------------
              -133433.00   -133433.00  a:ay2016:am12
========================
              -133433.00
##################################################################################

See tackler --help, Tackler configuration file, example commands and Tackler CLI documentation how to use the rusty version of tackler.

Developer’s Guides have technical information about Tackler-NG. For the general information about Tackler, see the Tackler site.

Credits

Special thanks to the Rust community for the all help and advice, without forgetting Clippy. Gitoxide is one of the key components which made Tackler-NG possible - Thank you!

See CREDITS for full details.

Contributing

All contributions are valued and none is too small or insignificant.

See CONTRIBUTING for details how you could participate with Tackler-NG development.

Security

If you find a security issue in Tackler-NG, please report it as outlined in the Security Policy.

License

Tackler-NG is licensed under the Apache License, version 2.0.