Files
komodo/docs/ecosystem/development.html
2026-05-11 18:45:07 -07:00

72 lines
40 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-ecosystem/development" data-has-hydrated="false">
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.9.2">
<title data-rh="true">Development | Komodo</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://komo.do/img/monitor-lizard.png"><meta data-rh="true" name="twitter:image" content="https://komo.do/img/monitor-lizard.png"><meta data-rh="true" property="og:url" content="https://komo.do/docs/ecosystem/development"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Development | Komodo"><meta data-rh="true" name="description" content="If you are looking to contribute to Komodo, this page is a launching point for setting up your Komodo development environment."><meta data-rh="true" property="og:description" content="If you are looking to contribute to Komodo, this page is a launching point for setting up your Komodo development environment."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://komo.do/docs/ecosystem/development"><link data-rh="true" rel="alternate" href="https://komo.do/docs/ecosystem/development" hreflang="en"><link data-rh="true" rel="alternate" href="https://komo.do/docs/ecosystem/development" hreflang="x-default"><script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Ecosystem","item":"https://komo.do/docs/ecosystem"},{"@type":"ListItem","position":2,"name":"Development","item":"https://komo.do/docs/ecosystem/development"}]}</script><link rel="stylesheet" href="/assets/css/styles.1906ceb0.css">
<script src="/assets/js/runtime~main.e25d46da.js" defer="defer"></script>
<script src="/assets/js/main.0eb432bc.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg style="display: none;"><defs>
<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
</defs></svg>
<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><link rel="preload" as="image" href="/img/komodo-512x512.png"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="theme-layout-navbar navbar navbar--fixed-top navbarHideable_m1mJ"><div class="navbar__inner"><div class="theme-layout-navbar-left navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/komodo-512x512.png" alt="monitor lizard" class="themedComponent_mlkZ themedComponent--light_NVdE" width="32px"><img src="/img/komodo-512x512.png" alt="monitor lizard" class="themedComponent_mlkZ themedComponent--dark_xIcU" width="32px"></div><b class="navbar__title text--truncate">KOMODO</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs/intro">Docs</a></div><div class="theme-layout-navbar-right navbar__items navbar__items--right"><a href="https://opencollective.com/komodo" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Donate<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a><a href="https://docs.rs/komodo_client/latest/komodo_client" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Docs.rs<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a><a href="https://github.com/moghtech/komodo" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="system mode" aria-label="Switch between dark and light mode (currently system mode)"><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP systemToggleIcon_QzmC"><path fill="currentColor" d="m12 21c4.971 0 9-4.029 9-9s-4.029-9-9-9-9 4.029-9 9 4.029 9 9 9zm4.95-13.95c1.313 1.313 2.05 3.093 2.05 4.95s-0.738 3.637-2.05 4.95c-1.313 1.313-3.093 2.05-4.95 2.05v-14c1.857 0 3.637 0.737 4.95 2.05z"></path></svg></button></div><div class="navbarSearchContainer_Bca1"><div class="navbar__search searchBarContainer_NW3z" dir="ltr"><input placeholder="Search" aria-label="Search" class="navbar__search-input searchInput_YFbd" value=""><div class="loadingRing_RJI3 searchBarLoadingRing_YnHq"><div></div><div></div><div></div><div></div></div></div></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="theme-layout-main main-wrapper mainWrapper_z2l0"><div class="docsWrapper_hBAB"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docRoot_UBD9"><aside class="theme-doc-sidebar-container docSidebarContainer_YfHR"><div class="sidebarViewport_aRkj"><div class="sidebar_njMd sidebarWithHideableNavbar_wUlq"><a tabindex="-1" class="sidebarLogo_isFc" href="/"><img src="/img/komodo-512x512.png" alt="monitor lizard" class="themedComponent_mlkZ themedComponent--light_NVdE" width="32px"><img src="/img/komodo-512x512.png" alt="monitor lizard" class="themedComponent_mlkZ themedComponent--dark_xIcU" width="32px"><b>KOMODO</b></a><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/intro"><span title="What is Komodo?" class="linkLabel_WmDU">What is Komodo?</span></a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="categoryLink_byQd menu__link menu__link--sublist" href="/docs/setup"><span title="Setup" class="categoryLinkLabel_W154">Setup</span></a><button aria-label="Expand sidebar category &#x27;Setup&#x27;" aria-expanded="false" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/resources"><span title="Resources" class="linkLabel_WmDU">Resources</span></a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/docs/deploy/compose"><span title="Deploy" class="categoryLinkLabel_W154">Deploy</span></a></div></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/swarm"><span title="Swarm" class="linkLabel_WmDU">Swarm</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/terminals"><span title="Terminals" class="linkLabel_WmDU">Terminals</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/build"><span title="Build" class="linkLabel_WmDU">Build</span></a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/docs/automate/procedures"><span title="Automate" class="categoryLinkLabel_W154">Automate</span></a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/docs/configuration/providers"><span title="Configuration" class="categoryLinkLabel_W154">Configuration</span></a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--active" href="/docs/ecosystem"><span title="Ecosystem" class="categoryLinkLabel_W154">Ecosystem</span></a><button aria-label="Collapse sidebar category &#x27;Ecosystem&#x27;" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/ecosystem/cli"><span title="Komodo CLI" class="linkLabel_WmDU">Komodo CLI</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/ecosystem/api"><span title="API and Clients" class="linkLabel_WmDU">API and Clients</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/ecosystem/community"><span title="Community" class="linkLabel_WmDU">Community</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/ecosystem/development"><span title="Development" class="linkLabel_WmDU">Development</span></a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/docs/releases/v2.0.0"><span title="Releases" class="categoryLinkLabel_W154">Releases</span></a></div></li></ul></nav></div></div></aside><main class="docMainContainer_TBSr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_YNFT"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item"><a class="breadcrumbs__link" href="/docs/ecosystem"><span>Ecosystem</span></a></li><li class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link">Development</span></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Development</h1></header>
<p>If you are looking to contribute to Komodo, this page is a launching point for setting up your Komodo development environment.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="dependencies">Dependencies<a href="#dependencies" class="hash-link" aria-label="Direct link to Dependencies" title="Direct link to Dependencies" translate="no"></a></h2>
<p>Running Komodo from <a href="https://github.com/moghtech/komodo" target="_blank" rel="noopener noreferrer" class="">source</a> requires either <a href="https://www.docker.com/" target="_blank" rel="noopener noreferrer" class="">Docker</a> (and can use the included <a href="https://code.visualstudio.com/docs/devcontainers/containers" target="_blank" rel="noopener noreferrer" class="">devcontainer</a>), or can have the development dependencies installed locally:</p>
<ul>
<li class="">Backend (Core / Periphery APIs)<!-- -->
<ul>
<li class=""><a href="https://www.rust-lang.org/" target="_blank" rel="noopener noreferrer" class="">Rust</a> stable via <a href="https://rustup.rs/" target="_blank" rel="noopener noreferrer" class="">rustup installer</a></li>
<li class=""><a href="https://www.mongodb.com/" target="_blank" rel="noopener noreferrer" class="">MongoDB</a> or <a href="https://www.ferretdb.com/" target="_blank" rel="noopener noreferrer" class="">FerretDB</a> available locally.</li>
<li class="">On Debian/Ubuntu: <code>apt install build-essential pkg-config libssl-dev</code> required to build the rust source.</li>
</ul>
</li>
<li class="">Web UI<!-- -->
<ul>
<li class=""><a href="https://nodejs.org/en" target="_blank" rel="noopener noreferrer" class="">Node</a> &gt;= 18.18 + NPM<!-- -->
<ul>
<li class=""><a href="https://yarnpkg.com/" target="_blank" rel="noopener noreferrer" class="">Yarn</a> - (Tip: use <code>corepack enable</code> after installing <code>node</code> to use <code>yarn</code>)</li>
</ul>
</li>
<li class=""><a href="https://github.com/1password/typeshare" target="_blank" rel="noopener noreferrer" class="">typeshare</a></li>
<li class=""><a href="https://deno.com/" target="_blank" rel="noopener noreferrer" class="">Deno</a> &gt;= 2.0.2</li>
</ul>
</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="runnables-cli">runnables-cli<a href="#runnables-cli" class="hash-link" aria-label="Direct link to runnables-cli" title="Direct link to runnables-cli" translate="no"></a></h3>
<p><a href="https://github.com/mbecker20/runnables-cli" target="_blank" rel="noopener noreferrer" class="">mbecker20/runnables-cli</a> can be used as a convience CLI for running common project tasks found in <code>runfile.toml</code>. Otherwise, you can create your own project tasks by references the <code>cmd</code>s found in <code>runfile.toml</code>. All instructions below will use runnables-cli v1.3.7+.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="docker">Docker<a href="#docker" class="hash-link" aria-label="Direct link to Docker" title="Direct link to Docker" translate="no"></a></h2>
<p>After making changes to the project, run <code>run dev-compose-build</code> to rebuild Komodo and then <code>run dev-compose-exposed</code> to start a Komodo container with the UI accessible at <code>localhost:9120</code>. Any changes made to source files will require re-running the <code>dev-compose-build</code> and <code>dev-compose-exposed</code> commands.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="devcontainer">Devcontainer<a href="#devcontainer" class="hash-link" aria-label="Direct link to Devcontainer" title="Direct link to Devcontainer" translate="no"></a></h2>
<p>Use the included <code>.devcontainer.json</code> with VSCode or other compatible IDE to stand-up a full environment, including database, with one click.</p>
<p><a href="https://code.visualstudio.com/Docs/editor/tasks" target="_blank" rel="noopener noreferrer" class="">VSCode Tasks</a> are provided for building and running Komodo.</p>
<p>After opening the repository with the devcontainer run the task <code>Init</code> to build the ui/backend. Then, the task <code>Run Komodo</code> can be used to run ui/backend. Other tasks for rebuilding/running just one component of the stack (Core API, Periphery API, UI) are also provided.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="local">Local<a href="#local" class="hash-link" aria-label="Direct link to Local" title="Direct link to Local" translate="no"></a></h2>
<p>You can also run the components locally, using Docker only for the database.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="initial-one-time-setup">Initial One-time Setup<a href="#initial-one-time-setup" class="hash-link" aria-label="Direct link to Initial One-time Setup" title="Direct link to Initial One-time Setup" translate="no"></a></h3>
<p>Create the local config directories.</p>
<div class="language-sh codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sh codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token function" style="color:hsl(221, 87%, 60%)">mkdir</span><span class="token plain"> </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-p</span><span class="token plain"> .dev/keys .dev/periphery</span><br></span></code></pre></div></div>
<p>Add <code>.dev/core.config.toml</code> with the following contents:</p>
<div class="language-toml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-toml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token key property" style="color:hsl(5, 74%, 59%)">host</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">=</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">&quot;http://localhost:9120&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token key property" style="color:hsl(5, 74%, 59%)">private_key</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">=</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">&quot;file:.dev/keys/core.key&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token key property" style="color:hsl(5, 74%, 59%)">local_auth</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">=</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(35, 99%, 36%)">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token key property" style="color:hsl(5, 74%, 59%)">enable_new_users</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">=</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(35, 99%, 36%)">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token key property" style="color:hsl(5, 74%, 59%)">jwt_secret</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">=</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">&quot;a_random_secret&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token key property" style="color:hsl(5, 74%, 59%)">first_server_address</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">=</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">&quot;http://localhost:8120&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token key property" style="color:hsl(5, 74%, 59%)">cors_allowed_origins</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token string" style="color:hsl(119, 34%, 47%)">&quot;http://localhost:5173&quot;</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token key property" style="color:hsl(5, 74%, 59%)">cors_allow_credentials</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">=</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(35, 99%, 36%)">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token key property" style="color:hsl(5, 74%, 59%)">session_allow_cross_site</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">=</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(35, 99%, 36%)">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token key property" style="color:hsl(5, 74%, 59%)">database.address</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">=</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">&quot;localhost:27017&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token key property" style="color:hsl(5, 74%, 59%)">database.username</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">=</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">&quot;komodo&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token key property" style="color:hsl(5, 74%, 59%)">database.password</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">=</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">&quot;komodo&quot;</span><br></span></code></pre></div></div>
<p>Add <code>.dev/periphery.config.toml</code>:</p>
<div class="language-toml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-toml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token key property" style="color:hsl(5, 74%, 59%)">ssl_enabled</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">=</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(35, 99%, 36%)">false</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token key property" style="color:hsl(5, 74%, 59%)">root_directory</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">=</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">&quot;.dev/periphery&quot;</span><br></span></code></pre></div></div>
<p>Create <code>ui/.env.development</code> with the following:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">VITE_KOMODO_HOST=http://localhost:9120</span><br></span></code></pre></div></div>
<p>Make sure your Rust toolchain is up to date and install the CLI tools:</p>
<div class="language-sh codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sh codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">rustup update</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">cargo</span><span class="token plain"> </span><span class="token function" style="color:hsl(221, 87%, 60%)">install</span><span class="token plain"> typeshare-cli runnables-cli</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">run link-client</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="starting-the-services">Starting the services<a href="#starting-the-services" class="hash-link" aria-label="Direct link to Starting the services" title="Direct link to Starting the services" translate="no"></a></h3>
<p>Start a Mongo instance in Docker:</p>
<div class="language-sh codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sh codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token function" style="color:hsl(221, 87%, 60%)">docker</span><span class="token plain"> run </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-d</span><span class="token plain"> </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--name</span><span class="token plain"> komodo-mongo </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-p</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">27017</span><span class="token plain">:27017 </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-v</span><span class="token plain"> komodo-mongo-data:/data/db </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-v</span><span class="token plain"> komodo-mongo-config:/data/configdb </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-e</span><span class="token plain"> </span><span class="token assign-left variable" style="color:hsl(221, 87%, 60%)">MONGO_INITDB_ROOT_USERNAME</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain">komodo </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-e</span><span class="token plain"> </span><span class="token assign-left variable" style="color:hsl(221, 87%, 60%)">MONGO_INITDB_ROOT_PASSWORD</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain">komodo </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">mongo</span><br></span></code></pre></div></div>
<p>In separate terminals, run Core, Periphery, and UI.</p>
<div class="language-sh codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sh codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">run dev-core</span><br></span></code></pre></div></div>
<div class="language-sh codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sh codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">run dev-periphery</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">```sh</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">run dev-ui </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># Start in dev (watch) mode</span><br></span></code></pre></div></div>
<p>Once everything is running, open <code>http://localhost:5173</code> and create a user account.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="rebuilding-the-frontend-client">Rebuilding the frontend client<a href="#rebuilding-the-frontend-client" class="hash-link" aria-label="Direct link to Rebuilding the frontend client" title="Direct link to Rebuilding the frontend client" translate="no"></a></h3>
<p>After API changes, rebuild the client with</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">run gen-client </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># Rebuild client (after API changes)</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="docsite-development">Docsite Development<a href="#docsite-development" class="hash-link" aria-label="Direct link to Docsite Development" title="Direct link to Docsite Development" translate="no"></a></h2>
<p>Use <code>run dev-docsite</code> to start the <a href="https://docusaurus.io/" target="_blank" rel="noopener noreferrer" class="">Docusaurus</a> Komodo docs site in development mode. Changes made to files in <code>./docsite</code> will be automatically reloaded by the server.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col noPrint_WFHX"><a href="https://github.com/moghtech/komodo/tree/main/docsite/docs/ecosystem/development.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_Z9Sw" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_JAkA"></div></div></footer></article><nav class="docusaurus-mt-lg pagination-nav" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/ecosystem/community"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Community</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/releases/v2.0.0"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">v2.0.0</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#dependencies" class="table-of-contents__link toc-highlight">Dependencies</a><ul><li><a href="#runnables-cli" class="table-of-contents__link toc-highlight">runnables-cli</a></li></ul></li><li><a href="#docker" class="table-of-contents__link toc-highlight">Docker</a></li><li><a href="#devcontainer" class="table-of-contents__link toc-highlight">Devcontainer</a></li><li><a href="#local" class="table-of-contents__link toc-highlight">Local</a><ul><li><a href="#initial-one-time-setup" class="table-of-contents__link toc-highlight">Initial One-time Setup</a></li><li><a href="#starting-the-services" class="table-of-contents__link toc-highlight">Starting the services</a></li><li><a href="#rebuilding-the-frontend-client" class="table-of-contents__link toc-highlight">Rebuilding the frontend client</a></li></ul></li><li><a href="#docsite-development" class="table-of-contents__link toc-highlight">Docsite Development</a></li></ul></div></div></div></div></main></div></div></div><footer class="theme-layout-footer footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/intro">Getting Started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/setup">Setup</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/resources">Resources</a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Ecosystem</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/ecosystem/cli">CLI</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/ecosystem/api">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/ecosystem/community">Community</a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://github.com/moghtech/komodo" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://opencollective.com/komodo" target="_blank" rel="noopener noreferrer" class="footer__link-item">Donate<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://demo.komo.do" target="_blank" rel="noopener noreferrer" class="footer__link-item">Demo<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">© 2026 Mogh Technologies Inc. Licensed under GPL-3.0</div></div></div></footer></div>
</body>
</html>