Download Latest Version flamerobin-0.9.3.c75f861-setup-x64.exe (3.1 MB) Google Add to Preferred Sources
Home / v26.9.5
Name Modified Size InfoDownloads / Week
Parent folder
flamerobin-26.9.5.deb 2026-09-22 31.1 MB
FlameRobin-26.9.5-x86.msi 2026-09-22 16.1 MB
flamerobin-portable-26.9.5-x86.zip 2026-09-22 20.4 MB
FlameRobin-26.9.5-x64.msi 2026-09-22 16.9 MB
flamerobin-portable-26.9.5-x64.zip 2026-09-22 21.4 MB
flamerobin-26.9.5.flatpak 2026-09-22 15.2 MB
flamerobin-macos-26.9.5.zip 2026-09-22 7.5 MB
FlameRobin 26.9.5 source code.tar.gz 2026-09-22 1.4 MB
FlameRobin 26.9.5 source code.zip 2026-09-22 2.0 MB
README.md 2026-09-22 10.3 kB
Totals: 10 Items   131.9 MB 0

FlameRobin 26.9.5 Release Notes

FlameRobin v26.9.5 makes Firebird Embedded work out of the box on Linux and fixes a fatal error in Help → About. Along the way it fixes a long-standing defect in the per-database Client library setting and removes a second crash that shipping the engine would otherwise have introduced.


Highlights & Key Improvements

