As a programming freelancer with a wide area of expertise, I sometimes jungle with very different projects. From working in Rust developing blockchain to image analysis using deep learning, I need a flexible application where I can store my thoughts, my data, and my scheduling.
Creating a custom application tailored to your needs is not ideal because we end up spending more time maintaining the application than working on your projects. In this case, I took the leap and developed OpenJournal with these criteria in mind:
As a Qt developer, I choose the Qt framework for this project. The QMarkdownTextEdit and the QWebEngine make it easy to concentrate on the features instead of the Markdown parsing and rendering. For the calculation, I used the wonderful Qalculate! project.
The data are stored in an SQLite database for efficiency. We left the possibility to connect to a MariaDB server if several users want to share the same journal or wish to password-secure their own (at one point, I even developed a cloud-based service to store journals).
QMarkdownTextEdit provides the Markdown syntax coloring. We slightly adjusted the QWidget to add some smart features like image insertion by drag and drop and autodetection of URL or URI for smart Markdown tags completion. Entire Markdown documents can be inserted using drag and drop.
The rendering is performed using web technology and Marked.js. The only modification was to enable the rendering of LaTeX and Qalculate! results.
![]() |
---|
Figure.1 - Copy any image from URL |
![]() |
---|
Figure.2 - Drag and drop capabilities |
![]() |
---|
Figure.3 - Smart URL and URI |
Qalculate! provides a lot of functionalities to perform calculations and conversions. We integrated the tool inside OpenJournal, and the text is natively parsed, computation is done using QCalculate!, and the result is rendered. Combined with LaTeX rendering, it can be a powerful tool to take notes when maths are needed.
![]() |
---|
Figure.4 - Units conversion |
![]() |
---|
Figure.6 - Example of a computation rendered using LaTeX |
The entire journal can be exported in PDF for archiving, and individual entries can be saved as PDF or Markdown. In fact, OpenJournal can be used as a standalone Markdown editor with this feature (this blog post was written using OpenJournal).
![]() |
---|
Figure.5 - OpenJournal as a standalone editor |
Now that we have the tool, let’s talk about note-taking. In my case, OpenJournal serves several purposes. The first is that of a planner. With each entry associated with the calendar, I can write meetings and set alarms at different times to ensure I get everything. I can also write deadlines and daily tasks to perform.
The secondary usage is as a journal where I note anything I need later. For example, interrupted in a coding task, I will record my train of thought to resume the job more quickly. I also write bugs and interrogations that I encounter during my coding task (that I can not investigate at the time due to evident pay-job reasons) so I can investigate them more appropriately later. Another job is to record any data analysis I perform, thanks to images and Markdown documents smart integration.
We built a very highly specific tool to meet our particular needs, but several people can benefit from it:
OpenJournal is open-source, and precompiled binaries are available for Linux, Windows, and Mac at https://github.com/bgallois/OpenJournal/releases/tag/v1.3.2 with complete documentation at https://openjournal.readthedocs.io/en/latest/.