https://github.com/accenture/mercury-composable

Reference implementation toolkit for writing composable applications

https://github.com/accenture/mercury-composable

Science Score: 26.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (12.4%) to scientific vocabulary

Keywords

composable-architecture coroutines event-choreography event-driven-architecture event-script flow-programming kafka non-blocking pipeline reactive rest-automation streaming virtual-threads workflows
Last synced: 5 months ago · JSON representation

Repository

Reference implementation toolkit for writing composable applications

Basic Info
Statistics
  • Stars: 15
  • Watchers: 7
  • Forks: 5
  • Open Issues: 1
  • Releases: 0
Topics
composable-architecture coroutines event-choreography event-driven-architecture event-script flow-programming kafka non-blocking pipeline reactive rest-automation streaming virtual-threads workflows
Created over 2 years ago · Last pushed 6 months ago
Metadata Files
Readme Changelog Contributing License Code of conduct

README.md

Mercury Composable for Java

Good news! We have merged our enterprise extension ("Event Script") into the Mercury event-driven programming foundation codebase from version 4.2 onwards. It is a comprehensive toolkit to write composable applications including microservices and serverless.

The specification for this technology is documented under US Patent application 18/459,307. The source code is provided as is under the Apache 2.0 license.

The project is available in both Java and Node.js languages.

For Java, please visit Mercury Composable for Java

For Node.js, please browse Mercury Composable for Node and Composable-example

July 2025

Optimized for Human

Composability methodology provides a clear path from Domain Driven Design (DDD), Event Driven Architecture (EDA) to application software design and implementation, connecting product managers, domain knowledge owners, architects and engineers together to deliver high quality products.

Optimized for AI

The methodology reduces the problem space for AI code assistant because each function is self-contained, independent and I/O is immutable.

In addition, Event Script is a Domain Specific Language (DSL) that can be understood by AI agent with some fine-tuning, thus making the whole ecosystem AI friendly.

Getting Started

A composable application is designed in 3 steps:

  1. Describe your use case as an event flow diagram
  2. Create a configuration file to represent the event flow
  3. Write a user story for each user function

To get started, please visit Chapter 1, Developer Guide and Methodology.

We will illustrate the methodology with a composable application example.

Conquer Complexity: Embrace Composable Design

Introduction

Software development is an ongoing battle against complexity. Over time, codebases can become tangled and unwieldy, hindering innovation and maintenance. This article introduces composable design patterns, a powerful approach to build applications that are modular, maintainable, and scalable.

The Perils of Spaghetti Code

We have all encountered it: code that resembles a plate of spaghetti – tangled dependencies, hidden logic, and a general sense of dread when approaching modifications. These codebases are difficult to test, debug, and update. Composable design patterns offer a solution.

Evolution of Design Patterns

Software development methodologies have evolved alongside hardware advancements. In the early days, developers prized efficiency, writing code from scratch due to limited libraries. The rise of frameworks brought structure and boilerplate code, but also introduced potential rigidity.

Functional Programming and Event-Driven Architecture

Functional programming, with its emphasis on pure functions and immutable data, paved the way for composable design. This approach encourages building applications as chains of well-defined functions, each with a clear input and output.

Event-driven architecture complements this approach by using events to trigger functions. This loose coupling promotes modularity and scalability.

The Power of Composable Design

At its core, composable design emphasizes two principles:

  1. Self-Contained Functions: Each function is a well-defined unit, handling its own logic and transformations with minimal dependencies.
  2. Event Choreography: Functions communicate through events, allowing for loose coupling and independent execution.

Benefits of Composable Design

  • Enhanced Maintainability: Isolated functions are easier to understand, test, and modify.
  • Improved Reusability: Self-contained functions can be easily reused across different parts of your application.
  • Superior Performance: Loose coupling reduces bottlenecks and encourages asynchronous execution.
  • Streamlined Testing: Well-defined functions facilitate unit testing and isolate potential issues.
  • Simplified Debugging: Independent functions make it easier to pinpoint the source of errors.
  • Technology Agnostic: You may use your preferred frameworks and tools to write composable code, allowing for easier future adaptations.

Implementing Composable Design

While seemingly simple, implementing composable design can involve some initial complexity.

Here's a breakdown of the approach:

  • Function Design: Each function serves a specific purpose, with clearly defined inputs and outputs.
  • Event Communication: Functions communicate through well-defined events, avoiding direct dependencies.
  • Choreography: For each event flow instance, an event manager, with a state machine and event flow configuration, sequences and triggers functions based on events.

Conclusion

Composable design patterns offer a powerful paradigm for building maintainable, scalable, and future-proof applications. By embracing the principles of self-contained functions and event-driven communication, you can conquer complexity and write code that is a joy to work with.

Source: This article was summarized from composable technology papers using AI in January 2025

Owner

  • Name: Accenture
  • Login: Accenture
  • Kind: organization

Accenture Github site

GitHub Events

Total
  • Issues event: 12
  • Watch event: 6
  • Delete event: 362
  • Issue comment event: 21
  • Push event: 305
  • Pull request review event: 26
  • Pull request review comment event: 7
  • Pull request event: 39
  • Fork event: 1
  • Create event: 403
Last Year
  • Issues event: 12
  • Watch event: 6
  • Delete event: 362
  • Issue comment event: 21
  • Push event: 305
  • Pull request review event: 26
  • Pull request review comment event: 7
  • Pull request event: 39
  • Fork event: 1
  • Create event: 403

Issues and Pull Requests

Last synced: 5 months ago