1. Firebird Embedded on Linux (#721)

Registering a database under a server with no host name is how you ask for an embedded connection. On Linux that failed with a confusing network error:

:::text
Unable to complete network request to host "localhost".
-Failed to establish a connection.

Why. The Firebird client bundled with the .deb was built with --enable-client-only, so it had no engine plugin. Firebird walks its provider chain — Providers = Remote, Engine13, Loopback — and a path with no host is declined by Remote, skipped past the missing engine, and picked up by Loopback, which quietly turns your local file into a network connection to localhost. With no server listening, you get the error above, which says nothing about embedded mode or the missing engine.

provider takes what it does
Remote host:/path/db.fdb connects to a Firebird server over the network
Engine13 /path/db.fdb embedded — opens the file in this process
Loopback /path/db.fdb connects to localhost over the network

What changed. The Linux build now builds the engine and the package ships it:

  • ports/firebird/posix/portfile.cmake no longer passes --enable-client-only on Linux, and installs the intl module the engine needs for every character set and collation that is not built in. macOS keeps the client-only build, where FlameRobin uses the client of the official Firebird .pkg.
  • The .deb gained the Firebird tree in the layout the client's binreloc expects:

    :::text /opt/flamerobin/lib/libfbclient.so.2 the client /opt/flamerobin/plugins/firebird/ Engine13, Srp, ChaCha, fbtrace, ... /opt/flamerobin/intl/ character sets and collations /opt/flamerobin/share/firebird/firebird.msg error message texts /opt/flamerobin/share/firebird/tzdata/ time zone database /opt/flamerobin/firebird.conf documented, everything commented out

  • The packaging step fails the build if libEngine13.so did not make it in, so this cannot silently regress.

  • Plugins are stripped on the way into the package — the engine is 198 MB with its debug info and 12 MB without — and Firebird's sample plugins are left out.

Two upstream build breakages had to be fixed to build the engine at all, both caused by vcpkg shipping static archives where distributions ship shared objects:

  • ports/firebird/posix-static-tomcrypt-link.patch — libtommath is now repeated after libtomcrypt on the link line. A static archive is scanned only once, at the position it appears, and libtomcrypt's math descriptor calls into libtommath, so the upstream order left every one of those calls undefined and libEngine13.so would not link. Distributions never see this because their libtomcrypt.so carries its own DT_NEEDED on libtommath.
  • --with-termlib=:libncursesw.a — the narrow libncurses.a was being picked up from the system, and on Linux it carries no terminfo symbols at all (those live in libtinfo), so isql failed to link.

Verified end to end: with the resulting client, a database was created and attached with no Firebird server running, using the exact /opt/flamerobin layout the .deb installs.

[!IMPORTANT] Embedded is version-locked to the database. Engine13 opens ODS 13.0 and 13.1 — the on-disk structures of Firebird 4 and Firebird 5. An ODS 12 database (Firebird 3) needs Engine12. The new /opt/flamerobin/firebird.conf documents how to drop libEngine12.so from a Firebird 3 installation into the plugins directory and add it to Providers, along with the /tmp/firebird lock-directory pitfall.

2. Per-Database "Client library" Setting (#721)

Every registered database has a Client library field (<fbclient> in fr_databases.conf) — the documented way to point an embedded database at a Firebird installation that has an engine. It did not work: the path was stored in a process-wide static that was consulted only the first time any database connected, so whichever database connected first decided the client library for the entire application, and every later database silently reused it.

Clients are now cached per library path, so an embedded database on /opt/firebird/lib/libfbclient.so and a remote database on the bundled client can be used side by side. Covered by the new fbcpp_client_cache_test.

3. Embedded Connection Diagnostics (#721)

A connection to a host-less database that fails with a network error now explains that the client library has no embedded engine, and what to do about it, instead of leaving you with a bare localhost error. Detected by error text and by the isc_network_error / isc_net_connect_err codes, so it still works when firebird.msg is missing and the client reports bare numbers.

4. Fatal Error in Help → About After Opening a Database (#722)

Opening Help → About after connecting to a database crashed with "A fatal error has occurred".

Why. The plugin list was built by asking the Firebird plugin manager for every plugin type with a null names list. fbclient takes that list by value and does the equivalent of strlen() on it in the PluginSet constructor, so the null pointer dereferenced. Firebird never passes null itself — its internal GetPlugins helper resolves Config::getPlugins(type) first and always hands over a real string.

That explains both halves of the report:

  • only after opening a database — the enumeration is skipped while the Firebird client is not initialised, which only happens on the first connection;
  • only on Linux and macOS — the Windows code path wrapped the same call in __try/__except, which silently swallowed the access violation and simply showed no plugin list.

Reproduced standalone against the same fbclient:

:::text
type 1 key Providers        names=(null)
Segmentation fault (core dumped)

5. Plugin Reporting in Help → About

Shipping the engine turned the same About box into a crash for a second reason, caught before release. Asking the plugin manager to enumerate a plugin type loads every module it names and unloads them again when the set is released — and unloading the engine runs Jrd::shutdownBeforeUnload → TraceManager::shutdown, which tries to create the Firebird lock directory. When /tmp/firebird belongs to a Firebird server package and the current user has no access, the resulting exception escapes PluginModule's destructor and terminates the process:

:::text
#8  os_utils::createLockDirectory (pathname="/tmp/firebird/")
#17 Jrd::JProvider::shutdown (reason=-7)
#22 PluginModule::~PluginModule
#31 PluginSet::next
#33 getFirebirdLoadedPlugins

About no longer calls into the plugin manager at all. It reads the configured plugin names from firebird.conf and lists the modules present in the plugin directory — neither of which loads a plugin. The result is more useful than what it replaced:

:::text
Firebird client loaded from: /opt/flamerobin/lib/libfbclient.so.2
Configured plugins: Remote, Engine13, Loopback, Srp256, Srp, Legacy_Auth, fbtrace, ChaCha64, ChaCha, Arc4
Plugin directory: /opt/flamerobin/plugins/firebird
Installed plugin modules: ChaCha, Default_Profiler, Engine13, Legacy_Auth, Legacy_UserManager, Srp, fbtrace, udr_engine

An Engine* entry in that last line tells you at a glance whether an embedded connection is possible.


Documentation

docs/firebird_embedded.md (github.com) has been rewritten and expanded, and now covers:

  • how Firebird chooses between embedded and the network, and why a missing engine silently becomes a localhost connection;
  • registering an embedded server and database, with the resulting fr_databases.conf;
  • choosing the client library per database;
  • what each FlameRobin package ships, and the /opt/flamerobin layout;
  • which engine plugin opens which ODS version, and how to add Engine12;
  • command-line behaviour, including why a database passed on the command line is not embedded;
  • troubleshooting: the localhost error, ODS mismatches, the lock directory, exclusive access and ServerMode, and missing character sets.

Upgrading

  • Linux .deb: embedded works after installing this release — no Firebird server needed for ODS 13.0 / 13.1 databases. The package is larger than 26.9.4 by the stripped engine and plugin set (~26 MB).
  • Existing registrations are unchanged. A database registered under a server with no host name is already an embedded registration and will simply start working.
  • If your database is ODS 12 or older, see the note in section 1 — add Engine12, or point that database's Client library at a matching Firebird installation.

Tests

33 tests pass. New in this release:

  • about_box_plugins_test — covers both About box crashes: every plugin type resolves a real names list, and the reporting never loads a plugin module.
  • fbcpp_client_cache_test — a database configured with its own client library is not served by the client some other database loaded first.

Full Commit Log since v26.9.4

  • 32260363 Release v26.9.5: Firebird embedded on Linux and Help -> About crash (#721, [#722])
  • cfaaf90d Report Firebird plugins without loading them
  • 7ed084e2 Make Firebird embedded work on Linux (Fixes [#721])
  • 14a5176c Fix crash in Help -> About after opening a database (Fixes [#722])
Source: README.md, updated 2026-09-22