Skip to content

Releases: mariuz/flamerobin

FlameRobin 26.7.3

Choose a tag to compare

@mariuz mariuz released this 08 Jul 20:06

FlameRobin 26.7.3 — Reconnection & Theme Fixes

Released: 2026-07-08

This patch release contains critical fixes for database reconnection behavior after connection loss and a Windows 11-specific light theme issue when system-wide dark mode is enabled.


🔌 Reconnect Menu Enablement after Connection Loss (fixes #636)

When a database connection was dropped, isConnected() correctly started returning false. However, this state incorrectly disabled the "Reconnect" menu item itself, as its UI update handler was gated by OnMenuUpdateIfDatabaseConnected. Furthermore, clicking the "Database" menu in this state could trigger other handlers expecting an active connection, leading to confusing "Error writing data to the connection" popups.

Fix:

  • Updated the update-UI event mapping for Cmds::Menu_Reconnect to bind to OnMenuUpdateIfDatabaseNotConnected (instead of OnMenuUpdateIfDatabaseSelected).
  • This ensures the "Reconnect" option remains enabled and interactive precisely when the database is in a disconnected state, allowing the user to initiate a reconnect without errors.

🎨 Light Theme Ignored on Windows 11 in System Dark Mode (fixes #643)

On Windows 11 systems running in system-wide dark mode, choosing the "Light" theme in FlameRobin's preferences would be ignored during application startup, resulting in the app defaulting to dark mode.

Fix:

  • Corrected the theme initialization logic in Application::OnInit() to check if the user's explicit preference is ThemeLight.
  • If ThemeLight is chosen, the application appearance is set to Appearance::Light, and the Windows dark mode initialization (MSWEnableDarkMode()) is skipped.
  • Otherwise, the app defaults to dark or system settings, and runs dark-mode setup appropriately.

Commits in this release

Commit Description
fb1c69c2 Bump version to 26.7.3 and update changelog
44b1554f fix: enable Reconnect menu when database is disconnected (issue #636)
9103fd0d Fix Light theme being ignored on Windows 11 when system is dark (fixes #643)

Full diff: v26.7.2...v26.7.3


Upgrading

Drop-in replacement for v26.7.2. No database or configuration migration required.

FlameRobin 26.7.2 — Theme & Readability Fixes

Choose a tag to compare

@mariuz mariuz released this 07 Jul 10:11

FlameRobin 26.7.2 — Theme & Readability Fixes

Released: 2026-07-07

This patch release closes three open bug reports — all related to colour, theme, and readability — making FlameRobin look great in both light and dark mode out of the box.


🎨 Default Light Theme Redesign (fixes #642 — "Hex-rated Crisis")

The default stylers.xml palette has been completely overhauled. The old scheme relied on harsh, neon-saturated hex codes inherited from an early Notepad++ port — pure 0000FF blue keywords, FF8000 neon-orange numbers, 800080 magenta type-names — producing eye-straining, low-contrast results. Every colour in the new palette meets WCAG AA contrast (≥ 4.5:1) on white.

SQL Lexer

Token Before After
Keywords (SELECT, FROM, WHERE …) 0000FF harsh pure-blue, bold 0550AE deep blue-indigo, bold
Numbers FF8000 🔴 neon orange 0E7C5F calm teal-green
String literals 808080 flat grey (low contrast) 953800 earthy sienna-brown
Secondary keywords / types 800080 saturated magenta 6639BA muted purple-indigo
Operators 000080 navy, bold 393A34 dark charcoal, bold
Comments (--, /* */) 008000 bright green 57606A slate grey

Diff Lexer

Token Before After
Deleted lines Dark-red text only 82071E on FFEBE9 pale-red tint
Added lines Plain blue text 116329 on DAFBE1 pale-green tint
Position marker FF8000 neon orange 0E7C5F teal

Global Editor Chrome

Element Before After
Default font Courier New Consolas (crisper rendering)
Current-line highlight E8E8FF purple wash F0F6FF subtle blue
Selection C0C0C0 flat silver BDD7F5 soft sky blue
Text cursor (caret) 8000FF neon violet 0550AE deep blue
Edge / indent guides 80FFFF neon cyan D0D7DE light grey
Brace match Red text Green text on mint tint
Fold markers Hard grey Harmonious 8C959F / F6F8FA
Whitespace dots FFB56A neon peach AFBAC4 muted grey
All Mark Styles (1–5) Pure neon (00FF00, 0080FF, 8000FF …) Accessible pastels (sky-blue, amber, yellow, violet, mint)
Find Mark highlight Pure FF0000 red FFD966 soft amber

🌙 Light Theme Ignored in System Dark Mode (fixes #633)

When a user explicitly chose the Light theme in Preferences but their OS was set to dark mode, FlameRobin ignored the preference — the SQL editor and other panels rendered in dark colours regardless.

Root cause: Several call sites queried wxSystemSettings::GetAppearance().IsDark() directly instead of honouring the stored preference.

Fix: All three remaining direct appearance checks have been replaced with FRStyleManager::isEffectivelyDark(), which correctly respects the user's stored ThemeLight=1 / ThemeDark=2 / ThemeSystem=0 setting:

  • PrintableHtmlWindow.cpp — HTML report background colours
  • ExecuteSqlFrame.cpp — statistics pane text colours (×2)
  • SchemaVisualizationFrame.cpp — schema diagram JSON payload

🌙 SQL Editor / BLOB Editor Unreadable in Dark Mode (fixes #615)

This release extends the dark-mode fix from v26.7.1 with one additional coverage gap:

BLOB Text Editor (EditBlobDialog) — newly fixed

The BLOB text editor (blob_text wxSTC control inside Edit BLOB dialog) was never connected to stylerManager(), so it always rendered with Scintilla's hard-coded white background regardless of theme.

Changes in EditBlobDialog.cpp:

  • Added #include "gui/FRStyleManager.h"
  • Called stylerManager().assignGlobal(blob_text) during do_layout() so the initial open honours the active theme
  • In blob_textSetReadonly(false): replaced the hard-coded "WHITE" background + StyleResetDefault() (which wiped theme colours back to Scintilla defaults) with a theme-aware restore via stylerManager().getGlobalStyle()->getbgColor() + re-applying assignGlobal()

Commits in this release

Commit Description
97358ac6 Bump version to 26.7.2
b67f8290 fix(#642): redesign default light theme palette in stylers.xml
1012eeaa fix(#615): apply dark theme to BLOB text editor in EditBlobDialog
e395e32c fix(#633): use isEffectivelyDark() in SchemaVisualizationFrame

Full diff: v26.7.1...v26.7.2


Upgrading

Drop-in replacement for v26.7.1. No database or configuration migration required.

If you had previously customised stylers.xml, your file will not be overwritten on upgrade — your custom colours are preserved.

FlameRobin 26.7.1

Choose a tag to compare

@mariuz mariuz released this 01 Jul 21:07

FlameRobin 26.7.1

FlameRobin is a cross-platform GUI administration tool for Firebird DBMS. This release focuses on complete dark mode support, service manager completions, and new Firebird 5 diagnostics.


Dark Mode & Theme Fixes

SQL Editor Unreadable in Dark Mode (#615)
Fixed four root causes that made the SQL editor unreadable when using a dark theme:

  1. assignWordStyle() unconditionally applied bg/fg colours even when the XML entry had no colour attribute — a white sentinel value contaminated every style slot. Fixed via new hasBgColor()/hasFgColor() flags.
  2. assignGlobal() called StyleResetDefault() mid-loop, temporarily resetting Scintilla slot 32 to system-light defaults. Removed the call.
  3. SqlEditor::setupStyles() called assignGlobal() twice with StyleClearAll() between them in the wrong order. Corrected to: SetLexer then assignGlobal (ends with StyleClearAll) then assignLexer then assignMargin.
  4. ExecuteSqlFrame::setupStyles() called stylerManager().loadConfig() which was a no-op that risked infinite observer recursion. Removed the redundant call.

Light Theme Ignored When System Is in Dark Mode (#633)
Added FRStyleManager::isEffectivelyDark() which honours the user's explicit theme preference (ThemeLight=1 / ThemeDark=2 / ThemeSystem=0) instead of querying wxSystemSettings::GetAppearance().IsDark() directly. Replaced all three direct appearance checks in PrintableHtmlWindow.cpp and ExecuteSqlFrame.cpp that bypassed the user preference.


Service Manager Enhancements

Database Shutdown and Startup in FbCppService (#639)
Replaced stub shutdown()/startup() methods that previously threw "not implemented yet" errors with proper Firebird Service API calls via isc_action_svc_properties:

  • shutdown() builds an SPB with the correct shutdown mode flag (Forced, DenyTransactions, or DenyAttachments) and the specified timeout, then waits for service completion.
  • startup() brings a database back online using isc_spb_prp_db_online, matching IBPP Restart() behaviour.

Firebird 5 Features

Compiled Statement Cache Visibility
Implemented display of Firebird 5 Compiled Statement Cache statistics in the database properties view. DBAs now have direct visibility into server-side compiled plan cache hit/miss metrics to diagnose query performance.


Query Statistics & Diagnostics

Database Query Statistics and Counts for FbCpp Backend (#638)
Implemented full query execution statistics and row-count reporting in the fb-cpp backend, matching the diagnostics previously available only via the legacy IBPP backend. Per-query statistics (reads, writes, fetches, marks) and affected-row counts are now shown in the SQL editor results panel.


Developer Tools & Documentation

Memory Diagnostics Support
Added two optional CMake build flags for developer builds:

  • ENABLE_ASAN=ON enables AddressSanitizer (ASan) for runtime memory error detection (leaks, use-after-free, buffer overflows) on GCC/Clang.
  • ENABLE_CRT_LEAK_CHECK=ON enables the MSVC CRT debug heap leak checker on Windows.

A detailed leak detection guide was added to the developer documentation covering best practices, tool comparisons, and platform-specific configuration.


Full Changelog

v26.6.25...v26.7.1

FlameRobin 26.6.25

Choose a tag to compare

@github-actions github-actions released this 26 Jun 16:50

FlameRobin 26.6.25 Release

Summary

This release focuses on connection reliability — specifically fixing a long-standing regression where FlameRobin could not reconnect to a Firebird database after a silent connection drop (e.g. a VPN disconnect, server restart, or network timeout). It also corrects the default transaction isolation level used for metadata queries.


What is Fixed

🔌 Impossible to reconnect after connection loss (#636)

In older versions of FlameRobin, if the connection to the server was lost, the user could simply click Database → Reconnect and resume work. In recent builds this was broken in three different ways:

Problem 1 — connectedM flag was never cleared on a silent drop.
When the network goes away, Firebird's IBPP layer resets its internal handle to 0 but Database::connectedM stayed true. The Reconnect menu item was gated by OnMenuUpdateIfDatabaseConnected (requires connectedM == true), so the item appeared clickable after a drop — but after a clean disconnect() call (where connectedM becomes false) the item became grayed out, making it impossible to reconnect.

Problem 2 — The old Database::reconnect() bypassed all reconnection logic.
It called databaseDAL_M->disconnect() then a bare databaseDAL_M->connect(), which reconnects only the low-level IBPP handle. It never called the full Database::connect() pathway, so connectedM was never set back to true, none of the metadata collections (tablesM, domainsM, viewsM, etc.) were re-initialised, no observers were notified, and the tree remained empty or stale.

Problem 3 — Database::connect() early-returns if connectedM is true.
Even if someone called connect() directly after the drop (while connectedM was still true), the guard if (connectedM) return; meant it was a no-op.

Fix applied:

  • Database::reconnect() now calls setDisconnected() first, which resets connectedM to false, destroys all metadata collection objects, and notifies observers so the tree collapses cleanly. A low-level databaseDAL_M->disconnect() is attempted first (wrapped in try/catch — it may fail if the handle is already dead). Then the full connect(getDecryptedPassword()) is invoked, which reinitialises everything including the metadata tree.

  • MainFrame::OnMenuReconnect now forces db->disconnect() (tolerating errors), then delegates to connectDatabase() — the same utility used by the normal Connect action. This ensures the password prompt, progress dialog, and charset mismatch warning all work correctly on reconnect, exactly as they do on first connect.

  • The EVT_UPDATE_UI for Menu_Reconnect is changed from OnMenuUpdateIfDatabaseConnected to OnMenuUpdateIfDatabaseSelected. Reconnect is now available whenever a database node is selected, regardless of the current connection state. This covers the scenario where the connection dropped silently and connectedM is false.


🔄 Fix default transaction isolation level to ReadCommitted

The default transaction isolation level for internal metadata queries was incorrect. It is now consistently set to ReadCommitted, which matches Firebird best-practice for DDL/metadata reads and avoids stale-read anomalies after schema changes.


Files Changed

File Change
src/frversion.h Bump FR_VERSION_RLS from 24 to 25
src/metadata/database.cpp Rewrite Database::reconnect() to call setDisconnected() plus full connect()
src/gui/MainFrame.cpp Fix OnMenuReconnect handler; change EVT_UPDATE_UI for Reconnect to OnMenuUpdateIfDatabaseSelected

Changelog

b48ad85e Bump version to 26.6.25
82661bed Fix impossible to reconnect after connection loss (#636)
58636656 Fix default transaction isolation level to ReadCommitted

Upgrade Notes

No configuration or database changes are required. Simply replace the existing FlameRobin binary with this release.


Downloads

Pre-built packages for Windows (x64/x86 MSI and portable ZIP), macOS, and Linux (.deb, Flatpak, Snap) are attached to this release as assets once CI completes.

FlameRobin 26.6.24

Choose a tag to compare

@mariuz mariuz released this 25 Jun 19:31

FlameRobin 26.6.24 Release

Summary

This release delivers several important bug fixes and enhancements:

  • SQL tokenizer improvements: TERM and TERMINATOR are now correctly recognized as reserved words and keywords, fixing syntax‑highlighting and autocomplete issues.
  • Styling fixes: Updated ExecuteSqlFrame to properly apply styles to profiler grids and ensure consistent appearance across themes.
  • Row‑height correction: DataGrid now recalculates row heights after font changes, preventing layout glitches when reopening windows.
  • Version bump: Application version updated to 26.6.24.

Changelog

  • src/sql/SqlTokenizer.cpp – added TERM/TERMINATOR handling.
  • src/sql/SqlTokenizerTest.cpp – added unit tests for the new keywords.
  • src/gui/ExecuteSqlFrame.cpp – invoked setupStyles() and propagated styles to profiler grids.
  • src/gui/controls/DataGrid.cpp – called updateRowHeights() after data fetch.
  • src/frversion.h – bumped FR_VERSION_RLS to 24.

All tests pass (ctest reports 100% success).

v26.6.23

Choose a tag to compare

@mariuz mariuz released this 24 Jun 18:57

FlameRobin Release Notes - Version 26.6.23

We are pleased to announce the release of FlameRobin version 26.6.23. This version contains a critical bug fix to prevent database file loss during database restore operations.


Summary of the Fix

In FlameRobin version 26.6.22 (and earlier versions that use the fb-cpp DAL service engine), performing a database restore with the "Replace existing database" (overwrite) option checked could result in a completely lost database file (.fdb) if the database was registered using a non-default DBA user with a specific administrative role (like RDB$ADMIN).

During a restore with the overwrite option, the Firebird server first deletes the target .fdb file on disk. When connecting to the Firebird Service Manager, FbCppService failed to pass the user's role. Consequently, the restore process ran without the necessary administrative privileges and aborted immediately after deleting the original database file—leaving the user with a deleted and lost database.

Version 26.6.23 resolves this by correctly passing the configured role to fbcpp::ServiceManagerOptions during service attachment, backup, and restore.


Detailed Changelog

1. Engine & Service Fixes

  • Service Role Propagation:
    • Modified src/engine/db/fbcpp/FbCppService.cpp to set the role on fbcpp::ServiceManagerOptions using the configured roleM value.
    • Applied role configuration to options inside FbCppService::connect(), FbCppService::backup(), and FbCppService::restore().

2. Version Bump

  • Incremented build release version to 26.6.23 in src/frversion.h.

v26.6.22

Choose a tag to compare

@mariuz mariuz released this 24 Jun 18:49

FlameRobin Release Notes - Version 26.6.22

We are pleased to announce the release of FlameRobin version 26.6.22. This version contains a key fix for User-Defined Function (UDF) metadata parsing in databases with multi-byte character encodings.


Extensive Summary

In previous versions of FlameRobin, when querying user-defined function parameters or generating the DLL/DDL source representation of a UDF, string parameters (CSTRING, CHAR, and VARCHAR) in databases configured with multi-byte character sets (such as UTF8) had their lengths incorrectly reported.

This occurred because Firebird stores physical byte lengths in the RDB$FUNCTION_ARGUMENTS.RDB$FIELD_LENGTH column rather than logical character counts. For a CSTRING(10) parameter in a UTF8 database, Firebird stores 40 bytes. FlameRobin displayed this as CSTRING(40) in the tree viewer, properties pane, and generated SQL definition. Consequently, trying to recreate or modify the UDF would result in declaring the parameter as CSTRING(40), which Firebird would multiply again by 4 (to 160 bytes), cascading the error.

Version 26.6.22 resolves this issue by querying c.RDB$BYTES_PER_CHARACTER from the RDB$CHARACTER_SETS system table and dividing the raw byte length by this value for string-based parameter types.


Detailed Changelog

1. Engine & Metadata Fixes

  • Corrected String Parameter Lengths in UDFs / Functions:
    • Updated src/metadata/function.cpp to fetch c.RDB$BYTES_PER_CHARACTER by joining RDB$CHARACTER_SETS in Function::loadChildren() and UDF::loadProperties().
    • Automatically divide RDB$FIELD_LENGTH by RDB$BYTES_PER_CHARACTER for CHAR (14), VARCHAR (37), and CSTRING (40) parameter types when RDB$BYTES_PER_CHARACTER > 1.
    • Solved the issue where UDF DDL generation emitted incorrect lengths for string parameters when the database character set was UTF-8 (e.g. CSTRING(40) instead of CSTRING(10)).

2. Testing & Quality Assurance

  • New Regression Test:
    • Added src/metadata/UdfCstringLengthTest.cpp to validate parameter length calculation and character width division.
    • Registered the new test in CMakeLists.txt to run as part of the standard test suite.
    • Verified that all unit tests continue to build and pass under ctest.

3. Version Update

  • Incremented build release version to 26.6.22 in src/frversion.h.

FlameRobin 26.6.21

Choose a tag to compare

@mariuz mariuz released this 22 Jun 20:01

FlameRobin 26.6.21

This release resolves critical bugs and implements key improvements, including SQL code completion support, High DPI scaling on Windows, and disconnect crash fixes.

Changelog & Improvements

  • SQL Code Completion Fix: Fixed database schema auto-completion logic to ensure fields of referenced relations (tables, views, etc.) are correctly shown in the auto-complete dropdown inside the SQL editor.
  • Windows High DPI Scaling Fix (Issue #629): Bumed target Windows version definitions to Windows 10 (0x0A00), explicitly enabled DPI-aware manifest configuration in flamerobin.rc, and disabled default MSVC linker manifest overriding to ensure FlameRobin is fully DPI-aware and renders crisp fonts and vector icons on high-DPI displays.
  • Disconnect Segfault Fix: Fixed a segmentation fault that occurred inside IbppDatabase::getInfo when checking database info on a disconnected database connection.

Commits in this Release

  • 27e693e0 - Fix SQL code completion to show fields of referenced relations
  • 98e61669 - Fix Windows High DPI awareness manifest and target version definition (Issue #629)
  • 9624b916 - Fix segfault in IbppDatabase::getInfo when disconnected

FlameRobin 26.6.20

Choose a tag to compare

@mariuz mariuz released this 22 Jun 17:55

FlameRobin 26.6.20

This release includes critical bug fixes and resolves regression issues following the migration to the new fb-cpp DAL database backend in version 26.6.

Changelog & Critical Fixes

  • Named Query Parameter Mapping Fix (Issue #627): Resolved a major regression where query statements using named parameters (e.g., :paramName) failed to parse and execute under the fb-cpp DAL backend. We now preprocess SQL statements, rewriting named parameters to native ? placeholders, and map parameter names and indices dynamically to ensure the parameter binding dialog works correctly.
  • Statement Cursor Reuse Fix (Issue #626): Resolved a regression where Table and Column descriptions were missing in the Database Summary view. This was caused by statement cursors not being explicitly closed before executing queries sequentially. Closing statement cursors before reuse allows successful sequential executions.
  • Trigger Altering Fix (Issue #625): Resolved an issue causing compilation/syntax errors due to a duplicate AS keyword when altering triggers. We now check trigger source contents to avoid prepending a duplicate AS if it is already present or if the trigger is an external trigger.

Commits in this Release

  • 328d917f - Fix named query parameter parsing and mapping for FbCpp backend (Issue #627)
  • 254f5189 - Fix regression: Close statement cursor before execution to support reuse (Issue #626)
  • e863813c - Fix double AS when altering a trigger (Issue #625)

FlameRobin 26.6.19

Choose a tag to compare

@mariuz mariuz released this 21 Jun 21:09

We are pleased to release FlameRobin version 26.6.19. This release introduces various improvements, styling customization fixes, portable Windows build enhancements, and packaging/rendering fixes.

Key Changes & Improvements

  • CPU Architecture in About Box:

    • The About dialog box now dynamically detects and displays the CPU architecture (such as x86-64, x86, arm64, arm, ppc, mips, or riscv) on which the application is running, enhancing diagnostic and version info.
  • Style & Font Customization Save Fix:

    • Resolved a long-standing issue in the styling configuration where custom font size and font name modifications failed to persist properly and instead reverted/fell back to the "Global override" style.
    • Enhanced style manager lookup logic to cleanly fallback to global configuration definitions for child styling elements, preventing font size resets in the SQL editors.
  • Portable Windows Builds Enhancements:

    • Pre-configured portable Windows builds (both 32-bit and 64-bit packages) to default to ServerMode = SuperClassic in firebird.conf. This enables the embedded Firebird engine to use shared lock files, permitting multiple instances or external processes to simultaneously access a local .fdb database file without exclusive file-locking failures.
    • Added troubleshooting and lock mode guidelines to the docs/firebird_embedded.md documentation.
  • Linux Debian Package SVG Rendering & Native Dependencies:

    • Fixed SVG rendering issues in Debian (.deb) packages. Bundling host libraries was avoided during build staging (only dependencies from vcpkg are bundled), and libsecret-1-0 alongside libwebkit2gtk-4.1-0 are now declared as native dependencies. This ensures correct rendering of HTML templates, settings, and SVG icons upon packaging and clean installations.
  • Documentation & Submodule Updates:

    • Updated BUILD.md with instructions on using recursive git submodule commands (git submodule update --init --recursive) to help developers properly fetch external dependencies like vcpkg and fb-cpp.