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
Distributions
Downloads 12 total (3 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