Fluxtion + Mongoose

Fluxtion is the logical layer. You author event-driven logic in Java; inferred orchestration compiles it to a single, portable .class with audit and replay-equivalence built in.

Mongoose is the physical layer. Same compiled class — threading, transport, persistence, and time sources around it are plugged in by configuration. The processor doesn't change when you move from your laptop to production; the deployment descriptor does. Mongoose, Flink, Kafka, Chronicle and Aeron are wires and hosts; Fluxtion is the deterministic logic the wires carry.

Fluxtion compile, three runtime containersFour authoring channels feed Fluxtion. Fluxtion emits one portable Java class. That same class runs in the browser playground, in Mongoose for production, or in any plain JVM as an embedded library.AUTHORING CHANNELSImperative Java@OnEventHandler POJOsDSL fluentDataFlowBuilder chainSpring XMLbeans as nodesVendor JARpre-built nodesFluxtion compilegraph analysis · code-gen · structural audit baked inPortable Java classProcessor.java · Processor.class · Processor.graphmlone artifact, deterministic dispatch, replay-equivalent executionRUNTIME CONTAINERS · SAME .classPlayground (CheerpJ)browser-sidein-memory feeds · sinksauthoring · learningMongooseagent threads · pluginsaeron · chronicle · kafkaproduction deploymentAny JVMembedded libraryservice · batch · CLIdrops into your code
One compile. Three runtimes consume the same .class. Mongoose is the production-grade container; the playground and any embedded JVM consume the identical artifact.
Deployment is plugin selection, not a code change

The processor compiles once. Moving from playground to Mongoose swaps the feeds, the sinks, the idle strategy, and the persistence story — all in the Mongoose deployment descriptor. Your graph, your nodes, your generated Processor.java do not change.

What changes, what stays the same

ConcernPlaygroundMongoose (production)
Generated processorIdentical · same .java + .class + .graphml
Event types & nodesIdentical · your authored Java doesn't change
Replay determinismIdentical · same input ordering ⇒ byte-equal sink output
Audit surfaceIdentical · same per-event records, same hook points
Feeds (event sources)InMemoryEventFeed, file feed via DSL connectoraeron-feed · chronicle-queue-feed · kafka-feed · file-feed · admin gates · scheduled timers
Sinksin-process callbacks · FileMessageSinkkafka-sink · postgres-append · chronicle-queue-sink · custom plugins
Threadingsingle-threaded · SleepingMillisIdleStrategy(1)agent threads · BusySpinIdleStrategy / YieldingIdleStrategy
PersistenceHashMap in JVMsnapshot plugin · checkpoint replay · cold-start from log
Audit destinationstdout [FLUXTION_AUDIT] blocksOpenTelemetry · Splunk · regulator trail · multi-auditor
HA / scalesingle JVMhot-warm pair (replay-determinism is the failover correctness contract) · sharding by key
Fluxtion · logical layer
  • Graph analysis at compile time — every node, every trigger, every audit point known statically
  • Output is plain Java — your auditor reads it, your IDE navigates it, your VCS diffs it
  • Runtime dependency is just fluxtion-runtime — no compiler, no codegen at startup
  • Deterministic dispatch order, replay-equivalence, structural audit — all by construction
Mongoose · physical layer
  • Agent-thread runtime container — hosts your processor inside an AgentRunner group
  • Feed + sink plugins — file, aeron, chronicle, kafka, multicast, custom
  • Service plugins — admin (REST / telnet), JDBC, cache, scheduler, YAML / Spring loader
  • Lifecycle, idle strategies, snapshots, multi-processor groups — all configured, not coded

What this means in practice

Author and iterate in the playground. The processor compiles, the JUnit tests run, you see the audit and the replay. When you're ready for production, the same generated Processor.class ships in your release jar; Mongoose's deployment descriptor wires it to your real feeds, sinks, and services. There is no “production rewrite” step — there isn't one to do.

The same property carries the other direction too: when a production incident reproduces oddly, pull the event log, replay it against the same processor in the playground, watch the audit unfold. The replay path is the debugger.

Worked examples

See also: Code-gen at a glance — the authoring channels × generation modes matrix that feeds into the compile box above.