Rusty Tackler Feature Parity

I’m happy to announce rough feature parity release of Tackler-ng!

The Tackler-NG, rusty version of Tackler, has rough feature parity with the old Scala code base with this 24.11.1 release.

The Tackler Journal Format is fully supported, and all transaction storage backends are also supported:

All reports and exports are supported:

Other notable supported features are:

The tackler --help, Tackler-NG Configuration and Tackler documentation have more information.

How to get and build Tackler-NG

# Get the source code
git clone --recurse-submodules https://github.com/e257-fi/tackler-ng

cd tackler-ng

# Select the latest release
git checkout v24.11.1

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

# Check the version info
target/release/tackler --version

Simple example

This uses filesystem based storage backend, no account name validations, no auditing features.

Command

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

Output

**********************************************************************************

Balance Report
--------------
                 0.00   12.00  Expenses:Food
                12.00   12.00  Expenses:Food:Groceries
                 0.00    3.32  Expenses:Sweets
                 2.12    2.12  Expenses:Sweets:Ice·cream
                 1.20    1.20  Expenses:Sweets:Salmiakki
=====================
                15.32
##################################################################################
**********************************************************************************
...
...
...

Let’s play for real - Git storage and Audit mode

This example uses a bare git repository as transaction storage, and also strict and audit mode is activated by configuration. This means that all accounts, commodity names and tags are validated. The triplet of git commit id, Txn Set Checksum and Account Selector Checksum provides an auditable (cryptographic) proof of transactions used by reports.

Command

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

Output

Git Storage
         commit : 4aa4e9797501c1aefc92f32dff30ab462dae5545
      reference : txns-1E1
      directory : txns
         suffix : .txn
        message : txns-1E1: 2016/12

Txn Set Checksum
        SHA-256 : 9b29071e1bf228cfbd31ca2b8e7263212e4b86e51cfee1e8002c9b795ab03f76
       Set size : 10

**********************************************************************************
Account Selector Checksum
        SHA-256 : 19d31a48bf9a8604a1128ccfd281511f961c5469748a97897a21fc0fa2a5f519

Balance Report
--------------
                 0.00   -161.0000  a:ay2016
              -6.0000     -6.0000  a:ay2016:am02
             -14.0000    -14.0000  a:ay2016:am03
             -19.0000    -19.0000  a:ay2016:am04
             -26.0000    -26.0000  a:ay2016:am05
              -1.0000     -1.0000  a:ay2016:am07
              -7.0000     -7.0000  a:ay2016:am08
             -13.0000    -13.0000  a:ay2016:am09
             -19.0000    -19.0000  a:ay2016:am10
             -25.0000    -25.0000  a:ay2016:am11
             -31.0000    -31.0000  a:ay2016:am12
=====================
            -161.0000
##################################################################################

Reports with 100_000 Transactions

There is git ref ‘txns-1E5’ inside the example audit -repository, which contains 100_000 transactions.

Command

target/release/tackler \
    --config examples/audit.toml \
    --input.git.ref txns-1E5

Output

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 : 19d31a48bf9a8604a1128ccfd281511f961c5469748a97897a21fc0fa2a5f519

Balance Report
--------------
                     0.00   -1574609.0100  a:ay2016
             -135600.0008    -135600.0008  a:ay2016:am01
             -118950.0008    -118950.0008  a:ay2016:am02
             -135631.0008    -135631.0008  a:ay2016:am03
             -127137.0008    -127137.0008  a:ay2016:am04
             -135616.0008    -135616.0008  a:ay2016:am05
             -127154.0008    -127154.0008  a:ay2016:am06
             -135600.0008    -135600.0008  a:ay2016:am07
             -135603.0008    -135603.0008  a:ay2016:am08
             -127140.0008    -127140.0008  a:ay2016:am09
             -135619.0008    -135619.0008  a:ay2016:am10
             -127126.0008    -127126.0008  a:ay2016:am11
             -133433.0008    -133433.0008  a:ay2016:am12
=========================
            -1574609.0100
##################################################################################

Transaction Filters

