v0.7.0 (2026-03-04)
- Breaking changes
- PubSub functionality has been removed in order to simplify the codebase
- This change removes
Goblin.subscribe/1andGoblin.unsubscribe/1
- This change removes
Goblin.select/2has been renamed toGoblin.scan/2
- PubSub functionality has been removed in order to simplify the codebase
- 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.selectis removed; useGoblin.select/2instead, 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
- Key comparison is enforced to compare value only (i.e. via
- 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
.tmpfile 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
- Rename
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/1is changed toGoblin.is_flushing?/1,Goblin.is_compacting?/1, respectively.Goblin.transaction/3is split intoGoblin.transaction/2andGoblin.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/2which exports a.tar.gzof a snapshot of the database to a specified directory
- Added
v0.2.2 (2025-11-16)
- Enhancements
- Added
Goblin.stop/3function, allows one to stop the database supervisor - Added read-only transactions in
Goblin.transaction/2
- Added
- Bug fixes
- Fix registry name in
Goblin.is_flushing/1andGoblin.is_compacting/1 - Fix sequence counting bug when write-transaction commits
- Fix registry name in
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
BadFunctionErrorif the module is updated.
- 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
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
WALandManifest. This fixes the bug that multiple database servers couldn't start simultaneously.
- Provide name scopes to
v0.1.3 (2025-10-29)
- Enhancements
- Add
is_flushing/1andis_compacting/1functions - Refactor
Reader.select/4stream
- Add
v0.1.2 (2025-10-29)
- Enhancements
- Add
select/1/2for range queries
- Add
v0.1.1 (2025-10-27)
- Enhancements
- Add
get_multi/2functionality
- Add
v0.1.0 (2025-10-26)
- Enhancements
- First public release