Tackler
Tackler Ain’t Calculator and Kernel for Ledger Equivalent Records. Why not? - Because it uses simplified Ledger syntax.
So in other words, Tackler is accounting engine and reporting tool for text based double-entry accounting.
Features
-
Tackler is fast
-
Support for Commodities and Currencies
-
Text and JSON output formats for reports
-
Server API for embedding Tackler core
-
Client API for JVM and JS environments
-
-
Integrated support with GIT version control system
-
Can use plain filesystem or GIT repository as data storage
-
Natively supports splitting journal data to multiple files (shards)
-
-
Clean and simple journal format
-
Strict account name validation with Chart of Accounts
-
Multiple report and export types:
-
Balance, Balance Groups and Register Reports
-
-
Support for Transaction Filters
-
Supports UTF-8 characters in transaction data (descriptions, comments, account names)
-
Supports ISO 8601 timestamps with timezones and nanosecond resolution
-
Has good performance with large transaction set
-
Tackler is tested up to one million (1E6) transactions
-
Tackler can parse and process 56000 txn/s on Quad Core system
-
-
Near 100% test coverage, all features are extensively tested
-
Extensive documentation: Index of Docs
Why Tackler?
Tackler’s idea is provide concise, minimal and reliable engine to process text-based human readable accounting records.
Concise means that Tackler’s journal format is semantically concise and easy for humans to reason about.
Minimal means that Tackler provides minimum set of features which are needed for its operation.
Reliable means that Tackler’s behaviour is well known, tested and it is documented.
All that said, Tackler can be used easily from command line with normal personal accounting data sets.
Tackler Goals
-
Minimal feature set, very simple and well defined input format
-
Tackler input journal is supposed to be produced by software and to be audited by human. However, it must be possible to edit the journal by hand.
-
-
Well known and defined behaviour
-
Extensive user and developer documentation
-
Error free, reliable and resilient
-
Near perfect code and permutation test coverage
-
-
Good performance
-
Must be able to process hundreds of thousands of records with reasonable processing time and memory footprint
-
Must have linear processing time characteristics
-
Assumption: All transactions can be held in memory
-
-
Provides backend and core components for text based accounting processing
-
JVM and Multi platform support: Linux and Arm-Linux, it should be possible to run it on Windows
-
GIT is used for data distribution and storage
Documentation
User documentation is located under docs:
Todo, TEPs and Roadmap
At the moment, current set of active todo items is kept todo files.
There are Tackler Enhancement Proposals for planning and tracking implementation of major new features. These are listed on TEP index.
Roadmap
Extremely loosely defined roadmap is following:
-
Reporting Server as separate project
-
Extending support for Units
-
Profit and Loss (PnL) tracking
-
Automatic conversions between different base units
-
Support for unit handling with commodities
-
-
Extending support for Currencies and Commodities
-
Price database
-
Releases
For release information and version history details, see CHANGELOG.
Tackler-core is supposed to be usable as separate component. Tackler-api is released for JVM and JS environments, and it is intended to be used on the client side. See Server API and Client API for additional information.
Dependency settings for SBT are:
libraryDependencies += "fi.sn127" %% "tackler-core" % "version-number" libraryDependencies += "fi.sn127" %%% "tackler-api" % "version-number"
These are released on Maven Central Repository.
Tackler is under development, so if you enjoy calm seas then it might be better to look something else.
However, complex backward non-compatible changes to Journal file format should be rare. At the moment Tackler is used in production for operational data set.
Configuration files, command line interface and Client API (data models) are more likely to subject of change.
Contributing to Tackler
Contributions to the project are most welcome. See CONTRIBUTING how you could help.
Your pull requests can be merged only if you can certify the Developer Certificate of Origin (DCO), Version 1.1. To certify DCO (e.g. sign-off your commit), you must add a Signed-off-by
line to every git commit message (e.g. by using git commit -s
):
Signed-off-by: github-account <your.real@email.address>
If you set your user.name
and user.email
in git config, then git will include that line for you with git commit -s
. These settings can be done per repository basis, so they don’t have be global settings in your system.
Please make sure that you sign-off all your PR’s commits.
Credits
See THANKS for full list of credits.
License
Copyright 2016-2018 SN127.fi Contributors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.