ezBookkeeping

ezbookkeeping.mayswind.net
ezBookkeeping

A lightweight, self-hosted personal finance app for recording daily transactions and analyzing spending patterns. Self-hosted, with all data staying on your own server. Supports 2FA and OICD.

Open Source

ezBookkeeping Source Code

Author

mayswind

Description

ezBookkeeping is an open source, powerful, self-hosted personal finance app that is easy to use.

#accounting#app#bookkeeping#docker#expense-manager#expense-tracker#expenses#finance#finance-management#finances#financial#golang#homelab#mobile#money#money-manager#personal-finance#self-hosted#typescript#vue

Homepage

https://ezbookkeeping.mayswind.net

Repository

  • LicenseMIT
  • Created17 Oct 20
  • Primary languageGo
  • Size25,740 KB
  • Stars5,644
  • Forks691
  • Watchers5,644

Language Usage

Language Usage

Project Health

  • Last commit6 days ago
  • Open issues15
  • Latest releasev2.0.0

Recent Commits

  • Albert Brugués(23 Sept 26)

    update spanish translations (#693)

  • MaysWind(23 Sept 26)

    API tokens no longer support creating / revoke other tokens, clearing data, updating user profile, configuring two-factor authentication, configuring external authentication or configuring application settings sync

  • MaysWind(19 Sept 26)

    update the style of the chevron icon

  • MaysWind(19 Sept 26)

    add new contributor

  • albanobattistella(19 Sept 26)

    Update Italian localization (#685) * Update Italian localization --------- Co-authored-by: mayswind <[email protected]>

  • MaysWind(18 Sept 26)

    update spacing between text elements

  • MaysWind(18 Sept 26)

    add an Add Transaction button widget on mobile version

  • MaysWind(18 Sept 26)

    update the sign in page styling when no sign in methods are enabled

  • MaysWind(18 Sept 26)

    add new contributors

  • Quentin Marois(18 Sept 26)

    fix mobile OIDC login without internal auth (#680) Fix #679

  • Ludwig J. Marx(18 Sept 26)

    fix(services): resolve negative monthly schedules in the template time zone (#677) * fix(services): resolve negative monthly schedules in the template time zone A scheduled template with a negative monthly frequency value, which counts back from the end of the month, resolved that value against the time zone of the server. The day it is then checked against is taken from the template time zone. When the two are in different months the resolved day no longer matches, and the transaction is silently skipped. Measured against a template in UTC-12 scheduled for the last day of each month, due at 2027-02-28 12:00 UTC: server TZ server date transaction UTC 2027-02-28 created Europe/Berlin 2027-02-28 created Etc/GMT+12 2027-02-28 created Pacific/Kiritimati 2027-03-01 skipped Etc/GMT-14 2027-03-01 skipped February 2027 has 28 days, so -1 has to resolve to 28. On a server 14 hours ahead it resolved to 31, the length of March, and the check against day 28 then failed. Resolving against the UTC time of the run instead is a smaller change and holds for the values the UI offers, which are -1 to -3. It does not hold in general: the API applies no range check, and for a template in UTC+3 due on 2027-05-01 the run is at 2027-04-30 21:00 UTC, so -31 is resolved against April and yields 0 instead of 1. Taking the time that the day check itself uses removes the question. The transaction time and the frequency values now come from one function, so the caller can no longer pass a reference time other than the one it compares against. * refactor(services): reorder the existing code instead of extracting a helper Follows the review feedback. The transaction time is now computed before the monthly frequency values are resolved, so the resolution can use it without a separate function, and this file keeps every function on the service instance. The helper and its unit test are gone with it. The logic is no longer reachable in isolation, and the package has no database-backed tests that could exercise CreateScheduledTransactions as a whole, so this version carries no test. The measurements in the pull request description were repeated against this version rather than carried over. A template in UTC-12 scheduled for the last day of each month, due at 2027-02-28 12:00 UTC, creates the transaction on all five server time zones, where two of them skipped it before. The control run of 102 combinations, 17 template zones against 6 server zones, stays correct.

  • Ludwig J. Marx(17 Sept 26)

    test(models): build edit scope boundaries in the time zone under test (#678) The edit scope tests pass a fixed zone, built from the server's current UTC offset, into CanEditTransactionByTransactionTime, but they built the expected boundary in time.Local. In a zone that observes daylight saving time the two differ as soon as a transition sits between that boundary and today, so the expected value is off by one hour and the assertion fails. Which of the tests fails depends on where the transition falls. Measured on 2026-09-17, `go test -count=1 ./pkg/models/`: TZ before UTC ok Europe/Berlin ScopeIsThisYearOrLater America/New_York ScopeIsThisYearOrLater Asia/Kolkata ok Australia/Sydney ScopeIsThisYearOrLater America/Santiago ScopeIsThisMonthOrLater Pacific/Auckland ScopeIsThisYearOrLater Pacific/Chatham ScopeIsThisYearOrLater America/Sao_Paulo ok Asia/Kathmandu ok Santiago moved its clocks on 6 September, inside the current month, so there it is the month boundary that misses rather than the year boundary. The zones without daylight saving time pass either way, and so does UTC, which is why a runner in UTC never reports this. `-count=1` matters here: without it the cached result of an earlier run is reported for every subsequent zone, since the time zone is not part of the cache key. Building the boundary in the same zone the assertion is made against removes the difference. All ten zones above pass afterwards, as does `go test ./...` in UTC, Europe/Berlin and America/Santiago. Setting `timezone` to `time.Local` instead makes the tests pass just as well, measured in UTC, Europe/Berlin, America/Santiago and Pacific/Chatham. It was not taken because it changes what is under test: `GetClientTimezone()` returns a fixed zone whenever the request carries only `X-Timezone-Offset` and no `X-Timezone-Name`, and these tests are the ones covering that path.

  • MaysWind(17 Sept 26)

    fix content overflow in the transaction calendar in some cases

  • MaysWind(17 Sept 26)

    update the margins of trend chart widgets

  • MaysWind(17 Sept 26)

    fix incorrect margin calculation when a switch component is hidden

  • MaysWind(17 Sept 26)

    bump version to 2.0.1

  • MaysWind(16 Sept 26)

    increase the close delay for the tooltip of statistics data

  • MaysWind(16 Sept 26)

    fix the incorrect border color when a toggle button is selected

  • MaysWind(16 Sept 26)

    clear cached data on the overview page when adding or deleting an account

  • MaysWind(16 Sept 26)

    change the default background colors of the Asset Summary and Current Month Overview widgets on mobile version

  • MaysWind(16 Sept 26)

    fix Home and End keys not working after opening a dialog

  • MaysWind(16 Sept 26)

    update close button tooltip

  • MaysWind(16 Sept 26)

    redesign the settings page layout on desktop version

  • MaysWind(16 Sept 26)

    keep the local time unchanged when updating the time zone during transaction import

  • MaysWind(16 Sept 26)

    not allow to change filter criteria when editing imported transaction

  • MaysWind(16 Sept 26)

    move the Batch Apply Rules button from the menu to the dialog panel

  • MaysWind(16 Sept 26)

    add aria attributes

  • MaysWind(14 Sept 26)

    update the margin for transaction category icons and time zone information

  • MaysWind(14 Sept 26)

    object storage supports the s3 type using the official AWS sdk

  • MaysWind(14 Sept 26)

    update project description

ezBookkeeping Security

4.2/10

Repo Security Summary

Updated 24 Aug 26

  • Code-Review0/10
  • Maintained10/10
  • Token-Permissions0/10
  • Dangerous-Workflow10/10
  • CII-Best-Practices0/10
  • Binary-Artifacts10/10
  • Security-Policy0/10
  • License10/10
  • Fuzzing0/10
  • Signed-Releases0/10
  • Branch-ProtectionN/A
  • Packaging10/10
  • SAST0/10
  • Pinned-Dependencies0/10

Security Advisories (2)

  • highPatched

    GHSA-p6qr-48g6-97q3TOTP Replay Attack - Same Code Accepted Twice Within Valid Window (RFC 6238 Violation)

  • highPatched

    CVE-2026-86041Source-IP allowlist (MCP & API token) is bypassable via a spoofed `X-Forwarded-For` header

ezBookkeeping Website

Website

ezBookkeeping - a open source, lightweight, self-hosted personal finance app

ezBookkeeping is a open source, lightweight, self-hosted personal finance app with a user-friendly interface and powerful bookkeeping features.

Redirects

Does not redirect

Security Checks

All 65 security checks passed

Server Details

  • IP Address185.199.110.153
  • Hostnamecdn-185-199-110-153.github.com
  • LocationFrancisco,Indiana,United States of America,NA
  • ISPGitHub Inc.
  • ASNAS54113

Associated Countries

  • USUS

Safety Score

Website marked as safe

100%

Blacklist Check

ezbookkeeping.mayswind.net was found on 0 blacklists

  • AntiSocial Blacklist
  • Artists Against 419
  • Badbitcoin
  • Bambenek Consulting
  • CERT Polska
  • CoinBlockerLists
  • CRDF
  • CryptoScamDB
  • EtherAddressLookup
  • EtherScamDB
  • Fake Website Buster
  • MetaMask EthPhishing
  • NABP Not Recommended Sites
  • OpenPhish
  • PetScams
  • PhishFeed
  • PhishFort
  • Phishing.Database
  • PhishStats
  • PhishTank
  • Phishunt
  • RPiList Not Serious
  • Scam.Directory
  • SecureReload Phishing List
  • Spam404
  • StopGunScams
  • Suspicious Hosting IP
  • ThreatFox
  • ThreatLog
  • TweetFeed
  • URLhaus
  • ViriBack C2 Tracker

Website Preview

Website preview

ezBookkeeping Reviews

More Secure Budgeting

About the Data: ezBookkeeping

Change History

Edit ezBookkeeping Data

You can edit ezBookkeeping's entry in this section of awesome-privacy.yml by submitting a PR to our GitHub repo.
Note that some of the information shown above has been aggregated from external sources, a list of these can be found data documentation.

Origin Data

Modify Data

API

You can access ezBookkeeping's data programmatically via our API. Simply make a GET request to:

https://api.awesome-privacy.xyz/v1/services/ezbookkeeping

The REST API is free, no-auth and CORS-enabled. To learn more, view the API Docs or read the API Usage Guide.

Share ezBookkeeping

Help your friends compare Secure Budgeting, and pick privacy-respecting software and services.
Share ezBookkeeping and Awesome Privacy with your network!