This example uses transaction filters to filter the report’s transactions. This is visible in the output by different Txn Set Checksum and by different Set Size compared to previous example.

Command

target/release/tackler \
    --config examples/audit.toml \
    --input.git.ref txns-1E5 \
    --api-filter-def '{"txnFilter":{"TxnFilterPostingAccount":{"regex":"^a:ay2016:am12"}}}'

The transaction filter definition could also be given as Base64 ascii armor string:

--api-filter-def \
base64:eyJ0eG5GaWx0ZXIiOnsiVHhuRmlsdGVyUG9zdGluZ0FjY291bnQiOnsicmVnZXgiOiJeYTpheTIwMTY6YW0xMiJ9fX0=

Output

Git Storage
         commit : cb56fdcdd2b56d41fc08cc5af4a3b410896f03b5
      reference : txns-1E5
      directory : txns
         suffix : .txn
        message : txns-1E5: 2016/12

Txn Set Checksum
        SHA-256 : 51faa6d2133d22d3ff8b60aff57722d1869fc4677911b13161dce558e7498073
       Set size : 8406

Filter
  Posting Account: "^a:ay2016:am12"

**********************************************************************************
Account Selector Checksum
        SHA-256 : 19d31a48bf9a8604a1128ccfd281511f961c5469748a97897a21fc0fa2a5f519

Balance Report
--------------
                    0.00   -133433.0008  a:ay2016
            -133433.0008   -133433.0008  a:ay2016:am12
========================
            -133433.0008
##################################################################################

Further info

Tackler-ng 24.11.1 released

Tackler-NG is rusty version of tackler, e.g. tackler reimplemented in Rust.

Release Highlights

Tackler-NG has rough feature parity with the old Scala based codebase with this 24.11.1 release.

How to test Tackler-NG

Building tackler

At the moment, there isn’t any precompiled binaries available, so:

If you don’t have Rust installed in your system, get it:

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

Then get the source code and test vectors:

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

cd tackler-ng

# select the release
git checkout v24.11.1

# Build tackler
cargo build --release --locked --bin tackler
# Quick verification of the compiled binary
target/release/tackler --version

Testing tackler

# Simple example with Filesystem storage
target/release/tackler --config examples/simple.toml

# Complex example with Git storage and Audit mode
target/release/tackler --config examples/audit.toml

Published artifacts

Tackler-ng artifacts are published in crates.io.

Component Version

Tackler CLI

24.11.1

tackler-core

0.4.0

tackler-api

0.4.0

tackler-rs

0.4.0

Changelog

For full changelog, see CHANGELOG in Tackler-ng repository.

Tackler 22.12.2 released

New features and changes in this release:

This is a re-release of Tackler CLI 22.12.1 with correct assembly packaging. No other changes.

Fixes

22.12.1 had broken logger functionality for tackler-cli. The broken functionality is manifested by following error message:

SLF4J: No SLF4J providers were found.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See https://www.slf4j.org/codes.html#noProviders for further details.

This release (22.12.2) fixes that.

Component Version

Tackler CLI

22.12.2

tackler-core

no changes

tackler-api

no changes

Full Changelog

For full changelog, see CHANGELOG in tackler’s repository.

Signature & SHA-256

3ac13c3a93d2299a8c134b0e3518c49da5997de479a89a8c05b77dcff45083f3  tackler-cli-22.12.2.jar

Tackler 22.12.1 released

New features and changes in this release:

This is a re-release of Tackler 22.12.0 with JDK 11. No other changes.

Fixes

Tackler 22.12.0 was released accidentally with JDK 17 (Bytecode Version 61.0), instead of JDK 11 (Bytecode Version 55.0). Hence this re-release with JDK 11.

Component Version (JDK 11) Version (JDK 17)

Tackler CLI

22.12.1

22.12.0

tackler-core

1.0.1

1.0.0

tackler-api

1.0.1

1.0.0

Full Changelog

For full changelog, see CHANGELOG in tackler’s repository.

Signature & SHA-256

87480c243f635ed475e63862a5089be1b7e95adf2ed94371bba778ae58fe9e01  tackler-cli-22.12.1.jar

