https://github.com/accenture/mercury-composable
Reference implementation toolkit for writing composable applications
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
Repository
Reference implementation toolkit for writing composable applications
Basic Info
- Host: GitHub
- Owner: Accenture
- License: apache-2.0
- Language: Java
- Default Branch: main
- Homepage: https://accenture.github.io/mercury-composable/
- Size: 7.88 MB
Statistics
- Stars: 15
- Watchers: 7
- Forks: 5
- Open Issues: 1
- Releases: 0
Topics
Metadata Files
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:
- Describe your use case as an event flow diagram
- Create a configuration file to represent the event flow
- 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:
- Self-Contained Functions: Each function is a well-defined unit, handling its own logic and transformations with minimal dependencies.
- 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
- Website: https://accenture.github.io
- Repositories: 185
- Profile: https://github.com/Accenture
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
- openjdk 11-jre-slim build
- org.platformlambda:kafka-connector 3.1.0
- org.platformlambda:platform-core 3.1.0
- junit:junit test
- org.hamcrest:hamcrest test
- org.platformlambda:kafka-connector 3.1.0
- org.platformlambda:platform-core 3.1.0
- junit:junit test
- org.hamcrest:hamcrest test
- org.apache.kafka:kafka-clients
- org.platformlambda:cloud-connector 3.1.0
- junit:junit test
- org.hamcrest:hamcrest test
- org.platformlambda:kafka-connector 3.1.0
- org.platformlambda:service-monitor 3.1.0
- junit:junit test
- org.hamcrest:hamcrest test
- 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
- org.platformlambda:platform-core 3.1.0
- junit:junit test
- org.hamcrest:hamcrest test
- org.platformlambda:cloud-connector 3.1.0
- org.platformlambda:platform-core 3.1.0
- junit:junit test
- org.hamcrest:hamcrest test
- 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
- 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
- org.platformlambda:rest-spring-3 3.1.0
- junit:junit test
- org.hamcrest:hamcrest test
- 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
- 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
- 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