Emissary, a fast open-source Java messaging library
Recorded: Jan. 26, 2026, 3 p.m.
| Original | Summarized |
GitHub - joel-jeremy/emissary: Emissary is simple, yet 🗲FAST🗲 messaging library for decoupling messages (requests and events) and message handlers 🚀 Skip to content Navigation Menu Toggle navigation
Sign in
Appearance settings PlatformAI CODE CREATIONGitHub CopilotWrite better code with AIGitHub SparkBuild and deploy intelligent appsGitHub ModelsManage and compare promptsMCP RegistryNewIntegrate external toolsDEVELOPER WORKFLOWSActionsAutomate any workflowCodespacesInstant dev environmentsIssuesPlan and track workCode ReviewManage code changesAPPLICATION SECURITYGitHub Advanced SecurityFind and fix vulnerabilitiesCode securitySecure your code as you buildSecret protectionStop leaks before they startEXPLOREWhy GitHubDocumentationBlogChangelogMarketplaceView all featuresSolutionsBY COMPANY SIZEEnterprisesSmall and medium teamsStartupsNonprofitsBY USE CASEApp ModernizationDevSecOpsDevOpsCI/CDView all use casesBY INDUSTRYHealthcareFinancial servicesManufacturingGovernmentView all industriesView all solutionsResourcesEXPLORE BY TOPICAISoftware DevelopmentDevOpsSecurityView all topicsEXPLORE BY TYPECustomer storiesEvents & webinarsEbooks & reportsBusiness insightsGitHub SkillsSUPPORT & SERVICESDocumentationCustomer supportCommunity forumTrust centerPartnersOpen SourceCOMMUNITYGitHub SponsorsFund open source developersPROGRAMSSecurity LabMaintainer CommunityAcceleratorArchive ProgramREPOSITORIESTopicsTrendingCollectionsEnterpriseENTERPRISE SOLUTIONSEnterprise platformAI-powered developer platformAVAILABLE ADD-ONSGitHub Advanced SecurityEnterprise-grade security featuresCopilot for BusinessEnterprise-grade AI featuresPremium SupportEnterprise-grade 24/7 supportPricing Search or jump to... Search code, repositories, users, issues, pull requests...
Search Clear
Search syntax tips Provide feedback Include my email address so I can be contacted Cancel Submit feedback Saved searches
Name Query To see all available qualifiers, see our documentation. Cancel Create saved search Sign in Sign up
Appearance settings Resetting focus You signed in with another tab or window. Reload to refresh your session. Dismiss alert joel-jeremy emissary Public Uh oh! There was an error while loading. Please reload this page.
Notifications
Fork
Star Emissary is simple, yet 🗲FAST🗲 messaging library for decoupling messages (requests and events) and message handlers 🚀 Apache-2.0 license 86 5 Branches Tags Activity
Star
Notifications Code Issues Pull requests Discussions Actions Projects Security Insights
Additional navigation options
Code Issues Pull requests Discussions Actions Projects Security Insights
joel-jeremy/emissary
mainBranchesTagsGo to fileCodeOpen more actions menuFolders and filesNameNameLast commit messageLast commit dateLatest commit History215 Commits.github.github build-logicbuild-logic emissary-coreemissary-core gradlegradle .gitattributes.gitattributes .gitignore.gitignore CONTRIBUTING.mdCONTRIBUTING.md LICENSELICENSE README.mdREADME.md build.gradle.ktsbuild.gradle.kts gradle.propertiesgradle.properties gradlewgradlew gradlew.batgradlew.bat settings.gradle.ktssettings.gradle.kts View all filesRepository files navigationREADMEContributingApache-2.0 licenseEmissary (formerly Deezpatch) A simple-to-use, no dependency, yet 🗲BLAZING FAST🗲 messaging library for decoupling messages (requests and events) and message handlers 🚀 Gradle Emissary jars are published with Automatic-Module-Name manifest attribute: Core - io.github.joeljeremy.emissary.core Module authors can use above module names in their module-info.java: Initiate a state change/mutation Commands in CQRS Retrieve/query data Queries in CQRS public class CreateFooCommand implements Request<Void> { public class GetFooByNameQuery implements Request<Foo> { public class GetFooQueryHandler { // Emissary implements the Dispatcher interface. // Send command! // Send query! public FooCreatedEvent(String name) { public String name() { @EventHandler // Emissary implements the Publisher interface. // Publish event! public static void main(String[] args) { private static Object getInstance(Class<?> handlerType) { throw new IllegalStateException("Failed to get instance for " + handlerType.getName() + "."); @Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME) public class MyRequestHandler { public class MyEventHandler { // To wire things up: public static void main(String[] args) { // Register handlers and custom annotations. SyncRequestHandlerInvocationStrategy (Default) Users can create a new implementation and override the defaults by:
About Emissary is simple, yet 🗲FAST🗲 messaging library for decoupling messages (requests and events) and message handlers 🚀 java jvm messaging event publisher eventbus requests dispatcher Resources Readme Apache-2.0 license Contributing Contributing Uh oh! There was an error while loading. Please reload this page. Activity 86 2 5 Report repository Releases 2.0.0 Latest Sponsor this project
Uh oh! There was an error while loading. Please reload this page. buymeacoffee.com/joeljeremy https://www.paypal.me/joeljeremymarquez Learn more about GitHub Sponsors Packages
Uh oh! There was an error while loading. Please reload this page. Uh oh! There was an error while loading. Please reload this page. Contributors joel-jeremy
dependabot[bot]
github-actions[bot]
tedyoung
Languages Java Kotlin Footer © 2026 GitHub, Inc. Footer navigation Terms Privacy Security Status Community Docs Contact Manage cookies Do not share my personal information You can’t perform that action at this time. |
Emissary is a remarkably efficient messaging library designed for decoupling requests and events, providing a streamlined approach to CQRS patterns without the drawbacks of reflection-based solutions. Developed by Joel Jeremy Marquez, Emissary aims to deliver blazing-fast performance through the strategic utilization of Java's `LambdaMetafactory` to bypass the overhead associated with traditional reflective invocation. This allows Emissary to achieve throughput and speed approaching direct method calls, resulting in performance improvements of approximately 1000% compared to libraries such as Spring's ApplicationEventPublisher and Pipelinr, with reductions of approximately 90% in latency compared to those same libraries. The library's core philosophy centers around simplicity and ease of integration. It avoids the complexity introduced by reflection while still offering powerful features for managing requests and events. Emissary employs annotations – `@RequestHandler` and `@EventHandler` – to clearly define handlers, and it supports methods with `Void` return types, simplifying the coding process and preventing the unnecessary use of `null`. The library provides `Dispatcher` and `Publisher` interfaces for managing message dispatch and event propagation, offering flexibility in how requests and events are handled. Emissary’s architecture is built around the concept of an InstanceProvider, providing a customizable point to manage the instantiation of request and event handlers. This accommodates a variety of dependency injection frameworks, including Spring, Guice, and Dagger, allowing seamless integration into diverse project landscapes. Importantly, Emissary incorporates custom annotations, `@AwesomeRequestHandler` and `@AwesomeEventHandler`, offering greater control for projects adhering to architectural patterns like Hexagonal (Ports and Adapters). The library's design emphasizes performance and efficiency. The use of `LambdaMetafactory` directly addresses the inherent performance limitations of reflection, resulting in the dramatic gains observed in speed and throughput. Moreover, Emissary offers extension points through interfaces like `RequestHandlerInvocationStrategy` and `EventHandlerInvocationStrategy` enabling customization of invocation approaches. The inclusion of built-in support for various dependency injection frameworks and the customizable InstanceProvider solidify Emissary's versatility and adaptability. The library's simple and well-documented approach contributes to ease of adoption and reduced development time, a particularly valuable consideration for applications that demand high performance and scalable messaging. |