Eventum Logo

Eventum

🚩 2.8.0

Eventum 2.8.0 — generator repositories in Studio, project export and import, a log file per component, and per-instance resource accounting.

Released August 29, 2026

Studio connects git repositories that publish ready-made generators and installs one of them as a project, so a new data source no longer starts from an empty configuration. Projects export and import as ZIP archives, the log is split into a file per component, and every running instance reports the processor, threads, disk, network and queue memory it occupies.

Five changes alter how an existing setup behaves:

  • server.ui_enabled and server.api_enabled are gone. Deprecated in 2.7.0, they are now rejected as unknown settings — move the value under server.ui.enabled and server.api.enabled.
  • The log files changed. A record goes to main.log, server.log, server_access.log, mcp.log or generator_<id>.log by the part of the application it came from, and server_error.log is gone. Anything collecting these files needs the new set.
  • The events queue is bounded in memory. It holds at most generation.queue.max_event_bytes, 256 MiB by default. The limit is set for the application, overridden per instance, or set to null to lift it.
  • Sample mode ignores batch.delay when batch.size is set. Batches are formed by size alone, so a per-batch formatter such as json-batch writes larger arrays than before — see Batching.
  • A secret name is checked when it is written. It must be words of lowercase letters, digits and _, separated by . — see Naming a secret. Names already in a keyring are left as they are.

🚀 New features

Eventum Studio

  • Generator repositories — connect a git repository of ready-made generators and install any entry of its catalog as a project
  • Repository discovery — find a repository by searching GitHub for the ones carrying the eventum-generators topic, and connect it from the list
  • Project export and import — export a project as a ZIP archive and import it as a new project, on the same instance or another one
  • Monitoring rebuilt around the running instances — the load chart and the instance table share one search, one set of filters and one selection
  • Instance overview — an instance opens on its rates, its totals and what the run costs, which used to be a grid of figures at the foot of the page
  • Release highlights — what an upgrade brought opens by itself on the first load after it, and stays reachable from the user menu
  • Log channels on the Management page — stream the Main, Server, Access and MCP logs of the application separately
  • Download in the project file tree — save a project file to your machine, including generator output too large for the editor to open
  • A keyring picker beside password fields — pick a secret from the keyring instead of typing the ${secrets.<name>} reference by hand
  • Scripts in the scenario data flow diagram — the diagram carries the global keys a script event plugin reads and writes, beside the templates that do the same
  • A rebuilt About dialog — the version, the runtime, the host and the build read as one aligned list
  • Error details ordered by diagnostic value — the dialog leads with what the server reported, and the raw request and response sit behind one toggle

Core

  • A log file per component — a generator writes a log file of its own, down to the traffic its output plugins produce, instead of sharing one with the application
  • Per-instance resource accounting — an instance reports the threads, processor time, waiting, disk and network bytes and queue levels it occupies, and Monitoring ranks the running ones by each of them
  • generation.queue.max_event_bytes — limit the events queue by the memory it holds, not only by the number of batches in it
  • log.third_party_level — set the level of third-party libraries separately from log.level, warning by default
  • The state of the GIL — the instance information reports whether generators run in parallel, and Management warns when the GIL came back after startup
  • The caller of a served request — everything logged while serving a request carries the address of the client that caused it

Generators

AI agents

  • Repository tools — an agent lists the connected repositories, reads the catalog one publishes and installs a generator from it
  • export_generator and import_generator — an agent moves a whole project in or out as a ZIP archive instead of copying it file by file
  • get_instance_logs — an agent reads any log channel of the application, not just the log of a generator
  • Resources in get_generator_stats — the tool carries the same per-instance resource figures the API does

API

🐛 Bug fixes

Eventum Studio

  • A page whose code or stylesheet never arrived reloads the document once, instead of dropping Studio on the error screen
  • The Studio shell is no longer served from the browser cache, so it cannot outlive an upgrade and ask for files the new build does not carry
  • Wide tables scroll inside their own panel on a narrow window, instead of putting their rightmost columns out of reach behind the page scrollbar
  • The editor keeps its width while the explorer and the inspector give way, instead of absorbing every bit of narrowing
  • The plugin parameters form follows the plugin rather than its position in the list, so deleting one no longer writes its values over another
  • Switching off the events-queue memory limit, or batching by batch.size or batch.delay alone, now reaches the instance: the settings form dropped the value that asks for it, so the choice was never applied and the switch came back on
  • The instance settings are reread after saving, so the page stops showing the values it held before the write
  • An instance registered from outside the workspace names the directory it sits in, instead of linking to a project page that cannot exist
  • The projects table no longer re-renders without end when it is opened without an instance filter
  • The template editor completes pop among the state calls it offers
  • The table sort controls, the instance switches and the delimiter shortcuts carry names a screen reader can announce

Core and API

  • A secret named keys, items or aws.get no longer resolves to a method of the collection holding the secrets, for ${params.*} as well
  • What uses a secret counts connected repositories as well as projects, and renaming it repoints every one of them
  • Non-ASCII values in a configuration are stored as they were entered, not as \uXXXX escape sequences
  • Configurations, templates, samples, time patterns and log files are read and written as UTF-8 whatever the host locale is
  • The pipeline backpressure warnings name what actually happened — a cancelled write, or a queue that filled up — instead of blaming the generation rate
  • Repeated write timeouts of an output plugin are reported as one line with a running count, in place of one line per cancelled write
  • A path that leaves the project directory through a symlink is refused for every file operation

Generators

  • A tcp output whose target stopped reading fails the write at once, instead of growing the memory of the application and holding up the shutdown of the instance
  • A template that acquired the global state lock and never released it no longer freezes every other generator
  • A batch written through the http output under a per-event formatter no longer fires a request per event at once, which used to cancel the write on its timeout and count every event as failed
  • A subprocess.run call runs under a timeout of 30 seconds by default and 300 at most, and fails rather than holding more than 8 MiB of output

⚡ Performance

  • A generator catching up — started on a past range, or fallen behind real time — merges the batches whose timestamps are already due up to batch.size, instead of publishing each of the small batches batch.delay cut them into
  • Starting many instances at once no longer compiles all of their templates at the same moment, so a large scenario comes up without the spike on the host

📝 Other changes

  • The body of POST /preview/{name}/event-plugin/produce is described by a request model of its own and rejects anything else
  • The preview global state endpoints moved from /preview/{name}/event-plugin/template/state/global to /preview/{name}/event-plugin/state/global, since the state they read belongs to every event plugin
  • The disk figures of the application count the bytes handed to the system calls, the same measure an instance is reported by, so the two can be compared; the application used to count what reached the disk instead

On this page