Skip to main content

FinTrack - Releases

← App details

Nextcloud 35

FinTrack 1.22.3
Release Details
UpdatedOct. 11, 2026, 1:50 p.m.
Changelog

Fixed

  • Income/expense in base currency. transactionAmountInBase() (used by getAccountIncomeInBase/ExpenseInBase, reports, category breakdown) takes the currency from the transaction's account and uses the stored snapshot rate only when the row's currency matches it; mislabelled rows fall back to the live rate. Balances, income and expense now agree.
  • Data repair (migration 1016). Transactions whose currency differs from their account's (old CSV imports) get the account's currency and a NULL conversion rate. Amounts and all other rows are untouched; idempotent; failures are logged and skipped, never blocking the upgrade.
  • Base-currency account value. getAccountBalanceInBase() now computes the native account balance and converts it once into the base currency (was summing per-transaction conversions using each row's own currency/rate, which mixed currencies).
  • Base currency is always rate 1. getRate() ignores a stale stored rate on the configured base currency (left over after changing base currency).
  • 10-year report chart. getReportMonths() keeps the final boundary month (cap 121, not 120); the trend chart shrinks column gaps and shows fewer labels on long ranges, and month columns get min-width: 0 so bars stay visible.

Added

  • Automatic pre-update backup. Before any database migration runs during an app update, each user's FinTrack data is saved to /fintrack/backup/fintrack-pre-update-from-<old version>-<time>.json in their Files. It is the normal backup format (backupFormat 2, secrets sealed with ICrypto), so Settings → Restore Backup can load it directly. Works on the old schema (TransactionService::findAllForBackup() no longer needs deleted_at in SQL), all-or-nothing per user, skipped on fresh installs and for users without data, and never blocks the update.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhOOMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNzA3MTA1NzE3WhcNMzYxMDEyMTA1NzE3WjATMREwDwYD
VQQDDAhmaW50cmFjazCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOm2
zk5LcAvB3gIVCsAYm7/61Hr0W/Ek0LUsD2namI/WzAT296cPb5BExJCdNJ5AlMeF
521czFr63TNZejFKu7F+oTXdZWz3X+oXJWOEO0eh2MWD2/gU4XgEfagbaKNi6rft
1lcbi3nCXpPddqIAW15NLL01IeSZr/IZ8qW+eEXK5gGB2/UDKHOLqLr+Bhhypnf0
bt1J9yq5idRRGoyJLG+1cIsNWKkzMAqmGaUA/eCH3yRR43NpAH+eSobA50AMAyzl
+OQvxRYPN40bOHgG/j5w0/AxywAc8KI9NiFbixz0BAiRrDSbkQGtDstQsOh2STBD
ZqtMBVAhatCGmlzDs8HL08KQtcHT4U5L/B6yDfwT9/5PiXjc4j4sbKQq3C/2DeWd
YcbAaCT45RkjkBKmmfdhhjA6m8TtQ3o1KEmTdIfoo8Kq+pgiyVjnq0gw8029Hbja
umvWKsOyhehWeoGRZKOf7iJTpu6gj3KbfHTDW5ie1WzeRV7RKPDz1GtkG4cyFQkz
UKnGfDmO5O/SgC552AcCoHkZMDI86MIXePuDmME5QU8qF//tJj9MK5WAcss90dAM
93nvZ641PpWEbAyI/ARp7yznq/Tdsur4P24IOPa6EroD517i+S57QEzEXNVfVt7j
wKMSpdC/hZUeAfuZp/K6aMYYviuyOgIfbKqRiRRRAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAEoCSc1gV3EoOBl4cEfQ3x/J2eP+0g4jtSesgQ7CJPvfBUiHkuHGaqet
CghR+nrpXRY//B6fzErgxMNnoOj/QSVCa4ZTSGplp0iJc4RLHcPtHusm81ireFq4
RXdzLXI4yo5sdRLuQPuyTy4im7mY+7U27XgFnAFKub3i/A7xF4GVgQ0HkpWEmNH1
0rqx1xWrMYKT22IDg+HGOVGUuCCH7hH04A7J9H2YC72/ZkhBsuPwgwh5ZbvfqA4U
DaXTQp6wkmoiW4L19FuUU3sfMYsXpxvxu7m24TmbrTE+n5OW5soZrUUP7xVtK6//
s0dkw1JlmhwWybo5ujS1bti6r/0kb8w=
-----END CERTIFICATE-----
Signature3yjGuOg/NSY0jnFjeAM7p7pZwhD+P/h86B6x4ixldw93aZGYFY/SDa4MHDVNKO+B
RBYcIWyprBw/UAKCO9Olou3ighdBpeAGPr/R3BbbZXFbiKVZLy+m8neh/C/qIQE8
gG8/Aw0yPQOxoxUivDfcE8Q9I8VyMPrScPpL4oq4rQiygbyAbI2hGqTrNzrSPBqX
2VT0cmegG1UqCcEqjRiqv1yPa51T1DsJSjWn3j2POHfEeHevmfe+oH4wWqw9nfAS
QdFjyq/nd4nhjLvYb6XrpLUnBFLgwmL3ERxzaVj4OhNnRafz5wEC43qqhRvpLYbr
ZP3wwX/ACkLX0laNTI7wraknbKfb8BpI9h7ApP1/VY6PTJA8YRCwqok5ei1ZXdHr
DcJLhpvER+s8QGQeMN4aTk+DEs3+ZPME9CG5B71GRJsNIRYbJ42aIUPEj+i0O1Dg
5epRBuNT1Fv9p7tGqNOGzPDI5R5glVxaWYxmTgZHZtzK7FNn/AvUznzWwDerynOq
aDjb1JznjJcllo0UiT+H0GOe1nNu/rUE22WBr5TxFDKQyn0Hs7fEIa+9VlItdMfr
BBeyVuJSJ/oRH7bUqQ7AhQAmR/9rgf2q9Xqp/eL2npYB+RzBq0AsBFjrpiuXMlF2
TJ+XZ4mipE7dZuX5vAz4CV5vNRpzZMRxohLwpjyjiVE=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32

Nextcloud 34

FinTrack 1.22.3
Release Details
UpdatedOct. 11, 2026, 1:50 p.m.
Changelog

Fixed

  • Income/expense in base currency. transactionAmountInBase() (used by getAccountIncomeInBase/ExpenseInBase, reports, category breakdown) takes the currency from the transaction's account and uses the stored snapshot rate only when the row's currency matches it; mislabelled rows fall back to the live rate. Balances, income and expense now agree.
  • Data repair (migration 1016). Transactions whose currency differs from their account's (old CSV imports) get the account's currency and a NULL conversion rate. Amounts and all other rows are untouched; idempotent; failures are logged and skipped, never blocking the upgrade.
  • Base-currency account value. getAccountBalanceInBase() now computes the native account balance and converts it once into the base currency (was summing per-transaction conversions using each row's own currency/rate, which mixed currencies).
  • Base currency is always rate 1. getRate() ignores a stale stored rate on the configured base currency (left over after changing base currency).
  • 10-year report chart. getReportMonths() keeps the final boundary month (cap 121, not 120); the trend chart shrinks column gaps and shows fewer labels on long ranges, and month columns get min-width: 0 so bars stay visible.

Added

  • Automatic pre-update backup. Before any database migration runs during an app update, each user's FinTrack data is saved to /fintrack/backup/fintrack-pre-update-from-<old version>-<time>.json in their Files. It is the normal backup format (backupFormat 2, secrets sealed with ICrypto), so Settings → Restore Backup can load it directly. Works on the old schema (TransactionService::findAllForBackup() no longer needs deleted_at in SQL), all-or-nothing per user, skipped on fresh installs and for users without data, and never blocks the update.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhOOMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNzA3MTA1NzE3WhcNMzYxMDEyMTA1NzE3WjATMREwDwYD
VQQDDAhmaW50cmFjazCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOm2
zk5LcAvB3gIVCsAYm7/61Hr0W/Ek0LUsD2namI/WzAT296cPb5BExJCdNJ5AlMeF
521czFr63TNZejFKu7F+oTXdZWz3X+oXJWOEO0eh2MWD2/gU4XgEfagbaKNi6rft
1lcbi3nCXpPddqIAW15NLL01IeSZr/IZ8qW+eEXK5gGB2/UDKHOLqLr+Bhhypnf0
bt1J9yq5idRRGoyJLG+1cIsNWKkzMAqmGaUA/eCH3yRR43NpAH+eSobA50AMAyzl
+OQvxRYPN40bOHgG/j5w0/AxywAc8KI9NiFbixz0BAiRrDSbkQGtDstQsOh2STBD
ZqtMBVAhatCGmlzDs8HL08KQtcHT4U5L/B6yDfwT9/5PiXjc4j4sbKQq3C/2DeWd
YcbAaCT45RkjkBKmmfdhhjA6m8TtQ3o1KEmTdIfoo8Kq+pgiyVjnq0gw8029Hbja
umvWKsOyhehWeoGRZKOf7iJTpu6gj3KbfHTDW5ie1WzeRV7RKPDz1GtkG4cyFQkz
UKnGfDmO5O/SgC552AcCoHkZMDI86MIXePuDmME5QU8qF//tJj9MK5WAcss90dAM
93nvZ641PpWEbAyI/ARp7yznq/Tdsur4P24IOPa6EroD517i+S57QEzEXNVfVt7j
wKMSpdC/hZUeAfuZp/K6aMYYviuyOgIfbKqRiRRRAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAEoCSc1gV3EoOBl4cEfQ3x/J2eP+0g4jtSesgQ7CJPvfBUiHkuHGaqet
CghR+nrpXRY//B6fzErgxMNnoOj/QSVCa4ZTSGplp0iJc4RLHcPtHusm81ireFq4
RXdzLXI4yo5sdRLuQPuyTy4im7mY+7U27XgFnAFKub3i/A7xF4GVgQ0HkpWEmNH1
0rqx1xWrMYKT22IDg+HGOVGUuCCH7hH04A7J9H2YC72/ZkhBsuPwgwh5ZbvfqA4U
DaXTQp6wkmoiW4L19FuUU3sfMYsXpxvxu7m24TmbrTE+n5OW5soZrUUP7xVtK6//
s0dkw1JlmhwWybo5ujS1bti6r/0kb8w=
-----END CERTIFICATE-----
Signature3yjGuOg/NSY0jnFjeAM7p7pZwhD+P/h86B6x4ixldw93aZGYFY/SDa4MHDVNKO+B
RBYcIWyprBw/UAKCO9Olou3ighdBpeAGPr/R3BbbZXFbiKVZLy+m8neh/C/qIQE8
gG8/Aw0yPQOxoxUivDfcE8Q9I8VyMPrScPpL4oq4rQiygbyAbI2hGqTrNzrSPBqX
2VT0cmegG1UqCcEqjRiqv1yPa51T1DsJSjWn3j2POHfEeHevmfe+oH4wWqw9nfAS
QdFjyq/nd4nhjLvYb6XrpLUnBFLgwmL3ERxzaVj4OhNnRafz5wEC43qqhRvpLYbr
ZP3wwX/ACkLX0laNTI7wraknbKfb8BpI9h7ApP1/VY6PTJA8YRCwqok5ei1ZXdHr
DcJLhpvER+s8QGQeMN4aTk+DEs3+ZPME9CG5B71GRJsNIRYbJ42aIUPEj+i0O1Dg
5epRBuNT1Fv9p7tGqNOGzPDI5R5glVxaWYxmTgZHZtzK7FNn/AvUznzWwDerynOq
aDjb1JznjJcllo0UiT+H0GOe1nNu/rUE22WBr5TxFDKQyn0Hs7fEIa+9VlItdMfr
BBeyVuJSJ/oRH7bUqQ7AhQAmR/9rgf2q9Xqp/eL2npYB+RzBq0AsBFjrpiuXMlF2
TJ+XZ4mipE7dZuX5vAz4CV5vNRpzZMRxohLwpjyjiVE=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32

Nextcloud 33

FinTrack 1.22.3
Release Details
UpdatedOct. 11, 2026, 1:50 p.m.
Changelog

Fixed

  • Income/expense in base currency. transactionAmountInBase() (used by getAccountIncomeInBase/ExpenseInBase, reports, category breakdown) takes the currency from the transaction's account and uses the stored snapshot rate only when the row's currency matches it; mislabelled rows fall back to the live rate. Balances, income and expense now agree.
  • Data repair (migration 1016). Transactions whose currency differs from their account's (old CSV imports) get the account's currency and a NULL conversion rate. Amounts and all other rows are untouched; idempotent; failures are logged and skipped, never blocking the upgrade.
  • Base-currency account value. getAccountBalanceInBase() now computes the native account balance and converts it once into the base currency (was summing per-transaction conversions using each row's own currency/rate, which mixed currencies).
  • Base currency is always rate 1. getRate() ignores a stale stored rate on the configured base currency (left over after changing base currency).
  • 10-year report chart. getReportMonths() keeps the final boundary month (cap 121, not 120); the trend chart shrinks column gaps and shows fewer labels on long ranges, and month columns get min-width: 0 so bars stay visible.

Added

  • Automatic pre-update backup. Before any database migration runs during an app update, each user's FinTrack data is saved to /fintrack/backup/fintrack-pre-update-from-<old version>-<time>.json in their Files. It is the normal backup format (backupFormat 2, secrets sealed with ICrypto), so Settings → Restore Backup can load it directly. Works on the old schema (TransactionService::findAllForBackup() no longer needs deleted_at in SQL), all-or-nothing per user, skipped on fresh installs and for users without data, and never blocks the update.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhOOMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNzA3MTA1NzE3WhcNMzYxMDEyMTA1NzE3WjATMREwDwYD
VQQDDAhmaW50cmFjazCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOm2
zk5LcAvB3gIVCsAYm7/61Hr0W/Ek0LUsD2namI/WzAT296cPb5BExJCdNJ5AlMeF
521czFr63TNZejFKu7F+oTXdZWz3X+oXJWOEO0eh2MWD2/gU4XgEfagbaKNi6rft
1lcbi3nCXpPddqIAW15NLL01IeSZr/IZ8qW+eEXK5gGB2/UDKHOLqLr+Bhhypnf0
bt1J9yq5idRRGoyJLG+1cIsNWKkzMAqmGaUA/eCH3yRR43NpAH+eSobA50AMAyzl
+OQvxRYPN40bOHgG/j5w0/AxywAc8KI9NiFbixz0BAiRrDSbkQGtDstQsOh2STBD
ZqtMBVAhatCGmlzDs8HL08KQtcHT4U5L/B6yDfwT9/5PiXjc4j4sbKQq3C/2DeWd
YcbAaCT45RkjkBKmmfdhhjA6m8TtQ3o1KEmTdIfoo8Kq+pgiyVjnq0gw8029Hbja
umvWKsOyhehWeoGRZKOf7iJTpu6gj3KbfHTDW5ie1WzeRV7RKPDz1GtkG4cyFQkz
UKnGfDmO5O/SgC552AcCoHkZMDI86MIXePuDmME5QU8qF//tJj9MK5WAcss90dAM
93nvZ641PpWEbAyI/ARp7yznq/Tdsur4P24IOPa6EroD517i+S57QEzEXNVfVt7j
wKMSpdC/hZUeAfuZp/K6aMYYviuyOgIfbKqRiRRRAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAEoCSc1gV3EoOBl4cEfQ3x/J2eP+0g4jtSesgQ7CJPvfBUiHkuHGaqet
CghR+nrpXRY//B6fzErgxMNnoOj/QSVCa4ZTSGplp0iJc4RLHcPtHusm81ireFq4
RXdzLXI4yo5sdRLuQPuyTy4im7mY+7U27XgFnAFKub3i/A7xF4GVgQ0HkpWEmNH1
0rqx1xWrMYKT22IDg+HGOVGUuCCH7hH04A7J9H2YC72/ZkhBsuPwgwh5ZbvfqA4U
DaXTQp6wkmoiW4L19FuUU3sfMYsXpxvxu7m24TmbrTE+n5OW5soZrUUP7xVtK6//
s0dkw1JlmhwWybo5ujS1bti6r/0kb8w=
-----END CERTIFICATE-----
Signature3yjGuOg/NSY0jnFjeAM7p7pZwhD+P/h86B6x4ixldw93aZGYFY/SDa4MHDVNKO+B
RBYcIWyprBw/UAKCO9Olou3ighdBpeAGPr/R3BbbZXFbiKVZLy+m8neh/C/qIQE8
gG8/Aw0yPQOxoxUivDfcE8Q9I8VyMPrScPpL4oq4rQiygbyAbI2hGqTrNzrSPBqX
2VT0cmegG1UqCcEqjRiqv1yPa51T1DsJSjWn3j2POHfEeHevmfe+oH4wWqw9nfAS
QdFjyq/nd4nhjLvYb6XrpLUnBFLgwmL3ERxzaVj4OhNnRafz5wEC43qqhRvpLYbr
ZP3wwX/ACkLX0laNTI7wraknbKfb8BpI9h7ApP1/VY6PTJA8YRCwqok5ei1ZXdHr
DcJLhpvER+s8QGQeMN4aTk+DEs3+ZPME9CG5B71GRJsNIRYbJ42aIUPEj+i0O1Dg
5epRBuNT1Fv9p7tGqNOGzPDI5R5glVxaWYxmTgZHZtzK7FNn/AvUznzWwDerynOq
aDjb1JznjJcllo0UiT+H0GOe1nNu/rUE22WBr5TxFDKQyn0Hs7fEIa+9VlItdMfr
BBeyVuJSJ/oRH7bUqQ7AhQAmR/9rgf2q9Xqp/eL2npYB+RzBq0AsBFjrpiuXMlF2
TJ+XZ4mipE7dZuX5vAz4CV5vNRpzZMRxohLwpjyjiVE=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32

Nextcloud 32

FinTrack 1.22.3
Release Details
UpdatedOct. 11, 2026, 1:50 p.m.
Changelog

Fixed

  • Income/expense in base currency. transactionAmountInBase() (used by getAccountIncomeInBase/ExpenseInBase, reports, category breakdown) takes the currency from the transaction's account and uses the stored snapshot rate only when the row's currency matches it; mislabelled rows fall back to the live rate. Balances, income and expense now agree.
  • Data repair (migration 1016). Transactions whose currency differs from their account's (old CSV imports) get the account's currency and a NULL conversion rate. Amounts and all other rows are untouched; idempotent; failures are logged and skipped, never blocking the upgrade.
  • Base-currency account value. getAccountBalanceInBase() now computes the native account balance and converts it once into the base currency (was summing per-transaction conversions using each row's own currency/rate, which mixed currencies).
  • Base currency is always rate 1. getRate() ignores a stale stored rate on the configured base currency (left over after changing base currency).
  • 10-year report chart. getReportMonths() keeps the final boundary month (cap 121, not 120); the trend chart shrinks column gaps and shows fewer labels on long ranges, and month columns get min-width: 0 so bars stay visible.

Added

  • Automatic pre-update backup. Before any database migration runs during an app update, each user's FinTrack data is saved to /fintrack/backup/fintrack-pre-update-from-<old version>-<time>.json in their Files. It is the normal backup format (backupFormat 2, secrets sealed with ICrypto), so Settings → Restore Backup can load it directly. Works on the old schema (TransactionService::findAllForBackup() no longer needs deleted_at in SQL), all-or-nothing per user, skipped on fresh installs and for users without data, and never blocks the update.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhOOMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNzA3MTA1NzE3WhcNMzYxMDEyMTA1NzE3WjATMREwDwYD
VQQDDAhmaW50cmFjazCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOm2
zk5LcAvB3gIVCsAYm7/61Hr0W/Ek0LUsD2namI/WzAT296cPb5BExJCdNJ5AlMeF
521czFr63TNZejFKu7F+oTXdZWz3X+oXJWOEO0eh2MWD2/gU4XgEfagbaKNi6rft
1lcbi3nCXpPddqIAW15NLL01IeSZr/IZ8qW+eEXK5gGB2/UDKHOLqLr+Bhhypnf0
bt1J9yq5idRRGoyJLG+1cIsNWKkzMAqmGaUA/eCH3yRR43NpAH+eSobA50AMAyzl
+OQvxRYPN40bOHgG/j5w0/AxywAc8KI9NiFbixz0BAiRrDSbkQGtDstQsOh2STBD
ZqtMBVAhatCGmlzDs8HL08KQtcHT4U5L/B6yDfwT9/5PiXjc4j4sbKQq3C/2DeWd
YcbAaCT45RkjkBKmmfdhhjA6m8TtQ3o1KEmTdIfoo8Kq+pgiyVjnq0gw8029Hbja
umvWKsOyhehWeoGRZKOf7iJTpu6gj3KbfHTDW5ie1WzeRV7RKPDz1GtkG4cyFQkz
UKnGfDmO5O/SgC552AcCoHkZMDI86MIXePuDmME5QU8qF//tJj9MK5WAcss90dAM
93nvZ641PpWEbAyI/ARp7yznq/Tdsur4P24IOPa6EroD517i+S57QEzEXNVfVt7j
wKMSpdC/hZUeAfuZp/K6aMYYviuyOgIfbKqRiRRRAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAEoCSc1gV3EoOBl4cEfQ3x/J2eP+0g4jtSesgQ7CJPvfBUiHkuHGaqet
CghR+nrpXRY//B6fzErgxMNnoOj/QSVCa4ZTSGplp0iJc4RLHcPtHusm81ireFq4
RXdzLXI4yo5sdRLuQPuyTy4im7mY+7U27XgFnAFKub3i/A7xF4GVgQ0HkpWEmNH1
0rqx1xWrMYKT22IDg+HGOVGUuCCH7hH04A7J9H2YC72/ZkhBsuPwgwh5ZbvfqA4U
DaXTQp6wkmoiW4L19FuUU3sfMYsXpxvxu7m24TmbrTE+n5OW5soZrUUP7xVtK6//
s0dkw1JlmhwWybo5ujS1bti6r/0kb8w=
-----END CERTIFICATE-----
Signature3yjGuOg/NSY0jnFjeAM7p7pZwhD+P/h86B6x4ixldw93aZGYFY/SDa4MHDVNKO+B
RBYcIWyprBw/UAKCO9Olou3ighdBpeAGPr/R3BbbZXFbiKVZLy+m8neh/C/qIQE8
gG8/Aw0yPQOxoxUivDfcE8Q9I8VyMPrScPpL4oq4rQiygbyAbI2hGqTrNzrSPBqX
2VT0cmegG1UqCcEqjRiqv1yPa51T1DsJSjWn3j2POHfEeHevmfe+oH4wWqw9nfAS
QdFjyq/nd4nhjLvYb6XrpLUnBFLgwmL3ERxzaVj4OhNnRafz5wEC43qqhRvpLYbr
ZP3wwX/ACkLX0laNTI7wraknbKfb8BpI9h7ApP1/VY6PTJA8YRCwqok5ei1ZXdHr
DcJLhpvER+s8QGQeMN4aTk+DEs3+ZPME9CG5B71GRJsNIRYbJ42aIUPEj+i0O1Dg
5epRBuNT1Fv9p7tGqNOGzPDI5R5glVxaWYxmTgZHZtzK7FNn/AvUznzWwDerynOq
aDjb1JznjJcllo0UiT+H0GOe1nNu/rUE22WBr5TxFDKQyn0Hs7fEIa+9VlItdMfr
BBeyVuJSJ/oRH7bUqQ7AhQAmR/9rgf2q9Xqp/eL2npYB+RzBq0AsBFjrpiuXMlF2
TJ+XZ4mipE7dZuX5vAz4CV5vNRpzZMRxohLwpjyjiVE=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
FinTrack 1.22.2
Release Details
UpdatedOct. 11, 2026, 12:06 p.m.
Changelog

Fixed

  • Income/expense in base currency. transactionAmountInBase() (used by getAccountIncomeInBase/ExpenseInBase, reports, category breakdown) takes the currency from the transaction's account and uses the stored snapshot rate only when the row's currency matches it; mislabelled rows fall back to the live rate. Balances, income and expense now agree.
  • Data repair (migration 1016). Transactions whose currency differs from their account's (old CSV imports) get the account's currency and a NULL conversion rate. Amounts and all other rows are untouched; idempotent; failures are logged and skipped, never blocking the upgrade.
  • Base-currency account value. getAccountBalanceInBase() now computes the native account balance and converts it once into the base currency (was summing per-transaction conversions using each row's own currency/rate, which mixed currencies).
  • Base currency is always rate 1. getRate() ignores a stale stored rate on the configured base currency (left over after changing base currency).
  • 10-year report chart. getReportMonths() keeps the final boundary month (cap 121, not 120); the trend chart shrinks column gaps and shows fewer labels on long ranges, and month columns get min-width: 0 so bars stay visible.

Added

  • Automatic pre-update backup. Before any database migration runs during an app update, each user's FinTrack data is saved to /fintrack/backup/fintrack-pre-update-from-<old version>-<time>.json in their Files. It is the normal backup format (backupFormat 2, secrets sealed with ICrypto), so Settings → Restore Backup can load it directly. Works on the old schema (TransactionService::findAllForBackup() no longer needs deleted_at in SQL), all-or-nothing per user, skipped on fresh installs and for users without data, and never blocks the update.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhOOMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNzA3MTA1NzE3WhcNMzYxMDEyMTA1NzE3WjATMREwDwYD
VQQDDAhmaW50cmFjazCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOm2
zk5LcAvB3gIVCsAYm7/61Hr0W/Ek0LUsD2namI/WzAT296cPb5BExJCdNJ5AlMeF
521czFr63TNZejFKu7F+oTXdZWz3X+oXJWOEO0eh2MWD2/gU4XgEfagbaKNi6rft
1lcbi3nCXpPddqIAW15NLL01IeSZr/IZ8qW+eEXK5gGB2/UDKHOLqLr+Bhhypnf0
bt1J9yq5idRRGoyJLG+1cIsNWKkzMAqmGaUA/eCH3yRR43NpAH+eSobA50AMAyzl
+OQvxRYPN40bOHgG/j5w0/AxywAc8KI9NiFbixz0BAiRrDSbkQGtDstQsOh2STBD
ZqtMBVAhatCGmlzDs8HL08KQtcHT4U5L/B6yDfwT9/5PiXjc4j4sbKQq3C/2DeWd
YcbAaCT45RkjkBKmmfdhhjA6m8TtQ3o1KEmTdIfoo8Kq+pgiyVjnq0gw8029Hbja
umvWKsOyhehWeoGRZKOf7iJTpu6gj3KbfHTDW5ie1WzeRV7RKPDz1GtkG4cyFQkz
UKnGfDmO5O/SgC552AcCoHkZMDI86MIXePuDmME5QU8qF//tJj9MK5WAcss90dAM
93nvZ641PpWEbAyI/ARp7yznq/Tdsur4P24IOPa6EroD517i+S57QEzEXNVfVt7j
wKMSpdC/hZUeAfuZp/K6aMYYviuyOgIfbKqRiRRRAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAEoCSc1gV3EoOBl4cEfQ3x/J2eP+0g4jtSesgQ7CJPvfBUiHkuHGaqet
CghR+nrpXRY//B6fzErgxMNnoOj/QSVCa4ZTSGplp0iJc4RLHcPtHusm81ireFq4
RXdzLXI4yo5sdRLuQPuyTy4im7mY+7U27XgFnAFKub3i/A7xF4GVgQ0HkpWEmNH1
0rqx1xWrMYKT22IDg+HGOVGUuCCH7hH04A7J9H2YC72/ZkhBsuPwgwh5ZbvfqA4U
DaXTQp6wkmoiW4L19FuUU3sfMYsXpxvxu7m24TmbrTE+n5OW5soZrUUP7xVtK6//
s0dkw1JlmhwWybo5ujS1bti6r/0kb8w=
-----END CERTIFICATE-----
Signature5WE0NDTOZKMz0WADeFrzWrfAZy8m3BjnIYNSjy+OnpPdYylfubNzHxFbYOv4JkQg
wcFWjE2ewxDKNeiQJ4mM2LiRpzwx9Ctp2wXGK6vf7zPz5bL377oI1N5XyKfxfma7
nJO2HQdT1iS4WJeOLvM88ckdkedHtpJCmXmvO1h8PTdo+n/n93kMwqJ0Dqg72JRl
bRdDMCVr4lkQiQJhvQCBkDvmRvfAqK1RO+vvKEuwmwutx0Ypvv2eeNBCyPyEADj/
WJ0tlIttB608orruZiJmK98QoqJ7qg2gLrZLcDHDM5vLBXEwrj5hFj9yiYqXRIaT
Y+zjyW5cPGdnPDVpyOhw3GOilDcslrfmxKE0Jn95y6LxxGckI9sEnBJlIv32yW1q
vK47Lv/tBLjBh2/XEuQEnGrf24ixGyDWaMXxovrRx2dPNy75J4HlI8Lfug3reZ3X
Myc3dbi1mU8Sjn5Byd/SN7/wbuYsfImL5zTMbimrqaTd50rgLBcP1WnZPjgqfiEv
WSgUYOiV9aGpd2sUS/xNwNRByO/XhwnlzdjrU2Ch1rF0XUOeceYJo0slgdBDJA3E
doKlKBtcVuohT6uXDjv8Hts595PBAdOH0DlS/gEo8b+/yfjOT0gwEVnUNJVa+AYm
iX2WcRoZK89/i09aU6DvwEr3oGUS1IY1BTXgI1WtYZU=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<33.0.0
Minimum Integer bits32
FinTrack 1.20.0
Release Details
UpdatedAug. 4, 2026, 2:04 p.m.
Changelog

Added — Phase 1: PWA UI layout & alignment

  • Login/PIN screens now vertically centered in the viewport, not just horizontally.
  • Accounts, Categories, Budgets, Transfers: list rows now lay out in a responsive grid (.list-grid, same auto-fill/minmax pattern as the dashboard's stat cards) instead of one stacked column, so wide desktop screens actually get used — still collapses to a single column on mobile.
  • Accounts page: account icon/emoji now renders next to the account name (icon was already a form field and saved correctly, it just was never displayed in the list — Categories already did this correctly, Accounts now matches it).
  • Search/filter boxes added to the top of the Accounts and Categories pages for live client-side filtering by name.
  • Settings → About App: GitHub/PayPal/Ko-fi buttons now share one .ft-btn-link class (uniform padding, border-radius, min-width) — previously GitHub used .ft-btn-outline's sizing while the other two had their own smaller inline padding.
  • Currencies → Edit Currency modal: now shows "Last updated: …" under the conversion-rate field (reusing the same fx_last_rate_ts_* settings keys the Transfer and New Transaction forms already read), updated live after a successful "Fetch live rate".

Added — Phase 2: Offline caching

  • Service worker precache completed: every icon size the manifest references (72–512px, maskable, apple-touch-icon) is now precached, not just 192/512 — icons could previously 404 offline even though the app shell itself loaded fine.
  • Audited offline login/PIN/session flow (bootstrap → renderPinUnlock → FT_PIN.tryUnlock → enterApp): this was already built correctly — PIN unlock tries the local IndexedDB-encrypted decrypt first and only touches the network as a secondary check, session/settings-refresh calls are all wrapped so a network failure never throws past them, and the offline-inactivity wipe check reads purely from IndexedDB. No changes needed here beyond the icon caching above.
  • Deliberately not caching API responses (/index.php/...) in Service Worker Cache Storage, despite "API entry points" being requested — that data is financial and already has a correct, secure offline story via encrypted IndexedDB (see pwa-db.js/pwa-crypto.js); caching it as plaintext HTTP responses in Cache Storage as well would be a real security regression, not just a style choice, so this file keeps that boundary intact.
  • Service worker cache bumped again (v6 → v7).
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhOOMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNzA3MTA1NzE3WhcNMzYxMDEyMTA1NzE3WjATMREwDwYD
VQQDDAhmaW50cmFjazCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOm2
zk5LcAvB3gIVCsAYm7/61Hr0W/Ek0LUsD2namI/WzAT296cPb5BExJCdNJ5AlMeF
521czFr63TNZejFKu7F+oTXdZWz3X+oXJWOEO0eh2MWD2/gU4XgEfagbaKNi6rft
1lcbi3nCXpPddqIAW15NLL01IeSZr/IZ8qW+eEXK5gGB2/UDKHOLqLr+Bhhypnf0
bt1J9yq5idRRGoyJLG+1cIsNWKkzMAqmGaUA/eCH3yRR43NpAH+eSobA50AMAyzl
+OQvxRYPN40bOHgG/j5w0/AxywAc8KI9NiFbixz0BAiRrDSbkQGtDstQsOh2STBD
ZqtMBVAhatCGmlzDs8HL08KQtcHT4U5L/B6yDfwT9/5PiXjc4j4sbKQq3C/2DeWd
YcbAaCT45RkjkBKmmfdhhjA6m8TtQ3o1KEmTdIfoo8Kq+pgiyVjnq0gw8029Hbja
umvWKsOyhehWeoGRZKOf7iJTpu6gj3KbfHTDW5ie1WzeRV7RKPDz1GtkG4cyFQkz
UKnGfDmO5O/SgC552AcCoHkZMDI86MIXePuDmME5QU8qF//tJj9MK5WAcss90dAM
93nvZ641PpWEbAyI/ARp7yznq/Tdsur4P24IOPa6EroD517i+S57QEzEXNVfVt7j
wKMSpdC/hZUeAfuZp/K6aMYYviuyOgIfbKqRiRRRAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAEoCSc1gV3EoOBl4cEfQ3x/J2eP+0g4jtSesgQ7CJPvfBUiHkuHGaqet
CghR+nrpXRY//B6fzErgxMNnoOj/QSVCa4ZTSGplp0iJc4RLHcPtHusm81ireFq4
RXdzLXI4yo5sdRLuQPuyTy4im7mY+7U27XgFnAFKub3i/A7xF4GVgQ0HkpWEmNH1
0rqx1xWrMYKT22IDg+HGOVGUuCCH7hH04A7J9H2YC72/ZkhBsuPwgwh5ZbvfqA4U
DaXTQp6wkmoiW4L19FuUU3sfMYsXpxvxu7m24TmbrTE+n5OW5soZrUUP7xVtK6//
s0dkw1JlmhwWybo5ujS1bti6r/0kb8w=
-----END CERTIFICATE-----
Signaturesa9Ng5pjfbER+6nqEddy6NWTWI7P5+rtHG02ys1T1L8BzyGX+g7HOs9LHrn0uZz8
lecU2PQBW4mC/uGR7mYqTvPHtasdV3CdAWWDWgBpR8zpKmWB7N++/LnoaCjxIdTy
AatOdTf18EenkKNnOisD+X8AQ8UheuitU1r8unsTK3YRDEifTDFKZCoFRVJXuzfD
GcL1jk0hD2/324bz9+a5LrPvNEmYe7kLgdO1M6ofYo8mDPMuXxZDaFFKS4n4jfXC
a1QEFGVOPpjPnKXqOIuph/TyhBSJw9Sr6R7J2zOC7/aXhSsc/xLLP4IkCfiK4+fT
PGCiYTXoRw7hoYfkfgio6oTj/7QhUyPVjpFupbMBU4JJBV9X6lo3ZfhaGhXW24Zn
7IxcYVKzOf90XyOZzTV3CCV+zWzpjYA8RG4+1zzysRZjz7qzyaESWcfGv5NYlxqk
SVqlc/WaQhPFSispm5xUYlrXAcmxfYc8gh9EMLTlhCaFoNGsol3KjvMzocnVFyP5
VOmV4v4L3r1f1puvBTj9sK5xv9b1TthDgYKDvr0jE6bcBxHs/60jyW7QDrGfsLo3
WysXl8PHaZDS4K/gx1H+eEz9jgirvyMA/5pQ6nVsN/f3nIRuPcDkN4uLv7AITHsl
4oW2Va57pSpBVFTWcD6PDI9qWs9KxF5ueO8u0bePpHQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<33.0.0
Minimum Integer bits32
FinTrack 1.16.6
Release Details
UpdatedJuly 22, 2026, 8:13 p.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhOOMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNzA3MTA1NzE3WhcNMzYxMDEyMTA1NzE3WjATMREwDwYD
VQQDDAhmaW50cmFjazCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOm2
zk5LcAvB3gIVCsAYm7/61Hr0W/Ek0LUsD2namI/WzAT296cPb5BExJCdNJ5AlMeF
521czFr63TNZejFKu7F+oTXdZWz3X+oXJWOEO0eh2MWD2/gU4XgEfagbaKNi6rft
1lcbi3nCXpPddqIAW15NLL01IeSZr/IZ8qW+eEXK5gGB2/UDKHOLqLr+Bhhypnf0
bt1J9yq5idRRGoyJLG+1cIsNWKkzMAqmGaUA/eCH3yRR43NpAH+eSobA50AMAyzl
+OQvxRYPN40bOHgG/j5w0/AxywAc8KI9NiFbixz0BAiRrDSbkQGtDstQsOh2STBD
ZqtMBVAhatCGmlzDs8HL08KQtcHT4U5L/B6yDfwT9/5PiXjc4j4sbKQq3C/2DeWd
YcbAaCT45RkjkBKmmfdhhjA6m8TtQ3o1KEmTdIfoo8Kq+pgiyVjnq0gw8029Hbja
umvWKsOyhehWeoGRZKOf7iJTpu6gj3KbfHTDW5ie1WzeRV7RKPDz1GtkG4cyFQkz
UKnGfDmO5O/SgC552AcCoHkZMDI86MIXePuDmME5QU8qF//tJj9MK5WAcss90dAM
93nvZ641PpWEbAyI/ARp7yznq/Tdsur4P24IOPa6EroD517i+S57QEzEXNVfVt7j
wKMSpdC/hZUeAfuZp/K6aMYYviuyOgIfbKqRiRRRAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAEoCSc1gV3EoOBl4cEfQ3x/J2eP+0g4jtSesgQ7CJPvfBUiHkuHGaqet
CghR+nrpXRY//B6fzErgxMNnoOj/QSVCa4ZTSGplp0iJc4RLHcPtHusm81ireFq4
RXdzLXI4yo5sdRLuQPuyTy4im7mY+7U27XgFnAFKub3i/A7xF4GVgQ0HkpWEmNH1
0rqx1xWrMYKT22IDg+HGOVGUuCCH7hH04A7J9H2YC72/ZkhBsuPwgwh5ZbvfqA4U
DaXTQp6wkmoiW4L19FuUU3sfMYsXpxvxu7m24TmbrTE+n5OW5soZrUUP7xVtK6//
s0dkw1JlmhwWybo5ujS1bti6r/0kb8w=
-----END CERTIFICATE-----
SignatureB0w79r/HJnff8xddz/Dmlgt0CTCykpRhpfY7b2pQD3jgXbOAxeFK5iqt4oiV261b
W0hY2y82YX0iiaP7iqYHk5JDLoafWAnBW4iUwQgMIIcOU438LzX5rJF699yzaa0r
kcVCLkxXBXzTSDl6qKRxwPAN/G9nOayaM7j2gzpfmtqlp7FGBadBVhFatEgGNDZU
Sk2+MDS9Nhm1T0uIFHY88vom2QpsavhDbXXFQ5nPV4IAWfiID5jIUTzto/urFxBo
eFFz9IUoVHuZVm82sXZo7yXhYLk6z3P2nwBJBjojX4yeBqXqu7BpHlP5CZALeHpn
0lXe1ghT+vdhAnCIiRsE7DsMnNVOruzSDgynKJo3HI08Owi5RNELrPZR5KQvsM3X
UV90ekejHkAK7XhGOY5zazSB38orFpR4GTuLSfr8DCUZ+nErzwXSajfkFopmhl14
Oc2vrCOz7wxLT2huvwPYSrh3mi2Xa8oX2VZLWJpJVUsw2URbRIepiSyNTZQfMUbo
I8i/AsCYLo8zX7XbbOuCNwJq2T5MGAuSskiYElx9xlq8SIUGr38NyG0I4Wcj95d6
3dcMyK5MTqdg39w87h7fnt4bc4p6GJ0A1QgvJus8M7KEMAj+7e4AaBUFktxXLAWN
PXs2RgjjvfYelp6GAUQGoEHvmlIiEJ0mnoa2zq2eROg=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<33.0.0
Minimum Integer bits32
FinTrack 1.16.1
Release Details
UpdatedJuly 16, 2026, 12:43 p.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhOOMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNzA3MTA1NzE3WhcNMzYxMDEyMTA1NzE3WjATMREwDwYD
VQQDDAhmaW50cmFjazCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOm2
zk5LcAvB3gIVCsAYm7/61Hr0W/Ek0LUsD2namI/WzAT296cPb5BExJCdNJ5AlMeF
521czFr63TNZejFKu7F+oTXdZWz3X+oXJWOEO0eh2MWD2/gU4XgEfagbaKNi6rft
1lcbi3nCXpPddqIAW15NLL01IeSZr/IZ8qW+eEXK5gGB2/UDKHOLqLr+Bhhypnf0
bt1J9yq5idRRGoyJLG+1cIsNWKkzMAqmGaUA/eCH3yRR43NpAH+eSobA50AMAyzl
+OQvxRYPN40bOHgG/j5w0/AxywAc8KI9NiFbixz0BAiRrDSbkQGtDstQsOh2STBD
ZqtMBVAhatCGmlzDs8HL08KQtcHT4U5L/B6yDfwT9/5PiXjc4j4sbKQq3C/2DeWd
YcbAaCT45RkjkBKmmfdhhjA6m8TtQ3o1KEmTdIfoo8Kq+pgiyVjnq0gw8029Hbja
umvWKsOyhehWeoGRZKOf7iJTpu6gj3KbfHTDW5ie1WzeRV7RKPDz1GtkG4cyFQkz
UKnGfDmO5O/SgC552AcCoHkZMDI86MIXePuDmME5QU8qF//tJj9MK5WAcss90dAM
93nvZ641PpWEbAyI/ARp7yznq/Tdsur4P24IOPa6EroD517i+S57QEzEXNVfVt7j
wKMSpdC/hZUeAfuZp/K6aMYYviuyOgIfbKqRiRRRAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAEoCSc1gV3EoOBl4cEfQ3x/J2eP+0g4jtSesgQ7CJPvfBUiHkuHGaqet
CghR+nrpXRY//B6fzErgxMNnoOj/QSVCa4ZTSGplp0iJc4RLHcPtHusm81ireFq4
RXdzLXI4yo5sdRLuQPuyTy4im7mY+7U27XgFnAFKub3i/A7xF4GVgQ0HkpWEmNH1
0rqx1xWrMYKT22IDg+HGOVGUuCCH7hH04A7J9H2YC72/ZkhBsuPwgwh5ZbvfqA4U
DaXTQp6wkmoiW4L19FuUU3sfMYsXpxvxu7m24TmbrTE+n5OW5soZrUUP7xVtK6//
s0dkw1JlmhwWybo5ujS1bti6r/0kb8w=
-----END CERTIFICATE-----
SignaturezwlI+Gg+etQRp/T1hDcCGgrYRyKU4K2Icl6wvafI1EKeEDfr4RBncAvz/+LmwVYt
w8ClLQ3LvFOsY0ChBxwMnx5/ilslc679qFuN5gcoszWVwFQROt7xBbLF6277NdT2
phJoyQGj7hHnCOebvt9oENTR6zpWXnhHsa366pbBZt7BWvuC4LAlKtGtMPwjHt6O
BnkI4Ij//eb5kp5z4I1cDn4oYT6MM+xOJpuOIKwiEGSWFvU3A/e6lIVx57sL9gT1
k8lA4K6NxX21cqS9jeEALxWeiF4/ZfmzIkJYKVUJc7jOQRgYrrhl427BHye58Qty
BlmdZIJ49aFtcq/DgRK82dl4jxDc2ooUbJpbK7GD+TWvULnzZT/RcUTYh22nhDS4
P1Yh3IO7ydYgZ6G9NrpZc+b75zCo8SZLPV2CdzNibHDid01VqNDeKYCNTRJGjbs0
gDYe5R2fmbEAbETM5QbudeqcKW03e6gZ5dfsQ7zh4H/5qkjI3m41H5uu+Afq/etb
q+DMa2gV6VPeMRqoxfqslEWtQ7fvQmwKCSxAdpQvKbeQ/7xW412663iQRG1ttuzK
zlYG7icoXqtB/HlzpRe9CYsvcVXd/NuII/ZPxc5+jXo+ITo6fj8UoIayv7D0DtWc
BTc84d5DhussgbON5u/7PT0f0XiAlQOdamr+shm43T8=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<33.0.0
Minimum Integer bits32
FinTrack 1.11.8
Release Details
UpdatedJuly 11, 2026, 8:23 a.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhOOMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNzA3MTA1NzE3WhcNMzYxMDEyMTA1NzE3WjATMREwDwYD
VQQDDAhmaW50cmFjazCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOm2
zk5LcAvB3gIVCsAYm7/61Hr0W/Ek0LUsD2namI/WzAT296cPb5BExJCdNJ5AlMeF
521czFr63TNZejFKu7F+oTXdZWz3X+oXJWOEO0eh2MWD2/gU4XgEfagbaKNi6rft
1lcbi3nCXpPddqIAW15NLL01IeSZr/IZ8qW+eEXK5gGB2/UDKHOLqLr+Bhhypnf0
bt1J9yq5idRRGoyJLG+1cIsNWKkzMAqmGaUA/eCH3yRR43NpAH+eSobA50AMAyzl
+OQvxRYPN40bOHgG/j5w0/AxywAc8KI9NiFbixz0BAiRrDSbkQGtDstQsOh2STBD
ZqtMBVAhatCGmlzDs8HL08KQtcHT4U5L/B6yDfwT9/5PiXjc4j4sbKQq3C/2DeWd
YcbAaCT45RkjkBKmmfdhhjA6m8TtQ3o1KEmTdIfoo8Kq+pgiyVjnq0gw8029Hbja
umvWKsOyhehWeoGRZKOf7iJTpu6gj3KbfHTDW5ie1WzeRV7RKPDz1GtkG4cyFQkz
UKnGfDmO5O/SgC552AcCoHkZMDI86MIXePuDmME5QU8qF//tJj9MK5WAcss90dAM
93nvZ641PpWEbAyI/ARp7yznq/Tdsur4P24IOPa6EroD517i+S57QEzEXNVfVt7j
wKMSpdC/hZUeAfuZp/K6aMYYviuyOgIfbKqRiRRRAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAEoCSc1gV3EoOBl4cEfQ3x/J2eP+0g4jtSesgQ7CJPvfBUiHkuHGaqet
CghR+nrpXRY//B6fzErgxMNnoOj/QSVCa4ZTSGplp0iJc4RLHcPtHusm81ireFq4
RXdzLXI4yo5sdRLuQPuyTy4im7mY+7U27XgFnAFKub3i/A7xF4GVgQ0HkpWEmNH1
0rqx1xWrMYKT22IDg+HGOVGUuCCH7hH04A7J9H2YC72/ZkhBsuPwgwh5ZbvfqA4U
DaXTQp6wkmoiW4L19FuUU3sfMYsXpxvxu7m24TmbrTE+n5OW5soZrUUP7xVtK6//
s0dkw1JlmhwWybo5ujS1bti6r/0kb8w=
-----END CERTIFICATE-----
Signaturee1A8dltyXjyyhKkr3+2w6Mpre6vbhhHW/pL0CE1KNFQW35byKar5qO1W1RHimxdX
ori0ncuJB9azZQQi8McQY3PornhWfF5doSxMOZ4CcqkBIPJV4x8uXmabrzI1y97b
ti4TQwynQna94wM/HcozyjFuSQuDFNpvVIi+Ebgu5OaejhB/cr3XKeUYuZTHTt9w
aw3QynmGqrqSLBKnn09t2mTxliEpu7WrrZwc/jXaAm8dgTDKGXyo+3aSVgikNfIW
Ph3x1BW85Id6v32cQvUCh33YbLPIEr/mFWF4a7oltEJ5T83wnxesJfQKNK0QuJMp
Wei1isDl4lByBNuXecpIfjUOq+WDSfUX6O/lqDWtlw5sHzG6kBy4cr89vWl25Mx3
F0FZM3su36ZgSjM1BK6++VOBsp9+Y9BYn51QI4Scpza6uxP+sNLdcTK0Aog0XkP8
NvYlmq58AkDtiTLSE8PFySvhVshydRTBeP7UFGkcMCEBHEYIwCEyAHOEDSNPGr7k
q+ymyUAeAoxFrhcK66rhjSdTpBJNicffghyQKgMj73hl9ad5dA85H5WgcBJSngIA
LEPtwL6pcfOYYqpCRqLpc6CxBxNVnaY6OY40da3OYfmClAa+LzBEe17lY90qoOQe
sJ9Eb5X3p7Jp/QKE3abDyTKINrmmj92fQEM+x1Vv1nQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<33.0.0
Minimum Integer bits32
FinTrack 1.10.0
Release Details
UpdatedJuly 9, 2026, 6:17 a.m.
Changelog

Added

  • Upcoming Recurring card on the Dashboard. Shows the next 3–5 recurring transactions due in the next 5 days (including anything already overdue), with a relative due label (Today/Tomorrow/In Nd/Overdue Nd) and a one-click "Post" from the Recurring page's row action. Empty state shown when nothing is due in the window.
  • Rule-based auto-categorization on CSV import. New "Auto-Categorization Rules" section in Settings → Data Management: an ordered list of pattern → category rules. On import, any row without a category has its description checked against these rules (first case-insensitive substring match wins) and is categorized automatically; rows with an explicit category are left untouched. The import result toast now reports how many rows were auto-categorized. New endpoints: GET/POST /api/category-rules.
  • Automatic backup before Reset All Data. Before a reset deletes anything, a full JSON snapshot of the user's data is now written to Nextcloud Files at /fintrack/backup/fintrack-backup-<timestamp>.json. If that write fails (permissions, quota, etc.), the reset still proceeds but the browser downloads the same JSON snapshot instead, so the data is never lost silently. The reset confirmation dialog now explains this.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhOOMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNzA3MTA1NzE3WhcNMzYxMDEyMTA1NzE3WjATMREwDwYD
VQQDDAhmaW50cmFjazCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOm2
zk5LcAvB3gIVCsAYm7/61Hr0W/Ek0LUsD2namI/WzAT296cPb5BExJCdNJ5AlMeF
521czFr63TNZejFKu7F+oTXdZWz3X+oXJWOEO0eh2MWD2/gU4XgEfagbaKNi6rft
1lcbi3nCXpPddqIAW15NLL01IeSZr/IZ8qW+eEXK5gGB2/UDKHOLqLr+Bhhypnf0
bt1J9yq5idRRGoyJLG+1cIsNWKkzMAqmGaUA/eCH3yRR43NpAH+eSobA50AMAyzl
+OQvxRYPN40bOHgG/j5w0/AxywAc8KI9NiFbixz0BAiRrDSbkQGtDstQsOh2STBD
ZqtMBVAhatCGmlzDs8HL08KQtcHT4U5L/B6yDfwT9/5PiXjc4j4sbKQq3C/2DeWd
YcbAaCT45RkjkBKmmfdhhjA6m8TtQ3o1KEmTdIfoo8Kq+pgiyVjnq0gw8029Hbja
umvWKsOyhehWeoGRZKOf7iJTpu6gj3KbfHTDW5ie1WzeRV7RKPDz1GtkG4cyFQkz
UKnGfDmO5O/SgC552AcCoHkZMDI86MIXePuDmME5QU8qF//tJj9MK5WAcss90dAM
93nvZ641PpWEbAyI/ARp7yznq/Tdsur4P24IOPa6EroD517i+S57QEzEXNVfVt7j
wKMSpdC/hZUeAfuZp/K6aMYYviuyOgIfbKqRiRRRAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAEoCSc1gV3EoOBl4cEfQ3x/J2eP+0g4jtSesgQ7CJPvfBUiHkuHGaqet
CghR+nrpXRY//B6fzErgxMNnoOj/QSVCa4ZTSGplp0iJc4RLHcPtHusm81ireFq4
RXdzLXI4yo5sdRLuQPuyTy4im7mY+7U27XgFnAFKub3i/A7xF4GVgQ0HkpWEmNH1
0rqx1xWrMYKT22IDg+HGOVGUuCCH7hH04A7J9H2YC72/ZkhBsuPwgwh5ZbvfqA4U
DaXTQp6wkmoiW4L19FuUU3sfMYsXpxvxu7m24TmbrTE+n5OW5soZrUUP7xVtK6//
s0dkw1JlmhwWybo5ujS1bti6r/0kb8w=
-----END CERTIFICATE-----
SignaturePL/8zzttHLylXnEjaXYRjeO+VJHgXDN22BkvLKY98xdvv9wzaTPv2b0HPBI9G/Tm
umWSFqnYw8hQ2Q/RXiMK0VG3qSJbwaU7b5nBm/cgZtWQPhGY/3nnFxcSrPOOrA5X
Rdetxw5Gjkggw0rvh40s7Hd1f4H8NBITw9j5GOCT1nhw/RSIk9w0fHdBsqX8ClQ5
KlZP85NO2QqmJ7adjcWwptgBE8j4adf4jbMXGx34CdX/iQLCC9iwjt5CX0m9AWvL
7ICRw+lYAnUKfTggniS3Cj8loyysSsZajDP4VxfNAHqgkrSna/GIHMmwroF3G/fn
qwpodgCpUNulylGr6Rn7rtDRpV99Cn1gb0bU0ZER2wncWHsECAn/c/ubkRG2DuAU
QnTOfj2rCbMYTBFWkWktntI98Y4MApdyozdtfqqtzUVPCFezRvc8t5jPP5VsgPzp
0TA2R1XR2m0HfF3MX5BG7UB/l3Kni1GlcKadFKiUCjGr+uaTBP/u6kU1QY0NysNd
1TTpmfpLhSvZETiAGj2og9wzfqF2ByUMWf1zUXRYgkj3s79CSZjgzY9Py5rUh6bH
/7M5YJKU+8T49GYtBwZsS9lRFA6aoMV1kdMkD801zOaQT22fQyuUwxEmx9dgz2A7
bQsim3fWWNNWyrH+ox8J9H6epKxhTh4Fjbj0OLSDT+E=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<33.0.0
Minimum Integer bits32
FinTrack 1.7.7
Release Details
UpdatedJuly 7, 2026, 1:16 p.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhOOMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNzA3MTA1NzE3WhcNMzYxMDEyMTA1NzE3WjATMREwDwYD
VQQDDAhmaW50cmFjazCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOm2
zk5LcAvB3gIVCsAYm7/61Hr0W/Ek0LUsD2namI/WzAT296cPb5BExJCdNJ5AlMeF
521czFr63TNZejFKu7F+oTXdZWz3X+oXJWOEO0eh2MWD2/gU4XgEfagbaKNi6rft
1lcbi3nCXpPddqIAW15NLL01IeSZr/IZ8qW+eEXK5gGB2/UDKHOLqLr+Bhhypnf0
bt1J9yq5idRRGoyJLG+1cIsNWKkzMAqmGaUA/eCH3yRR43NpAH+eSobA50AMAyzl
+OQvxRYPN40bOHgG/j5w0/AxywAc8KI9NiFbixz0BAiRrDSbkQGtDstQsOh2STBD
ZqtMBVAhatCGmlzDs8HL08KQtcHT4U5L/B6yDfwT9/5PiXjc4j4sbKQq3C/2DeWd
YcbAaCT45RkjkBKmmfdhhjA6m8TtQ3o1KEmTdIfoo8Kq+pgiyVjnq0gw8029Hbja
umvWKsOyhehWeoGRZKOf7iJTpu6gj3KbfHTDW5ie1WzeRV7RKPDz1GtkG4cyFQkz
UKnGfDmO5O/SgC552AcCoHkZMDI86MIXePuDmME5QU8qF//tJj9MK5WAcss90dAM
93nvZ641PpWEbAyI/ARp7yznq/Tdsur4P24IOPa6EroD517i+S57QEzEXNVfVt7j
wKMSpdC/hZUeAfuZp/K6aMYYviuyOgIfbKqRiRRRAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAEoCSc1gV3EoOBl4cEfQ3x/J2eP+0g4jtSesgQ7CJPvfBUiHkuHGaqet
CghR+nrpXRY//B6fzErgxMNnoOj/QSVCa4ZTSGplp0iJc4RLHcPtHusm81ireFq4
RXdzLXI4yo5sdRLuQPuyTy4im7mY+7U27XgFnAFKub3i/A7xF4GVgQ0HkpWEmNH1
0rqx1xWrMYKT22IDg+HGOVGUuCCH7hH04A7J9H2YC72/ZkhBsuPwgwh5ZbvfqA4U
DaXTQp6wkmoiW4L19FuUU3sfMYsXpxvxu7m24TmbrTE+n5OW5soZrUUP7xVtK6//
s0dkw1JlmhwWybo5ujS1bti6r/0kb8w=
-----END CERTIFICATE-----
SignatureUkVtMKrQ8Qy8fckVkMYHKFdVSkgsArly8HVmLOkHGfjZOpEHuQB55f7Cv/wsRogB
t9nywB9bQPznIb+AZlD04n1MGHd5A1LGLM8O9y4Y5uE/uqBM9vBSDrEYqWSjRZrY
CiJ5dv7qGRqEOZwO8FhxdkfvLIVFMgHwfC8KZth7NtVczdOCs+beNn18PuCDeNb9
0OQLUbHvG9dDNS+El+Hscm+W9wsllDvi5UNCSuuYluQJlEmq9t9OG6APxbaHsiKn
vUF8N+QL0TdLMTyEOWgAD2m6u3CQrYmtj8TiSXegVx6wLzKM4Dtf2m4suWxLROMt
4L8bzM1n3ptJkYIXiPvoaS4Qo+n5m7O3ntxHFh1K/iKGa0C/ho/nenxdq7kt+/7b
3W/pev516JOAv6+mHvv592Bi/j5LYiFfVR989pFKqXdssQT1VlgkDl9ETx9mAZW+
YRKMwVu3d96ajenTNW/c1obSZspHTk2EcGp2m2QwJ1/PtG660DijxqPm30y10p0q
KnX4xJVMyZRoX7PEwZjGX2QrYWXlhCI0I80THzvOuuZDAnlAHr9z3btg5Ocl3G03
OZG/qa2bCu6UCa2ZFgJeZ6f7VetF/WhKQQX4f76BmPYF+xZxwpGpzsQbnGr+ZcU2
JqujQCrBmtd48NDJGTOtoYqwIM6sfwguJn4VYYnh2ao=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<33.0.0
Minimum Integer bits32