Tackler
Fast, reliable bookkeeping engine with native GIT SCM support for plain text accounting
Install / Use
/learn @tackler-ng/TacklerREADME
image:https://github.com/tackler-ng/tackler/actions/workflows/ci.yml/badge.svg["ci status", link="https://github.com/tackler-ng/tackler/actions"] image:https://img.shields.io/github/v/release/tackler-ng/tackler?include_prereleases&color=%230868da["Github Release", link="https://github.com/tackler-ng/tackler/releases"] image:https://tackler.fi/img/badge-crates.svg["crates.io: tackler", link="https://crates.io/crates/tackler"] image:https://tackler.fi/img/tackler-docs.svg["Tackler Docs", link="https://tackler.fi/docs"] image:https://img.shields.io/github/discussions/tackler-ng/tackler["GitHub Discussions", link="https://github.com/tackler-ng/tackler/discussions"] image:https://tackler.fi/img/badge-matrix.svg["matrix: tackler", link="https://matrix.to/#/#tackler:matrix.org"]
= Tackler
link:https://tackler.fi/[Tackler] is fast (1), reliable bookkeeping engine with native GIT SCM support for plain text accounting, written in Rust.
cargo install --locked tackler # (2) tackler new demo tackler --config demo/conf/tackler.toml
This will produce balance and register reports for the demo journal.
Balance Report
0.00 17.50 Expenses
0.00 12.00 Expenses:Food
12.00 12.00 Expenses:Food:Fast-Food
0.00 5.50 Expenses:Sweets
2.50 2.50 Expenses:Sweets:Candy
3.00 3.00 Expenses:Sweets:Ice·Cream
===================== 17.50
Register Report
...
-
Tackler has excellent performance, it can process 700_000 transactions per second on modern laptop. See link:https://tackler.fi/docs/tackler/latest/features/performance/[Performance] for details.
-
If you don't have Rust toolchain installed, get it link:https://www.rust-lang.org/tools/install[from here].
== Project Status
Tackler is reimplementation of 10 years old Scala based system, and it's the basis of all current development activities.
Tackler is in link:https://tackler.fi/docs/tackler/latest/features/[feature] parity with and beyond of the old Scala code base. It's using the same set of test reference vectors as the original tackler-mk1.
[NOTE]
Tackler is tested with 501 link:https://github.com/tackler-ng/tackler-t3db[tracked test vectors]
All Tackler CLI functionality is supported, including link:https://tackler.fi/docs/tackler/latest/journal/format/[Tackler Journal Format], transaction storages (link:https://tackler.fi/docs/tackler/latest/journal/fs-storage/[Filesystem], link:https://tackler.fi/docs/tackler/latest/journal/git-storage/[Git SCM]), all reports (link:https://tackler.fi/docs/tackler/latest/reports/report-balance/[Balance], link:https://tackler.fi/docs/tackler/latest/reports/report-balance-group/[Balance Group], link:https://tackler.fi/docs/tackler/latest/reports/report-register/[Register]) and all exports (link:https://tackler.fi/docs/tackler/latest/reports/export-equity/[Equity], link:https://tackler.fi/docs/tackler/latest/reports/export-identity/[Identity]).
Other notable features are:
-
Support for link:https://tackler.fi/docs/tackler/latest/commodities/[Commodities, Currencies and Shares]
-
link:https://tackler.fi/docs/tackler/latest/commodities/price/[Market Value of Commodities and Shares], including different valuation (Mark-to-Market) methods: ** link:https://tackler.fi/docs/tackler/latest/commodities/price/current-market-value/[Current Market Value] ** link:https://tackler.fi/docs/tackler/latest/commodities/price/historic-market-value/[Historic Market Value] ** link:https://tackler.fi/docs/tackler/latest/commodities/price/variable-market-value/[Variable Market Value]
-
link:https://tackler.fi/docs/tackler/latest/usage/txn-filters/[Transaction Filters] for powerful selectors of used accounting data
-
Real transaction https://tackler.fi/docs/tackler/latest/reference/timestamps/[timestamps up to nanosecond] resolution and with timezone information ** Plain dates are supported too ** Also Civil date and time without zone is supported
-
Accounting based on link:https://tackler.fi/docs/tackler/latest/usage/gis/[Geo Location] and link:https://tackler.fi/docs/tackler/latest/usage/gis/txn-geo-filters/[Transaction GIS Filters]
-
Optional link:https://tackler.fi/docs/tackler/latest/reports/formats/[JSON output] format
See tackler --help, link:https://tackler.fi/docs/tackler/latest/[Documentation] and link:examples/tackler.toml[Tackler Configuration] how to use tackler-ng.
== Installation
You can install tackler binary directly by https://www.rust-lang.org/tools/install[cargo], even without cloning the repo:
Latest released version
cargo install --locked tackler
Latest development version
cargo install --locked --git https://github.com/tackler-ng/tackler tackler
Or build it from the local source code.
== Build the Source Code
The main branch should link:https://github.com/tackler-ng/tackler/actions/workflows/ci.yml[build and pass]
all tests all the time.
You have to clone tackler source code with git submodules, as link:https://github.com/tackler-ng/tackler-tests[tests vectors] are located in a separate repository.
git clone --recurse-submodules https://github.com/tackler-ng/tackler
Then build the tackler binary - if you have link:https://github.com/casey/just[just] installed, building tackler is just:
just release-build
Tackler binary will be located at target/release/tackler.
Or with plain cargo command:
cd tackler-ng
The main branch should build and pass all tests
cargo build --release --locked --bin tackler
Again, the binary will be located at target/release/tackler
== Examples
See link:https://github.com/tackler-ng/tackler/tree/main/examples[examples folder in the repository] for full list of examples.
=== 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 set-1e5
--accounts 'a:ay2016:am12'
.Report with Git Storage metadata
Git Storage reference : set-1e5 directory : txns extension : txn commit : 4648a2994b41ed341b544a148b3060fd2d267d79 author : tackler accounting@example.com date : 2016-12-31 17:41:24 +0000 subject : set-1e5: 2016-12-31
Txn Set Checksum SHA-256 : 2f4bc22df78502182aa27037d8d0f72462adb018be3e768399e0b803fa75baa7 set size : 100000
Account Selector Checksum SHA-256 : abbcd1800caab82df857441d734b728ca18850f08f9a1c96602ee740b970cae0 selector : 'a:ay2016:am12'
Balance Report
-133402.00 a:ay2016:am12
======================== -133402.00 ##################################################################################
See tackler --help, link:examples/tackler.toml[Tackler configuration] file, tackler link:https://github.com/tackler-ng/tackler/tree/main/examples[examples] and link:tackler-cli/CRATES.md[Tackler CLI documentation] how to use the rusty version of tackler.
link:docs/devel/readme.adoc[Developer's Guides] have technical information about Tackler. For Tackler user manual, see the https://tackler.fi/docs/tackler/latest/[Tackler Documentation].
== Credits
Special thanks to the Rust community for the all help and advice, without forgetting Clippy. link:https://github.com/GitoxideLabs/gitoxide[Gitoxide] is one of the key components which made Tackler possible - Thank you!
See link:CREDITS.adoc[CREDITS] for full details.
== Contributing
All contributions are valued and none is too small or insignificant.
See link:CONTRIBUTING.adoc[CONTRIBUTING] for details how you could participate with Tackler development.
Following people have helped or contributed to the development of Tackler:
link:https://github.com/byron[Byron], link:https://github.com/zamazan4ik[zamazan4ik], link:https://github.com/epage/[epage], link:https://github.com/BurntSushi[BurntSushi] and link:https://github.com/RagibHasin[RagibHasin]
Thank you!
== Security
If you find a security issue in Tackler, please report it as outlined in the link:./SECURITY.md[Security Policy].
== License
Tackler is licensed under the link:./LICENSE[Apache License, version 2.0].