Tackler 22.12.0 released

New features and changes in this release:

There is new versioning scheme (YY.MM.PATCH) for Tackler CLI, where YY and MM are release year and month. Also tackler-core and tackler-api has been released as versions 1.0.0.

Other changes in this release:

  • Tackler requires at least Java 11 to run

  • Upgrade JGit to 6.4.0

  • Deprecations

    • Drop support for Scala 2.12

    • Drop support for Java 8

Fixes

None

Full Changelog

For full changelog, see CHANGELOG in tackler’s repository.

Signature & SHA-256

fb387c75ad6b295f22aaa087fa91595e5f0cea79b850a8ad347c2d239d68b785  tackler-cli-22.12.0.jar

Tackler 0.35.0 released

New features and changes in this release:

New features and changes in this release:

  • TEP-1014: Equity Export Enhancements

    • Cfg key to set equity transaction’s target account

    • Print out actual value for equity posting - don’t use implicit (last posting’s empty) value for it

    • Print out warning, if equity transaction zeros out without equity posting

    • Indent equity transaction same amount as identity export (3 spaces)

Fixes

None

Full Changelog

For full changelog, see CHANGELOG in tackler’s repository.

Signature & SHA-256

91cf23dee0c59c9f42db7fb39a84fdfe6cbd4d07204b4eb62b5ea4bb3de56f83  tackler-cli-0.35.0.jar

Tackler 0.34.0 released

New features and changes in this release:

New features and changes in this release:

Fixes

None

Full Changelog

For full changelog, see CHANGELOG in tackler’s repository.

Signature & SHA-256

e8c1cb57e9f7f00bc35e39f1076193156c4f8a03714fdcb9d72bf16635e7d43d  tackler-cli-0.34.0.jar

Tackler 0.33.0 released

New features and changes in this release:

New features and changes in this release:

Noteworthy build and dependency upgrades:

  • Scala-JS: 1.x (1.3.1)

  • jgit: 5.10.0.202012080955-r

  • slf4j-api: 1.7.30

Fixes

None

Full Changelog

For full changelog, see CHANGELOG in tackler’s repository.

Signature & SHA-256

6e310865c99a8d1d82e1f426ab56470b93d092bdaeffe77c49814c4235155f7b  tackler-cli-0.33.0.jar

Tackler 0.32.0 released

New features and changes in this release:

New features and changes in this release:

  • Support for Scala 2.12 and 2.13

  • CLI: Raport Git commit id and working copy state with version info for --help and --version commands

Fixes

  • Reject semantically wrong negative unit costs (e.g. { -2 € }) and unit prices (e.g. @ -2 €)

Full Changelog

For full changelog, see CHANGELOG in tackler’s repository.

Signature & SHA-256

cd3edf5b53852865c610daaaa0adf7fc9be9bf1c60c408fe8d960ed2648409ef  tackler-cli-0.32.0.jar

Tackler 0.31.0 released

New features and changes in this release:

New features and changes in this release:

Fixes

  • Reject "identity" (e.g. 1 € @ 2 €) value positions as invalid construct

Full Changelog

For full changelog, see CHANGELOG in tackler’s repository.

Signature & SHA-256

8145ef5e1a7bbf0a790375e3d2c2f86bc38482cecef4f4c406ebc08bedb3a05e  tackler-cli-0.31.0.jar

Tackler 0.30.0 released

Phase 2 (full) support for Journal Format Version v2
Transaction description

description must start with ' -prefix

Transaction code

code can not contain ' ( ) [ ] { } < > characters

Transaction metadata (uuid)

metadata must start by # character with space

New features and changes in this release:

Fixes

  • Account and Commodity Names: Accept signs which were left unintentionally outside in the cold

    • Currency symbols $, ¢, £, ¤, ¥ from Latin-1 Base and Supplement blocks

    • Micro and Degree (µ, °) from Latin-1 Supplement block

    • Vulgar Fractions (¼, ½, ¾) from Latin-1 Supplement block

    • Superscripts (¹, ², ³) from Latin-1 Supplement block

See Charset document for full list of supported language, scripts and signs as account name characters (there are over 130 supported Unicode code blocks).

