
What 2025 Brought Us
The end of the year is a perfect moment to look back at how far evitaDB has come. The key theme of this year was stability and adapting to real-world production needs, which we see in greater numbers every month.

I’ll break the recap into a few thematic topics:
- Improvements and new features:
- Optimizations and stability
- Looking ahead to 2026
This year we closed 92 tickets and released 8 major database versions. Although we introduced fundamental changes in how data is stored on disk, seamless upgrades from 2024 versions are still possible thanks to automatic data migrations. We also have automated tests that verify the migration process.
Core evolution of evitaDB
Multiple references to the same entity
This feature represented the largest core overhaul this year. It shows in full how breaking one of the key assumptions impacts implementation complexity. The original data model assumed that a particular entity could reference another entity only once within a single named reference. If the need arose to have multiple references to the same entity within one reference, a new reference type would be created. A concrete example sheds more light on this mechanic:
Consider a product (entity Product) named Christmas tree. This product has several photos represented by entity Image. One of the photos is used as the main product image and typically appears in product listings. The other photos are used in the product’s gallery. The problem arises when we want the main image to also be part of the gallery.
The original decision wasn’t random—it enabled a number of optimizations and a far simpler implementation overall. Dropping this assumption required extensive changes across the database architecture, including indexing, on-disk storage, and query processing. We had to introduce new data structures that distinguish references based on a unique combination of “reference attributes” that form discriminators (at the reference level you can’t rely on any other simple primary key).
One outcome of this change is a very intuitive and practical API for working with multiple references in queries:
A crucial part of the implementation—besides adding a ton of new tests—was a fuzzy test that simulates random database operations and then verifies data consistency. Tuning all the edge cases that are practically impossible to cover with standard tests took several weeks of focused work.
Controlling traversal across hierarchical references
Integrating hierarchical search into the facet summary
Within the facet filter’s data structure, evitaDB can now return a computed hierarchy where entities matching the given criteria were found. Each node in this structure contains an aggregate count of matching entities that correctly takes into account multiple placements of the same entity within the hierarchy (i.e., the entity is counted only once on each level in the totals).
Fetching counts of referenced entities without loading their contents
We’re slowly getting to smaller, yet still useful improvements. One of them is the ability to fetch the number of references to other entities without having to load the referenced entities themselves. This saves memory, CPU cycles, and bandwidth, and it’s handy, for example, to show the number of product reviews without loading the reviews themselves. A common UI scenario is just to check for the existence of at least one reference of a certain type (e.g., whether a product has at least one review) and then render or hide the respective UI element (like a “Show reviews” button).
New missing operator — when at least one child matches
Default settings for accompanying price
Progress in evitaLab
Traffic recording and analysis
UI refresh and bug fixes
In summer, evitaLab’s UI received a major refresh that brought a host of minor bug fixes and paid down technical debt caused by some new evitaDB core features not being supported in the console. The schema view now correctly visualizes cardinalities, multiple references, and index visualization across different scopes. The entity grid now visualizes per-entity scope and you can filter by it. The syntax highlighter and auto‑completion recognize the new operators and functions in the query language as well.
New desktop application
Audit log
The last big addition is exposing audit information directly in the evitaLab console. The information is sourced from the database’s Write‑Ahead Log and is therefore exact, but the audit depth matches the WAL retention period configured for the given database instance. In the UI you can easily browse the complete history of transactions, filter them by type (data/schema changes), entity type, or a specific entity or its part (attributes, prices, references). For each transaction you can display detailed information about the changes made. In the entity grid, you can open the change history of a specific entity, attribute, associated data, reference, or price, and browse the individual versions over time.
Infrastructure and architectural changes
Change Data Capture
Engine‑level Write‑Ahead Log
Related to this, we introduced a new Write‑Ahead Log (WAL) at the whole‑engine level that allows recording and replicating system operations such as creating new catalogs, renaming or deleting them and other operations that are not directly tied to a specific catalog’s data (for which the original WAL is intended). This new WAL is key to replicating these system operations across the cluster and ensuring data consistency among nodes.
Full catalog backups
Alongside the existing backup types (point‑in‑time and snapshot), we added the ability to perform full backups of an entire catalog. A full backup works at the binary level and contains all catalog data. After restoring from a full backup, the catalog is identical to the original and you can perform point‑in‑time backups/restores on it just like on the original. In evitaLab you can now perform all backup and restore types directly from the UI.
Optimizations and stability
We made big strides in 2025 in the areas of optimizations and stability. Besides fixing many minor bugs that surfaced over the year in real projects, we performed several key optimizations that significantly improved performance and stability in production.
Asynchronous operations
On‑disk compression
Another significant optimization is introducing on‑disk data compression, which dramatically reduces storage requirements while also improving read performance. Compression is implemented at the level of individual data structures and is transparent to users. The result is less data to read and write to disk, which lowers I/O latency and reduces maintenance overhead. For now, we use the standard Deflate (Zlib) algorithm, but we plan to add other compression options that are better optimized for the specific data structures used in evitaDB.
Index optimizations
Analysis of real projects revealed that evitaDB was maintaining a number of secondary indexes that applications did not actually use. This was also due to the schema definition not allowing a more granular setup of index creation. We therefore introduced the ability to explicitly define how broad an index should be for various entity references, reducing both the overhead of maintaining them and memory consumption. On some of our projects, this optimization yielded up to a 50% reduction in memory usage while preserving full query functionality.
Option to disable fSync for tests
Another small improvement is the ability to disable fSync during transaction commits. This setting is intended strictly for testing scenarios where you need to maximize write throughput at the expense of durability in the event of a failure. It should never be used in production because it could lead to data loss during unexpected outages. However, in automated test environments it can significantly speed up test execution. On our projects, we observed up to a 40% speed‑up of automated tests that repeatedly created new catalogs, inserted data, and then deleted them again.
Looking ahead to 2026
Over the past year we released 8 versions of evitaDB and closed 92 tickets. Development is no longer as rapid as in previous years because we also devote time to consulting and supporting real projects, which is what funds us and evitaDB’s development. This trend will continue in the coming years because our primary goal is a stable and reliable database that serves real projects well.
Next year we’d like to finish preparations for cluster deployments and gain experience with operating in a single‑writer, multiple‑reader mode in real projects—with horizontal scaling, rolling updates, and other practical scenarios related to clustered operation. Another major challenge will be adding full‑text and semantic search, which is critical in e‑commerce today. We have lots of plans for 2026 and it’s clear priorities will keep changing and new “urgent” challenges we can’t foresee yet will emerge. We look forward to them and believe that in the next year we’ll bring lots of useful improvements and features that help our developer‑users build even better applications on top of evitaDB.
