Gnucash is good. But you need to tune it yourself.
It crashed at the very beginning, I think when I tried to load CSV data.
I did not have the patience.
My program runs much faster, without lag, and is very stable.
Written in tcl/tk+sqlite3. It is really simple. There is a lot to improve,
I have new ideas, but since it works for my purposes, I do not improve it.
For the bookings I use mainly three tables:
(1) the first for the accounts plan, accounts distributed as tree
(node, parent, position, label and some metadata on each entry).
(2) the second has an entry for each booking and contains metadata for
the booking. Here is among others the date of the booking.
(3) the third refers to the second and the first, has many entries for
each booking, representing debet or credit in an account for that booking.
On each entry is the valuta date. It would have been good to put here
the currency name, but I did it in the above one.
I have a table for annual balances, other tables for configuration, some
tables have configuration scripts, for example for classifying entries
from my bank account and converting them in a booking in my system,
or for doing booking according to the calendar.
After having the db architecture, there are some routines to write,
for example for calculating balances (according to valuta or booking date),
or for representing the data / balance, or for manually entering a booking.
No GnuCrash needed!