In this post, I want to talk briefly about the technical components InvMon is built on. This is a software and technology deep dive, not a discussion about finance or features—so if you’re more interested in how InvMon can help you invest and track your finances, feel free to skip this one. (I’ll cover those topics in future posts.)
This blog post was sparked by a question from Thomas Spiegl, founder and CEO of irian.at, a cool and competent technology consulting and software company I’ve worked with in the past. They’re based in Vienna, Austria.
InvMon is a desktop application for Macs and Windows PCs. It’s not a mobile app or a web application.
Eclipse RCP and SWT
InvMon is built using Eclipse RCP (Rich Client Platform) and SWT (Standard Widget Toolkit). I had used Eclipse RCP for an early InvMon predecessor back in 2006, so when I started work on InvMon in 2022, it was my default choice. Eclipse RCP comes with a steep learning curve and its share of quirks, but it remains a powerful platform for desktop development. Alternatives exist in today’s Java ecosystem, but Eclipse RCP fit my needs. The hardest parts were implementing a polished dark mode and handling Mac/Windows interoperability.
Swing
Yes—some of InvMon’s code still uses Swing through Eclipse’s SWT-AWT bridge. This traces back to my 2006 prototype. The SWT-AWT integration, especially on macOS, is fragile and took me a long time to stabilize. In hindsight, I wouldn’t do it again; charts could just as well have been drawn directly on an SWT canvas. Still, Swing’s JTable offered something valuable: the ability to redraw only individual cells. That’s perfect for InvMon’s instrument monitors, where each row consists of two columns—prices on the left, charts on the right. Since prices can update multiple times per second, being able to refresh just the left cell without redrawing the chart makes JTable a surprisingly good fit.
Custom Charting
All charts in InvMon are rendered by a small, custom-built charting engine. I initially used JFreeChart, which is excellent, but it didn’t support the specialized chart types I needed (e.g., custom exposure and investment charts). Once I implemented those myself, I decided to remove the JFreeChart dependency entirely. Having my own charting API will also make it easier to add interactive features in the future, such as dragging target exposure levels directly within a chart.
Data Storage
InvMon uses the H2 database engine. I started with MySQL, but when I shifted toward an installable end-user application, I needed something lightweight and embeddable. H2 exceeded my expectations—it’s fast, reliable, and simple to integrate.
Data access is done using a lightweight custom developed OR mapping layer built upon the Spring JDBC Template. For schema management, I use Liquibase (Open Source edition). I had used Flyway before, but chose Liquibase for InvMon and I’m happy with the decision, even though Flyway would have worked just as well.
Java Libraries
InvMon makes use of several well-known Java open source libraries, including Apache Log4J, commons-collections, commons-io, Spring JDBC and others.
Custom UI Framework
All of InvMon’s forms and dialogs are implemented using a lightweight custom UI framework. It uses XML (via JDOM) and Java properties files to define and persist things like the data dictionary, DB mappings, field dependencies, validations, labels, and UI layout definitions.
Installer
The installer is built with install4j. I used it back in 2005 when it was still maturing, but today it’s a polished and impressive tool. I’d recommend it without hesitation for any Java software installer project.
Billing & Subscriptions
Turning InvMon into a commercial application required infrastructure for subscriptions, licensing, billing, and payments. For this, I use Kill Bill, an open source billing platform. It provides powerful backend functionality (subscriptions, invoicing and payment plugins) but no end-user UI, so I built that layer with Spring MVC and JSPs. Kill Bill has a learning curve and requires custom Java integration, but it’s reliable and extensible.
Website & Tools
I’ve built the InvMon website using WordPress. I’m impressed by WordPress. It’s a flexible, powerful and reliable platform that has served me well. I used Gimp for image editing and Inkscape for the design of InvMon’s application icons. My goto text editor outside of Eclipse is Sublime Text.
Hardware
I used Macs in the ’90s and switched to Windows PCs in the 2000s. InvMon was first developed on Windows, but I eventually got a modern Mac to support the macOS version of InvMon. Since 2023, about 95% of my work has been done on a MacBook Pro.
Use of AI
InvMon is 100% hand-coded. However, I’ve been using ChatGPT as a sparring partner and to help with website content since 2023. I recently started using Claude Code for the development of supporting tools and the implementation of unit tests.