All Time
  • Total issues: 7
  • Total pull requests: 48
  • Average time to close issues: 9 days
  • Average time to close pull requests: 1 day
  • Total issue authors: 3
  • Total pull request authors: 5
  • Average comments per issue: 2.57
  • Average comments per pull request: 0.04
  • Merged pull requests: 40
  • Bot issues: 0
  • Bot pull requests: 2
Past Year
  • Issues: 7
  • Pull requests: 39
  • Average time to close issues: 9 days
  • Average time to close pull requests: about 2 hours
  • Issue authors: 3
  • Pull request authors: 3
  • Average comments per issue: 2.57
  • Average comments per pull request: 0.05
  • Merged pull requests: 31
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • danrods (4)
  • jerryyanmj (2)
  • mnettle (1)
Pull Request Authors
  • acn-ericlaw (32)
  • jerryyanmj (8)
  • danrods (4)
  • maelimboy (2)
  • dependabot[bot] (2)
Top Labels
Issue Labels
Pull Request Labels
dependencies (2)

Dependencies

connectors/adapters/kafka/kafka-standalone/Dockerfile docker
  • openjdk 11-jre-slim build
benchmark/benchmark-client/pom.xml maven
  • org.platformlambda:kafka-connector 3.1.0
  • org.platformlambda:platform-core 3.1.0
  • junit:junit test
  • org.hamcrest:hamcrest test
benchmark/benchmark-server/pom.xml maven
  • org.platformlambda:kafka-connector 3.1.0
  • org.platformlambda:platform-core 3.1.0
  • junit:junit test
  • org.hamcrest:hamcrest test
connectors/adapters/kafka/kafka-connector/pom.xml maven
  • org.apache.kafka:kafka-clients
  • org.platformlambda:cloud-connector 3.1.0
  • junit:junit test
  • org.hamcrest:hamcrest test
connectors/adapters/kafka/kafka-presence/pom.xml maven
  • org.platformlambda:kafka-connector 3.1.0
  • org.platformlambda:service-monitor 3.1.0
  • junit:junit test
  • org.hamcrest:hamcrest test
connectors/adapters/kafka/kafka-standalone/pom.xml maven
  • com.fasterxml.jackson.core:jackson-annotations 2.16.1
  • com.fasterxml.jackson.core:jackson-core 2.16.1
  • com.fasterxml.jackson.core:jackson-databind 2.16.1
  • com.fasterxml.jackson.dataformat:jackson-dataformat-csv 2.16.1
  • com.fasterxml.jackson.dataformat:jackson-dataformat-yaml 2.16.1
  • com.fasterxml.jackson.datatype:jackson-datatype-jdk8 2.16.1
  • com.fasterxml.jackson.module:jackson-module-scala_2.13 2.16.1
  • io.dropwizard.metrics:metrics-core
  • org.apache.kafka:kafka_2.13
  • org.apache.zookeeper:zookeeper 3.9.1
  • org.platformlambda:platform-core 3.1.0
  • junit:junit test
  • org.hamcrest:hamcrest test
connectors/core/cloud-connector/pom.xml maven
  • org.platformlambda:platform-core 3.1.0
  • junit:junit test
  • org.hamcrest:hamcrest test
connectors/core/service-monitor/pom.xml maven
  • org.platformlambda:cloud-connector 3.1.0
  • org.platformlambda:platform-core 3.1.0
  • junit:junit test
  • org.hamcrest:hamcrest test
examples/lambda-example/pom.xml maven
  • org.platformlambda:hazelcast-connector 3.1.0
  • org.platformlambda:kafka-connector 3.1.0
  • org.platformlambda:platform-core 3.1.0
  • junit:junit test
  • org.hamcrest:hamcrest test
examples/rest-spring-3-example/pom.xml maven
  • org.platformlambda:hazelcast-connector 3.1.0
  • org.platformlambda:kafka-connector 3.1.0
  • org.platformlambda:rest-spring-3 3.1.0
  • junit:junit test
  • org.hamcrest:hamcrest test
extensions/api-playground/pom.xml maven
  • org.platformlambda:rest-spring-3 3.1.0
  • junit:junit test
  • org.hamcrest:hamcrest test
extensions/simple-scheduler/pom.xml maven
  • org.platformlambda:hazelcast-connector 3.1.0
  • org.platformlambda:kafka-connector 3.1.0
  • org.platformlambda:rest-spring-3 3.1.0
  • org.quartz-scheduler:quartz 2.3.2
  • junit:junit test
  • org.hamcrest:hamcrest test
pom.xml maven
system/platform-core/pom.xml maven
  • com.google.code.gson:gson
  • com.google.guava:guava 33.0.0-jre
  • com.sleepycat:je 18.3.12
  • io.github.classgraph:classgraph 4.8.165
  • io.vertx:vertx-core 4.5.1
  • io.vertx:vertx-lang-kotlin-coroutines 4.5.1
  • io.vertx:vertx-web-client 4.5.1
  • org.apache.logging.log4j:log4j-api
  • org.apache.logging.log4j:log4j-core
  • org.apache.logging.log4j:log4j-slf4j2-impl
  • org.apache.logging.log4j:log4j-web
  • org.jetbrains.kotlin:kotlin-stdlib-jdk8 1.9.22
  • org.msgpack:msgpack-core 0.9.6
  • org.slf4j:slf4j-api
  • org.yaml:snakeyaml 2.2
  • junit:junit test
  • org.hamcrest:hamcrest test
  • org.jetbrains.kotlin:kotlin-test-junit 1.9.22 test
system/rest-spring-3/pom.xml maven
  • org.platformlambda:platform-core 3.1.0
  • org.springframework.boot:spring-boot-starter-web
  • org.springframework.boot:spring-boot-starter-webflux
  • junit:junit test
  • org.hamcrest:hamcrest test