# Changelog
## v0.7.0 (2026-03-04)
* Breaking changes
* PubSub functionality has been removed in order to simplify the codebase
* This change removes `Goblin.subscribe/1` and `Goblin.unsubscribe/1`
* `Goblin.select/2` has been renamed to `Goblin.scan/2`
* Enhancements
* Added ARCHITECTURE.md which displays the inner workings of Goblin
## v0.6.0 (2026-02-20)
* Breaking changes
* Disk table format was updated to include a field stating whether the disk table is compressed or not
* Keys can now be tagged, allowing separation of data when querying
* `Goblin.Tx.select` is removed; use `Goblin.select/2` instead, which runs outside a transaction
* Enhancements
* Added automatic lazy migration of disk tables when a legacy version is detected
* Change key-value pair block size to 1024 bytes
* Improvements
* Key comparison is enforced to compare value only (i.e. via `==`) throughout the database
* Bug fixes
* Fix race condition where the memory table can be cleaned up when active readers are iterating
## v0.5.0 (2026-01-11)
* Breaking changes
* The Bloom filter struct has changed (incompatible with previous versions)
* Improvements
* The manifest can only delete previously tracked files upon start
* If a `.tmp` file already exists when trying to write a new, then the previous version is removed before continuing to write
* The Bloom filter implementation was refactored into a scalable Bloom filter implementation
* Bug fixes
* Fixes a bug where the arguments to a function call were in the wrong order
## v0.4.2 (2026-01-10)
* Changes
* Rename `is_*?` function names to `*?` only
* Refactorings of some modules
## v0.4.1 (2026-01-08)
* Bug fixes
* Fix recursion bug in binary search iterator algorithm for disk tables.
## v0.4.0 (2026-01-06)
* Breaking changes
* Changed disk table encoding format (not compatible with previous versions)
* `Goblin.is_flushing/1`, `Goblin.is_compacting/1` is changed to `Goblin.is_flushing?/1`, `Goblin.is_compacting?/1`, respectively.
* `Goblin.transaction/3` is split into `Goblin.transaction/2` and `Goblin.read/2`.
* Improvements
* A lot more focus on consistency guarantees for transaction operations.
* `Goblin.{put_multi/2, remove_multi/2, get_multi/2, select/2}` are now available.
## v0.3.2 (2025-12-04)
* Enhancements
* Flush and compaction are now triggered via byte sizes instead of amount of keys
* Bug fixes
* Add functionality for iterators to clean up after iteration ends
* Fix key range computation when compacting from flush level to higher level
## v0.3.1 (2025-11-23)
* Bug fixes
* Writes are published on a database specific topic instead of a global topic
* Compaction algorithm rewritten, fixes overlapping key ranges in higher SST levels
## v0.3.0 (2025-11-21)
* Breaking changes
* Changed the format in the manifest file
* Improvements
* Make WAL follow the manifest as the source of truth
* Enhancements
* Added `Goblin.export/2` which exports a `.tar.gz` of a snapshot of the database to a specified directory
## v0.2.2 (2025-11-16)
* Enhancements
* Added `Goblin.stop/3` function, allows one to stop the database supervisor
* Added read-only transactions in `Goblin.transaction/2`
* Bug fixes
* Fix registry name in `Goblin.is_flushing/1` and `Goblin.is_compacting/1`
* Fix sequence counting bug when write-transaction commits
## v0.2.1 (2025-11-13)
* Enhancements
* Add checksum verification to SST files
* Data and metadata are compressed in SSTs for levels > 1
## v0.2.0 (2025-11-12)
* Enhancements
* The transaction model is changed to true serial execution.
* The MemTable and Store utilize ETS tables to allow concurrent reads.
* Bloom filter false positive probability is configurable
* Bug fixes
* Change how hashes are stored in BloomFilter structs. Anonymous functions are no longer stored directly in the struct, instead the salt and range for the hash is stored instead. This prevents `BadFunctionError` if the module is updated.
## v0.1.5 (2025-11-02)
* Improvements
* Improved SST filtering from store
* Enhancements
* Add benchmarking scripts
## v0.1.4 (2025-11-01)
* Enhancements
* Add registry for process discovery within the database server
* Add registry for pubsub functionality within the database server
* Add new supervisor for processes separate from registry processes
* Bug fixes
* Provide name scopes to `WAL` and `Manifest`. This fixes the bug that multiple database servers couldn't start simultaneously.
## v0.1.3 (2025-10-29)
* Enhancements
* Add `is_flushing/1` and `is_compacting/1` functions
* Refactor `Reader.select/4` stream
## v0.1.2 (2025-10-29)
* Enhancements
* Add `select/1/2` for range queries
## v0.1.1 (2025-10-27)
* Enhancements
* Add `get_multi/2` functionality
## v0.1.0 (2025-10-26)
* Enhancements
* First public release