Tackler Mk-I: Tackler.conf

This is the main configuration of Tackler Mk-I versions up to 22.12.2.

See tackler.toml for Tackler-NG configuration.

Full reference of Tackler configuration. All settings have defaults values, and only those which would be overridden should be defined.

See accounts.conf for accounts configuration and tags.conf for defining transaction tags.

Examples of production setups are under example configurations section.

File format is HOCON (Human-Optimized Config Object Notation)

Relative basedir-paths are always relative to the used cfg-file.

  • External conf-file, then it is conf-file’s directory.

  • Embedded conf-file, then it is directory where executed jar is located.

Reference Configuration

Some of the configuration settings can be overridden with CLI options. Below option is marked with "CLI:" if it can be overridden from CLI.

tackler {
  core {

    # Default txn time zone
    #
    # Default timezone is used with transaction's timestamp
    # if it does not have timezone info.
    #
    # See also "report-timezone" on "reporting" section about
    # timestamps on reports.
    #
    # Format is either zone's offset or name of ZoneID entry
    # (IANA Time Zone Database), for example:
    #    "Z", "GMT", "UTC", "+02:00", "Europe/Helsinki"
    #
    # If timezone is offset, then timestamp is not adjusted based on
    # daylight saving time.
    #
    # If timezone is zone name, then it is adjusted according
    # the DST rules for that zone.
    #
    # timezone = "+02:00"
    #    2016-01-01T00:00:00 => 2016-01-01T00:00:00+02:00
    #    2016-06-25T00:00:00 => 2016-06-25T00:00:00+02:00
    #
    # timezone = "Europe/Helsinki"
    #    2016-01-01T00:00:00 => 2016-01-01T00:00:00+02:00
    #    2016-06-25T00:00:00 => 2016-06-25T00:00:00+03:00
    timezone = "Z"


    # Base directory path
    #
    # This is as basepath for all relavite paths in this conf-file.
    # Basedir itself could be relative to the location of this conf-file
    #
    # CLI: --basedir
    basedir = ../

    # Settings related to auditing
    auditing {

      # Hash algorithm
      #
      # Name of used hash algorithm (JDK Sun Provider MessageDigest):
      #
      #   JDK-11: MD2, MD5, SHA-1, SHA-224, SHA-256, SHA-384, SHA-512
      #           SHA-512/224, SHA-512/256
      #           SHA3-224, SHA3-256, SHA3-384, SHA3-512
      #
      # Valid values (string): "JDK algorithm name"
      hash = "SHA-256"

      # Txn set checksum
      #
      # Should Tackler calculate transaction set checksum?
      #
      # If this is set on, then all transaction must have valid unique UUID.
      # Presence and uniqueness of UUIDs is enforced.
      #
      # Valid values (boolean): on | off
      txn-set-checksum = off
    }

    # Input section
    #
    # Settings related for txn-journal storage system
    input {

      # type of used storage system
      #
      # Valid options are: fs, git
      storage = fs

      # Filesystem and shard based storage
      fs {

        # Top-level directory of storage tree
        #
        # This is where scanning is started and it should be
        # root directory of shard structure.
        # This could contain e.g. environment variables (see HOCON docs)
        # to restrict scanned set of shard directory structure.
        #
        # CLI: --input.fs.dir
        dir = "txns"

        # Glob to filter (include) Txn-data
        #
        # For example:
        # - flat single level dirs: "*.txn"
        # - multi-level shard dirs: "**.txn"
        #
        # CLI: --input.fs.glob
        glob = "**.txn"
      }

      # git based storage
      git {

        # Path to git repository
        #
        # This must point to "bare" section of repository, e.g.
        # either to bare git repository, or to '.git'-directory
        # within non-bare repositories
        repository = "tackler-data.git"

        # Git ref
        #
        # This is git ref name (ref or symbolic ref). It is used
        # to define branch or tag to find transaction data.
        # HEAD revision is automatically used for that branch.
        #
        # This could be e.g. "master", "cleared", "Y2016" or git tag.
        # Please see git documentation for information about ref and symbolic refs.
        #
        # CLI: --input.git.ref
        ref = "master"

        # Txn directory inside repository
        #
        # Directory inside git repository where transactions are stored.
        # This is filesystem path "inside repository" and working copy,
        # and it is relative to the top of repository (and working copy) root.
        #
        # CLI: --input.git.dir
        dir = "txns"

        # Suffix of file names which are processed as transactions.
        suffix = ".txn"
      }
    }

    # Generic reporting settings
    reporting {

      # Timezone setting for reports
      #
      # By default, dates, times and timestamps on reports
      # are displayed without any conversion, with zone info.
      #
      # If set, the 'report-timezone' sets timezone for all reports,
      # and all dates and timestamps are converted onto report's zone.
      # Also zone info is dropped from dates and timestamps.
      # Report will have information about used timezone, if this actived.
      #
      # Default is no time zone setting for reports
      # Valid values are: ZoneId or offset
      #   e.g. "Z", "GMT", "UTC", "+02:00", "Europe/Helsinki"
      //report-timezone = Europe/Helsinki

      # Settings for output scale of report output
      #
      # Scale is amount of decimals printed with values.
      # For example: value of 0.000123456 is printed with
      # scale.max = 6 as 0.000123
      # scale.max = 7 as 0.0001235
      # Used rounding mode is HALF_UP
      scale {
        # Minimum count of decimals to be printed always
        #
        # Can not be negative or bigger than max value
        min = 2

        # Maximum count of decimals to be printed
        #
        # Can not be negative or smaller than min value
        # In theory there is no practical upper limit for max value
        # There is a test for values with 30 digits and 128 decimals.
        max = 7
      }

      # Selection of reports to produce by default
      # Valid options are:
      #   "balance", "balance-group", "register"
      #
      # CLI: --reporting.reports "report1" "report2"
      # e.g. --reporting.reports balance register
      reports = ["balance", "balance-group", "register"]

      # Selection of exports to produce by default
      # Valid options are:
      #   "equity", "identity"
      #
      # CLI: --reporting.exports "report1" "report2"
      # e.g. --reporting.exports equity identity
      exports = []

      # Reporting formats, default is: txt
      # Valid options are:
      #    "txt", "json"
      #
      # CLI: --reporting.formats "frmt1" "frmt2"
      # e.g. --reporting.formats "txt" "json"
      formats = ["txt"]

      # Default list of accounts in reports and exports
      #
      # Each entry is regexp which is matched with account name
      # Empty list will include everything
      #
      # Valid values: list of regex as string
      #
      # For example:
      #  Income and Expenses accounts
      #    accounts = [ "Income(:.*)?", "Expenses(:.*)?" ]
      #  All accounts
      #    accounts = [ ]
      #
      # CLI: --reporting.accounts 'regex1' 'regex2' 'etc.'
      #      --reporting.accounts 'Assets(:.*)?' 'Expenses(:.*)?'
      #  All accounts
      #      --reporting.accounts
      accounts = []

      # Use console for output?
      #
      # If this is "true" or "on", then reports are
      # also printed on console.
      #
      # Valid values (boolean): on | off
      # CLI: --reporting.console
      console = on
    }

    # Report definitions
    reports {
      # Balance report
      balance {

        # Title of balance report
        # Valid values: string
        title = "BALANCE"

        # Report specific scale settings
        # See reporting.scale for further information
        //scale {
        //  min = 2
        //  max = 4
        //}

        # List of accounts to include into balance report
        #
        # If not set, then reporting.accounts is used as default
        # See reporting.accounts for further information
        // accounts = [ "Income(:.*)?", "Expenses(:.*)?" ]
      }

      # Balance Group report
      #
      # This report makes multiple balance reports over
      # group of transactions which are grouped based on
      # group-by criteria.
      balance-group {

        # Title of balance group report
        # valid values: string
        title = "BALANCE GROUPS"

        # Report specific scale settings
        # See reporting.scale for further information
        //scale {
        //  min = 2
        //  max = 4
        //}

        # Group by criteria
        #
        # Group by balances based on criteria.
        # Criteria could be:
        #   "year", "month", "date", "iso-week", "iso-week-date"
        group-by = "month"

        # List of accounts to include into balance-group report
        #
        # If not set, then reporting.accounts is used as default
        # See reporting.accounts for further information
        // accounts = [ "Expenses(:.*)?" ]
      }

      register {

        # Timestamp style
        #
        # This set how timestamps are displayed with register report
        # See also 'timezone', 'report-timezone' options.
        #
        # Valid values are: date, seconds, full
        #   date:    only date part is displayed (this is default)
        #   seconds: date and time is displayed (up to seconds)
        #   full:    date and time is displayed (up to nanoseconds)
        //timestamp-style = date

        # Title of register report
        # Valid values: string
        title = "REGISTER"

        # Report specific scale settings
        # See reporting.scale for further information
        //scale {
        //  min = 2
        //  max = 4
        //}

        # List of accounts to include into register report
        #
        # If not set, then reporting.accounts is used as default
        # See reporting.accounts for further information
        //accounts = []
      }
    }

    # Export definitions
    exports {

      # Equity export
      equity {
        # Account name for Equity transaction's target account
        //equity-account = "Equity:Balance"

        # List of accounts to include into equity export
        #
        # If not set, then reporting.accounts is used as default
        # See reporting.accounts for further information
        //accounts = []
      }

      # Identity Export
      # There are no configuration options for identity export
    }

    # Include Chart of Accounts and commodity related settings from separate file
    include required("./accounts.conf")

    # Include Chart of Tags settings from separate file
    include required("./tags.conf")
  }
}