eventium-memory: In-memory implementations for eventium

[ database, eventsourcing, library, mit ] [ Propose Tags ] [ Report a vulnerability ]

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]

Modules

[Last Documentation]

  • Eventium
    • CheckpointStore
      • Eventium.CheckpointStore.Memory
    • ProjectionCache
      • Eventium.ProjectionCache.Memory
    • Store
      • Eventium.Store.Memory

Flags

Manual Flags

NameDescriptionDefault
ci

Enable -Werror for CI builds

Disabled

Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

Versions [RSS] 0.1.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
Uploaded by aleks_sidorenko at 2026-03-06T14:29:12Z
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
Downloads 16 total (6 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs not available [build log]
All reported builds failed as of 2026-03-06 [all 2 reports]

Readme for eventium-memory-0.2.1

[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

  • Testing -- fast, isolated, no I/O overhead.
  • Prototyping -- iterate on domain logic without database setup.
  • Examples -- the counter-cli example uses this backend.

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

Installation

dependencies: - eventium-core - eventium-memory 

Documentation

License

MIT -- see LICENSE.md