com.wallstop-studios.dxmessaging 2.1.5 → 2.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.artifacts/SourceGenerators.Tests/obj/Debug/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.AssemblyInfo.cs +1 -1
- package/.cspell.json +4 -1
- package/.github/workflows/actionlint.yml +11 -1
- package/.github/workflows/csharpier-autofix.yml +34 -3
- package/.github/workflows/dotnet-tests.yml +13 -0
- package/.github/workflows/format-on-demand.yml +38 -44
- package/.github/workflows/json-format-check.yml +24 -0
- package/.github/workflows/lint-doc-links.yml +13 -0
- package/.github/workflows/markdown-json.yml +21 -4
- package/.github/workflows/markdown-link-text-check.yml +10 -0
- package/.github/workflows/markdown-link-validity.yml +10 -0
- package/.github/workflows/markdownlint.yml +7 -5
- package/.github/workflows/prettier-autofix.yml +67 -11
- package/.github/workflows/release-drafter.yml +2 -2
- package/.github/workflows/sync-wiki.yml +3 -3
- package/.github/workflows/yaml-format-lint.yml +26 -0
- package/.llm/context.md +113 -3
- package/.llm/skills/documentation/changelog-management.md +38 -0
- package/.llm/skills/documentation/documentation-style-guide.md +18 -0
- package/.llm/skills/documentation/documentation-update-workflow.md +2 -0
- package/.llm/skills/documentation/documentation-updates.md +2 -0
- package/.llm/skills/documentation/markdown-compatibility.md +476 -0
- package/.llm/skills/documentation/mermaid-theming.md +326 -0
- package/.llm/skills/documentation/mkdocs-navigation.md +290 -0
- package/.llm/skills/github-actions/git-renormalize-patterns.md +231 -0
- package/.llm/skills/github-actions/workflow-consistency.md +346 -0
- package/.llm/skills/index.md +53 -27
- package/.llm/skills/scripting/javascript-code-quality.md +417 -0
- package/.llm/skills/scripting/regex-documentation.md +461 -0
- package/.llm/skills/scripting/shell-best-practices.md +55 -4
- package/.llm/skills/scripting/validation-patterns.md +418 -0
- package/.llm/skills/specification.md +4 -1
- package/.llm/skills/testing/test-code-quality.md +243 -0
- package/.llm/skills/testing/test-production-code.md +348 -0
- package/CHANGELOG.md +11 -0
- package/README.md +0 -11
- package/Tests/Runtime/Benchmarks/WallstopStudios.DxMessaging.Tests.Runtime.Benchmarks.asmdef +1 -6
- package/Tests/Runtime/Integrations/Reflex/WallstopStudios.DxMessaging.Tests.Runtime.Reflex.asmdef +1 -1
- package/Tests/Runtime/Integrations/VContainer/WallstopStudios.DxMessaging.Tests.Runtime.VContainer.asmdef +1 -1
- package/Tests/Runtime/Integrations/Zenject/WallstopStudios.DxMessaging.Tests.Runtime.Zenject.asmdef +1 -1
- package/coverage/clover.xml +216 -3
- package/coverage/clover.xml.meta +7 -7
- package/coverage/coverage-final.json +2 -1
- package/coverage/coverage-final.json.meta +7 -7
- package/coverage/lcov-report/base.css.meta +1 -1
- package/coverage/lcov-report/block-navigation.js.meta +1 -1
- package/coverage/lcov-report/favicon.png.meta +1 -1
- package/coverage/lcov-report/index.html +25 -10
- package/coverage/lcov-report/index.html.meta +7 -7
- package/coverage/lcov-report/prettify.css.meta +1 -1
- package/coverage/lcov-report/prettify.js.meta +1 -1
- package/coverage/lcov-report/sort-arrow-sprite.png.meta +1 -1
- package/coverage/lcov-report/sorter.js.meta +1 -1
- package/coverage/lcov-report/transform-docs-to-wiki.js.html +1 -1
- package/coverage/lcov-report/transform-docs-to-wiki.js.html.meta +7 -7
- package/coverage/lcov-report/vendor.meta +1 -1
- package/coverage/lcov-report.meta +8 -8
- package/coverage/lcov.info +365 -0
- package/coverage/lcov.info.meta +7 -7
- package/docs/architecture/design-and-architecture.md +0 -1
- package/docs/concepts/index.md +37 -0
- package/docs/concepts/index.md.meta +7 -0
- package/docs/concepts/interceptors-and-ordering.md +0 -2
- package/docs/concepts/mental-model.md +390 -0
- package/docs/concepts/mental-model.md.meta +7 -0
- package/docs/concepts/message-types.md +0 -1
- package/docs/getting-started/getting-started.md +1 -0
- package/docs/getting-started/index.md +6 -5
- package/docs/getting-started/overview.md +1 -0
- package/docs/getting-started/quick-start.md +2 -1
- package/docs/getting-started/visual-guide.md +4 -10
- package/docs/hooks.py +10 -1
- package/docs/images/DxMessaging-banner.svg +1 -1
- package/docs/index.md +7 -7
- package/docs/javascripts/mermaid-config.js +44 -4
- package/docs/reference/helpers.md +130 -154
- package/docs/reference/quick-reference.md +5 -1
- package/docs/reference/reference.md +124 -130
- package/mkdocs.yml +2 -0
- package/package.json +1 -1
- package/scripts/__tests__/generate-skills-index.test.js +397 -0
- package/scripts/__tests__/generate-skills-index.test.js.meta +7 -0
- package/scripts/__tests__/mermaid-config.test.js +467 -0
- package/scripts/__tests__/mermaid-config.test.js.meta +7 -0
- package/scripts/__tests__/validate-skills-optional-fields.test.js +1474 -0
- package/scripts/__tests__/validate-skills-optional-fields.test.js.meta +7 -0
- package/scripts/__tests__/validate-skills-required-fields.test.js +188 -0
- package/scripts/__tests__/validate-skills-required-fields.test.js.meta +7 -0
- package/scripts/__tests__/validate-skills-tags.test.js +353 -0
- package/scripts/__tests__/validate-skills-tags.test.js.meta +7 -0
- package/scripts/__tests__/validate-workflows.test.js +188 -0
- package/scripts/__tests__/validate-workflows.test.js.meta +7 -0
- package/scripts/generate-skills-index.js +88 -3
- package/scripts/validate-skills.js +230 -30
- package/scripts/validate-workflows.js +272 -0
- package/scripts/validate-workflows.js.meta +7 -0
- package/site/404.html +1 -1
- package/site/advanced/emit-shorthands/index.html +2 -2
- package/site/advanced/message-bus-providers/index.html +2 -2
- package/site/advanced/registration-builders/index.html +2 -2
- package/site/advanced/runtime-configuration/index.html +2 -2
- package/site/advanced/string-messages/index.html +2 -2
- package/site/advanced.meta +1 -1
- package/site/architecture/comparisons/index.html +2 -2
- package/site/architecture/design-and-architecture/index.html +2 -2
- package/site/architecture/performance/index.html +1 -1
- package/site/architecture.meta +1 -1
- package/site/concepts/index.html +1 -0
- package/site/concepts/index.html.meta +7 -0
- package/site/concepts/interceptors-and-ordering/index.html +4 -4
- package/site/concepts/listening-patterns/index.html +2 -2
- package/site/concepts/mental-model/index.html +146 -0
- package/site/concepts/mental-model/index.html.meta +7 -0
- package/site/concepts/mental-model.meta +8 -0
- package/site/concepts/message-types/index.html +2 -2
- package/site/concepts/targeting-and-context/index.html +2 -2
- package/site/concepts.meta +1 -1
- package/site/examples/end-to-end/index.html +2 -2
- package/site/examples/end-to-end-scene-transitions/index.html +2 -2
- package/site/examples.meta +1 -1
- package/site/getting-started/getting-started/index.html +3 -3
- package/site/getting-started/index.html +4 -4
- package/site/getting-started/install/index.html +3 -3
- package/site/getting-started/overview/index.html +2 -2
- package/site/getting-started/quick-start/index.html +2 -2
- package/site/getting-started/visual-guide/index.html +11 -11
- package/site/getting-started.meta +1 -1
- package/site/guides/advanced/index.html +2 -2
- package/site/guides/diagnostics/index.html +2 -2
- package/site/guides/migration-guide/index.html +2 -2
- package/site/guides/patterns/index.html +2 -2
- package/site/guides/testing/index.html +2 -2
- package/site/guides/unity-integration/index.html +2 -2
- package/site/guides.meta +1 -1
- package/site/hooks.py.meta +1 -1
- package/site/images/DxMessaging-banner.svg +119 -0
- package/site/images/DxMessaging-banner.svg.meta +7 -0
- package/site/images.meta +8 -0
- package/site/index.html +2 -2
- package/site/integrations/index.html +2 -2
- package/site/integrations/reflex/index.html +2 -2
- package/site/integrations/vcontainer/index.html +2 -2
- package/site/integrations/zenject/index.html +2 -2
- package/site/integrations.meta +1 -1
- package/site/javascripts/csharp-highlight.js.meta +7 -7
- package/site/javascripts/mermaid-config.js +4 -1
- package/site/javascripts/mermaid-config.js.meta +1 -1
- package/site/javascripts.meta +1 -1
- package/site/reference/compatibility/index.html +1 -1
- package/site/reference/faq/index.html +1 -1
- package/site/reference/glossary/index.html +2 -2
- package/site/reference/helpers/index.html +15 -15
- package/site/reference/quick-reference/index.html +3 -3
- package/site/reference/reference/index.html +37 -37
- package/site/reference/troubleshooting/index.html +1 -1
- package/site/reference.meta +1 -1
- package/site/search/search_index.json +1 -1
- package/site/sitemap.xml +46 -38
- package/site/sitemap.xml.gz +0 -0
- package/site/stylesheets/extra.css.meta +1 -1
- package/site/stylesheets.meta +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!doctype html><html lang=en class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content="High-performance type-safe messaging library for Unity"><meta name=author content="Wallstop Studios"><link href=https://wallstop.github.io/DxMessaging/architecture/comparisons/ rel=canonical><link href=../design-and-architecture/ rel=prev><link href=../performance/ rel=next><link rel=icon href=../../assets/images/favicon.png><meta name=generator content="mkdocs-1.6.1, mkdocs-material-9.7.1"><title>Comparisons - DxMessaging Documentation</title><link rel=stylesheet href=../../assets/stylesheets/main.484c7ddc.min.css><link rel=stylesheet href=../../assets/stylesheets/palette.ab4e12ef.min.css><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style><link rel=stylesheet href=../../css/timeago.css><link rel=stylesheet href=../../stylesheets/extra.css><script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#comparisons-dxmessaging-and-alternatives class=md-skip> Skip to content </a> </div> <div data-md-component=announce> </div> <header class="md-header md-header--shadow md-header--lifted" data-md-component=header> <nav class="md-header__inner md-grid" aria-label=Header> <a href=../.. title="DxMessaging Documentation" class="md-header__button md-logo" aria-label="DxMessaging Documentation" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> DxMessaging Documentation </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> Comparisons </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> <input class=md-option data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme=slate data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> </form> <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=Search placeholder=Search autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg> </label> <nav class=md-search__options aria-label=Search> <a href=javascript:void(0) class="md-search__icon md-icon" title=Share aria-label=Share data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=Clear aria-label=Clear tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap tabindex=0 data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> Initializing search </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/wallstop/DxMessaging title="Go to repository" class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </div> <div class=md-source__repository> wallstop/DxMessaging </div> </a> </div> </nav> <nav class=md-tabs aria-label=Tabs data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../.. class=md-tabs__link> Home </a> </li> <li class=md-tabs__item> <a href=../../getting-started/ class=md-tabs__link> Getting Started </a> </li> <li class=md-tabs__item> <a href=../../concepts/message-types/ class=md-tabs__link> Concepts </a> </li> <li class=md-tabs__item> <a href=../../guides/patterns/ class=md-tabs__link> Guides </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../design-and-architecture/ class=md-tabs__link> Architecture </a> </li> <li class=md-tabs__item> <a href=../../advanced/emit-shorthands/ class=md-tabs__link> Advanced </a> </li> <li class=md-tabs__item> <a href=../../integrations/ class=md-tabs__link> Integrations </a> </li> <li class=md-tabs__item> <a href=../../examples/end-to-end/ class=md-tabs__link> Examples </a> </li> <li class=md-tabs__item> <a href=../../reference/reference/ class=md-tabs__link> Reference </a> </li> </ul> </div> </nav> </header> <div class=md-container data-md-component=container> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=Navigation data-md-level=0> <label class=md-nav__title for=__drawer> <a href=../.. title="DxMessaging Documentation" class="md-nav__button md-logo" aria-label="DxMessaging Documentation" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> </a> DxMessaging Documentation </label> <div class=md-nav__source> <a href=https://github.com/wallstop/DxMessaging title="Go to repository" class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </div> <div class=md-source__repository> wallstop/DxMessaging </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../.. class=md-nav__link> <span class=md-ellipsis> Home </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../getting-started/ class="md-nav__link "> <span class=md-ellipsis> Getting Started </span> </a> <label class="md-nav__link " for=__nav_2 id=__nav_2_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> Getting Started </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../getting-started/overview/ class=md-nav__link> <span class=md-ellipsis> Overview </span> </a> </li> <li class=md-nav__item> <a href=../../getting-started/install/ class=md-nav__link> <span class=md-ellipsis> Installation </span> </a> </li> <li class=md-nav__item> <a href=../../getting-started/quick-start/ class=md-nav__link> <span class=md-ellipsis> Quick Start </span> </a> </li> <li class=md-nav__item> <a href=../../getting-started/getting-started/ class=md-nav__link> <span class=md-ellipsis> Getting Started Guide </span> </a> </li> <li class=md-nav__item> <a href=../../getting-started/visual-guide/ class=md-nav__link> <span class=md-ellipsis> Visual Guide </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex=0> <span class=md-ellipsis> Concepts </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> Concepts </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../concepts/message-types/ class=md-nav__link> <span class=md-ellipsis> Message Types </span> </a> </li> <li class=md-nav__item> <a href=../../concepts/listening-patterns/ class=md-nav__link> <span class=md-ellipsis> Listening Patterns </span> </a> </li> <li class=md-nav__item> <a href=../../concepts/targeting-and-context/ class=md-nav__link> <span class=md-ellipsis> Targeting & Context </span> </a> </li> <li class=md-nav__item> <a href=../../concepts/interceptors-and-ordering/ class=md-nav__link> <span class=md-ellipsis> Interceptors & Ordering </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex=0> <span class=md-ellipsis> Guides </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> Guides </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../guides/patterns/ class=md-nav__link> <span class=md-ellipsis> Patterns </span> </a> </li> <li class=md-nav__item> <a href=../../guides/unity-integration/ class=md-nav__link> <span class=md-ellipsis> Unity Integration </span> </a> </li> <li class=md-nav__item> <a href=../../guides/testing/ class=md-nav__link> <span class=md-ellipsis> Testing </span> </a> </li> <li class=md-nav__item> <a href=../../guides/diagnostics/ class=md-nav__link> <span class=md-ellipsis> Diagnostics </span> </a> </li> <li class=md-nav__item> <a href=../../guides/advanced/ class=md-nav__link> <span class=md-ellipsis> Advanced Topics </span> </a> </li> <li class=md-nav__item> <a href=../../guides/migration-guide/ class=md-nav__link> <span class=md-ellipsis> Migration Guide </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5 checked> <label class=md-nav__link for=__nav_5 id=__nav_5_label tabindex> <span class=md-ellipsis> Architecture </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=true> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> Architecture </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../design-and-architecture/ class=md-nav__link> <span class=md-ellipsis> Design & Architecture </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <label class="md-nav__link md-nav__link--active" for=__toc> <span class=md-ellipsis> Comparisons </span> <span class="md-nav__icon md-icon"></span> </label> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> Comparisons </span> </a> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#this-guide-shows class=md-nav__link> <span class=md-ellipsis> This guide shows </span> </a> <nav class=md-nav aria-label="This guide shows"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#table-of-contents class=md-nav__link> <span class=md-ellipsis> Table of Contents </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#performance-benchmarks class=md-nav__link> <span class=md-ellipsis> Performance Benchmarks </span> </a> <nav class=md-nav aria-label="Performance Benchmarks"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#comparisons-windows class=md-nav__link> <span class=md-ellipsis> Comparisons (Windows) </span> </a> </li> <li class=md-nav__item> <a href=#comparisons-macos class=md-nav__link> <span class=md-ellipsis> Comparisons (macOS) </span> </a> </li> <li class=md-nav__item> <a href=#comparisons-linux class=md-nav__link> <span class=md-ellipsis> Comparisons (Linux) </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#unity-messaging-frameworks class=md-nav__link> <span class=md-ellipsis> Unity Messaging Frameworks </span> </a> <nav class=md-nav aria-label="Unity Messaging Frameworks"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#quick-summary-which-framework-to-choose class=md-nav__link> <span class=md-ellipsis> Quick Summary: Which Framework to Choose? </span> </a> <nav class=md-nav aria-label="Quick Summary: Which Framework to Choose?"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#tldr-decision-tree class=md-nav__link> <span class=md-ellipsis> TL;DR Decision Tree </span> </a> <nav class=md-nav aria-label="TL;DR Decision Tree"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#one-line-summary-for-each class=md-nav__link> <span class=md-ellipsis> One-Line Summary for Each </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#unirx-reactive-extensions-for-unity class=md-nav__link> <span class=md-ellipsis> UniRx (Reactive Extensions for Unity) </span> </a> <nav class=md-nav aria-label="UniRx (Reactive Extensions for Unity)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#simple-messagebroker-setup-pubsub class=md-nav__link> <span class=md-ellipsis> Simple MessageBroker Setup (Pub/Sub) </span> </a> </li> <li class=md-nav__item> <a href=#advanced-stream-transformations-reactive-programming class=md-nav__link> <span class=md-ellipsis> Advanced Stream Transformations (Reactive Programming) </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-unirx-wins class=md-nav__link> <span class=md-ellipsis> When UniRx Wins </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#messagepipe-high-performance-messaging class=md-nav__link> <span class=md-ellipsis> MessagePipe (High-Performance Messaging) </span> </a> <nav class=md-nav aria-label="MessagePipe (High-Performance Messaging)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features_1 class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example_1 class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves_1 class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well_1 class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics_1 class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve_1 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding_1 class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-messagepipe-wins class=md-nav__link> <span class=md-ellipsis> When MessagePipe Wins </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins_1 class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison_1 class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#zenject-signals-di-based-messaging class=md-nav__link> <span class=md-ellipsis> Zenject Signals (DI-Based Messaging) </span> </a> <nav class=md-nav aria-label="Zenject Signals (DI-Based Messaging)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features_2 class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example_2 class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves_2 class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well_2 class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics_2 class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve_2 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding_2 class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-zenject-signals-win class=md-nav__link> <span class=md-ellipsis> When Zenject Signals Win </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins_2 class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison_2 class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#scriptable-object-architecture-soa class=md-nav__link> <span class=md-ellipsis> Scriptable Object Architecture (SOA) </span> </a> <nav class=md-nav aria-label="Scriptable Object Architecture (SOA)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#quick-comparison class=md-nav__link> <span class=md-ellipsis> Quick Comparison </span> </a> </li> <li class=md-nav__item> <a href=#when-to-use-each class=md-nav__link> <span class=md-ellipsis> When to Use Each </span> </a> <nav class=md-nav aria-label="When to Use Each"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#choose-soa-when class=md-nav__link> <span class=md-ellipsis> Choose SOA when </span> </a> <nav class=md-nav aria-label="Choose SOA when"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#choose-dxmessaging-when class=md-nav__link> <span class=md-ellipsis> Choose DxMessaging when </span> </a> <nav class=md-nav aria-label="Choose DxMessaging when"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#use-both-when class=md-nav__link> <span class=md-ellipsis> Use Both when </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#full-comparison-guide class=md-nav__link> <span class=md-ellipsis> Full Comparison Guide </span> </a> <nav class=md-nav aria-label="Full Comparison Guide"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#-soa-compatibility-guide class=md-nav__link> <span class=md-ellipsis> → SOA Compatibility Guide </span> </a> <nav class=md-nav aria-label="→ SOA Compatibility Guide"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#resources class=md-nav__link> <span class=md-ellipsis> Resources </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#traditional-approaches class=md-nav__link> <span class=md-ellipsis> Traditional Approaches </span> </a> <nav class=md-nav aria-label="Traditional Approaches"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#standard-c-eventsactions class=md-nav__link> <span class=md-ellipsis> Standard C# Events/Actions </span> </a> <nav class=md-nav aria-label="Standard C# Events/Actions"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features_3 class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example_3 class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves_3 class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well_3 class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics_3 class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve_3 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding_3 class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-c-events-win class=md-nav__link> <span class=md-ellipsis> When C# Events Win </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins_3 class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison_3 class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#unityevents-inspector-wiring class=md-nav__link> <span class=md-ellipsis> UnityEvents (Inspector Wiring) </span> </a> <nav class=md-nav aria-label="UnityEvents (Inspector Wiring)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features_4 class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example_4 class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves_4 class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well_4 class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics_4 class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve_4 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding_4 class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-unityevents-win class=md-nav__link> <span class=md-ellipsis> When UnityEvents Win </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins_4 class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison_4 class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#unity-sendmessage class=md-nav__link> <span class=md-ellipsis> Unity SendMessage </span> </a> <nav class=md-nav aria-label="Unity SendMessage"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features_5 class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example_5 class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves_5 class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well_5 class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics_5 class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve_5 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding_5 class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-unity-sendmessage-wins class=md-nav__link> <span class=md-ellipsis> When Unity SendMessage Wins </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins_5 class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison_5 class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#global-event-bus-singletons class=md-nav__link> <span class=md-ellipsis> Global Event Bus Singletons </span> </a> <nav class=md-nav aria-label="Global Event Bus Singletons"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features_6 class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example_6 class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves_6 class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well_6 class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics_6 class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve_6 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding_6 class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-static-event-bus-wins class=md-nav__link> <span class=md-ellipsis> When Static Event Bus Wins </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins_6 class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison_6 class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#honest-trade-offs-what-you-give-up-what-you-gain class=md-nav__link> <span class=md-ellipsis> Honest Trade-offs: What You Give Up, What You Gain </span> </a> <nav class=md-nav aria-label="Honest Trade-offs: What You Give Up, What You Gain"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#learning-curve_7 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> <nav class=md-nav aria-label="Learning Curve"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> <nav class=md-nav aria-label="What You Gain"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#verdict class=md-nav__link> <span class=md-ellipsis> Verdict </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#boilerplate class=md-nav__link> <span class=md-ellipsis> Boilerplate </span> </a> <nav class=md-nav aria-label=Boilerplate> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up_1 class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain_1 class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> </li> <li class=md-nav__item> <a href=#example-comparison class=md-nav__link> <span class=md-ellipsis> Example Comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#performance class=md-nav__link> <span class=md-ellipsis> Performance </span> </a> <nav class=md-nav aria-label=Performance> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up_2 class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain_2 class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> </li> <li class=md-nav__item> <a href=#hard-numbers class=md-nav__link> <span class=md-ellipsis> Hard Numbers </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#flexibility class=md-nav__link> <span class=md-ellipsis> Flexibility </span> </a> <nav class=md-nav aria-label=Flexibility> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up_3 class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain_3 class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> </li> <li class=md-nav__item> <a href=#when-limitations-hurt class=md-nav__link> <span class=md-ellipsis> When Limitations Hurt </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#debuggability class=md-nav__link> <span class=md-ellipsis> Debuggability </span> </a> <nav class=md-nav aria-label=Debuggability> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up_4 class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain_4 class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> </li> <li class=md-nav__item> <a href=#example-finding-who-fired-a-message class=md-nav__link> <span class=md-ellipsis> Example: Finding Who Fired a Message </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#coupling-and-architecture class=md-nav__link> <span class=md-ellipsis> Coupling and Architecture </span> </a> <nav class=md-nav aria-label="Coupling and Architecture"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up_5 class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain_5 class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> </li> <li class=md-nav__item> <a href=#impact-on-architecture class=md-nav__link> <span class=md-ellipsis> Impact on Architecture </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#testing class=md-nav__link> <span class=md-ellipsis> Testing </span> </a> <nav class=md-nav aria-label=Testing> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up_6 class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain_6 class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> <nav class=md-nav aria-label="What You Gain"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#example class=md-nav__link> <span class=md-ellipsis> Example </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#feature-by-feature-comparison-matrix class=md-nav__link> <span class=md-ellipsis> Feature-by-Feature Comparison Matrix </span> </a> <nav class=md-nav aria-label="Feature-by-Feature Comparison Matrix"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#unity-messaging-frameworks-comparison class=md-nav__link> <span class=md-ellipsis> Unity Messaging Frameworks Comparison </span> </a> </li> <li class=md-nav__item> <a href=#traditional-approaches-comparison class=md-nav__link> <span class=md-ellipsis> Traditional Approaches Comparison </span> </a> </li> <li class=md-nav__item> <a href=#overall-verdict-by-use-case class=md-nav__link> <span class=md-ellipsis> Overall Verdict by Use Case </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#when-each-approach-actually-wins class=md-nav__link> <span class=md-ellipsis> When Each Approach ACTUALLY Wins </span> </a> <nav class=md-nav aria-label="When Each Approach ACTUALLY Wins"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#dxmessaging-wins-when class=md-nav__link> <span class=md-ellipsis> DxMessaging Wins When </span> </a> </li> <li class=md-nav__item> <a href=#unirx-wins-when class=md-nav__link> <span class=md-ellipsis> UniRx Wins When </span> </a> </li> <li class=md-nav__item> <a href=#messagepipe-wins-when class=md-nav__link> <span class=md-ellipsis> MessagePipe Wins When </span> </a> </li> <li class=md-nav__item> <a href=#zenject-signals-win-when class=md-nav__link> <span class=md-ellipsis> Zenject Signals Win When </span> </a> </li> <li class=md-nav__item> <a href=#c-events-win-when class=md-nav__link> <span class=md-ellipsis> C# Events Win When </span> </a> </li> <li class=md-nav__item> <a href=#unityevents-win-when class=md-nav__link> <span class=md-ellipsis> UnityEvents Win When </span> </a> </li> <li class=md-nav__item> <a href=#soa-gameeventvariables-wins-when class=md-nav__link> <span class=md-ellipsis> SOA (GameEvent/Variables) Wins When </span> </a> </li> <li class=md-nav__item> <a href=#static-event-bus-wins-when class=md-nav__link> <span class=md-ellipsis> Static Event Bus Wins When </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#cost-benefit-summary class=md-nav__link> <span class=md-ellipsis> Cost-Benefit Summary </span> </a> <nav class=md-nav aria-label="Cost-Benefit Summary"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#costs class=md-nav__link> <span class=md-ellipsis> Costs </span> </a> </li> <li class=md-nav__item> <a href=#benefits class=md-nav__link> <span class=md-ellipsis> Benefits </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#making-the-decision-be-honest-with-yourself class=md-nav__link> <span class=md-ellipsis> Making the Decision (Be Honest With Yourself) </span> </a> <nav class=md-nav aria-label="Making the Decision (Be Honest With Yourself)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#answer-these-questions-honestly class=md-nav__link> <span class=md-ellipsis> Answer these questions honestly </span> </a> </li> <li class=md-nav__item> <a href=#1-project-lifespan class=md-nav__link> <span class=md-ellipsis> 1. Project Lifespan? </span> </a> </li> <li class=md-nav__item> <a href=#2-team-size class=md-nav__link> <span class=md-ellipsis> 2. Team Size? </span> </a> </li> <li class=md-nav__item> <a href=#3-codebase-size class=md-nav__link> <span class=md-ellipsis> 3. Codebase Size? </span> </a> </li> <li class=md-nav__item> <a href=#4-how-many-systems-need-to-communicate class=md-nav__link> <span class=md-ellipsis> 4. How Many Systems Need to Communicate? </span> </a> </li> <li class=md-nav__item> <a href=#5-have-you-had-memory-leaks-from-forgotten-unsubscribes class=md-nav__link> <span class=md-ellipsis> 5. Have You Had Memory Leaks From Forgotten Unsubscribes? </span> </a> </li> <li class=md-nav__item> <a href=#6-how-often-do-you-debug-what-fired-when class=md-nav__link> <span class=md-ellipsis> 6. How Often Do You Debug "What Fired When?" </span> </a> </li> <li class=md-nav__item> <a href=#quick-decision-matrix class=md-nav__link> <span class=md-ellipsis> Quick Decision Matrix </span> </a> </li> <li class=md-nav__item> <a href=#the-real-question class=md-nav__link> <span class=md-ellipsis> The Real Question </span> </a> <nav class=md-nav aria-label="The Real Question"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#will-this-project-still-exist-in-3-months class=md-nav__link> <span class=md-ellipsis> "Will this project still exist in 3 months?" </span> </a> <nav class=md-nav aria-label='"Will this project still exist in 3 months?"'> <ul class=md-nav__list> <li class=md-nav__item> <a href=#will-anyone-else-work-on-this-code class=md-nav__link> <span class=md-ellipsis> "Will anyone else work on this code?" </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#rule-of-thumb class=md-nav__link> <span class=md-ellipsis> Rule of Thumb </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=../performance/ class=md-nav__link> <span class=md-ellipsis> Performance </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_6> <label class=md-nav__link for=__nav_6 id=__nav_6_label tabindex=0> <span class=md-ellipsis> Advanced </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> Advanced </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../advanced/emit-shorthands/ class=md-nav__link> <span class=md-ellipsis> Emit Shorthands </span> </a> </li> <li class=md-nav__item> <a href=../../advanced/message-bus-providers/ class=md-nav__link> <span class=md-ellipsis> Message Bus Providers </span> </a> </li> <li class=md-nav__item> <a href=../../advanced/registration-builders/ class=md-nav__link> <span class=md-ellipsis> Registration Builders </span> </a> </li> <li class=md-nav__item> <a href=../../advanced/runtime-configuration/ class=md-nav__link> <span class=md-ellipsis> Runtime Configuration </span> </a> </li> <li class=md-nav__item> <a href=../../advanced/string-messages/ class=md-nav__link> <span class=md-ellipsis> String Messages </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_7> <div class="md-nav__link md-nav__container"> <a href=../../integrations/ class="md-nav__link "> <span class=md-ellipsis> Integrations </span> </a> <label class="md-nav__link " for=__nav_7 id=__nav_7_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> Integrations </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../integrations/vcontainer/ class=md-nav__link> <span class=md-ellipsis> VContainer </span> </a> </li> <li class=md-nav__item> <a href=../../integrations/zenject/ class=md-nav__link> <span class=md-ellipsis> Zenject </span> </a> </li> <li class=md-nav__item> <a href=../../integrations/reflex/ class=md-nav__link> <span class=md-ellipsis> Reflex </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_8> <label class=md-nav__link for=__nav_8 id=__nav_8_label tabindex=0> <span class=md-ellipsis> Examples </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> Examples </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../examples/end-to-end/ class=md-nav__link> <span class=md-ellipsis> End-to-End </span> </a> </li> <li class=md-nav__item> <a href=../../examples/end-to-end-scene-transitions/ class=md-nav__link> <span class=md-ellipsis> Scene Transitions </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex=0> <span class=md-ellipsis> Reference </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> Reference </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../reference/reference/ class=md-nav__link> <span class=md-ellipsis> API Reference (Practical) </span> </a> </li> <li class=md-nav__item> <a href=../../reference/quick-reference/ class=md-nav__link> <span class=md-ellipsis> Quick Reference </span> </a> </li> <li class=md-nav__item> <a href=../../reference/helpers/ class=md-nav__link> <span class=md-ellipsis> Helpers </span> </a> </li> <li class=md-nav__item> <a href=../../reference/faq/ class=md-nav__link> <span class=md-ellipsis> FAQ </span> </a> </li> <li class=md-nav__item> <a href=../../reference/glossary/ class=md-nav__link> <span class=md-ellipsis> Glossary </span> </a> </li> <li class=md-nav__item> <a href=../../reference/troubleshooting/ class=md-nav__link> <span class=md-ellipsis> Troubleshooting </span> </a> </li> <li class=md-nav__item> <a href=../../reference/compatibility/ class=md-nav__link> <span class=md-ellipsis> Compatibility </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#this-guide-shows class=md-nav__link> <span class=md-ellipsis> This guide shows </span> </a> <nav class=md-nav aria-label="This guide shows"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#table-of-contents class=md-nav__link> <span class=md-ellipsis> Table of Contents </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#performance-benchmarks class=md-nav__link> <span class=md-ellipsis> Performance Benchmarks </span> </a> <nav class=md-nav aria-label="Performance Benchmarks"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#comparisons-windows class=md-nav__link> <span class=md-ellipsis> Comparisons (Windows) </span> </a> </li> <li class=md-nav__item> <a href=#comparisons-macos class=md-nav__link> <span class=md-ellipsis> Comparisons (macOS) </span> </a> </li> <li class=md-nav__item> <a href=#comparisons-linux class=md-nav__link> <span class=md-ellipsis> Comparisons (Linux) </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#unity-messaging-frameworks class=md-nav__link> <span class=md-ellipsis> Unity Messaging Frameworks </span> </a> <nav class=md-nav aria-label="Unity Messaging Frameworks"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#quick-summary-which-framework-to-choose class=md-nav__link> <span class=md-ellipsis> Quick Summary: Which Framework to Choose? </span> </a> <nav class=md-nav aria-label="Quick Summary: Which Framework to Choose?"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#tldr-decision-tree class=md-nav__link> <span class=md-ellipsis> TL;DR Decision Tree </span> </a> <nav class=md-nav aria-label="TL;DR Decision Tree"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#one-line-summary-for-each class=md-nav__link> <span class=md-ellipsis> One-Line Summary for Each </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#unirx-reactive-extensions-for-unity class=md-nav__link> <span class=md-ellipsis> UniRx (Reactive Extensions for Unity) </span> </a> <nav class=md-nav aria-label="UniRx (Reactive Extensions for Unity)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#simple-messagebroker-setup-pubsub class=md-nav__link> <span class=md-ellipsis> Simple MessageBroker Setup (Pub/Sub) </span> </a> </li> <li class=md-nav__item> <a href=#advanced-stream-transformations-reactive-programming class=md-nav__link> <span class=md-ellipsis> Advanced Stream Transformations (Reactive Programming) </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-unirx-wins class=md-nav__link> <span class=md-ellipsis> When UniRx Wins </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#messagepipe-high-performance-messaging class=md-nav__link> <span class=md-ellipsis> MessagePipe (High-Performance Messaging) </span> </a> <nav class=md-nav aria-label="MessagePipe (High-Performance Messaging)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features_1 class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example_1 class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves_1 class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well_1 class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics_1 class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve_1 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding_1 class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-messagepipe-wins class=md-nav__link> <span class=md-ellipsis> When MessagePipe Wins </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins_1 class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison_1 class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#zenject-signals-di-based-messaging class=md-nav__link> <span class=md-ellipsis> Zenject Signals (DI-Based Messaging) </span> </a> <nav class=md-nav aria-label="Zenject Signals (DI-Based Messaging)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features_2 class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example_2 class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves_2 class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well_2 class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics_2 class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve_2 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding_2 class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-zenject-signals-win class=md-nav__link> <span class=md-ellipsis> When Zenject Signals Win </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins_2 class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison_2 class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#scriptable-object-architecture-soa class=md-nav__link> <span class=md-ellipsis> Scriptable Object Architecture (SOA) </span> </a> <nav class=md-nav aria-label="Scriptable Object Architecture (SOA)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#quick-comparison class=md-nav__link> <span class=md-ellipsis> Quick Comparison </span> </a> </li> <li class=md-nav__item> <a href=#when-to-use-each class=md-nav__link> <span class=md-ellipsis> When to Use Each </span> </a> <nav class=md-nav aria-label="When to Use Each"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#choose-soa-when class=md-nav__link> <span class=md-ellipsis> Choose SOA when </span> </a> <nav class=md-nav aria-label="Choose SOA when"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#choose-dxmessaging-when class=md-nav__link> <span class=md-ellipsis> Choose DxMessaging when </span> </a> <nav class=md-nav aria-label="Choose DxMessaging when"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#use-both-when class=md-nav__link> <span class=md-ellipsis> Use Both when </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#full-comparison-guide class=md-nav__link> <span class=md-ellipsis> Full Comparison Guide </span> </a> <nav class=md-nav aria-label="Full Comparison Guide"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#-soa-compatibility-guide class=md-nav__link> <span class=md-ellipsis> → SOA Compatibility Guide </span> </a> <nav class=md-nav aria-label="→ SOA Compatibility Guide"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#resources class=md-nav__link> <span class=md-ellipsis> Resources </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#traditional-approaches class=md-nav__link> <span class=md-ellipsis> Traditional Approaches </span> </a> <nav class=md-nav aria-label="Traditional Approaches"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#standard-c-eventsactions class=md-nav__link> <span class=md-ellipsis> Standard C# Events/Actions </span> </a> <nav class=md-nav aria-label="Standard C# Events/Actions"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features_3 class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example_3 class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves_3 class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well_3 class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics_3 class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve_3 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding_3 class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-c-events-win class=md-nav__link> <span class=md-ellipsis> When C# Events Win </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins_3 class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison_3 class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#unityevents-inspector-wiring class=md-nav__link> <span class=md-ellipsis> UnityEvents (Inspector Wiring) </span> </a> <nav class=md-nav aria-label="UnityEvents (Inspector Wiring)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features_4 class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example_4 class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves_4 class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well_4 class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics_4 class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve_4 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding_4 class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-unityevents-win class=md-nav__link> <span class=md-ellipsis> When UnityEvents Win </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins_4 class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison_4 class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#unity-sendmessage class=md-nav__link> <span class=md-ellipsis> Unity SendMessage </span> </a> <nav class=md-nav aria-label="Unity SendMessage"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features_5 class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example_5 class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves_5 class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well_5 class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics_5 class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve_5 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding_5 class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-unity-sendmessage-wins class=md-nav__link> <span class=md-ellipsis> When Unity SendMessage Wins </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins_5 class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison_5 class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#global-event-bus-singletons class=md-nav__link> <span class=md-ellipsis> Global Event Bus Singletons </span> </a> <nav class=md-nav aria-label="Global Event Bus Singletons"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features_6 class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example_6 class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves_6 class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well_6 class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics_6 class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve_6 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding_6 class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-static-event-bus-wins class=md-nav__link> <span class=md-ellipsis> When Static Event Bus Wins </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins_6 class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison_6 class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#honest-trade-offs-what-you-give-up-what-you-gain class=md-nav__link> <span class=md-ellipsis> Honest Trade-offs: What You Give Up, What You Gain </span> </a> <nav class=md-nav aria-label="Honest Trade-offs: What You Give Up, What You Gain"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#learning-curve_7 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> <nav class=md-nav aria-label="Learning Curve"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> <nav class=md-nav aria-label="What You Gain"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#verdict class=md-nav__link> <span class=md-ellipsis> Verdict </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#boilerplate class=md-nav__link> <span class=md-ellipsis> Boilerplate </span> </a> <nav class=md-nav aria-label=Boilerplate> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up_1 class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain_1 class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> </li> <li class=md-nav__item> <a href=#example-comparison class=md-nav__link> <span class=md-ellipsis> Example Comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#performance class=md-nav__link> <span class=md-ellipsis> Performance </span> </a> <nav class=md-nav aria-label=Performance> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up_2 class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain_2 class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> </li> <li class=md-nav__item> <a href=#hard-numbers class=md-nav__link> <span class=md-ellipsis> Hard Numbers </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#flexibility class=md-nav__link> <span class=md-ellipsis> Flexibility </span> </a> <nav class=md-nav aria-label=Flexibility> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up_3 class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain_3 class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> </li> <li class=md-nav__item> <a href=#when-limitations-hurt class=md-nav__link> <span class=md-ellipsis> When Limitations Hurt </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#debuggability class=md-nav__link> <span class=md-ellipsis> Debuggability </span> </a> <nav class=md-nav aria-label=Debuggability> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up_4 class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain_4 class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> </li> <li class=md-nav__item> <a href=#example-finding-who-fired-a-message class=md-nav__link> <span class=md-ellipsis> Example: Finding Who Fired a Message </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#coupling-and-architecture class=md-nav__link> <span class=md-ellipsis> Coupling and Architecture </span> </a> <nav class=md-nav aria-label="Coupling and Architecture"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up_5 class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain_5 class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> </li> <li class=md-nav__item> <a href=#impact-on-architecture class=md-nav__link> <span class=md-ellipsis> Impact on Architecture </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#testing class=md-nav__link> <span class=md-ellipsis> Testing </span> </a> <nav class=md-nav aria-label=Testing> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up_6 class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain_6 class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> <nav class=md-nav aria-label="What You Gain"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#example class=md-nav__link> <span class=md-ellipsis> Example </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#feature-by-feature-comparison-matrix class=md-nav__link> <span class=md-ellipsis> Feature-by-Feature Comparison Matrix </span> </a> <nav class=md-nav aria-label="Feature-by-Feature Comparison Matrix"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#unity-messaging-frameworks-comparison class=md-nav__link> <span class=md-ellipsis> Unity Messaging Frameworks Comparison </span> </a> </li> <li class=md-nav__item> <a href=#traditional-approaches-comparison class=md-nav__link> <span class=md-ellipsis> Traditional Approaches Comparison </span> </a> </li> <li class=md-nav__item> <a href=#overall-verdict-by-use-case class=md-nav__link> <span class=md-ellipsis> Overall Verdict by Use Case </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#when-each-approach-actually-wins class=md-nav__link> <span class=md-ellipsis> When Each Approach ACTUALLY Wins </span> </a> <nav class=md-nav aria-label="When Each Approach ACTUALLY Wins"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#dxmessaging-wins-when class=md-nav__link> <span class=md-ellipsis> DxMessaging Wins When </span> </a> </li> <li class=md-nav__item> <a href=#unirx-wins-when class=md-nav__link> <span class=md-ellipsis> UniRx Wins When </span> </a> </li> <li class=md-nav__item> <a href=#messagepipe-wins-when class=md-nav__link> <span class=md-ellipsis> MessagePipe Wins When </span> </a> </li> <li class=md-nav__item> <a href=#zenject-signals-win-when class=md-nav__link> <span class=md-ellipsis> Zenject Signals Win When </span> </a> </li> <li class=md-nav__item> <a href=#c-events-win-when class=md-nav__link> <span class=md-ellipsis> C# Events Win When </span> </a> </li> <li class=md-nav__item> <a href=#unityevents-win-when class=md-nav__link> <span class=md-ellipsis> UnityEvents Win When </span> </a> </li> <li class=md-nav__item> <a href=#soa-gameeventvariables-wins-when class=md-nav__link> <span class=md-ellipsis> SOA (GameEvent/Variables) Wins When </span> </a> </li> <li class=md-nav__item> <a href=#static-event-bus-wins-when class=md-nav__link> <span class=md-ellipsis> Static Event Bus Wins When </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#cost-benefit-summary class=md-nav__link> <span class=md-ellipsis> Cost-Benefit Summary </span> </a> <nav class=md-nav aria-label="Cost-Benefit Summary"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#costs class=md-nav__link> <span class=md-ellipsis> Costs </span> </a> </li> <li class=md-nav__item> <a href=#benefits class=md-nav__link> <span class=md-ellipsis> Benefits </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#making-the-decision-be-honest-with-yourself class=md-nav__link> <span class=md-ellipsis> Making the Decision (Be Honest With Yourself) </span> </a> <nav class=md-nav aria-label="Making the Decision (Be Honest With Yourself)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#answer-these-questions-honestly class=md-nav__link> <span class=md-ellipsis> Answer these questions honestly </span> </a> </li> <li class=md-nav__item> <a href=#1-project-lifespan class=md-nav__link> <span class=md-ellipsis> 1. Project Lifespan? </span> </a> </li> <li class=md-nav__item> <a href=#2-team-size class=md-nav__link> <span class=md-ellipsis> 2. Team Size? </span> </a> </li> <li class=md-nav__item> <a href=#3-codebase-size class=md-nav__link> <span class=md-ellipsis> 3. Codebase Size? </span> </a> </li> <li class=md-nav__item> <a href=#4-how-many-systems-need-to-communicate class=md-nav__link> <span class=md-ellipsis> 4. How Many Systems Need to Communicate? </span> </a> </li> <li class=md-nav__item> <a href=#5-have-you-had-memory-leaks-from-forgotten-unsubscribes class=md-nav__link> <span class=md-ellipsis> 5. Have You Had Memory Leaks From Forgotten Unsubscribes? </span> </a> </li> <li class=md-nav__item> <a href=#6-how-often-do-you-debug-what-fired-when class=md-nav__link> <span class=md-ellipsis> 6. How Often Do You Debug "What Fired When?" </span> </a> </li> <li class=md-nav__item> <a href=#quick-decision-matrix class=md-nav__link> <span class=md-ellipsis> Quick Decision Matrix </span> </a> </li> <li class=md-nav__item> <a href=#the-real-question class=md-nav__link> <span class=md-ellipsis> The Real Question </span> </a> <nav class=md-nav aria-label="The Real Question"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#will-this-project-still-exist-in-3-months class=md-nav__link> <span class=md-ellipsis> "Will this project still exist in 3 months?" </span> </a> <nav class=md-nav aria-label='"Will this project still exist in 3 months?"'> <ul class=md-nav__list> <li class=md-nav__item> <a href=#will-anyone-else-work-on-this-code class=md-nav__link> <span class=md-ellipsis> "Will anyone else work on this code?" </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#rule-of-thumb class=md-nav__link> <span class=md-ellipsis> Rule of Thumb </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <nav class=md-path aria-label=Navigation> <ol class=md-path__list> <li class=md-path__item> <a href=../.. class=md-path__link> <span class=md-ellipsis> Home </span> </a> </li> <li class=md-path__item> <a href=../design-and-architecture/ class=md-path__link> <span class=md-ellipsis> Architecture </span> </a> </li> </ol> </nav> <article class="md-content__inner md-typeset"> <a href=https://github.com/wallstop/DxMessaging/edit/master/docs/architecture/comparisons.md title="Edit this page" class="md-content__button md-icon" rel=edit> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"/></svg> </a> <a href=https://github.com/wallstop/DxMessaging/raw/master/docs/architecture/comparisons.md title="View source of this page" class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.2 8.2 0 0 1-1.23-2"/></svg> </a> <h1 id=comparisons-dxmessaging-and-alternatives>Comparisons: DxMessaging and Alternatives<a class=headerlink href=#comparisons-dxmessaging-and-alternatives title="Anchor link to this section">¶</a></h1> <p><strong>TL;DR:</strong> This guide compares DxMessaging with other messaging approaches. Each has legitimate strengths and trade-offs. DxMessaging takes a different approach with its own trade-offs.</p> <h2 id=this-guide-shows>This guide shows<a class=headerlink href=#this-guide-shows title="Anchor link to this section">¶</a></h2> <ul> <li>Characteristics of each approach (with real code examples)</li> <li>How DxMessaging takes a different approach (with real code examples)</li> <li>Trade-offs for each option (what you give up, what you gain)</li> <li>When to use each approach based on your needs</li> </ul> <h3 id=table-of-contents>Table of Contents<a class=headerlink href=#table-of-contents title="Anchor link to this section">¶</a></h3> <ul> <li><a href=#performance-benchmarks>Performance Benchmarks</a></li> <li><a href=#unity-messaging-frameworks>Unity Messaging Frameworks</a></li> <li><a href=#unirx-reactive-extensions-for-unity>UniRx</a></li> <li><a href=#messagepipe-high-performance-messaging>MessagePipe</a></li> <li><a href=#zenject-signals-di-based-messaging>Zenject Signals</a></li> <li><a href=#scriptable-object-architecture-soa>Scriptable Object Architecture (SOA)</a></li> <li><a href=#traditional-approaches>Traditional Approaches</a></li> <li><a href=#standard-c-eventsactions>C# Events/Delegates</a></li> <li><a href=#unityevents-inspector-wiring>UnityEvents</a></li> <li><a href=#unity-sendmessage>Unity SendMessage</a></li> <li><a href=#global-event-bus-singletons>Static Event Buses</a></li> <li><a href=#honest-trade-offs-what-you-give-up-what-you-gain>Trade-offs</a></li> <li><a href=#feature-by-feature-comparison-matrix>Feature Matrix</a></li> <li><a href=#when-each-approach-actually-wins>Decision Guide</a></li> </ul> <h2 id=performance-benchmarks>Performance Benchmarks<a class=headerlink href=#performance-benchmarks title="Anchor link to this section">¶</a></h2> <p>These sections are auto-updated by the PlayMode comparison benchmarks in the <a href=https://github.com/wallstop/DxMessaging/blob/master/Tests/Runtime/Benchmarks/ComparisonPerformanceTests.cs>Comparison Performance PlayMode tests</a>. Run the suite locally to refresh the tables.</p> <h3 id=comparisons-windows>Comparisons (Windows)<a class=headerlink href=#comparisons-windows title="Anchor link to this section">¶</a></h3> <table> <thead> <tr> <th>Message Tech</th> <th>Operations / Second</th> <th>Allocations?</th> </tr> </thead> <tbody> <tr> <td>DxMessaging (Untargeted) - No-Copy</td> <td>19,736,000</td> <td>No</td> </tr> <tr> <td>UniRx MessageBroker</td> <td>18,000,000</td> <td>No</td> </tr> <tr> <td>MessagePipe (Global)</td> <td>95,904,000</td> <td>No</td> </tr> <tr> <td>Zenject SignalBus</td> <td>2,462,000</td> <td>Yes</td> </tr> </tbody> </table> <h3 id=comparisons-macos>Comparisons (macOS)<a class=headerlink href=#comparisons-macos title="Anchor link to this section">¶</a></h3> <p>Run the PlayMode comparison benchmarks on macOS to populate this section.</p> <h3 id=comparisons-linux>Comparisons (Linux)<a class=headerlink href=#comparisons-linux title="Anchor link to this section">¶</a></h3> <p>Run the PlayMode comparison benchmarks on Linux to populate this section.</p> <hr> <h2 id=unity-messaging-frameworks>Unity Messaging Frameworks<a class=headerlink href=#unity-messaging-frameworks title="Anchor link to this section">¶</a></h2> <p>This section compares DxMessaging with other popular Unity messaging/eventing libraries. Each offers different approaches to solving communication and decoupling problems in Unity.</p> <h3 id=quick-summary-which-framework-to-choose>Quick Summary: Which Framework to Choose?<a class=headerlink href=#quick-summary-which-framework-to-choose title="Anchor link to this section">¶</a></h3> <h4 id=tldr-decision-tree>TL;DR Decision Tree<a class=headerlink href=#tldr-decision-tree title="Anchor link to this section">¶</a></h4> <div class="language-text highlight"><span class=filename>Text Only</span><pre><span></span><code><span id=__span-0-1><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a>Need absolute simplest pub/sub setup (zero boilerplate)?
|
|
1
|
+
<!doctype html><html lang=en class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content="High-performance type-safe messaging library for Unity"><meta name=author content="Wallstop Studios"><link href=https://wallstop.github.io/DxMessaging/architecture/comparisons/ rel=canonical><link href=../design-and-architecture/ rel=prev><link href=../performance/ rel=next><link rel=icon href=../../assets/images/favicon.png><meta name=generator content="mkdocs-1.6.1, mkdocs-material-9.7.1"><title>Comparisons - DxMessaging Documentation</title><link rel=stylesheet href=../../assets/stylesheets/main.484c7ddc.min.css><link rel=stylesheet href=../../assets/stylesheets/palette.ab4e12ef.min.css><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style><link rel=stylesheet href=../../css/timeago.css><link rel=stylesheet href=../../stylesheets/extra.css><script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#comparisons-dxmessaging-and-alternatives class=md-skip> Skip to content </a> </div> <div data-md-component=announce> </div> <header class="md-header md-header--shadow md-header--lifted" data-md-component=header> <nav class="md-header__inner md-grid" aria-label=Header> <a href=../.. title="DxMessaging Documentation" class="md-header__button md-logo" aria-label="DxMessaging Documentation" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> DxMessaging Documentation </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> Comparisons </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> <input class=md-option data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme=slate data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> </form> <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=Search placeholder=Search autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg> </label> <nav class=md-search__options aria-label=Search> <a href=javascript:void(0) class="md-search__icon md-icon" title=Share aria-label=Share data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=Clear aria-label=Clear tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap tabindex=0 data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> Initializing search </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/wallstop/DxMessaging title="Go to repository" class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </div> <div class=md-source__repository> wallstop/DxMessaging </div> </a> </div> </nav> <nav class=md-tabs aria-label=Tabs data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../.. class=md-tabs__link> Home </a> </li> <li class=md-tabs__item> <a href=../../getting-started/ class=md-tabs__link> Getting Started </a> </li> <li class=md-tabs__item> <a href=../../concepts/ class=md-tabs__link> Concepts </a> </li> <li class=md-tabs__item> <a href=../../guides/patterns/ class=md-tabs__link> Guides </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../design-and-architecture/ class=md-tabs__link> Architecture </a> </li> <li class=md-tabs__item> <a href=../../advanced/emit-shorthands/ class=md-tabs__link> Advanced </a> </li> <li class=md-tabs__item> <a href=../../integrations/ class=md-tabs__link> Integrations </a> </li> <li class=md-tabs__item> <a href=../../examples/end-to-end/ class=md-tabs__link> Examples </a> </li> <li class=md-tabs__item> <a href=../../reference/reference/ class=md-tabs__link> Reference </a> </li> </ul> </div> </nav> </header> <div class=md-container data-md-component=container> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=Navigation data-md-level=0> <label class=md-nav__title for=__drawer> <a href=../.. title="DxMessaging Documentation" class="md-nav__button md-logo" aria-label="DxMessaging Documentation" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> </a> DxMessaging Documentation </label> <div class=md-nav__source> <a href=https://github.com/wallstop/DxMessaging title="Go to repository" class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </div> <div class=md-source__repository> wallstop/DxMessaging </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../.. class=md-nav__link> <span class=md-ellipsis> Home </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../getting-started/ class="md-nav__link "> <span class=md-ellipsis> Getting Started </span> </a> <label class="md-nav__link " for=__nav_2 id=__nav_2_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> Getting Started </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../getting-started/overview/ class=md-nav__link> <span class=md-ellipsis> Overview </span> </a> </li> <li class=md-nav__item> <a href=../../getting-started/install/ class=md-nav__link> <span class=md-ellipsis> Installation </span> </a> </li> <li class=md-nav__item> <a href=../../getting-started/quick-start/ class=md-nav__link> <span class=md-ellipsis> Quick Start </span> </a> </li> <li class=md-nav__item> <a href=../../getting-started/getting-started/ class=md-nav__link> <span class=md-ellipsis> Getting Started Guide </span> </a> </li> <li class=md-nav__item> <a href=../../getting-started/visual-guide/ class=md-nav__link> <span class=md-ellipsis> Visual Guide </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_3> <div class="md-nav__link md-nav__container"> <a href=../../concepts/ class="md-nav__link "> <span class=md-ellipsis> Concepts </span> </a> <label class="md-nav__link " for=__nav_3 id=__nav_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> Concepts </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../concepts/mental-model/ class=md-nav__link> <span class=md-ellipsis> Mental Model </span> </a> </li> <li class=md-nav__item> <a href=../../concepts/message-types/ class=md-nav__link> <span class=md-ellipsis> Message Types </span> </a> </li> <li class=md-nav__item> <a href=../../concepts/listening-patterns/ class=md-nav__link> <span class=md-ellipsis> Listening Patterns </span> </a> </li> <li class=md-nav__item> <a href=../../concepts/targeting-and-context/ class=md-nav__link> <span class=md-ellipsis> Targeting & Context </span> </a> </li> <li class=md-nav__item> <a href=../../concepts/interceptors-and-ordering/ class=md-nav__link> <span class=md-ellipsis> Interceptors & Ordering </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex=0> <span class=md-ellipsis> Guides </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> Guides </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../guides/patterns/ class=md-nav__link> <span class=md-ellipsis> Patterns </span> </a> </li> <li class=md-nav__item> <a href=../../guides/unity-integration/ class=md-nav__link> <span class=md-ellipsis> Unity Integration </span> </a> </li> <li class=md-nav__item> <a href=../../guides/testing/ class=md-nav__link> <span class=md-ellipsis> Testing </span> </a> </li> <li class=md-nav__item> <a href=../../guides/diagnostics/ class=md-nav__link> <span class=md-ellipsis> Diagnostics </span> </a> </li> <li class=md-nav__item> <a href=../../guides/advanced/ class=md-nav__link> <span class=md-ellipsis> Advanced Topics </span> </a> </li> <li class=md-nav__item> <a href=../../guides/migration-guide/ class=md-nav__link> <span class=md-ellipsis> Migration Guide </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5 checked> <label class=md-nav__link for=__nav_5 id=__nav_5_label tabindex> <span class=md-ellipsis> Architecture </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=true> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> Architecture </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../design-and-architecture/ class=md-nav__link> <span class=md-ellipsis> Design & Architecture </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <label class="md-nav__link md-nav__link--active" for=__toc> <span class=md-ellipsis> Comparisons </span> <span class="md-nav__icon md-icon"></span> </label> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> Comparisons </span> </a> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#this-guide-shows class=md-nav__link> <span class=md-ellipsis> This guide shows </span> </a> <nav class=md-nav aria-label="This guide shows"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#table-of-contents class=md-nav__link> <span class=md-ellipsis> Table of Contents </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#performance-benchmarks class=md-nav__link> <span class=md-ellipsis> Performance Benchmarks </span> </a> <nav class=md-nav aria-label="Performance Benchmarks"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#comparisons-windows class=md-nav__link> <span class=md-ellipsis> Comparisons (Windows) </span> </a> </li> <li class=md-nav__item> <a href=#comparisons-macos class=md-nav__link> <span class=md-ellipsis> Comparisons (macOS) </span> </a> </li> <li class=md-nav__item> <a href=#comparisons-linux class=md-nav__link> <span class=md-ellipsis> Comparisons (Linux) </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#unity-messaging-frameworks class=md-nav__link> <span class=md-ellipsis> Unity Messaging Frameworks </span> </a> <nav class=md-nav aria-label="Unity Messaging Frameworks"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#quick-summary-which-framework-to-choose class=md-nav__link> <span class=md-ellipsis> Quick Summary: Which Framework to Choose? </span> </a> <nav class=md-nav aria-label="Quick Summary: Which Framework to Choose?"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#tldr-decision-tree class=md-nav__link> <span class=md-ellipsis> TL;DR Decision Tree </span> </a> <nav class=md-nav aria-label="TL;DR Decision Tree"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#one-line-summary-for-each class=md-nav__link> <span class=md-ellipsis> One-Line Summary for Each </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#unirx-reactive-extensions-for-unity class=md-nav__link> <span class=md-ellipsis> UniRx (Reactive Extensions for Unity) </span> </a> <nav class=md-nav aria-label="UniRx (Reactive Extensions for Unity)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#simple-messagebroker-setup-pubsub class=md-nav__link> <span class=md-ellipsis> Simple MessageBroker Setup (Pub/Sub) </span> </a> </li> <li class=md-nav__item> <a href=#advanced-stream-transformations-reactive-programming class=md-nav__link> <span class=md-ellipsis> Advanced Stream Transformations (Reactive Programming) </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-unirx-wins class=md-nav__link> <span class=md-ellipsis> When UniRx Wins </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#messagepipe-high-performance-messaging class=md-nav__link> <span class=md-ellipsis> MessagePipe (High-Performance Messaging) </span> </a> <nav class=md-nav aria-label="MessagePipe (High-Performance Messaging)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features_1 class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example_1 class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves_1 class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well_1 class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics_1 class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve_1 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding_1 class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-messagepipe-wins class=md-nav__link> <span class=md-ellipsis> When MessagePipe Wins </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins_1 class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison_1 class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#zenject-signals-di-based-messaging class=md-nav__link> <span class=md-ellipsis> Zenject Signals (DI-Based Messaging) </span> </a> <nav class=md-nav aria-label="Zenject Signals (DI-Based Messaging)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features_2 class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example_2 class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves_2 class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well_2 class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics_2 class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve_2 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding_2 class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-zenject-signals-win class=md-nav__link> <span class=md-ellipsis> When Zenject Signals Win </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins_2 class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison_2 class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#scriptable-object-architecture-soa class=md-nav__link> <span class=md-ellipsis> Scriptable Object Architecture (SOA) </span> </a> <nav class=md-nav aria-label="Scriptable Object Architecture (SOA)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#quick-comparison class=md-nav__link> <span class=md-ellipsis> Quick Comparison </span> </a> </li> <li class=md-nav__item> <a href=#when-to-use-each class=md-nav__link> <span class=md-ellipsis> When to Use Each </span> </a> <nav class=md-nav aria-label="When to Use Each"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#choose-soa-when class=md-nav__link> <span class=md-ellipsis> Choose SOA when </span> </a> <nav class=md-nav aria-label="Choose SOA when"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#choose-dxmessaging-when class=md-nav__link> <span class=md-ellipsis> Choose DxMessaging when </span> </a> <nav class=md-nav aria-label="Choose DxMessaging when"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#use-both-when class=md-nav__link> <span class=md-ellipsis> Use Both when </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#full-comparison-guide class=md-nav__link> <span class=md-ellipsis> Full Comparison Guide </span> </a> <nav class=md-nav aria-label="Full Comparison Guide"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#-soa-compatibility-guide class=md-nav__link> <span class=md-ellipsis> → SOA Compatibility Guide </span> </a> <nav class=md-nav aria-label="→ SOA Compatibility Guide"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#resources class=md-nav__link> <span class=md-ellipsis> Resources </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#traditional-approaches class=md-nav__link> <span class=md-ellipsis> Traditional Approaches </span> </a> <nav class=md-nav aria-label="Traditional Approaches"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#standard-c-eventsactions class=md-nav__link> <span class=md-ellipsis> Standard C# Events/Actions </span> </a> <nav class=md-nav aria-label="Standard C# Events/Actions"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features_3 class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example_3 class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves_3 class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well_3 class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics_3 class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve_3 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding_3 class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-c-events-win class=md-nav__link> <span class=md-ellipsis> When C# Events Win </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins_3 class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison_3 class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#unityevents-inspector-wiring class=md-nav__link> <span class=md-ellipsis> UnityEvents (Inspector Wiring) </span> </a> <nav class=md-nav aria-label="UnityEvents (Inspector Wiring)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features_4 class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example_4 class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves_4 class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well_4 class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics_4 class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve_4 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding_4 class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-unityevents-win class=md-nav__link> <span class=md-ellipsis> When UnityEvents Win </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins_4 class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison_4 class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#unity-sendmessage class=md-nav__link> <span class=md-ellipsis> Unity SendMessage </span> </a> <nav class=md-nav aria-label="Unity SendMessage"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features_5 class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example_5 class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves_5 class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well_5 class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics_5 class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve_5 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding_5 class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-unity-sendmessage-wins class=md-nav__link> <span class=md-ellipsis> When Unity SendMessage Wins </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins_5 class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison_5 class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#global-event-bus-singletons class=md-nav__link> <span class=md-ellipsis> Global Event Bus Singletons </span> </a> <nav class=md-nav aria-label="Global Event Bus Singletons"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features_6 class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example_6 class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves_6 class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well_6 class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics_6 class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve_6 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding_6 class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-static-event-bus-wins class=md-nav__link> <span class=md-ellipsis> When Static Event Bus Wins </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins_6 class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison_6 class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#honest-trade-offs-what-you-give-up-what-you-gain class=md-nav__link> <span class=md-ellipsis> Honest Trade-offs: What You Give Up, What You Gain </span> </a> <nav class=md-nav aria-label="Honest Trade-offs: What You Give Up, What You Gain"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#learning-curve_7 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> <nav class=md-nav aria-label="Learning Curve"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> <nav class=md-nav aria-label="What You Gain"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#verdict class=md-nav__link> <span class=md-ellipsis> Verdict </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#boilerplate class=md-nav__link> <span class=md-ellipsis> Boilerplate </span> </a> <nav class=md-nav aria-label=Boilerplate> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up_1 class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain_1 class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> </li> <li class=md-nav__item> <a href=#example-comparison class=md-nav__link> <span class=md-ellipsis> Example Comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#performance class=md-nav__link> <span class=md-ellipsis> Performance </span> </a> <nav class=md-nav aria-label=Performance> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up_2 class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain_2 class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> </li> <li class=md-nav__item> <a href=#hard-numbers class=md-nav__link> <span class=md-ellipsis> Hard Numbers </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#flexibility class=md-nav__link> <span class=md-ellipsis> Flexibility </span> </a> <nav class=md-nav aria-label=Flexibility> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up_3 class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain_3 class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> </li> <li class=md-nav__item> <a href=#when-limitations-hurt class=md-nav__link> <span class=md-ellipsis> When Limitations Hurt </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#debuggability class=md-nav__link> <span class=md-ellipsis> Debuggability </span> </a> <nav class=md-nav aria-label=Debuggability> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up_4 class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain_4 class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> </li> <li class=md-nav__item> <a href=#example-finding-who-fired-a-message class=md-nav__link> <span class=md-ellipsis> Example: Finding Who Fired a Message </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#coupling-and-architecture class=md-nav__link> <span class=md-ellipsis> Coupling and Architecture </span> </a> <nav class=md-nav aria-label="Coupling and Architecture"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up_5 class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain_5 class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> </li> <li class=md-nav__item> <a href=#impact-on-architecture class=md-nav__link> <span class=md-ellipsis> Impact on Architecture </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#testing class=md-nav__link> <span class=md-ellipsis> Testing </span> </a> <nav class=md-nav aria-label=Testing> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up_6 class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain_6 class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> <nav class=md-nav aria-label="What You Gain"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#example class=md-nav__link> <span class=md-ellipsis> Example </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#feature-by-feature-comparison-matrix class=md-nav__link> <span class=md-ellipsis> Feature-by-Feature Comparison Matrix </span> </a> <nav class=md-nav aria-label="Feature-by-Feature Comparison Matrix"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#unity-messaging-frameworks-comparison class=md-nav__link> <span class=md-ellipsis> Unity Messaging Frameworks Comparison </span> </a> </li> <li class=md-nav__item> <a href=#traditional-approaches-comparison class=md-nav__link> <span class=md-ellipsis> Traditional Approaches Comparison </span> </a> </li> <li class=md-nav__item> <a href=#overall-verdict-by-use-case class=md-nav__link> <span class=md-ellipsis> Overall Verdict by Use Case </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#when-each-approach-actually-wins class=md-nav__link> <span class=md-ellipsis> When Each Approach ACTUALLY Wins </span> </a> <nav class=md-nav aria-label="When Each Approach ACTUALLY Wins"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#dxmessaging-wins-when class=md-nav__link> <span class=md-ellipsis> DxMessaging Wins When </span> </a> </li> <li class=md-nav__item> <a href=#unirx-wins-when class=md-nav__link> <span class=md-ellipsis> UniRx Wins When </span> </a> </li> <li class=md-nav__item> <a href=#messagepipe-wins-when class=md-nav__link> <span class=md-ellipsis> MessagePipe Wins When </span> </a> </li> <li class=md-nav__item> <a href=#zenject-signals-win-when class=md-nav__link> <span class=md-ellipsis> Zenject Signals Win When </span> </a> </li> <li class=md-nav__item> <a href=#c-events-win-when class=md-nav__link> <span class=md-ellipsis> C# Events Win When </span> </a> </li> <li class=md-nav__item> <a href=#unityevents-win-when class=md-nav__link> <span class=md-ellipsis> UnityEvents Win When </span> </a> </li> <li class=md-nav__item> <a href=#soa-gameeventvariables-wins-when class=md-nav__link> <span class=md-ellipsis> SOA (GameEvent/Variables) Wins When </span> </a> </li> <li class=md-nav__item> <a href=#static-event-bus-wins-when class=md-nav__link> <span class=md-ellipsis> Static Event Bus Wins When </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#cost-benefit-summary class=md-nav__link> <span class=md-ellipsis> Cost-Benefit Summary </span> </a> <nav class=md-nav aria-label="Cost-Benefit Summary"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#costs class=md-nav__link> <span class=md-ellipsis> Costs </span> </a> </li> <li class=md-nav__item> <a href=#benefits class=md-nav__link> <span class=md-ellipsis> Benefits </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#making-the-decision-be-honest-with-yourself class=md-nav__link> <span class=md-ellipsis> Making the Decision (Be Honest With Yourself) </span> </a> <nav class=md-nav aria-label="Making the Decision (Be Honest With Yourself)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#answer-these-questions-honestly class=md-nav__link> <span class=md-ellipsis> Answer these questions honestly </span> </a> </li> <li class=md-nav__item> <a href=#1-project-lifespan class=md-nav__link> <span class=md-ellipsis> 1. Project Lifespan? </span> </a> </li> <li class=md-nav__item> <a href=#2-team-size class=md-nav__link> <span class=md-ellipsis> 2. Team Size? </span> </a> </li> <li class=md-nav__item> <a href=#3-codebase-size class=md-nav__link> <span class=md-ellipsis> 3. Codebase Size? </span> </a> </li> <li class=md-nav__item> <a href=#4-how-many-systems-need-to-communicate class=md-nav__link> <span class=md-ellipsis> 4. How Many Systems Need to Communicate? </span> </a> </li> <li class=md-nav__item> <a href=#5-have-you-had-memory-leaks-from-forgotten-unsubscribes class=md-nav__link> <span class=md-ellipsis> 5. Have You Had Memory Leaks From Forgotten Unsubscribes? </span> </a> </li> <li class=md-nav__item> <a href=#6-how-often-do-you-debug-what-fired-when class=md-nav__link> <span class=md-ellipsis> 6. How Often Do You Debug "What Fired When?" </span> </a> </li> <li class=md-nav__item> <a href=#quick-decision-matrix class=md-nav__link> <span class=md-ellipsis> Quick Decision Matrix </span> </a> </li> <li class=md-nav__item> <a href=#the-real-question class=md-nav__link> <span class=md-ellipsis> The Real Question </span> </a> <nav class=md-nav aria-label="The Real Question"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#will-this-project-still-exist-in-3-months class=md-nav__link> <span class=md-ellipsis> "Will this project still exist in 3 months?" </span> </a> <nav class=md-nav aria-label='"Will this project still exist in 3 months?"'> <ul class=md-nav__list> <li class=md-nav__item> <a href=#will-anyone-else-work-on-this-code class=md-nav__link> <span class=md-ellipsis> "Will anyone else work on this code?" </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#rule-of-thumb class=md-nav__link> <span class=md-ellipsis> Rule of Thumb </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=../performance/ class=md-nav__link> <span class=md-ellipsis> Performance </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_6> <label class=md-nav__link for=__nav_6 id=__nav_6_label tabindex=0> <span class=md-ellipsis> Advanced </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> Advanced </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../advanced/emit-shorthands/ class=md-nav__link> <span class=md-ellipsis> Emit Shorthands </span> </a> </li> <li class=md-nav__item> <a href=../../advanced/message-bus-providers/ class=md-nav__link> <span class=md-ellipsis> Message Bus Providers </span> </a> </li> <li class=md-nav__item> <a href=../../advanced/registration-builders/ class=md-nav__link> <span class=md-ellipsis> Registration Builders </span> </a> </li> <li class=md-nav__item> <a href=../../advanced/runtime-configuration/ class=md-nav__link> <span class=md-ellipsis> Runtime Configuration </span> </a> </li> <li class=md-nav__item> <a href=../../advanced/string-messages/ class=md-nav__link> <span class=md-ellipsis> String Messages </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_7> <div class="md-nav__link md-nav__container"> <a href=../../integrations/ class="md-nav__link "> <span class=md-ellipsis> Integrations </span> </a> <label class="md-nav__link " for=__nav_7 id=__nav_7_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> Integrations </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../integrations/vcontainer/ class=md-nav__link> <span class=md-ellipsis> VContainer </span> </a> </li> <li class=md-nav__item> <a href=../../integrations/zenject/ class=md-nav__link> <span class=md-ellipsis> Zenject </span> </a> </li> <li class=md-nav__item> <a href=../../integrations/reflex/ class=md-nav__link> <span class=md-ellipsis> Reflex </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_8> <label class=md-nav__link for=__nav_8 id=__nav_8_label tabindex=0> <span class=md-ellipsis> Examples </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> Examples </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../examples/end-to-end/ class=md-nav__link> <span class=md-ellipsis> End-to-End </span> </a> </li> <li class=md-nav__item> <a href=../../examples/end-to-end-scene-transitions/ class=md-nav__link> <span class=md-ellipsis> Scene Transitions </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex=0> <span class=md-ellipsis> Reference </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> Reference </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../reference/reference/ class=md-nav__link> <span class=md-ellipsis> API Reference (Practical) </span> </a> </li> <li class=md-nav__item> <a href=../../reference/quick-reference/ class=md-nav__link> <span class=md-ellipsis> Quick Reference </span> </a> </li> <li class=md-nav__item> <a href=../../reference/helpers/ class=md-nav__link> <span class=md-ellipsis> Helpers </span> </a> </li> <li class=md-nav__item> <a href=../../reference/faq/ class=md-nav__link> <span class=md-ellipsis> FAQ </span> </a> </li> <li class=md-nav__item> <a href=../../reference/glossary/ class=md-nav__link> <span class=md-ellipsis> Glossary </span> </a> </li> <li class=md-nav__item> <a href=../../reference/troubleshooting/ class=md-nav__link> <span class=md-ellipsis> Troubleshooting </span> </a> </li> <li class=md-nav__item> <a href=../../reference/compatibility/ class=md-nav__link> <span class=md-ellipsis> Compatibility </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#this-guide-shows class=md-nav__link> <span class=md-ellipsis> This guide shows </span> </a> <nav class=md-nav aria-label="This guide shows"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#table-of-contents class=md-nav__link> <span class=md-ellipsis> Table of Contents </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#performance-benchmarks class=md-nav__link> <span class=md-ellipsis> Performance Benchmarks </span> </a> <nav class=md-nav aria-label="Performance Benchmarks"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#comparisons-windows class=md-nav__link> <span class=md-ellipsis> Comparisons (Windows) </span> </a> </li> <li class=md-nav__item> <a href=#comparisons-macos class=md-nav__link> <span class=md-ellipsis> Comparisons (macOS) </span> </a> </li> <li class=md-nav__item> <a href=#comparisons-linux class=md-nav__link> <span class=md-ellipsis> Comparisons (Linux) </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#unity-messaging-frameworks class=md-nav__link> <span class=md-ellipsis> Unity Messaging Frameworks </span> </a> <nav class=md-nav aria-label="Unity Messaging Frameworks"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#quick-summary-which-framework-to-choose class=md-nav__link> <span class=md-ellipsis> Quick Summary: Which Framework to Choose? </span> </a> <nav class=md-nav aria-label="Quick Summary: Which Framework to Choose?"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#tldr-decision-tree class=md-nav__link> <span class=md-ellipsis> TL;DR Decision Tree </span> </a> <nav class=md-nav aria-label="TL;DR Decision Tree"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#one-line-summary-for-each class=md-nav__link> <span class=md-ellipsis> One-Line Summary for Each </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#unirx-reactive-extensions-for-unity class=md-nav__link> <span class=md-ellipsis> UniRx (Reactive Extensions for Unity) </span> </a> <nav class=md-nav aria-label="UniRx (Reactive Extensions for Unity)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#simple-messagebroker-setup-pubsub class=md-nav__link> <span class=md-ellipsis> Simple MessageBroker Setup (Pub/Sub) </span> </a> </li> <li class=md-nav__item> <a href=#advanced-stream-transformations-reactive-programming class=md-nav__link> <span class=md-ellipsis> Advanced Stream Transformations (Reactive Programming) </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-unirx-wins class=md-nav__link> <span class=md-ellipsis> When UniRx Wins </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#messagepipe-high-performance-messaging class=md-nav__link> <span class=md-ellipsis> MessagePipe (High-Performance Messaging) </span> </a> <nav class=md-nav aria-label="MessagePipe (High-Performance Messaging)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features_1 class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example_1 class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves_1 class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well_1 class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics_1 class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve_1 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding_1 class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-messagepipe-wins class=md-nav__link> <span class=md-ellipsis> When MessagePipe Wins </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins_1 class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison_1 class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#zenject-signals-di-based-messaging class=md-nav__link> <span class=md-ellipsis> Zenject Signals (DI-Based Messaging) </span> </a> <nav class=md-nav aria-label="Zenject Signals (DI-Based Messaging)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features_2 class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example_2 class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves_2 class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well_2 class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics_2 class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve_2 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding_2 class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-zenject-signals-win class=md-nav__link> <span class=md-ellipsis> When Zenject Signals Win </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins_2 class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison_2 class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#scriptable-object-architecture-soa class=md-nav__link> <span class=md-ellipsis> Scriptable Object Architecture (SOA) </span> </a> <nav class=md-nav aria-label="Scriptable Object Architecture (SOA)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#quick-comparison class=md-nav__link> <span class=md-ellipsis> Quick Comparison </span> </a> </li> <li class=md-nav__item> <a href=#when-to-use-each class=md-nav__link> <span class=md-ellipsis> When to Use Each </span> </a> <nav class=md-nav aria-label="When to Use Each"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#choose-soa-when class=md-nav__link> <span class=md-ellipsis> Choose SOA when </span> </a> <nav class=md-nav aria-label="Choose SOA when"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#choose-dxmessaging-when class=md-nav__link> <span class=md-ellipsis> Choose DxMessaging when </span> </a> <nav class=md-nav aria-label="Choose DxMessaging when"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#use-both-when class=md-nav__link> <span class=md-ellipsis> Use Both when </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#full-comparison-guide class=md-nav__link> <span class=md-ellipsis> Full Comparison Guide </span> </a> <nav class=md-nav aria-label="Full Comparison Guide"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#-soa-compatibility-guide class=md-nav__link> <span class=md-ellipsis> → SOA Compatibility Guide </span> </a> <nav class=md-nav aria-label="→ SOA Compatibility Guide"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#resources class=md-nav__link> <span class=md-ellipsis> Resources </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#traditional-approaches class=md-nav__link> <span class=md-ellipsis> Traditional Approaches </span> </a> <nav class=md-nav aria-label="Traditional Approaches"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#standard-c-eventsactions class=md-nav__link> <span class=md-ellipsis> Standard C# Events/Actions </span> </a> <nav class=md-nav aria-label="Standard C# Events/Actions"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features_3 class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example_3 class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves_3 class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well_3 class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics_3 class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve_3 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding_3 class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-c-events-win class=md-nav__link> <span class=md-ellipsis> When C# Events Win </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins_3 class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison_3 class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#unityevents-inspector-wiring class=md-nav__link> <span class=md-ellipsis> UnityEvents (Inspector Wiring) </span> </a> <nav class=md-nav aria-label="UnityEvents (Inspector Wiring)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features_4 class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example_4 class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves_4 class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well_4 class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics_4 class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve_4 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding_4 class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-unityevents-win class=md-nav__link> <span class=md-ellipsis> When UnityEvents Win </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins_4 class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison_4 class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#unity-sendmessage class=md-nav__link> <span class=md-ellipsis> Unity SendMessage </span> </a> <nav class=md-nav aria-label="Unity SendMessage"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features_5 class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example_5 class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves_5 class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well_5 class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics_5 class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve_5 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding_5 class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-unity-sendmessage-wins class=md-nav__link> <span class=md-ellipsis> When Unity SendMessage Wins </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins_5 class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison_5 class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#global-event-bus-singletons class=md-nav__link> <span class=md-ellipsis> Global Event Bus Singletons </span> </a> <nav class=md-nav aria-label="Global Event Bus Singletons"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features_6 class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example_6 class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves_6 class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well_6 class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics_6 class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve_6 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding_6 class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-static-event-bus-wins class=md-nav__link> <span class=md-ellipsis> When Static Event Bus Wins </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins_6 class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison_6 class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#honest-trade-offs-what-you-give-up-what-you-gain class=md-nav__link> <span class=md-ellipsis> Honest Trade-offs: What You Give Up, What You Gain </span> </a> <nav class=md-nav aria-label="Honest Trade-offs: What You Give Up, What You Gain"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#learning-curve_7 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> <nav class=md-nav aria-label="Learning Curve"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> <nav class=md-nav aria-label="What You Gain"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#verdict class=md-nav__link> <span class=md-ellipsis> Verdict </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#boilerplate class=md-nav__link> <span class=md-ellipsis> Boilerplate </span> </a> <nav class=md-nav aria-label=Boilerplate> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up_1 class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain_1 class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> </li> <li class=md-nav__item> <a href=#example-comparison class=md-nav__link> <span class=md-ellipsis> Example Comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#performance class=md-nav__link> <span class=md-ellipsis> Performance </span> </a> <nav class=md-nav aria-label=Performance> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up_2 class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain_2 class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> </li> <li class=md-nav__item> <a href=#hard-numbers class=md-nav__link> <span class=md-ellipsis> Hard Numbers </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#flexibility class=md-nav__link> <span class=md-ellipsis> Flexibility </span> </a> <nav class=md-nav aria-label=Flexibility> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up_3 class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain_3 class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> </li> <li class=md-nav__item> <a href=#when-limitations-hurt class=md-nav__link> <span class=md-ellipsis> When Limitations Hurt </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#debuggability class=md-nav__link> <span class=md-ellipsis> Debuggability </span> </a> <nav class=md-nav aria-label=Debuggability> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up_4 class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain_4 class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> </li> <li class=md-nav__item> <a href=#example-finding-who-fired-a-message class=md-nav__link> <span class=md-ellipsis> Example: Finding Who Fired a Message </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#coupling-and-architecture class=md-nav__link> <span class=md-ellipsis> Coupling and Architecture </span> </a> <nav class=md-nav aria-label="Coupling and Architecture"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up_5 class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain_5 class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> </li> <li class=md-nav__item> <a href=#impact-on-architecture class=md-nav__link> <span class=md-ellipsis> Impact on Architecture </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#testing class=md-nav__link> <span class=md-ellipsis> Testing </span> </a> <nav class=md-nav aria-label=Testing> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up_6 class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain_6 class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> <nav class=md-nav aria-label="What You Gain"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#example class=md-nav__link> <span class=md-ellipsis> Example </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#feature-by-feature-comparison-matrix class=md-nav__link> <span class=md-ellipsis> Feature-by-Feature Comparison Matrix </span> </a> <nav class=md-nav aria-label="Feature-by-Feature Comparison Matrix"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#unity-messaging-frameworks-comparison class=md-nav__link> <span class=md-ellipsis> Unity Messaging Frameworks Comparison </span> </a> </li> <li class=md-nav__item> <a href=#traditional-approaches-comparison class=md-nav__link> <span class=md-ellipsis> Traditional Approaches Comparison </span> </a> </li> <li class=md-nav__item> <a href=#overall-verdict-by-use-case class=md-nav__link> <span class=md-ellipsis> Overall Verdict by Use Case </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#when-each-approach-actually-wins class=md-nav__link> <span class=md-ellipsis> When Each Approach ACTUALLY Wins </span> </a> <nav class=md-nav aria-label="When Each Approach ACTUALLY Wins"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#dxmessaging-wins-when class=md-nav__link> <span class=md-ellipsis> DxMessaging Wins When </span> </a> </li> <li class=md-nav__item> <a href=#unirx-wins-when class=md-nav__link> <span class=md-ellipsis> UniRx Wins When </span> </a> </li> <li class=md-nav__item> <a href=#messagepipe-wins-when class=md-nav__link> <span class=md-ellipsis> MessagePipe Wins When </span> </a> </li> <li class=md-nav__item> <a href=#zenject-signals-win-when class=md-nav__link> <span class=md-ellipsis> Zenject Signals Win When </span> </a> </li> <li class=md-nav__item> <a href=#c-events-win-when class=md-nav__link> <span class=md-ellipsis> C# Events Win When </span> </a> </li> <li class=md-nav__item> <a href=#unityevents-win-when class=md-nav__link> <span class=md-ellipsis> UnityEvents Win When </span> </a> </li> <li class=md-nav__item> <a href=#soa-gameeventvariables-wins-when class=md-nav__link> <span class=md-ellipsis> SOA (GameEvent/Variables) Wins When </span> </a> </li> <li class=md-nav__item> <a href=#static-event-bus-wins-when class=md-nav__link> <span class=md-ellipsis> Static Event Bus Wins When </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#cost-benefit-summary class=md-nav__link> <span class=md-ellipsis> Cost-Benefit Summary </span> </a> <nav class=md-nav aria-label="Cost-Benefit Summary"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#costs class=md-nav__link> <span class=md-ellipsis> Costs </span> </a> </li> <li class=md-nav__item> <a href=#benefits class=md-nav__link> <span class=md-ellipsis> Benefits </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#making-the-decision-be-honest-with-yourself class=md-nav__link> <span class=md-ellipsis> Making the Decision (Be Honest With Yourself) </span> </a> <nav class=md-nav aria-label="Making the Decision (Be Honest With Yourself)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#answer-these-questions-honestly class=md-nav__link> <span class=md-ellipsis> Answer these questions honestly </span> </a> </li> <li class=md-nav__item> <a href=#1-project-lifespan class=md-nav__link> <span class=md-ellipsis> 1. Project Lifespan? </span> </a> </li> <li class=md-nav__item> <a href=#2-team-size class=md-nav__link> <span class=md-ellipsis> 2. Team Size? </span> </a> </li> <li class=md-nav__item> <a href=#3-codebase-size class=md-nav__link> <span class=md-ellipsis> 3. Codebase Size? </span> </a> </li> <li class=md-nav__item> <a href=#4-how-many-systems-need-to-communicate class=md-nav__link> <span class=md-ellipsis> 4. How Many Systems Need to Communicate? </span> </a> </li> <li class=md-nav__item> <a href=#5-have-you-had-memory-leaks-from-forgotten-unsubscribes class=md-nav__link> <span class=md-ellipsis> 5. Have You Had Memory Leaks From Forgotten Unsubscribes? </span> </a> </li> <li class=md-nav__item> <a href=#6-how-often-do-you-debug-what-fired-when class=md-nav__link> <span class=md-ellipsis> 6. How Often Do You Debug "What Fired When?" </span> </a> </li> <li class=md-nav__item> <a href=#quick-decision-matrix class=md-nav__link> <span class=md-ellipsis> Quick Decision Matrix </span> </a> </li> <li class=md-nav__item> <a href=#the-real-question class=md-nav__link> <span class=md-ellipsis> The Real Question </span> </a> <nav class=md-nav aria-label="The Real Question"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#will-this-project-still-exist-in-3-months class=md-nav__link> <span class=md-ellipsis> "Will this project still exist in 3 months?" </span> </a> <nav class=md-nav aria-label='"Will this project still exist in 3 months?"'> <ul class=md-nav__list> <li class=md-nav__item> <a href=#will-anyone-else-work-on-this-code class=md-nav__link> <span class=md-ellipsis> "Will anyone else work on this code?" </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#rule-of-thumb class=md-nav__link> <span class=md-ellipsis> Rule of Thumb </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <nav class=md-path aria-label=Navigation> <ol class=md-path__list> <li class=md-path__item> <a href=../.. class=md-path__link> <span class=md-ellipsis> Home </span> </a> </li> <li class=md-path__item> <a href=../design-and-architecture/ class=md-path__link> <span class=md-ellipsis> Architecture </span> </a> </li> </ol> </nav> <article class="md-content__inner md-typeset"> <a href=https://github.com/wallstop/DxMessaging/edit/master/docs/architecture/comparisons.md title="Edit this page" class="md-content__button md-icon" rel=edit> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"/></svg> </a> <a href=https://github.com/wallstop/DxMessaging/raw/master/docs/architecture/comparisons.md title="View source of this page" class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.2 8.2 0 0 1-1.23-2"/></svg> </a> <h1 id=comparisons-dxmessaging-and-alternatives>Comparisons: DxMessaging and Alternatives<a class=headerlink href=#comparisons-dxmessaging-and-alternatives title="Anchor link to this section">¶</a></h1> <p><strong>TL;DR:</strong> This guide compares DxMessaging with other messaging approaches. Each has legitimate strengths and trade-offs. DxMessaging takes a different approach with its own trade-offs.</p> <h2 id=this-guide-shows>This guide shows<a class=headerlink href=#this-guide-shows title="Anchor link to this section">¶</a></h2> <ul> <li>Characteristics of each approach (with real code examples)</li> <li>How DxMessaging takes a different approach (with real code examples)</li> <li>Trade-offs for each option (what you give up, what you gain)</li> <li>When to use each approach based on your needs</li> </ul> <h3 id=table-of-contents>Table of Contents<a class=headerlink href=#table-of-contents title="Anchor link to this section">¶</a></h3> <ul> <li><a href=#performance-benchmarks>Performance Benchmarks</a></li> <li><a href=#unity-messaging-frameworks>Unity Messaging Frameworks</a></li> <li><a href=#unirx-reactive-extensions-for-unity>UniRx</a></li> <li><a href=#messagepipe-high-performance-messaging>MessagePipe</a></li> <li><a href=#zenject-signals-di-based-messaging>Zenject Signals</a></li> <li><a href=#scriptable-object-architecture-soa>Scriptable Object Architecture (SOA)</a></li> <li><a href=#traditional-approaches>Traditional Approaches</a></li> <li><a href=#standard-c-eventsactions>C# Events/Delegates</a></li> <li><a href=#unityevents-inspector-wiring>UnityEvents</a></li> <li><a href=#unity-sendmessage>Unity SendMessage</a></li> <li><a href=#global-event-bus-singletons>Static Event Buses</a></li> <li><a href=#honest-trade-offs-what-you-give-up-what-you-gain>Trade-offs</a></li> <li><a href=#feature-by-feature-comparison-matrix>Feature Matrix</a></li> <li><a href=#when-each-approach-actually-wins>Decision Guide</a></li> </ul> <h2 id=performance-benchmarks>Performance Benchmarks<a class=headerlink href=#performance-benchmarks title="Anchor link to this section">¶</a></h2> <p>These sections are auto-updated by the PlayMode comparison benchmarks in the <a href=https://github.com/wallstop/DxMessaging/blob/master/Tests/Runtime/Benchmarks/ComparisonPerformanceTests.cs>Comparison Performance PlayMode tests</a>. Run the suite locally to refresh the tables.</p> <h3 id=comparisons-windows>Comparisons (Windows)<a class=headerlink href=#comparisons-windows title="Anchor link to this section">¶</a></h3> <table> <thead> <tr> <th>Message Tech</th> <th>Operations / Second</th> <th>Allocations?</th> </tr> </thead> <tbody> <tr> <td>DxMessaging (Untargeted) - No-Copy</td> <td>19,886,000</td> <td>No</td> </tr> <tr> <td>UniRx MessageBroker</td> <td>18,002,000</td> <td>No</td> </tr> <tr> <td>MessagePipe (Global)</td> <td>97,748,000</td> <td>No</td> </tr> <tr> <td>Zenject SignalBus</td> <td>2,350,000</td> <td>Yes</td> </tr> </tbody> </table> <h3 id=comparisons-macos>Comparisons (macOS)<a class=headerlink href=#comparisons-macos title="Anchor link to this section">¶</a></h3> <p>Run the PlayMode comparison benchmarks on macOS to populate this section.</p> <h3 id=comparisons-linux>Comparisons (Linux)<a class=headerlink href=#comparisons-linux title="Anchor link to this section">¶</a></h3> <p>Run the PlayMode comparison benchmarks on Linux to populate this section.</p> <hr> <h2 id=unity-messaging-frameworks>Unity Messaging Frameworks<a class=headerlink href=#unity-messaging-frameworks title="Anchor link to this section">¶</a></h2> <p>This section compares DxMessaging with other popular Unity messaging/eventing libraries. Each offers different approaches to solving communication and decoupling problems in Unity.</p> <h3 id=quick-summary-which-framework-to-choose>Quick Summary: Which Framework to Choose?<a class=headerlink href=#quick-summary-which-framework-to-choose title="Anchor link to this section">¶</a></h3> <h4 id=tldr-decision-tree>TL;DR Decision Tree<a class=headerlink href=#tldr-decision-tree title="Anchor link to this section">¶</a></h4> <div class="language-text highlight"><span class=filename>Text Only</span><pre><span></span><code><span id=__span-0-1><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a>Need absolute simplest pub/sub setup (zero boilerplate)?
|
|
2
2
|
</span><span id=__span-0-2><a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> → Use UniRx MessageBroker (publish/receive in 2 lines)
|
|
3
3
|
</span><span id=__span-0-3><a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a>
|
|
4
4
|
</span><span id=__span-0-4><a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a>Need complex event stream transformations (debounce, throttle, combine)?
|
|
@@ -353,4 +353,4 @@
|
|
|
353
353
|
</span><span id=__span-17-2><a id=__codelineno-17-2 name=__codelineno-17-2 href=#__codelineno-17-2></a>Prototype → DxMessaging IF continuing, else C# Events
|
|
354
354
|
</span><span id=__span-17-3><a id=__codelineno-17-3 name=__codelineno-17-3 href=#__codelineno-17-3></a>Production → DxMessaging (unless <1k lines)
|
|
355
355
|
</span><span id=__span-17-4><a id=__codelineno-17-4 name=__codelineno-17-4 href=#__codelineno-17-4></a>Legacy codebase → Migrate gradually (see Migration Guide)
|
|
356
|
-
</span></code></pre></div> <h3 id=the-real-question>The Real Question<a class=headerlink href=#the-real-question title="Anchor link to this section">¶</a></h3> <h4 id=will-this-project-still-exist-in-3-months>"Will this project still exist in 3 months?"<a class=headerlink href=#will-this-project-still-exist-in-3-months title="Anchor link to this section">¶</a></h4> <ul> <li><strong>No:</strong> C# events are fine</li> <li><strong>Yes:</strong> Use DxMessaging</li> </ul> <h5 id=will-anyone-else-work-on-this-code>"Will anyone else work on this code?"<a class=headerlink href=#will-anyone-else-work-on-this-code title="Anchor link to this section">¶</a></h5> <ul> <li><strong>No:</strong> C# events might be okay</li> <li><strong>Yes:</strong> Use DxMessaging (future you counts as "someone else")</li> </ul> <h3 id=rule-of-thumb>Rule of Thumb<a class=headerlink href=#rule-of-thumb title="Anchor link to this section">¶</a></h3> <p>If you're reading this and thinking:</p> <ul> <li><strong>"I've experienced these pain points"</strong> → DxMessaging will help</li> <li><strong>"This seems like overkill"</strong> → You probably don't need it yet</li> <li><strong>"I need this yesterday"</strong> → DxMessaging may be a good fit</li> </ul> <p>See also</p> <ul> <li><a href=../../concepts/message-types/ >Message Types</a></li> <li><a href=../../guides/diagnostics/ >Diagnostics (Editor inspector)</a></li> <li><a href=../../guides/migration-guide/ >Migration Guide</a> - How to adopt gradually</li> </ul> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title="Last update"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1zM12.5 7v5.2l4 2.4-1 1L11 13V7zM11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago" title="January
|
|
356
|
+
</span></code></pre></div> <h3 id=the-real-question>The Real Question<a class=headerlink href=#the-real-question title="Anchor link to this section">¶</a></h3> <h4 id=will-this-project-still-exist-in-3-months>"Will this project still exist in 3 months?"<a class=headerlink href=#will-this-project-still-exist-in-3-months title="Anchor link to this section">¶</a></h4> <ul> <li><strong>No:</strong> C# events are fine</li> <li><strong>Yes:</strong> Use DxMessaging</li> </ul> <h5 id=will-anyone-else-work-on-this-code>"Will anyone else work on this code?"<a class=headerlink href=#will-anyone-else-work-on-this-code title="Anchor link to this section">¶</a></h5> <ul> <li><strong>No:</strong> C# events might be okay</li> <li><strong>Yes:</strong> Use DxMessaging (future you counts as "someone else")</li> </ul> <h3 id=rule-of-thumb>Rule of Thumb<a class=headerlink href=#rule-of-thumb title="Anchor link to this section">¶</a></h3> <p>If you're reading this and thinking:</p> <ul> <li><strong>"I've experienced these pain points"</strong> → DxMessaging will help</li> <li><strong>"This seems like overkill"</strong> → You probably don't need it yet</li> <li><strong>"I need this yesterday"</strong> → DxMessaging may be a good fit</li> </ul> <p>See also</p> <ul> <li><a href=../../concepts/message-types/ >Message Types</a></li> <li><a href=../../guides/diagnostics/ >Diagnostics (Editor inspector)</a></li> <li><a href=../../guides/migration-guide/ >Migration Guide</a> - How to adopt gradually</li> </ul> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title="Last update"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1zM12.5 7v5.2l4 2.4-1 1L11 13V7zM11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago" title="January 27, 2026 04:59:07 UTC"><span class=timeago datetime=2026-01-27T04:59:07+00:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date" title="January 27, 2026 04:59:07 UTC">2026-01-27</span> </span> <span class=md-source-file__fact> <span class=md-icon title=Created> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago" title="January 27, 2026 04:59:07 UTC"><span class=timeago datetime=2026-01-27T04:59:07+00:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date" title="January 27, 2026 04:59:07 UTC">2026-01-27</span> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var labels=set.querySelector(".tabbed-labels");for(var tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg> Back to top </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=Footer> <a href=../design-and-architecture/ class="md-footer__link md-footer__link--prev" aria-label="Previous: Design & Architecture"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> Previous </span> <div class=md-ellipsis> Design & Architecture </div> </div> </a> <a href=../performance/ class="md-footer__link md-footer__link--next" aria-label="Next: Performance"> <div class=md-footer__title> <span class=md-footer__direction> Next </span> <div class=md-ellipsis> Performance </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright © 2017-2026 Wallstop Studios </div> </div> <div class=md-social> <a href=https://github.com/wallstop target=_blank rel=noopener title="Wallstop Studios on GitHub" class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <script id=__config type=application/json>{"annotate": null, "base": "../..", "features": ["announce.dismiss", "content.action.edit", "content.action.view", "content.code.annotate", "content.code.copy", "content.tabs.link", "navigation.expand", "navigation.footer", "navigation.indexes", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress", "navigation.path", "navigation.sections", "navigation.tabs", "navigation.tabs.sticky", "navigation.top", "navigation.tracking", "search.highlight", "search.share", "search.suggest", "toc.follow"], "search": "../../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script> <script src=../../assets/javascripts/bundle.79ae519e.min.js></script> <script src=../../js/timeago.min.js></script> <script src=../../js/timeago_mkdocs_material.js></script> <script src=https://unpkg.com/mermaid@11/dist/mermaid.min.js></script> <script src=../../javascripts/mermaid-config.js></script> <script src=../../javascripts/csharp-highlight.js></script> </body> </html>
|