<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Examples on Gate One</title><link>https://clad-one.github.io/gate-one-doc/latest/docs/examples/</link><description>Recent content in Examples on Gate One</description><generator>Hugo</generator><language>en</language><atom:link href="https://clad-one.github.io/gate-one-doc/latest/docs/examples/index.xml" rel="self" type="application/rss+xml"/><item><title>Getting started</title><link>https://clad-one.github.io/gate-one-doc/latest/docs/examples/getting-started/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://clad-one.github.io/gate-one-doc/latest/docs/examples/getting-started/</guid><description>&lt;div id="preamble"&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;This example runs entirely on your machine: no identity provider and&#10;no external service. It uses the embedded &lt;code&gt;dev&lt;/code&gt; provider, which is&#10;loopback-only and must never be used in production.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="sect1"&gt;&#10;&lt;h2 id="file"&gt;File&lt;/h2&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;&lt;a href="https://clad-one.github.io/gate-one-doc/latest/examples/getting-started/routes.json"&gt;&lt;code&gt;examples/getting-started/routes.json&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="listingblock"&gt;&#10;&lt;div class="content"&gt;&#10;&lt;pre class="highlight"&gt;&lt;code class="language-json" data-lang="json"&gt;{&#10; &amp;#34;authProvider&amp;#34;: {&#10; &amp;#34;type&amp;#34;: &amp;#34;dev&amp;#34;,&#10; &amp;#34;loginBaseUrl&amp;#34;: &amp;#34;http://login.demo.localhost:3000&amp;#34;,&#10; &amp;#34;cookieDomain&amp;#34;: &amp;#34;demo.localhost&amp;#34;&#10; },&#10; &amp;#34;routes&amp;#34;: [{&#10; &amp;#34;host&amp;#34;: &amp;#34;app.demo.localhost&amp;#34;,&#10; &amp;#34;path&amp;#34;: &amp;#34;/*&amp;#34;,&#10; &amp;#34;frontend&amp;#34;: true,&#10; &amp;#34;backend&amp;#34;: &amp;#34;http://127.0.0.1:8080&amp;#34;,&#10; &amp;#34;auth&amp;#34;: {},&#10; &amp;#34;userBadge&amp;#34;: {&#10; &amp;#34;position&amp;#34;: &amp;#34;right&amp;#34;,&#10; &amp;#34;claims&amp;#34;: [&amp;#34;preferred_username&amp;#34;, &amp;#34;email&amp;#34;],&#10; &amp;#34;logoutLabel&amp;#34;: &amp;#34;Sign out&amp;#34;&#10; }&#10; }]&#10;}&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Direct OIDC with one IdP</title><link>https://clad-one.github.io/gate-one-doc/latest/docs/examples/direct-oidc/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://clad-one.github.io/gate-one-doc/latest/docs/examples/direct-oidc/</guid><description>&lt;div id="preamble"&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;This example points Gate One straight at &lt;strong&gt;one OIDC issuer&lt;/strong&gt;: no external&#10;IAM to federate, no embedded IAM. Gate One is the relying party; the&#10;issuer is the IdP and, because it also carries roles and scopes, the&#10;authorization source for that deployment.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;A single &lt;strong&gt;Keycloak realm&lt;/strong&gt; is used here, but the same shape works for&#10;any one issuer — Zitadel, Entra ID, Okta or Auth0.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Multi-app SSO</title><link>https://clad-one.github.io/gate-one-doc/latest/docs/examples/multi-app-sso/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://clad-one.github.io/gate-one-doc/latest/docs/examples/multi-app-sso/</guid><description>&lt;div id="preamble"&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;This example starts from one protected application and adds a second&#10;&lt;strong&gt;route behind the same authentication provider&lt;/strong&gt;. That is what creates&#10;SSO: the provider and the shared cookie domain are already in place, and&#10;the second route reuses the same Gate One session.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;Changing the provider alone does not create SSO. Adding a route alone&#10;does not create SSO either. The two routes must use the &lt;strong&gt;same provider&lt;/strong&gt;&#10;and share the &lt;strong&gt;same cookie domain&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Cross-domain SSO</title><link>https://clad-one.github.io/gate-one-doc/latest/docs/examples/cross-tld-sso/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://clad-one.github.io/gate-one-doc/latest/docs/examples/cross-tld-sso/</guid><description>&lt;div id="preamble"&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;This example puts two unrelated domains behind one IdP session. Each&#10;domain keeps its own Gate One cookie; no cookie crosses the TLD boundary.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="sect1"&gt;&#10;&lt;h2 id="files"&gt;Files&lt;/h2&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="ulist"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;a href="https://clad-one.github.io/gate-one-doc/latest/examples/cross-tld-sso/routes.json"&gt;&lt;code&gt;examples/cross-tld-sso/routes.json&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;a href="https://clad-one.github.io/gate-one-doc/latest/examples/cross-tld-sso/README.md"&gt;&lt;code&gt;examples/cross-tld-sso/README.md&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="sect1"&gt;&#10;&lt;h2 id="shared-group-per-domain-providers"&gt;Shared group, per-domain providers&lt;/h2&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="listingblock"&gt;&#10;&lt;div class="content"&gt;&#10;&lt;pre class="highlight"&gt;&lt;code class="language-json" data-lang="json"&gt;{&#10; &amp;#34;ssoGroups&amp;#34;: [{&#10; &amp;#34;id&amp;#34;: &amp;#34;company&amp;#34;,&#10; &amp;#34;issuer&amp;#34;: &amp;#34;https://idp.example.com/realms/company&amp;#34;,&#10; &amp;#34;clientId&amp;#34;: &amp;#34;gate-one&amp;#34;,&#10; &amp;#34;clientSecretEnv&amp;#34;: &amp;#34;OIDC_CLIENT_SECRET&amp;#34;,&#10; &amp;#34;sessionKeyEnv&amp;#34;: &amp;#34;OIDC_SESSION_KEY&amp;#34;,&#10; &amp;#34;sessionStore&amp;#34;: {&#10; &amp;#34;type&amp;#34;: &amp;#34;redis&amp;#34;,&#10; &amp;#34;url&amp;#34;: &amp;#34;redis://redis:6379/0&amp;#34;,&#10; &amp;#34;prefix&amp;#34;: &amp;#34;cladone:auth:v1:&amp;#34;&#10; },&#10; &amp;#34;providers&amp;#34;: [&#10; {&#10; &amp;#34;id&amp;#34;: &amp;#34;app-a&amp;#34;, &amp;#34;loginBaseUrl&amp;#34;: &amp;#34;https://login.app-a.com&amp;#34;,&#10; &amp;#34;cookieDomain&amp;#34;: &amp;#34;app-a.com&amp;#34;, &amp;#34;defaultAppUrl&amp;#34;: &amp;#34;https://app-a.com/&amp;#34;&#10; },&#10; {&#10; &amp;#34;id&amp;#34;: &amp;#34;app-b&amp;#34;, &amp;#34;loginBaseUrl&amp;#34;: &amp;#34;https://login.app-b.fr&amp;#34;,&#10; &amp;#34;cookieDomain&amp;#34;: &amp;#34;app-b.fr&amp;#34;, &amp;#34;defaultAppUrl&amp;#34;: &amp;#34;https://app-b.fr/&amp;#34;&#10; }&#10; ]&#10; }],&#10; &amp;#34;defaultAuthProvider&amp;#34;: &amp;#34;app-a&amp;#34;,&#10; &amp;#34;routes&amp;#34;: [{&#10; &amp;#34;hosts&amp;#34;: [&amp;#34;app-a.com&amp;#34;, &amp;#34;app-b.fr&amp;#34;],&#10; &amp;#34;path&amp;#34;: &amp;#34;/*&amp;#34;,&#10; &amp;#34;frontend&amp;#34;: true,&#10; &amp;#34;backend&amp;#34;: &amp;#34;http://app:8080&amp;#34;,&#10; &amp;#34;auth&amp;#34;: {}&#10; }]&#10;}&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;&lt;code&gt;issuer&lt;/code&gt;, &lt;code&gt;clientId&lt;/code&gt;, &lt;code&gt;sessionStore&lt;/code&gt; and &lt;code&gt;sessionKeyEnv&lt;/code&gt; are written once.&#10;Each provider entry only carries its domain, login host and optional&#10;cookie name. The route is written once; Gate One expands it to&#10;&lt;code&gt;app-a.com&lt;/code&gt; and &lt;code&gt;app-b.fr&lt;/code&gt; and binds each one to its provider.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Keycloak with Google</title><link>https://clad-one.github.io/gate-one-doc/latest/docs/examples/keycloak-google/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://clad-one.github.io/gate-one-doc/latest/docs/examples/keycloak-google/</guid><description>&lt;div id="preamble"&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;This example uses Keycloak as the &lt;strong&gt;IAM and OIDC issuer&lt;/strong&gt;, with Google as&#10;an additional identity provider inside Keycloak. Gate One only sees the&#10;Keycloak issuer; it does not configure Google directly.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="listingblock"&gt;&#10;&lt;div class="content"&gt;&#10;&lt;pre class="highlight"&gt;&lt;code class="language-text" data-lang="text"&gt;browser -&amp;gt; Gate One -&amp;gt; Keycloak -&amp;gt; Google&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Embedded IAM</title><link>https://clad-one.github.io/gate-one-doc/latest/docs/examples/embedded-iam/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://clad-one.github.io/gate-one-doc/latest/docs/examples/embedded-iam/</guid><description>&lt;div id="preamble"&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;This example runs the optional embedded IAM &lt;code&gt;cladone-auth&lt;/code&gt; as the single&#10;OIDC issuer for Gate One. &lt;code&gt;cladone-auth&lt;/code&gt; federates &lt;strong&gt;one or more upstream&#10;IdPs&lt;/strong&gt; (Google, Microsoft Entra, Auth0, any OIDC issuer — each keyed under&#10;&lt;code&gt;upstreams&lt;/code&gt;) and normalizes their claims into the roles/scopes/claims&#10;Gate One enforces.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>High Availability</title><link>https://clad-one.github.io/gate-one-doc/latest/docs/examples/high-availability/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://clad-one.github.io/gate-one-doc/latest/docs/examples/high-availability/</guid><description>&lt;div id="preamble"&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;This example runs several Gate One replicas behind a load balancer and&#10;uses Redis as the shared OIDC session/revocation store. It is the&#10;multi-instance variant of the&#10;&lt;a href="../multi-app-sso/"&gt;multi-app SSO&lt;/a&gt; example.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="sect1"&gt;&#10;&lt;h2 id="file"&gt;File&lt;/h2&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;&lt;a href="https://clad-one.github.io/gate-one-doc/latest/examples/high-availability/routes.json"&gt;&lt;code&gt;examples/high-availability/routes.json&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="listingblock"&gt;&#10;&lt;div class="content"&gt;&#10;&lt;pre class="highlight"&gt;&lt;code class="language-json" data-lang="json"&gt;{&#10; &amp;#34;authProvider&amp;#34;: {&#10; &amp;#34;type&amp;#34;: &amp;#34;oidc&amp;#34;,&#10; &amp;#34;issuer&amp;#34;: &amp;#34;https://auth.example.com/realms/company&amp;#34;,&#10; &amp;#34;clientId&amp;#34;: &amp;#34;gate-one&amp;#34;,&#10; &amp;#34;clientSecretEnv&amp;#34;: &amp;#34;OIDC_CLIENT_SECRET&amp;#34;,&#10; &amp;#34;loginBaseUrl&amp;#34;: &amp;#34;https://login.example.com&amp;#34;,&#10; &amp;#34;cookieDomain&amp;#34;: &amp;#34;example.com&amp;#34;,&#10; &amp;#34;sessionKeyEnv&amp;#34;: &amp;#34;OIDC_SESSION_KEY&amp;#34;,&#10; &amp;#34;sessionStore&amp;#34;: {&#10; &amp;#34;type&amp;#34;: &amp;#34;redis&amp;#34;,&#10; &amp;#34;url&amp;#34;: &amp;#34;redis://redis:6379/0&amp;#34;,&#10; &amp;#34;passwordEnv&amp;#34;: &amp;#34;REDIS_PASSWORD&amp;#34;,&#10; &amp;#34;prefix&amp;#34;: &amp;#34;cladone:auth:v1:&amp;#34;&#10; }&#10; },&#10; &amp;#34;routes&amp;#34;: [{&#10; &amp;#34;host&amp;#34;: &amp;#34;app.example.com&amp;#34;, &amp;#34;path&amp;#34;: &amp;#34;/*&amp;#34;, &amp;#34;frontend&amp;#34;: true,&#10; &amp;#34;backend&amp;#34;: &amp;#34;http://app:8080&amp;#34;, &amp;#34;auth&amp;#34;: {}&#10; }]&#10;}&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>APIs and MCP</title><link>https://clad-one.github.io/gate-one-doc/latest/docs/examples/api-mcp/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://clad-one.github.io/gate-one-doc/latest/docs/examples/api-mcp/</guid><description>&lt;div id="preamble"&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;This example separates the browser session from machine tokens and&#10;exposes one MCP service with its protected-resource metadata.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="sect1"&gt;&#10;&lt;h2 id="file"&gt;File&lt;/h2&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;&lt;a href="https://clad-one.github.io/gate-one-doc/latest/examples/protect-api-mcp/routes.json"&gt;&lt;code&gt;examples/protect-api-mcp/routes.json&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="listingblock"&gt;&#10;&lt;div class="content"&gt;&#10;&lt;pre class="highlight"&gt;&lt;code class="language-json" data-lang="json"&gt;{&#10; &amp;#34;authProviders&amp;#34;: [&#10; {&#10; &amp;#34;id&amp;#34;: &amp;#34;company&amp;#34;, &amp;#34;type&amp;#34;: &amp;#34;oidc&amp;#34;,&#10; &amp;#34;issuer&amp;#34;: &amp;#34;https://auth.example.com/t/company&amp;#34;,&#10; &amp;#34;clientId&amp;#34;: &amp;#34;gate-one&amp;#34;,&#10; &amp;#34;clientSecretEnv&amp;#34;: &amp;#34;MYCOMPANY_OIDC_SECRET&amp;#34;,&#10; &amp;#34;loginBaseUrl&amp;#34;: &amp;#34;https://login.example.com&amp;#34;,&#10; &amp;#34;cookieDomain&amp;#34;: &amp;#34;example.com&amp;#34;,&#10; &amp;#34;sessionKeyEnv&amp;#34;: &amp;#34;MYCOMPANY_SESSION_KEY&amp;#34;&#10; },&#10; {&#10; &amp;#34;id&amp;#34;: &amp;#34;company-api&amp;#34;, &amp;#34;type&amp;#34;: &amp;#34;jwt&amp;#34;,&#10; &amp;#34;issuer&amp;#34;: &amp;#34;https://auth.example.com/t/company&amp;#34;,&#10; &amp;#34;jwksUrl&amp;#34;: &amp;#34;https://auth.example.com/t/company/jwks.json&amp;#34;,&#10; &amp;#34;audience&amp;#34;: &amp;#34;https://api.example.com&amp;#34;&#10; }&#10; ],&#10; &amp;#34;defaultAuthProvider&amp;#34;: &amp;#34;company&amp;#34;,&#10; &amp;#34;routes&amp;#34;: [&#10; {&#10; &amp;#34;host&amp;#34;: &amp;#34;app.example.com&amp;#34;, &amp;#34;path&amp;#34;: &amp;#34;/*&amp;#34;, &amp;#34;frontend&amp;#34;: true,&#10; &amp;#34;backend&amp;#34;: &amp;#34;http://app:8080&amp;#34;, &amp;#34;auth&amp;#34;: {}&#10; },&#10; {&#10; &amp;#34;host&amp;#34;: &amp;#34;api.example.com&amp;#34;, &amp;#34;path&amp;#34;: &amp;#34;/v1/*&amp;#34;, &amp;#34;backend&amp;#34;: &amp;#34;http://api:8080&amp;#34;,&#10; &amp;#34;auth&amp;#34;: {&#10; &amp;#34;provider&amp;#34;: &amp;#34;company-api&amp;#34;,&#10; &amp;#34;identity&amp;#34;: { &amp;#34;scopes&amp;#34;: [&amp;#34;read:things&amp;#34;] }&#10; }&#10; },&#10; {&#10; &amp;#34;host&amp;#34;: &amp;#34;mcp.example.com&amp;#34;, &amp;#34;path&amp;#34;: &amp;#34;/mcp&amp;#34;, &amp;#34;backend&amp;#34;: &amp;#34;http://mcp:8080&amp;#34;,&#10; &amp;#34;auth&amp;#34;: { &amp;#34;provider&amp;#34;: &amp;#34;company-api&amp;#34; },&#10; &amp;#34;mcp&amp;#34;: {&#10; &amp;#34;enabled&amp;#34;: true, &amp;#34;path&amp;#34;: &amp;#34;/mcp&amp;#34;, &amp;#34;name&amp;#34;: &amp;#34;things&amp;#34;,&#10; &amp;#34;resource&amp;#34;: &amp;#34;https://mcp.example.com&amp;#34;, &amp;#34;scope&amp;#34;: &amp;#34;mcp-tools&amp;#34;,&#10; &amp;#34;operations&amp;#34;: [{ &amp;#34;name&amp;#34;: &amp;#34;list_things&amp;#34;, &amp;#34;operationId&amp;#34;: &amp;#34;listThings&amp;#34; }]&#10; }&#10; }&#10; ]&#10;}&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Own account panel</title><link>https://clad-one.github.io/gate-one-doc/latest/docs/examples/account-panel/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://clad-one.github.io/gate-one-doc/latest/docs/examples/account-panel/</guid><description>&lt;div id="preamble"&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;This example keeps Gate One’s frontend guard but removes the built-in&#10;user badge. The application provides a burger button and a side panel,&#10;then reads the session from Gate One.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="sect1"&gt;&#10;&lt;h2 id="files"&gt;Files&lt;/h2&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="ulist"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;a href="https://clad-one.github.io/gate-one-doc/latest/examples/account-panel/index.html"&gt;&lt;code&gt;index.html&lt;/code&gt;&lt;/a&gt; — application page and panel markup&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;a href="https://clad-one.github.io/gate-one-doc/latest/examples/account-panel/panel.js"&gt;&lt;code&gt;panel.js&lt;/code&gt;&lt;/a&gt; — session, login and logout&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;a href="https://clad-one.github.io/gate-one-doc/latest/examples/account-panel/panel.css"&gt;&lt;code&gt;panel.css&lt;/code&gt;&lt;/a&gt; — panel styling&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;a href="https://clad-one.github.io/gate-one-doc/latest/examples/account-panel/routes.json"&gt;&lt;code&gt;routes.json&lt;/code&gt;&lt;/a&gt; — route without &lt;code&gt;userBadge&lt;/code&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;a href="https://clad-one.github.io/gate-one-doc/latest/examples/account-panel/README.md"&gt;&lt;code&gt;README.md&lt;/code&gt;&lt;/a&gt; — run notes&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>IAM + IdP bridge</title><link>https://clad-one.github.io/gate-one-doc/latest/docs/examples/http-bridge/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://clad-one.github.io/gate-one-doc/latest/docs/examples/http-bridge/</guid><description>&lt;div id="preamble"&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;This example configures &lt;code&gt;authProvider.type: &amp;#34;http-bridge&amp;#34;&lt;/code&gt; and points it&#10;at a service implementing the&#10;&lt;a href="https://clad-one.github.io/gate-one-doc/latest/docs/components/bridge-contract/"&gt;bridge contract&lt;/a&gt;. The bridge can adapt&#10;SAML, LDAP, mTLS, API keys or a legacy session service;&#10;Gate One only sees &lt;code&gt;/auth&lt;/code&gt;, &lt;code&gt;/auth/mcp&lt;/code&gt; and &lt;code&gt;/health&lt;/code&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="admonitionblock important"&gt;&#10;&lt;table&gt;&#10;&lt;tbody&gt;&lt;tr&gt;&#10;&lt;td class="icon"&gt;&#10;&lt;div class="title"&gt;Important&lt;/div&gt;&#10;&lt;/td&gt;&#10;&lt;td class="content"&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;The bridge supplies identity and IAM facts (user, roles, scopes, claims),&#10;but &lt;strong&gt;Gate One remains the policy enforcement point&lt;/strong&gt;. &lt;code&gt;auth&lt;/code&gt;,&#10;&lt;code&gt;auth.identity&lt;/code&gt; and MCP scope checks are still performed by Gate One on&#10;every request. The bridge never bypasses route policy.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;The provider type remains &lt;code&gt;http-bridge&lt;/code&gt;; &lt;code&gt;http&lt;/code&gt; is its deprecated alias.&#10;The reference &lt;code&gt;auth-bridge&lt;/code&gt; deployment is the IAM + IdP shape. A custom&#10;bridge may return only the authenticated user, in which case Gate One&#10;still enforces authentication but has no roles or scopes to check.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>MCP tools</title><link>https://clad-one.github.io/gate-one-doc/latest/docs/examples/mcp-tools/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://clad-one.github.io/gate-one-doc/latest/docs/examples/mcp-tools/</guid><description>&lt;div id="preamble"&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;This example builds one MCP surface from three sources: a documented REST&#10;API (&lt;strong&gt;derived&lt;/strong&gt; into tools), an existing MCP server (&lt;strong&gt;proxied&lt;/strong&gt;) and an&#10;&lt;strong&gt;aggregating&lt;/strong&gt; set that groups both under one endpoint with its own&#10;audience, scope and identity.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="sect1"&gt;&#10;&lt;h2 id="file"&gt;File&lt;/h2&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;&lt;a href="https://clad-one.github.io/gate-one-doc/latest/examples/mcp-tools/routes.json"&gt;&lt;code&gt;examples/mcp-tools/routes.json&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;Abridged (the &lt;code&gt;authProviders&lt;/code&gt; and &lt;code&gt;tokenBroker&lt;/code&gt; blocks are omitted here;&#10;they are in the file):&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="listingblock"&gt;&#10;&lt;div class="content"&gt;&#10;&lt;pre class="highlight"&gt;&lt;code class="language-json" data-lang="json"&gt;{&#10; &amp;#34;mcpSets&amp;#34;: {&#10; &amp;#34;developer-tools&amp;#34;: {&#10; &amp;#34;host&amp;#34;: &amp;#34;mcp.example.com&amp;#34;,&#10; &amp;#34;endpoint&amp;#34;: &amp;#34;/developer-tools&amp;#34;,&#10; &amp;#34;resource&amp;#34;: &amp;#34;https://mcp.example.com/developer-tools&amp;#34;,&#10; &amp;#34;scope&amp;#34;: &amp;#34;mcp-tools&amp;#34;,&#10; &amp;#34;identity&amp;#34;: { &amp;#34;roles&amp;#34;: [&amp;#34;developer&amp;#34;] },&#10; &amp;#34;members&amp;#34;: [&#10; { &amp;#34;service&amp;#34;: &amp;#34;github&amp;#34;, &amp;#34;path&amp;#34;: &amp;#34;/github&amp;#34;,&#10; &amp;#34;tools&amp;#34;: [&amp;#34;list_repos&amp;#34;, &amp;#34;get_repo&amp;#34;] },&#10; { &amp;#34;service&amp;#34;: &amp;#34;metrics&amp;#34;, &amp;#34;path&amp;#34;: &amp;#34;/metrics&amp;#34; }&#10; ]&#10; }&#10; },&#10; &amp;#34;routes&amp;#34;: [&#10; {&#10; &amp;#34;host&amp;#34;: &amp;#34;mcp.example.com&amp;#34;,&#10; &amp;#34;path&amp;#34;: &amp;#34;/github&amp;#34;,&#10; &amp;#34;backend&amp;#34;: &amp;#34;https://api.github.com&amp;#34;,&#10; &amp;#34;auth&amp;#34;: {},&#10; &amp;#34;upstream&amp;#34;: { &amp;#34;tokenBroker&amp;#34;: { &amp;#34;provider&amp;#34;: &amp;#34;github&amp;#34; } },&#10; &amp;#34;openapi&amp;#34;: { &amp;#34;url&amp;#34;: &amp;#34;http://landing/github-openapi.json&amp;#34;, &amp;#34;public&amp;#34;: false },&#10; &amp;#34;mcp&amp;#34;: {&#10; &amp;#34;enabled&amp;#34;: true,&#10; &amp;#34;name&amp;#34;: &amp;#34;github&amp;#34;,&#10; &amp;#34;standalone&amp;#34;: false,&#10; &amp;#34;operations&amp;#34;: [&#10; { &amp;#34;name&amp;#34;: &amp;#34;list_repos&amp;#34;, &amp;#34;operationId&amp;#34;: &amp;#34;list_repos&amp;#34; },&#10; { &amp;#34;name&amp;#34;: &amp;#34;get_repo&amp;#34;, &amp;#34;operationId&amp;#34;: &amp;#34;get_repo&amp;#34; },&#10; { &amp;#34;name&amp;#34;: &amp;#34;list_issues&amp;#34;, &amp;#34;operationId&amp;#34;: &amp;#34;list_issues&amp;#34; }&#10; ]&#10; }&#10; },&#10; {&#10; &amp;#34;host&amp;#34;: &amp;#34;mcp.example.com&amp;#34;,&#10; &amp;#34;path&amp;#34;: &amp;#34;/metrics&amp;#34;,&#10; &amp;#34;backend&amp;#34;: &amp;#34;http://metrics-mcp:8080&amp;#34;,&#10; &amp;#34;auth&amp;#34;: {},&#10; &amp;#34;mcp&amp;#34;: {&#10; &amp;#34;enabled&amp;#34;: true,&#10; &amp;#34;name&amp;#34;: &amp;#34;metrics&amp;#34;,&#10; &amp;#34;standalone&amp;#34;: false,&#10; &amp;#34;upstream&amp;#34;: {&#10; &amp;#34;url&amp;#34;: &amp;#34;http://metrics-mcp:8080/mcp&amp;#34;,&#10; &amp;#34;tools&amp;#34;: { &amp;#34;include&amp;#34;: [&amp;#34;list_*&amp;#34;, &amp;#34;get_*&amp;#34;], &amp;#34;exclude&amp;#34;: [&amp;#34;*_secret&amp;#34;] }&#10; }&#10; }&#10; }&#10; ]&#10;}&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Injectable UX</title><link>https://clad-one.github.io/gate-one-doc/latest/docs/examples/injectable-ux/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://clad-one.github.io/gate-one-doc/latest/docs/examples/injectable-ux/</guid><description>&lt;div id="preamble"&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;This example runs with the &lt;code&gt;dev&lt;/code&gt; provider and demonstrates every&#10;injection surface in one route.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="sect1"&gt;&#10;&lt;h2 id="files"&gt;Files&lt;/h2&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="ulist"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;a href="https://clad-one.github.io/gate-one-doc/latest/examples/injectable-ux/routes.json"&gt;&lt;code&gt;routes.json&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;a href="https://clad-one.github.io/gate-one-doc/latest/examples/injectable-ux/bundle.json"&gt;&lt;code&gt;bundle.json&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;a href="https://clad-one.github.io/gate-one-doc/latest/examples/injectable-ux/banner.html"&gt;&lt;code&gt;banner.html&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="sect1"&gt;&#10;&lt;h2 id="route"&gt;Route&lt;/h2&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="listingblock"&gt;&#10;&lt;div class="content"&gt;&#10;&lt;pre class="highlight"&gt;&lt;code class="language-json" data-lang="json"&gt;{&#10; &amp;#34;host&amp;#34;: &amp;#34;app.demo.localhost&amp;#34;, &amp;#34;path&amp;#34;: &amp;#34;/*&amp;#34;, &amp;#34;frontend&amp;#34;: true,&#10; &amp;#34;backend&amp;#34;: &amp;#34;http://127.0.0.1:8080&amp;#34;, &amp;#34;auth&amp;#34;: {},&#10; &amp;#34;inject&amp;#34;: &amp;#34;bundle.json&amp;#34;,&#10; &amp;#34;userBadge&amp;#34;: {&#10; &amp;#34;position&amp;#34;: &amp;#34;right&amp;#34;,&#10; &amp;#34;claims&amp;#34;: [&amp;#34;preferred_username&amp;#34;, &amp;#34;email&amp;#34;],&#10; &amp;#34;roles&amp;#34;: [&amp;#34;admin&amp;#34;],&#10; &amp;#34;logoutLabel&amp;#34;: &amp;#34;Sign out&amp;#34;&#10; },&#10; &amp;#34;uiGate&amp;#34;: [&#10; { &amp;#34;selector&amp;#34;: &amp;#34;.danger-zone&amp;#34;, &amp;#34;roles&amp;#34;: [&amp;#34;admin&amp;#34;] },&#10; { &amp;#34;selector&amp;#34;: &amp;#34;.beta-feature&amp;#34;, &amp;#34;hidden&amp;#34;: &amp;#34;before&amp;#34; },&#10; { &amp;#34;selector&amp;#34;: &amp;#34;[data-feature=export]&amp;#34;, &amp;#34;auth&amp;#34;: &amp;#34;before&amp;#34; }&#10; ],&#10; &amp;#34;authGuard&amp;#34;: { &amp;#34;forbidden&amp;#34;: { &amp;#34;banner&amp;#34;: true } },&#10; &amp;#34;csp&amp;#34;: { &amp;#34;mode&amp;#34;: &amp;#34;nonce&amp;#34; },&#10; &amp;#34;pwa&amp;#34;: {&#10; &amp;#34;enabled&amp;#34;: true,&#10; &amp;#34;networkOnly&amp;#34;: {&#10; &amp;#34;excludePatterns&amp;#34;: [&#10; &amp;#34;^https://idp\\.example\\.com/.*/\\.well-known/openid-configuration&amp;#34;,&#10; &amp;#34;^https://idp\\.example\\.com/.*/protocol/openid-connect&amp;#34;&#10; ]&#10; }&#10; }&#10;}&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Enhance a proxied site</title><link>https://clad-one.github.io/gate-one-doc/latest/docs/examples/siteproxy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://clad-one.github.io/gate-one-doc/latest/docs/examples/siteproxy/</guid><description>&lt;div id="preamble"&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;This example puts Gate One in front of a real external site and injects&#10;a userscript into every HTML page. The browser installs no extension and&#10;the upstream site contains no Gate One code.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;The example is the Wikipedia+ demo, moved from the deprecated&#10;&lt;code&gt;gate-one&lt;/code&gt; repository. It proxies the language editions of Wikipedia and&#10;adds a dark/light toggle and a reading-time badge.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Usage plugin</title><link>https://clad-one.github.io/gate-one-doc/latest/docs/examples/usage-plugin/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://clad-one.github.io/gate-one-doc/latest/docs/examples/usage-plugin/</guid><description>&lt;div id="preamble"&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;This example runs the &lt;code&gt;dev&lt;/code&gt; provider and a reference audit plugin. It is&#10;the complete signed-plugin path: manifest, artefact, trust store, WAL and&#10;event subscription.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="sect1"&gt;&#10;&lt;h2 id="files"&gt;Files&lt;/h2&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="ulist"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;a href="https://clad-one.github.io/gate-one-doc/latest/examples/usage-events/routes.json"&gt;&lt;code&gt;routes.json&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;a href="https://clad-one.github.io/gate-one-doc/latest/examples/usage-events/audit.manifest.json"&gt;&lt;code&gt;audit.manifest.json&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;a href="https://clad-one.github.io/gate-one-doc/latest/examples/usage-events/trust-store.json"&gt;&lt;code&gt;trust-store.json&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;a href="https://clad-one.github.io/gate-one-doc/latest/examples/usage-events/audit-echo.placeholder"&gt;&lt;code&gt;audit-echo.placeholder&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="sect1"&gt;&#10;&lt;h2 id="route-and-usage-block"&gt;Route and usage block&lt;/h2&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="listingblock"&gt;&#10;&lt;div class="content"&gt;&#10;&lt;pre class="highlight"&gt;&lt;code class="language-json" data-lang="json"&gt;{&#10; &amp;#34;authProvider&amp;#34;: {&#10; &amp;#34;type&amp;#34;: &amp;#34;dev&amp;#34;,&#10; &amp;#34;loginBaseUrl&amp;#34;: &amp;#34;http://login.demo.localhost:3000&amp;#34;,&#10; &amp;#34;cookieDomain&amp;#34;: &amp;#34;demo.localhost&amp;#34;&#10; },&#10; &amp;#34;usage&amp;#34;: {&#10; &amp;#34;dir&amp;#34;: &amp;#34;./usage-wal&amp;#34;,&#10; &amp;#34;nodeId&amp;#34;: &amp;#34;gw-demo-1&amp;#34;,&#10; &amp;#34;budgetBytes&amp;#34;: 52428800,&#10; &amp;#34;subjectSecretEnv&amp;#34;: &amp;#34;GATE_ONE_SUBJECT_SECRET&amp;#34;,&#10; &amp;#34;pluginSecretEnv&amp;#34;: &amp;#34;GATE_ONE_PLUGIN_SECRET&amp;#34;,&#10; &amp;#34;trustStore&amp;#34;: &amp;#34;trust-store.json&amp;#34;,&#10; &amp;#34;types&amp;#34;: {&#10; &amp;#34;auth&amp;#34;: { &amp;#34;shareBytes&amp;#34;: 10485760, &amp;#34;fsync&amp;#34;: &amp;#34;always&amp;#34; },&#10; &amp;#34;error&amp;#34;: { &amp;#34;shareBytes&amp;#34;: 10485760, &amp;#34;fsync&amp;#34;: &amp;#34;window_ms&amp;#34;, &amp;#34;windowMs&amp;#34;: 250 }&#10; },&#10; &amp;#34;plugins&amp;#34;: [{&#10; &amp;#34;name&amp;#34;: &amp;#34;com.cladone.audit&amp;#34;,&#10; &amp;#34;url&amp;#34;: &amp;#34;http://127.0.0.1:9100&amp;#34;,&#10; &amp;#34;manifest&amp;#34;: &amp;#34;audit.manifest.json&amp;#34;,&#10; &amp;#34;artifact&amp;#34;: &amp;#34;audit-echo.placeholder&amp;#34;&#10; }]&#10; },&#10; &amp;#34;routes&amp;#34;: [{ &amp;#34;host&amp;#34;: &amp;#34;app.demo.localhost&amp;#34;, &amp;#34;path&amp;#34;: &amp;#34;/*&amp;#34;, &amp;#34;frontend&amp;#34;: true,&#10; &amp;#34;backend&amp;#34;: &amp;#34;http://127.0.0.1:8080&amp;#34;, &amp;#34;auth&amp;#34;: {} }]&#10;}&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Turnstile protection</title><link>https://clad-one.github.io/gate-one-doc/latest/docs/examples/turnstile/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://clad-one.github.io/gate-one-doc/latest/docs/examples/turnstile/</guid><description>&lt;div id="preamble"&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;Two examples with Cloudflare’s &lt;strong&gt;test keys&lt;/strong&gt;: a form (&lt;code&gt;mode: forms&lt;/code&gt;) and&#10;a whole-page gate (&lt;code&gt;mode: gate&lt;/code&gt;). The test keys pass without a real&#10;widget; replace them before deploying.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="sect1"&gt;&#10;&lt;h2 id="form-protection"&gt;Form protection&lt;/h2&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;[&lt;code&gt;examples/turnstile/routes.json&lt;/code&gt;](/examples/turnstile/routes.json)&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="listingblock"&gt;&#10;&lt;div class="content"&gt;&#10;&lt;pre class="highlight"&gt;&lt;code class="language-json" data-lang="json"&gt;{&#10; &amp;#34;turnstile&amp;#34;: {&#10; &amp;#34;siteKey&amp;#34;: &amp;#34;1x00000000000000000000AA&amp;#34;,&#10; &amp;#34;secretEnv&amp;#34;: &amp;#34;TURNSTILE_SECRET&amp;#34;,&#10; &amp;#34;paths&amp;#34;: [&amp;#34;/contact/*&amp;#34;],&#10; &amp;#34;forms&amp;#34;: [&amp;#34;form#contact&amp;#34;]&#10; },&#10; &amp;#34;authProvider&amp;#34;: {&#10; &amp;#34;type&amp;#34;: &amp;#34;dev&amp;#34;,&#10; &amp;#34;loginBaseUrl&amp;#34;: &amp;#34;http://login.demo.localhost:3000&amp;#34;,&#10; &amp;#34;cookieDomain&amp;#34;: &amp;#34;demo.localhost&amp;#34;&#10; },&#10; &amp;#34;routes&amp;#34;: [{&#10; &amp;#34;host&amp;#34;: &amp;#34;app.demo.localhost&amp;#34;, &amp;#34;path&amp;#34;: &amp;#34;/*&amp;#34;, &amp;#34;frontend&amp;#34;: true,&#10; &amp;#34;backend&amp;#34;: &amp;#34;http://127.0.0.1:8080&amp;#34;&#10; }]&#10;}&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item></channel></rss>