Full Changelog

For full changelog, see CHANGELOG in tackler’s repository.

Signature & SHA-256

d658cdd710add125806e8cfe6afbe28fba129f12f7af47127ad7b451542f6fb3  tackler-cli-0.30.0.jar

Tackler 0.24.0 released

Phase 1 support for new Journal Format Version v2
Transaction description

in v2, description must start with ' -prefix

Transaction code

in v2, code can not contain ' ( ) [ ] { } < > characters

Transaction metadata (uuid)

in v2, metadata must start by # character with space

This release has Phase 1 support for new Journal Format Version v2. This means that it will accept both old deprecated version v1 and new version v2 of journal format. All exports (Equity and Identity) are in new v2 format.

Support for old Journal Format Version v1 will be dropped in future release of Tackler.

New features and changes in this release are:

Full Changelog

For full changelog, see CHANGELOG in tackler’s repository.

Signature & SHA-256

960bd089235cece7bd63dc0c476f86460b96314dd03cb8007389eae78e2506ad  tackler-cli-0.24.0.jar

Journal format change

Backward incompatible Journal Format Changes between version v1 and v2
Transaction description

in v2, description must start with ' -prefix

Transaction code

in v2, code can not contain ' ( ) [ ] { } < > characters

Transaction metadata (uuid)

in v2, metadata must start by # character with space

Tackler v0.24.0 has Phase 1 support for new Journal Format Version v2. This means that it will accept both old deprecated version v1 and new version v2 of journal format. All exports (Equity and Identity) are in new format.

Support for old Journal Format Version v1 will be dropped in future release of Tackler.

Below are examples of transaction entries which are valid with Journal Format Version v2.

2019-03-03 (#123)
  Expenses:Ice·cream  2
  Assets:Cash

2019-03-04 'Ice cream 'n soda!
  Expenses:Ice·cream  2
  Expenses:Soda  2
  Assets:Cash

2019-03-05 (#125) 'It was 125th ice cream
  # uuid: 9b212495-0c48-4991-a52c-e6684487bd8d
  Expenses:Ice·cream  2
  Assets:Cash

See Journal format for full reference, and TEP-1009: Txn Header Syntax for background and motivation of this change.

New site

Tackler’s new web site is launched.

Tackler 0.23.0 released

New features

  • Versions v0.4.0 and v0.4.1

  • Add uuid to test corpus transactions

  • Add 1E1 and 1E2 test sets

  • Update build and deps

Fixes

Reject invalid UUIDs which were permitted in the past. There are certain way invalid and malformed UUIDs, which are accepted by JDK.

This could change old valid journal to invalid, if journal contains these specially way invalid UUIDs.

See following openjdk bugs for details:

Full Changelog

For full changelog, see CHANGELOG in tackler’s repository.

Tackler 0.22.0 released

New features

  • Strict validation of commodities and currencies. This is turned on by default, if accounts.strict = true. See accounts.conf for how to configure this.

  • Improve error messages in case of parse and logic errors (filename, lines, etc.)

  • Reports

    • Register report: Add separator between txn entries

Fixes

Force UTF-8 always on console, regardless of console settings. This is needed for Windows/MinGW/MSYS2.

Full Changelog

For full changelog, see CHANGELOG in tackler’s repository.

Signature & SHA-256

d37824fa0edb7fe87a186bcefb12f9aa967ade75a3a3318b941ab1102ec90da0  tackler-cli-0.22.0.jar

Tackler 0.21.0 released

New features

Fixes

  • Fix failing test: e257/accounting/tackler#1

Full Changelog

For full changelog, see CHANGELOG in tackler’s repository.

Signature & SHA-256

21012aed3a7e98d8496660f83da3e2fdb8d4006acc625da2c2704f2d60e04a92  tackler-cli-0.21.0.jar

Tackler 0.9.0 released

Release of version v0.9.0

  • New Client API

    • tackler-cli.jar is published on Maven Central Repository

Tackler 0.8.0 released

Release of version v0.8.0

  • New Server API

    • tackler-core.jar is published on Maven Central Repository