eventium-memory: In-memory implementations for eventium

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.

[maintain] [Publish]

Warnings:

Eventium-memory provides in-memory implementations of event stores and projection caches for the Eventium event sourcing framework. This package is ideal for development, testing, and prototyping event-sourced applications without requiring external dependencies like databases. All data is stored in STM-based concurrent data structures for thread-safe access.


[Skip to Readme]

Properties

Versions 0.1.0, 0.2.0, 0.2.1
Change log CHANGELOG.md
Dependencies base (>=4.9 && <5), containers (>=0.6 && <0.8), eventium-core (>=0.2.0 && <0.3.0), mtl (>=2.2 && <2.4), safe (>=0.3 && <0.4), stm (>=2.5 && <2.6) [details]
License MIT
Author
Maintainer Alexander Sidorenko
Category Database, Eventsourcing
Home page https://github.com/aleks-sidorenko/eventium#readme
Bug tracker https://github.com/aleks-sidorenko/eventium/issues
Source repo head: git clone https://github.com/aleks-sidorenko/eventium
Uploaded by aleks_sidorenko at 2026-03-05T10:40:39Z

Modules

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


Readme for eventium-memory-0.2.0

[back to package description]

Eventium Memory

In-memory event store for Eventium, backed by STM.

Overview

eventium-memory provides thread-safe, in-memory implementations of EventStoreReader and EventStoreWriter for development, testing, and prototyping. No external database is required.

API

-- Create a TVar-backed store
eventMapTVar :: IO (TVar (EventMap event))

-- TVar-based (for use inside STM or lifted to IO)
tvarEventStoreReader       :: TVar (EventMap event) -> VersionedEventStoreReader STM event
tvarEventStoreWriter       :: TVar (EventMap event) -> VersionedEventStoreWriter STM event
tvarGlobalEventStoreReader :: TVar (EventMap event) -> GlobalEventStoreReader STM event

-- MonadState-based (for pure state threading)
stateEventStoreReader       :: (MonadState (EventMap event) m) => VersionedEventStoreReader m event
stateEventStoreWriter       :: (MonadState (EventMap event) m) => VersionedEventStoreWriter m event
stateGlobalEventStoreReader :: (MonadState (EventMap event) m) => GlobalEventStoreReader m event

Use runEventStoreReaderUsing atomically / runEventStoreWriterUsing atomically to lift the STM stores into IO.

Usage

import Control.Concurrent.STM (atomically)
import Eventium
import Eventium.Store.Memory

main :: IO ()
main = do
  tvar <- eventMapTVar
  let writer = runEventStoreWriterUsing atomically (tvarEventStoreWriter tvar)
      reader = runEventStoreReaderUsing atomically (tvarEventStoreReader tvar)

  result <- applyCommandHandler writer reader myHandler aggregateId cmd
  print result

When to Use

For persistent storage, use eventium-sqlite or eventium-postgresql.

Installation

dependencies:
  - eventium-core
  - eventium-memory

Documentation

License

MIT -- see LICENSE.md