<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>pksunkara</title>
    <subtitle>My personal blog</subtitle>
    <link rel="self" type="application/atom+xml" href="https://pksunkara.com/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://pksunkara.com"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-02-08T19:09:42+05:30</updated>
    <id>https://pksunkara.com/atom.xml</id>
    <entry xml:lang="en">
        <title>Jujutsu: Managing workspaces</title>
        <published>2026-02-08T19:09:42+05:30</published>
        <updated>2026-02-08T19:09:42+05:30</updated>
        
        <author>
          <name>
            
              Pavan Sunkara
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pksunkara.com/tech-notes/jujutsu-managing-workspaces/"/>
        <id>https://pksunkara.com/tech-notes/jujutsu-managing-workspaces/</id>
        
        <content type="html" xml:base="https://pksunkara.com/tech-notes/jujutsu-managing-workspaces/">&lt;p&gt;One of my favorite features in &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;jj-vcs&#x2F;jj&quot;&gt;Jujutsu&lt;&#x2F;a&gt; is its native support for workspaces (similar to &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;git-scm.com&#x2F;&quot;&gt;Git&lt;&#x2F;a&gt; worktrees). They let you have multiple working copies of the same repo, which is super handy for running tests in the background while you keep coding, or for juggling multiple features without constantly switching contexts.&lt;&#x2F;p&gt;
&lt;p&gt;While the built-in &lt;code&gt;jj workspace&lt;&#x2F;code&gt; commands are great, they can be a bit verbose. I use a few simple conventions and aliases to speed things up and make my workflow smoother.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Your repository must have been initialized with &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;jj-vcs&#x2F;jj&quot;&gt;Jujutsu&lt;&#x2F;a&gt; version &lt;strong&gt;0.38.0&lt;&#x2F;strong&gt; or later. Older repositories will not have the necessary workspace metadata for the &lt;strong&gt;default&lt;&#x2F;strong&gt; workspace.&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h4 id=&quot;creating-a-workspace&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#creating-a-workspace&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Creating a workspace&lt;&#x2F;h4&gt;
&lt;p&gt;This usually requires specifying a name and a path. I prefer a convention where my secondary workspaces are siblings of my default workspace directory, named with a suffix. Assuming your &lt;strong&gt;default&lt;&#x2F;strong&gt; workspace is at &lt;code&gt;~&#x2F;project&lt;&#x2F;code&gt;, I prefer the new workspace named &lt;code&gt;foo&lt;&#x2F;code&gt; to be at &lt;code&gt;~&#x2F;project.foo&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; Get the path of the default workspace&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;repo_dir&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #56B6C2);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;$(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;jj&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; workspace&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; root&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;-name&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; default&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; Create the new workspace at the same level with a suffix&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;jj&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; workspace&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; add&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;-name&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; foo&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt; $&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;repo_dir&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;.foo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;To simplify this, you can define a Jujutsu alias in &lt;code&gt;~&#x2F;.config&#x2F;jj&#x2F;config.toml&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;toml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;aliases&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;wa&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;util&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;exec&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;--&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;bash&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;-c&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;jj workspace add --name $0 $(jj workspace root --name default).$0&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Then, you can simply run:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;jj&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; wa&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; foo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h4 id=&quot;switching-between-workspaces&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#switching-between-workspaces&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Switching between workspaces&lt;&#x2F;h4&gt;
&lt;p&gt;If you have several active workspaces, it can be hard to remember their names or paths.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; List all workspaces to find the one you want to switch to&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;jj&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; workspace&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; list&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; Get the path of the workspace&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;ws_dir&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #56B6C2);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;$(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;jj&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; workspace&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; root&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;-name&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; foo&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; Change directory to the workspace&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;cd&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt; $&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;ws_dir&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;You can combine the above with &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;junegunn&#x2F;fzf&quot;&gt;fzf&lt;&#x2F;a&gt; to interactively select a workspace from the list.&lt;&#x2F;p&gt;
&lt;p&gt;To simplify this, you can define a Jujutsu alias in &lt;code&gt;~&#x2F;.config&#x2F;jj&#x2F;config.toml&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;toml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;aliases&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;wo&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;util&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;exec&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;--&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;bash&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;-c&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;jj workspace root --name $(jj workspace list | fzf | cut -d&amp;quot;:&amp;quot; -f1)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Then, you can explore and switch workspaces with a single command:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;cd&lt;&#x2F;span&gt;&lt;span&gt; $(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;jj&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; wo&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h4 id=&quot;deleting-a-workspace&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#deleting-a-workspace&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Deleting a workspace&lt;&#x2F;h4&gt;
&lt;p&gt;When you&#x27;re done with a workspace, &lt;code&gt;jj workspace forget&lt;&#x2F;code&gt; stops tracking it in the repository. However, it leaves the files on disk. To clean up, you can combine it with &lt;code&gt;rm -rf&lt;&#x2F;code&gt; to delete the workspace directory.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; Forget the workspace&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;jj&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; workspace&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; forget&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;-name&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; foo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; Get the path of the default workspace&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;repo_dir&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #56B6C2);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;$(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;jj&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; workspace&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; root&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;-name&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; default&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; Remove the workspace directory&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;rm&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;rf&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt; $&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;repo_dir&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;.foo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;To simplify this, you can define a Jujutsu alias in &lt;code&gt;~&#x2F;.config&#x2F;jj&#x2F;config.toml&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;toml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;aliases&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;wff&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;util&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;exec&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;--&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;bash&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;-c&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;jj workspace forget $0 &amp;amp;&amp;amp; rm -rf $(jj workspace root --name default).$0&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Then, you can simply run:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;jj&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; wff&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; foo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h4 id=&quot;conclusion&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#conclusion&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Conclusion&lt;&#x2F;h4&gt;
&lt;p&gt;Using a simple naming convention coupled with these aliases makes workspaces feel like a natural part of my workflow, not a chore. It lets me switch tasks instantly, helping me stay focused while keeping my work organized.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve been using this approach with my &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;gist.github.com&#x2F;pksunkara&#x2F;622bc04242d402c4e43c7328234fd01c&quot;&gt;jj aliases&lt;&#x2F;a&gt; for a while, and it works great!&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;1&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;1&lt;&#x2F;sup&gt;
&lt;p&gt;I am the one who contributed that to &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;jj-vcs&#x2F;jj&quot;&gt;Jujutsu&lt;&#x2F;a&gt; in &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;jj-vcs&#x2F;jj&#x2F;pull&#x2F;6858&quot;&gt;#6858&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Jujutsu: Keeping a file untracked</title>
        <published>2026-01-25T17:46:03+05:30</published>
        <updated>2026-01-25T17:46:03+05:30</updated>
        
        <author>
          <name>
            
              Pavan Sunkara
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pksunkara.com/tech-notes/jujutsu-keeping-a-file-untracked/"/>
        <id>https://pksunkara.com/tech-notes/jujutsu-keeping-a-file-untracked/</id>
        
        <content type="html" xml:base="https://pksunkara.com/tech-notes/jujutsu-keeping-a-file-untracked/">&lt;p&gt;Coming from &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;git-scm.com&quot;&gt;Git&lt;&#x2F;a&gt;, I am used to a workflow where I can create a file in my repository &lt;em&gt;(maybe a temporary script, or a local configuration file)&lt;&#x2F;em&gt; and just never &lt;code&gt;git add&lt;&#x2F;code&gt; it. It sits there, listed as untracked in &lt;code&gt;git status&lt;&#x2F;code&gt;, invisible to my commits but available for my use. I never needed to add it to &lt;code&gt;.gitignore&lt;&#x2F;code&gt; since I simply never staged it.&lt;&#x2F;p&gt;
&lt;p&gt;When I started using &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;jj-vcs&#x2F;jj&quot;&gt;Jujutsu&lt;&#x2F;a&gt;, I ran into a small friction point with this habit. Jujutsu is designed to be more automatic than Git. By default, it automatically tracks all files in your working copy that aren&#x27;t ignored by &lt;code&gt;.gitignore&lt;&#x2F;code&gt;. This means as soon as I create that temporary file, it will be included in the next snapshot, and &lt;code&gt;jj status&lt;&#x2F;code&gt; shows it as added.&lt;&#x2F;p&gt;
&lt;p&gt;This behavior is controlled by the &lt;code&gt;snapshot.auto-track&lt;&#x2F;code&gt; configuration setting. You can customize this setting using &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.jj-vcs.dev&#x2F;latest&#x2F;filesets&#x2F;#file-patterns&quot;&gt;file patterns&lt;&#x2F;a&gt; to exclude specific files. For example, to keep a file named &lt;code&gt;foo.txt&lt;&#x2F;code&gt; untracked, you can run:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;jj&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; config&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; set&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;-repo&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; snapshot.auto-track&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;all() &amp;amp; ~foo.txt&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; Run the following if the file has already been snapshotted&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;jj&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; file&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; untrack&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; foo.txt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;You can still manually track it later if needed using &lt;code&gt;jj file track foo.txt&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;To untrack additional files later, you can append a new pattern to the existing configuration:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;jj&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; config&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; set&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;-repo&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; snapshot.auto-track&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;jj&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; config&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; get&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; snapshot.auto-track&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;amp; ~bar.txt&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;If this is too much to type every time, you can define a Jujutsu alias in &lt;code&gt;~&#x2F;.config&#x2F;jj&#x2F;config.toml&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;toml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;aliases&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;ignore&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;util&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;exec&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;--&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;bash&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;-c&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;jj config set --repo snapshot.auto-track &amp;quot;$(jj config get snapshot.auto-track) &amp;amp; ~$0&amp;quot; &amp;amp;&amp;amp; jj file untrack $0&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Then, simply run:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;jj&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; ignore&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; foo.txt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;jj&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; ignore&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; bar.txt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;I&#x27;ve been using this approach with my &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;gist.github.com&#x2F;pksunkara&#x2F;622bc04242d402c4e43c7328234fd01c&quot;&gt;jj aliases&lt;&#x2F;a&gt; for a while, and it works great!&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>AI recruiters: faster, cheaper, and still clueless</title>
        <published>2026-01-22T00:00:00+05:30</published>
        <updated>2026-01-22T00:00:00+05:30</updated>
        
        <author>
          <name>
            
              Pavan Sunkara
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pksunkara.com/thoughts/ai-recruiters-faster-cheaper-and-still-clueless/"/>
        <id>https://pksunkara.com/thoughts/ai-recruiters-faster-cheaper-and-still-clueless/</id>
        
        <content type="html" xml:base="https://pksunkara.com/thoughts/ai-recruiters-faster-cheaper-and-still-clueless/">&lt;p&gt;Remember the days when you&#x27;d open your inbox to find a &lt;em&gt;thrilling opportunity&lt;&#x2F;em&gt; for a Senior Java Developer role. You&#x27;d blink, look at your GitHub profile filled with Rust &amp;amp; JavaScript, and wonder if they even read your name, let alone your history. It was the classic &quot;&lt;strong&gt;wrong stack&lt;&#x2F;strong&gt;&quot; email. Or maybe you got the &lt;strong&gt;time-traveler&lt;&#x2F;strong&gt; special: a recruiter demanding 10 years of Kubernetes experience in 2018. We laughed about them, deleted them, and moved on.&lt;&#x2F;p&gt;
&lt;p&gt;Now? We&#x27;ve pivoted to &lt;em&gt;hyper-personalized, AI-powered recruitment efficiency&lt;&#x2F;em&gt;.&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;p&gt;On the surface, sure, it looks different. The emails are shinier. They mention your experience at your last three jobs, reference a couple of obscure repos you pushed to years ago, and even summarize that one blog post you wrote. The tone is conversational, almost human. It feels personal.&lt;&#x2F;p&gt;
&lt;p&gt;But then you keep reading, and that familiar disconnect kicks in.&lt;&#x2F;p&gt;
&lt;p&gt;The AI might have correctly spotted that you know Rust, but it&#x27;s pitching a role needing five years in some niche embedded framework you touched once for a weekend hack. Or it praises your &quot;deep understanding of frontend architecture&quot; because you have a few commits in a React project, only to suggest a backend-heavy position where you&#x27;ll never touch the UI.&lt;&#x2F;p&gt;
&lt;p&gt;The tech has changed, but the problem hasn&#x27;t. It&#x27;s still &lt;strong&gt;spray-and-pray&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;AI recruiting emails are really just &quot;wrong stack&quot; emails with a fresh coat of paint and better grammar. Instead of a recruiter manually (and badly) keyword-matching, we have an LLM doing &quot;semantic matching.&quot; It&#x27;s just as shallow because it still has zero clue what you actually &lt;em&gt;enjoy&lt;&#x2F;em&gt; or &lt;em&gt;want&lt;&#x2F;em&gt; to do next.&lt;&#x2F;p&gt;
&lt;p&gt;At least the old &quot;wrong stack&quot; emails were honest in their laziness. You knew where you stood. AI emails are trickier because they mimic genuine interest. They waste more of your time because you actually have to read a bit of them to realize they&#x27;re still missing the point.&lt;&#x2F;p&gt;
&lt;p&gt;Handing this off to an LLM isn&#x27;t &lt;em&gt;optimizing talent acquisition&lt;&#x2F;em&gt;.&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; It&#x27;s just automating the process of annoying us.&lt;&#x2F;p&gt;
&lt;p&gt;Real recruiting isn&#x27;t a regex match. It&#x27;s a relationship. You can&#x27;t prompt-engineer a genuine connection. The best recruiters know that just because I &lt;em&gt;can&lt;&#x2F;em&gt; write Python doesn&#x27;t mean I &lt;em&gt;want&lt;&#x2F;em&gt; to spend my next three years maintaining a legacy Django monolith. They get the vibe. They actually talk to you.&lt;&#x2F;p&gt;
&lt;p&gt;So yeah, the volume is up and the emails are politer. But until recruiters start acting like humans again, the signal is buried under a mountain of &lt;strong&gt;fake empathy&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;1&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;1&lt;&#x2F;sup&gt;
&lt;p&gt;Did that sound buzzworthy enough? I had an LLM generate this part for maximum engagement.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Git experts should try Jujutsu</title>
        <published>2025-07-03T00:00:00+01:00</published>
        <updated>2025-07-03T00:00:00+01:00</updated>
        
        <author>
          <name>
            
              Pavan Sunkara
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pksunkara.com/thoughts/git-experts-should-try-jujutsu/"/>
        <id>https://pksunkara.com/thoughts/git-experts-should-try-jujutsu/</id>
        
        <content type="html" xml:base="https://pksunkara.com/thoughts/git-experts-should-try-jujutsu/">&lt;p&gt;I&#x27;ve been a &lt;strong&gt;Git&lt;&#x2F;strong&gt; command-line power user for a long time. For me, Git isn&#x27;t just a tool for pulling and pushing code. It&#x27;s a finely-tuned instrument for crafting history. I&#x27;m the person who will meticulously clean up my commit history before submitting a pull request. My toolkit is full of commands like &lt;code&gt;git rebase -i&lt;&#x2F;code&gt;, &lt;code&gt;git add -i&lt;&#x2F;code&gt;, &lt;code&gt;git commit --fixup&lt;&#x2F;code&gt;, and &lt;code&gt;git reset --hard&lt;&#x2F;code&gt;. I can reorder, squash, and reword commits in my sleep. If something goes wrong, I know how to use the &lt;code&gt;reflog&lt;&#x2F;code&gt; to get myself out of any mess. I don&#x27;t just use Git, I speak it fluently. I even have &lt;em&gt;many many&lt;&#x2F;em&gt; custom &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;gist.github.com&#x2F;pksunkara&#x2F;988716&quot;&gt;git aliases&lt;&#x2F;a&gt; to make my workflow faster.&lt;&#x2F;p&gt;
&lt;p&gt;So when I first heard about &lt;strong&gt;Jujutsu&lt;&#x2F;strong&gt;, I was skeptical. The main selling point I saw was that it was much simpler than Git. It felt like a tool designed to shield beginners from Git&#x27;s sharp edges, not something for a seasoned expert like me.&lt;&#x2F;p&gt;
&lt;p&gt;I gave the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;steveklabnik.github.io&#x2F;jujutsu-tutorial&quot;&gt;tutorial&lt;&#x2F;a&gt; a quick look, but it didn&#x27;t showcase any real benefits for my workflow. It confirmed my bias: this was for people who were afraid of Git&#x27;s power, not for those who had already mastered it.&lt;&#x2F;p&gt;
&lt;p&gt;But the idea lingered. On a whim, I decided to install it on my work machine and used it on a complex project. That&#x27;s when everything changed. I discovered that Jujutsu wasn&#x27;t about &lt;em&gt;avoiding&lt;&#x2F;em&gt; history manipulation. It was about making it faster, easier, and more intuitive than I ever thought possible. It took the concepts I had mastered in Git and gave them a superior interface.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;comparison&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#comparison&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    20
  
&quot;
    height=&quot;
  
    20
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Comparison&lt;&#x2F;h2&gt;
&lt;p&gt;Here are a few examples of how Jujutsu streamlined tasks that were already second nature to me in Git.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;editing-an-old-commit&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#editing-an-old-commit&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    18
  
&quot;
    height=&quot;
  
    18
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Editing an old commit&lt;&#x2F;h3&gt;
&lt;p&gt;This is a classic scenario. You&#x27;ve spotted a typo or a small bug in a commit from five changes ago.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;In Git:&lt;&#x2F;strong&gt;
You start an interactive rebase, find the commit, mark it for editing, make your changes, amend the commit, and finally, continue the rebase.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; Start the interactive rebase&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; rebase&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;i&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; HEAD~5&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; And mark the commit you want to edit&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; Make your code changes&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;vim&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; lib&#x2F;edit.ts&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; Amend the commit&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; add&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; .&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; commit&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;-amend&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; Finish the rebase&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; rebase&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;-continue&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;In Jujutsu:&lt;&#x2F;strong&gt;
You simply tell it which change you want to edit. It checks it out, you make your changes, and you&#x27;re done. Jujutsu handles the rebase automatically in the background.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; Edit the change directly&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;jj&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; edit&lt;&#x2F;span&gt;&lt;span&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;change-i&lt;&#x2F;span&gt;&lt;span&gt;d&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; Make your code changes...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;vim&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; lib&#x2F;edit.ts&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;There&#x27;s no interactive editor, no &lt;code&gt;--continue&lt;&#x2F;code&gt; step. It&#x27;s direct and to the point.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;splitting-a-commit&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#splitting-a-commit&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    18
  
&quot;
    height=&quot;
  
    18
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Splitting a commit&lt;&#x2F;h3&gt;
&lt;p&gt;You&#x27;ve just realized you bundled two unrelated changes into a single commit.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;In Git:&lt;&#x2F;strong&gt;
This requires another interactive rebase, mark it for editing, reset it to unstage the changes, and then carefully using &lt;code&gt;git add -p&lt;&#x2F;code&gt; to rebuild the commits piece by piece.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; Start the interactive rebase&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; rebase&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;i&lt;&#x2F;span&gt;&lt;span&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;commi&lt;&#x2F;span&gt;&lt;span&gt;t&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;^&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; And mark the commit you want to edit&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; Reset the commit but keep the changes in the working directory&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; reset&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; HEAD^&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; Interactively add the first set of changes&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; add&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;p&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; commit&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;m&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;First part&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; Add the remaining changes&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; add&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; .&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; commit&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;m&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;Second part&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; Finish the rebase&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; rebase&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;-continue&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;In Jujutsu:&lt;&#x2F;strong&gt;
A single command initiates an interactive diff editor, allowing you to decide what to keep in the original commit and what to move to a new one.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;jj&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; split&lt;&#x2F;span&gt;&lt;span&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;change-i&lt;&#x2F;span&gt;&lt;span&gt;d&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; This creates two new commits. You can then use `jj describe` to edit the commit messages.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This is far more intuitive and significantly faster.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;creating-a-quick-pr&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#creating-a-quick-pr&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    18
  
&quot;
    height=&quot;
  
    18
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Creating a quick PR&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;In Git:&lt;&#x2F;strong&gt;
The standard procedure is to create a branch, commit your changes, push that branch, and then open a pull request on your hosting platform.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; Create a new branch&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; checkout&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; my-feature-branch&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; Make your changes&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;vim&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; lib&#x2F;edit.ts&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; Stage and commit your changes&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; add&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; .&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; commit&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;m&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;My feature&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; Push the branch to the remote&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; push&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; origin&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; my-feature-branch&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; Create a pull request&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;gh&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; pr&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; create&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;In Jujutsu:&lt;&#x2F;strong&gt;
You can push your current change directly to the remote, which Jujutsu will place on a new branch for you. No need to manage local branches.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; Start a new change&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;jj&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; new&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;m&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;My feature&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; Make your changes&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;vim&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; lib&#x2F;edit.ts&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; Push the change to the remote&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;jj&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; git&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; push&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;-change&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; @&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; Create a pull request&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;gh&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; pr&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; create&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;-head&lt;&#x2F;span&gt;&lt;span&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;created-bookmark-nam&lt;&#x2F;span&gt;&lt;span&gt;e&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;conclusion&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#conclusion&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    20
  
&quot;
    height=&quot;
  
    20
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Conclusion&lt;&#x2F;h2&gt;
&lt;p&gt;After years of honing my Git skills, I thought I had reached peak efficiency. Jujutsu proved me wrong. It&#x27;s not a replacement for understanding how version control works. It&#x27;s a force multiplier for those who already do. Jujutsu automates the tedious mechanics of history editing, letting you focus on the &lt;em&gt;what&lt;&#x2F;em&gt; instead of the &lt;em&gt;how&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;re a Git expert who prides yourself on your ability to manipulate history, I urge you to give Jujutsu a serious try on a real project. You might just find that your favorite power tools have been upgraded.&lt;&#x2F;p&gt;
&lt;p&gt;And yes, I&#x27;ve already started a new list of &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;gist.github.com&#x2F;pksunkara&#x2F;622bc04242d402c4e43c7328234fd01c&quot;&gt;jj aliases&lt;&#x2F;a&gt; to make my workflow even faster.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>3 types of coding in the AI era</title>
        <published>2025-05-08T00:00:00+05:30</published>
        <updated>2025-05-08T00:00:00+05:30</updated>
        
        <author>
          <name>
            
              Pavan Sunkara
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pksunkara.com/thoughts/3-types-of-coding-in-the-ai-era/"/>
        <id>https://pksunkara.com/thoughts/3-types-of-coding-in-the-ai-era/</id>
        
        <content type="html" xml:base="https://pksunkara.com/thoughts/3-types-of-coding-in-the-ai-era/">&lt;p&gt;LLMs have landed, and &quot;coding&quot; has split. Here’s the lowdown:&lt;&#x2F;p&gt;
&lt;h2 id=&quot;vibe-coding&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#vibe-coding&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    20
  
&quot;
    height=&quot;
  
    20
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Vibe Coding&lt;&#x2F;h2&gt;
&lt;p&gt;You&#x27;ve heard of it. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;karpathy&#x2F;status&#x2F;1886192184808149383&quot;&gt;Andrej Karpathy named it&lt;&#x2F;a&gt;, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;simonwillison.net&#x2F;2025&#x2F;Mar&#x2F;19&#x2F;vibe-coding&#x2F;&quot;&gt;Simon Willison explained it&lt;&#x2F;a&gt;. Basically, you tell an AI what you want, it writes the code.&lt;&#x2F;p&gt;
&lt;p&gt;Probably used by:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Beginners &amp;amp; no-coders.&lt;&#x2F;li&gt;
&lt;li&gt;Anyone on quick or throwaway projects.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;blockquote&gt;
&lt;p&gt;If a colleague reviews the code in a GitHub PR, is it still vibe-coded? I&#x27;d say &lt;strong&gt;no&lt;&#x2F;strong&gt;, it&#x27;s moved beyond just a vibe at that point. What do you think?&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;artisanal-coding&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#artisanal-coding&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    20
  
&quot;
    height=&quot;
  
    20
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Artisanal Coding&lt;&#x2F;h2&gt;
&lt;p&gt;The old-school way: writing code by hand. Maybe with help from deterministic tools like &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Language_Server_Protocol&quot;&gt;LSP&lt;&#x2F;a&gt;s, linters or generators. It&#x27;s you meticulously building it.&lt;&#x2F;p&gt;
&lt;p&gt;Probably used by:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Beginners learning the ropes.&lt;&#x2F;li&gt;
&lt;li&gt;Coding purists and enthusiasts who love the craft.&lt;&#x2F;li&gt;
&lt;li&gt;Projects needing high precision or security.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;neo-coding&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#neo-coding&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    20
  
&quot;
    height=&quot;
  
    20
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Neo Coding&lt;&#x2F;h2&gt;
&lt;p&gt;The sweet spot. You code, but LLMs help with autocompletions and generation via chat or local agents.&lt;&#x2F;p&gt;
&lt;p&gt;You&#x27;re still designing, reviewing, and debugging, but faster. Think a carpenter with a nail gun: still skilled, still in charge, just way more efficient. You&#x27;re using AI as a power tool, not handing over the reins.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Would this be the new &quot;coding&quot;?&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>State of routing in Rust</title>
        <published>2020-05-17T00:00:00+02:00</published>
        <updated>2020-05-17T00:00:00+02:00</updated>
        
        <author>
          <name>
            
              Pavan Sunkara
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pksunkara.com/thoughts/state-of-routing-in-rust/"/>
        <id>https://pksunkara.com/thoughts/state-of-routing-in-rust/</id>
        
        <content type="html" xml:base="https://pksunkara.com/thoughts/state-of-routing-in-rust/">&lt;p&gt;There are many micro frameworks in Rust. Some famous examples are &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;actix.rs&quot;&gt;Actix&lt;&#x2F;a&gt;, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;gotham.rs&quot;&gt;Gotham&lt;&#x2F;a&gt;, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;tide&quot;&gt;Tide&lt;&#x2F;a&gt;, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;warp&quot;&gt;Warp&lt;&#x2F;a&gt;,
etc. We have seen many blog posts comparing their performances and middleware capabilities.
But what we haven&#x27;t seen is an article comparing their routing functionality and capabilities. I hoped to
fill that gap and make this post the most up to date guide for the state of routing in Rust.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;NOTE&lt;&#x2F;strong&gt;: I will not be comparing &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;rocket.rs&quot;&gt;Rocket&lt;&#x2F;a&gt; because it does not run on &lt;em&gt;Stable&lt;&#x2F;em&gt; yet.&lt;&#x2F;p&gt;
&lt;p&gt;We have a lot of mature web frameworks like &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;rubyonrails.org&quot;&gt;Rails&lt;&#x2F;a&gt;, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;djangoproject.com&quot;&gt;Django&lt;&#x2F;a&gt;, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;laravel.com&quot;&gt;Laravel&lt;&#x2F;a&gt;, etc..
that have been working on solving the routing problem and dealing with the typical use cases from web
developers. Let us define the baseline using these frameworks and compare the Rust web micro frameworks to
this baseline.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Rails &lt;code&gt;v6.0&lt;&#x2F;code&gt;, Django &lt;code&gt;v3.0&lt;&#x2F;code&gt;, Laravel &lt;code&gt;v7.6&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Actix &lt;code&gt;v3.0.0-alpha.2&lt;&#x2F;code&gt;, Gotham &lt;code&gt;v0.5.0-rc.1&lt;&#x2F;code&gt;, Tide &lt;code&gt;v0.8.1&lt;&#x2F;code&gt;, Warp &lt;code&gt;v0.2.2&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;restricting-methods&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#restricting-methods&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    20
  
&quot;
    height=&quot;
  
    20
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Restricting Methods&lt;&#x2F;h2&gt;
&lt;p&gt;Let us start the comparison with trivial stuff. Simplest use case is to restrict some of the routes to
only a few HTTP methods. There might be a shorthand syntax if only one HTTP method is allowed. The route
should return &lt;strong&gt;405&lt;&#x2F;strong&gt; HTTP status code if the none of the allowed HTTP methods are used.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;rails&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#rails&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Rails&lt;&#x2F;h4&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;match &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;orgs&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #56B6C2);&quot;&gt; to&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;orgs#create&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #56B6C2);&quot;&gt; via&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #56B6C2);&quot;&gt;post&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; :&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #56B6C2);&quot;&gt;put&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;!-- returns 404 instead of 405 --&gt;
&lt;h4 id=&quot;django&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#django&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Django&lt;&#x2F;h4&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#383A42, #61AFEF);&quot;&gt;path&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;orgs&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span&gt; views&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span&gt;orgs&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span&gt;create&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;@&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;require_http_methods&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;POST&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;PUT&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt; create&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;request&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;    pass&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h4 id=&quot;laravel&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#laravel&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Laravel&lt;&#x2F;h4&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;php&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#383A42, #56B6C2);&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #C678DD);&quot;&gt;?&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;php&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C18401, #E5C07B);&quot;&gt;Route&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;match&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;post&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;put&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;orgs&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;OrgsController@create&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h4 id=&quot;actix&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#actix&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Actix&lt;&#x2F;h4&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;app&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;service&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;    resource&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;orgs&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        .&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;route&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;post&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;orgs&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;create&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        .&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;route&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;put&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;orgs&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;create&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Cons&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;This does not return &lt;strong&gt;405&lt;&#x2F;strong&gt; but instead returns &lt;strong&gt;404&lt;&#x2F;strong&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;There is no shorter way to specify multiple allowed methods on the same route for the same handler.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;tide&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#tide&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Tide&lt;&#x2F;h4&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;app&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;at&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;orgs&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;post&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;orgs&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;create&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;put&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;orgs&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;create&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Cons&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;There is no shorter way to specify multiple allowed methods on the same route for the same handler.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;warp&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#warp&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Warp&lt;&#x2F;h4&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;path!&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;orgs&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;and&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;post&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;or&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;put&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;unify&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;and_then&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;orgs&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;create&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h4 id=&quot;gotham&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#gotham&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Gotham&lt;&#x2F;h4&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;route&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;request&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;vec!&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;POST&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; PUT&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;orgs&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;orgs&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;create&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;path-parameters&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#path-parameters&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    20
  
&quot;
    height=&quot;
  
    20
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Path parameters&lt;&#x2F;h2&gt;
&lt;p&gt;One of the first non-simplistic use case any web developer would look for is on how to use path parameters.
The path params can be specified as either &lt;em&gt;required&lt;&#x2F;em&gt; or &lt;em&gt;optional&lt;&#x2F;em&gt;. They should also be able to be specified
in the form of &lt;em&gt;regex patterns&lt;&#x2F;em&gt;. There might be a shorter syntax for &lt;em&gt;glob (tail match)&lt;&#x2F;em&gt; path param.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;rails-1&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#rails-1&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Rails&lt;&#x2F;h4&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; required&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;get &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;orgs&#x2F;:id&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #56B6C2);&quot;&gt; to&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;orgs#show&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; optional&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;get &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;repos(&#x2F;:id)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #56B6C2);&quot;&gt; to&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;repos#show&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; regex&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;get &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;users&#x2F;:id&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #56B6C2);&quot;&gt; to&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;users#show&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #56B6C2);&quot;&gt; id&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E06C75);&quot;&gt; &#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E06C75);&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E06C75);&quot;&gt;a-z&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E06C75);&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E06C75);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E06C75);&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; optional regex&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;get &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;search(&#x2F;:id)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #56B6C2);&quot;&gt; to&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;search#show&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #56B6C2);&quot;&gt; id&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E06C75);&quot;&gt; &#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E06C75);&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E06C75);&quot;&gt;a-z&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E06C75);&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E06C75);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E06C75);&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; glob&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;get &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;blob&#x2F;*path&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #56B6C2);&quot;&gt; to&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;repo_blob#show&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; optional glob&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;get &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;tree(&#x2F;*path)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #56B6C2);&quot;&gt; to&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;repo_tree#show&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; glob in middle&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;get &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;blob&#x2F;*path&#x2F;commits&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #56B6C2);&quot;&gt; to&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;repo_blob#commits&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; optional glob in middle&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;get &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;tree(&#x2F;*path)&#x2F;commits&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #56B6C2);&quot;&gt; to&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;repo_tree#commits&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h4 id=&quot;django-1&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#django-1&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Django&lt;&#x2F;h4&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; required&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#383A42, #61AFEF);&quot;&gt;path&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;orgs&#x2F;&amp;lt;id&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span&gt; views&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span&gt;orgs&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span&gt;show&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; optional&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#383A42, #61AFEF);&quot;&gt;re_path&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;^repos(&#x2F;(?P&amp;lt;id&amp;gt;[^&#x2F;]+))?$&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span&gt; views&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span&gt;repos&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span&gt;show&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; regex&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#383A42, #61AFEF);&quot;&gt;re_path&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;^users&#x2F;(?P&amp;lt;id&amp;gt;[a-z]+)$&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span&gt; views&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span&gt;users&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span&gt;show&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; optional regex&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#383A42, #61AFEF);&quot;&gt;re_path&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;^search(&#x2F;(?P&amp;lt;id&amp;gt;[a-z]+))?$&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span&gt; views&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span&gt;search&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span&gt;show&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; glob&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#383A42, #61AFEF);&quot;&gt;re_path&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;^blob&#x2F;(?P&amp;lt;path&amp;gt;.+)$&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span&gt; views&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span&gt;repo_blob&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span&gt;show&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; optional glob&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#383A42, #61AFEF);&quot;&gt;re_path&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;^tree(&#x2F;(?P&amp;lt;path&amp;gt;.+))?$&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span&gt; views&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span&gt;repo_tree&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span&gt;show&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; glob in middle&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#383A42, #61AFEF);&quot;&gt;re_path&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;^blob&#x2F;(?P&amp;lt;path&amp;gt;.+)&#x2F;commits$&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span&gt; views&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span&gt;repo_blob&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span&gt;commits&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; optional glob in middle&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#383A42, #61AFEF);&quot;&gt;re_path&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;^tree(&#x2F;(?P&amp;lt;path&amp;gt;.+))?&#x2F;commits$&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span&gt; views&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span&gt;repo_tree&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span&gt;commits&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h4 id=&quot;laravel-1&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#laravel-1&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Laravel&lt;&#x2F;h4&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;php&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#383A42, #56B6C2);&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #C678DD);&quot;&gt;?&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;php&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; required&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C18401, #E5C07B);&quot;&gt;Route&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;orgs&#x2F;{id}&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;OrgsController@show&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; optional&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C18401, #E5C07B);&quot;&gt;Route&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;repos&#x2F;{id?}&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;ReposController@show&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; regex&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C18401, #E5C07B);&quot;&gt;Route&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;users&#x2F;{id}&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;UsersController@show&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;where&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;id&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;[a-z]+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; optional regex&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C18401, #E5C07B);&quot;&gt;Route&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;search&#x2F;{id?}&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;SearchController@show&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;where&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;id&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;[a-z]+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; glob&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C18401, #E5C07B);&quot;&gt;Route&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;blob&#x2F;{path}&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;RepoBlobController@show&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;where&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;path&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;.*&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; optional glob&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C18401, #E5C07B);&quot;&gt;Route&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;tree&#x2F;{path?}&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;RepoTreeController@show&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;where&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;path&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;.*&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; glob in middle&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C18401, #E5C07B);&quot;&gt;Route&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;blob&#x2F;{path}&#x2F;commits&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;RepoBlobController@commits&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;where&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;path&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;.*&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; optional glob in middle&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C18401, #E5C07B);&quot;&gt;Route&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;tree&#x2F;{path?}&#x2F;commits&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;RepoTreeController@commits&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;where&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;path&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;.*&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h4 id=&quot;actix-1&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#actix-1&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Actix&lt;&#x2F;h4&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; required&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;app&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;route&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;orgs&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;id&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt; get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;orgs&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;show&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; optional&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;app&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;route&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;repos&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt; get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;repos&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;show&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   .&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;route&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;repos&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;id&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt; get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;repos&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;show&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; regex&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;app&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;route&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;users&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;id:[a-z]+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt; get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;users&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;show&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; optional regex&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;app&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;route&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;search&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt; get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;search&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;show&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   .&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;route&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;search&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;id:[a-z]+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt; get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;search&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;show&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; glob&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;app&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;route&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;blob&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;path:.+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt; get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;repo_blob&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;show&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; optional glob&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;app&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;route&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;tree&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt; get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;repo_tree&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;show&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   .&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;route&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;tree&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;path:.+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt; get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;repo_tree&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;show&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; glob in middle&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;app&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;route&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;blob&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;path:.+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&#x2F;commits&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt; get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;repo_blob&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;commits&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; optional glob in middle&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;app&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;route&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;tree&#x2F;commits&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt; get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;repo_tree&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;commits&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   .&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;route&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;tree&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;path:.+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&#x2F;commits&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt; get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;repo_tree&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;commits&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Cons&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;There is no shorter way to specify optionals. We could have used &lt;code&gt;app.service(resource(..))&lt;&#x2F;code&gt; as mentioned
in &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;actix&#x2F;actix-web&#x2F;issues&#x2F;1054&quot;&gt;#1054&lt;&#x2F;a&gt; but &lt;code&gt;app.service&lt;&#x2F;code&gt; stops matching anything else
if the beginning of the URL matches the route given to it. All following routes which uses one of the
specified routes here as a prefix (with or without &lt;code&gt;&#x2F;&lt;&#x2F;code&gt; after the prefix) doesn&#x27;t work.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;tide-1&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#tide-1&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Tide&lt;&#x2F;h4&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; required&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;app&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;at&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;orgs&#x2F;:id&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;orgs&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;show&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; glob&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;app&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;at&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;blob&#x2F;*path&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;repo_blob&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;show&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; glob in middle&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;app&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;at&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;blob&#x2F;*path&#x2F;commits&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;repo_blob&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;commits&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Cons&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;MAJOR&lt;&#x2F;strong&gt;: Does not support optionals.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;MAJOR&lt;&#x2F;strong&gt;: Does not support regex path param.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;warp-1&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#warp-1&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Warp&lt;&#x2F;h4&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; required&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;path!&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;orgs&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; &#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt; String&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;and&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;and_then&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;orgs&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;show&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; optional&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;path!&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;repos&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;and&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;and_then&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #56B6C2);&quot;&gt;|&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #56B6C2);&quot;&gt;|&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt; repos&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;show&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;Default&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;default&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;path!&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;repos&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; &#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt; String&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;and&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;and_then&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;repos&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;show&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; regex&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;derive&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt;Default&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;struct&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C18401, #E5C07B);&quot;&gt; Id&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt;String&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;impl&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt; FromStr&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt; for&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt; Id&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;    type&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C18401, #E5C07B);&quot;&gt; Err&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #56B6C2);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;    fn&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt; from_str&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;s&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span&gt; &amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C18401, #E5C07B);&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; -&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt; Result&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt;Id&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;        match&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt; Regex&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;new&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;^[a-z]+$&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;is_match&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;s&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;            true&lt;&#x2F;span&gt;&lt;span&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C18401, #E5C07B);&quot;&gt; Ok&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;Id&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;s&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;to_string&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;            _&lt;&#x2F;span&gt;&lt;span&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C18401, #E5C07B);&quot;&gt; Err&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;path!&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;users&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; &#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt; Id&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;and&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;and_then&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;users&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;show&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; optional regex&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;path!&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;search&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;and&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;and_then&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #56B6C2);&quot;&gt;|&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #56B6C2);&quot;&gt;|&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt; search&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;show&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;Id&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;default&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;path!&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;search&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; &#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt; Id&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;and&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;and_then&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;search&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;show&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; optional glob&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;path&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;tree&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;and&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;tail&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;and&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;end&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;and&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;and_then&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;repo_tree&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;show&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Cons&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;MINOR&lt;&#x2F;strong&gt;: Does not support required glob path param.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;MINOR&lt;&#x2F;strong&gt;: Does not support anything after optional glob path param.&lt;&#x2F;li&gt;
&lt;li&gt;There is no shorter way to specify regex path params. Even though types that implement &lt;code&gt;FromStr&lt;&#x2F;code&gt; are able
to be used directly without the need for regex, it would be nice to have a regex filter.&lt;&#x2F;li&gt;
&lt;li&gt;There is not shorter way to specify optionals. They can be made a little bit shorter if not full if we
implement dummy default filters for each param type. I think &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;warp&quot;&gt;Warp&lt;&#x2F;a&gt; in general needs a few dummy filters.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;gotham-1&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#gotham-1&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Gotham&lt;&#x2F;h4&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; required&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;derive&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt;Deserialize&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt; StateData&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt; StaticResponseExtender&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;struct&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C18401, #E5C07B);&quot;&gt; IdExtractor&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;    id&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt; String&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;route&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;orgs&#x2F;:id&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;with_path_extractor&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt;IdExtractor&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;orgs&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;show&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; optional&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;derive&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt;Deserialize&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt; StateData&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt; StaticResponseExtender&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;struct&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C18401, #E5C07B);&quot;&gt; OptIdExtractor&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;    id&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt; Opt&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt;String&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;route&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;repos&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;with_path_extractor&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt;OptIdExtractor&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;repos&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;show&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;route&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;repos&#x2F;:id&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;with_path_extractor&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt;OptIdExtractor&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;repos&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;show&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; regex&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;route&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;users&#x2F;:id:[a-z]+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;with_path_extractor&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt;IdExtractor&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;users&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;show&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; optional regex&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;route&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;search&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;with_path_extractor&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt;OptIdExtractor&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;users&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;show&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;route&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;search&#x2F;:id:[a-z]+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;with_path_extractor&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt;OptIdExtractor&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;users&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;show&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; glob&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;derive&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt;Deserialize&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt; StateData&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt; StaticResponseExtender&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;struct&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C18401, #E5C07B);&quot;&gt; PathExtractor&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;    path&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt; Vec&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt;String&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;route&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;blob&#x2F;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;with_path_extractor&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt;PathExtractor&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;repo_blob&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;show&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; optional glob&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;derive&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt;Deserialize&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt; StateData&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt; StaticResponseExtender&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #ABB2BF);&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;struct&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C18401, #E5C07B);&quot;&gt; OptPathExtractor&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;    path&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt; Option&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt;Vec&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt;String&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;route&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;tree&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;with_path_extractor&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt;OptPathExtractor&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;repo_tree&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;show&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;route&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;tree&#x2F;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;with_path_extractor&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt;OptPathExtractor&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;repo_tree&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;show&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; glob in middle&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;route&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;blob&#x2F;*&#x2F;commits&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;with_path_extractor&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt;PathExtractor&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;repo_blob&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;commits&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; optional glob in middle&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;route&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;tree&#x2F;commits&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;with_path_extractor&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt;OptPathExtractor&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;repo_tree&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;commits&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;route&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;tree&#x2F;*&#x2F;commits&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;with_path_extractor&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt;OptPathExtractor&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;repo_tree&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;commits&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Cons&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;There is no shorter way to specify optionals.&lt;&#x2F;li&gt;
&lt;li&gt;The usage of path params is a little bit more verbose and is thus not easy to use.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;scopes&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#scopes&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    20
  
&quot;
    height=&quot;
  
    20
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Scopes&lt;&#x2F;h2&gt;
&lt;p&gt;As the developers start to build more features into their web app, they will be wanting to use scopes (also
known as &lt;em&gt;prefixes&lt;&#x2F;em&gt;). Most common use case should be supported, a &lt;em&gt;static scope&lt;&#x2F;em&gt; where the prefix is just a
string without any path params. In addition to that, scopes with params anywhere in the prefix should be
supported.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;NOTE&lt;&#x2F;strong&gt;: I have reduced the number of code examples shown below because they can be inferred
from the param examples above and the scope examples shown here. But I have manually tested all
the possible scenarios related to this section.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;rails-2&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#rails-2&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Rails&lt;&#x2F;h4&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; static scope&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;scope &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;pages&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt; do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  get &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;about&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #56B6C2);&quot;&gt; to&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;pages#about&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; optional regex scope&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;scope &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;search(&#x2F;:id)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #56B6C2);&quot;&gt; id&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E06C75);&quot;&gt; &#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E06C75);&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E06C75);&quot;&gt;a-z&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E06C75);&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E06C75);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E06C75);&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt; do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  get &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;advanced&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #56B6C2);&quot;&gt; to&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;search#advanced&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; glob in middle scope&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;scope &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;blob&#x2F;*path&#x2F;commits&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt; do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  get &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;graph&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #56B6C2);&quot;&gt; to&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;repo_blob#graph&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h4 id=&quot;actix-2&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#actix-2&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Actix&lt;&#x2F;h4&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; static scope&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;app&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;service&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;scope&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;pages&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    .&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;route&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&#x2F;about&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt; get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;pages&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;about&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; optional regex scope&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;app&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;service&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;scope&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;search&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    .&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;route&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&#x2F;advanced&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt; get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;search&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;advanced&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    .&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;service&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;scope&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;id&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        .&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;route&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&#x2F;advanced&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt; get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;search&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;advanced&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    )&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; glob in middle scope&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;app&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;service&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;scope&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;blob&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;path:.+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&#x2F;commits&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    .&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;route&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&#x2F;graph&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt; get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;repo_blob&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;graph&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Cons&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;There is no shorter way to specify scopes with optionals needing to duplicate the routes nested inside them.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;MINOR&lt;&#x2F;strong&gt;: Non-empty routes in scopes with globs at the end do not work.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;tide-2&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#tide-2&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Tide&lt;&#x2F;h4&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; static scope&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;app&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;at&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;pages&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;nest&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;    let&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt; mut&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt; app&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #56B6C2);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt; tide&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;new&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;    app&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;at&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;about&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;pages&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;about&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;    app&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; glob in middle scope&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;app&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;at&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;blob&#x2F;*path&#x2F;commits&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;nest&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;    let&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt; mut&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt; app&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #56B6C2);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt; tide&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;new&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;    app&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;at&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;graph&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;repo_blob&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;graph&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;    app&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Cons&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;MAJOR&lt;&#x2F;strong&gt;: Does not support scopes with optionals.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;MAJOR&lt;&#x2F;strong&gt;: Does not support scopes with regex path param.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;warp-2&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#warp-2&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Warp&lt;&#x2F;h4&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; static scope&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;let&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt; scope&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #56B6C2);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt; path&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;pages&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;scope&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;and&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;path!&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;about&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;and&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;and_then&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;pages&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;about&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; optional regex scope&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;let&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt; scope&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #56B6C2);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt; path&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;search&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;scope&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;and&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;path!&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;advanced&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;and&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;and_then&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #56B6C2);&quot;&gt;|&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #56B6C2);&quot;&gt;|&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt; pages&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;about&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;Id&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;default&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;scope&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;and&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;path!&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt;Id&lt;&#x2F;span&gt;&lt;span&gt; &#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;advanced&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;and&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;and_then&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;pages&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;about&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Cons&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;MINOR&lt;&#x2F;strong&gt;: Does not support scopes with required glob path param.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;MINOR&lt;&#x2F;strong&gt;: Does not support scopes with anything after optional glob path param.&lt;&#x2F;li&gt;
&lt;li&gt;There is no shorter way to specify scopes with optionals needing to duplicate the routes nested inside them.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;gotham-2&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#gotham-2&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Gotham&lt;&#x2F;h4&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; static scope&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;route&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;scope&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;pages&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #56B6C2);&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;route&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #56B6C2);&quot;&gt;|&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;    route&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;about&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;pages&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;about&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; optional regex scope&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;route&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;scope&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;search&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #56B6C2);&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;route&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #56B6C2);&quot;&gt;|&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;    route&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;advanced&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;with_path_extractor&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt;OptIdExtractor&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;search&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;advanced&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;route&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;scope&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;search&#x2F;:id:[0-9]+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #56B6C2);&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;route&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #56B6C2);&quot;&gt;|&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;    route&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;advanced&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;with_path_extractor&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt;OptIdExtractor&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;search&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;advanced&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; glob in middle scope&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;route&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;scope&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;blob&#x2F;*&#x2F;commits&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #56B6C2);&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;route&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #56B6C2);&quot;&gt;|&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;    route&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;graph&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;with_path_extractor&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #E5C07B);&quot;&gt;PathExtractor&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;repo_blob&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;graph&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Cons&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;There is no shorter way to specify scopes with optionals needing to duplicate the routes nested inside them.&lt;&#x2F;li&gt;
&lt;li&gt;The verbosity of defining params we saw in the above sections really starts to get in the way here. Scopes
do not accept path extractors which means all the routes inside them need to define their own extractors.
And if the routes themselves have params, you would need to define more custom extractors.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;nested-scopes&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#nested-scopes&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    20
  
&quot;
    height=&quot;
  
    20
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Nested Scopes&lt;&#x2F;h2&gt;
&lt;p&gt;For the next use case we will be talking about is nested scopes. Most web applications would
have complicated relationships between their data resources and end up using nested scopes to convey them.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;NOTE&lt;&#x2F;strong&gt;: We have already seen most of the relevant code for this in the above section.&lt;&#x2F;p&gt;
&lt;p&gt;All the frameworks worked as expected except for the problems already described in the above sections.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;sibling-scopes&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#sibling-scopes&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    20
  
&quot;
    height=&quot;
  
    20
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Sibling Scopes&lt;&#x2F;h2&gt;
&lt;p&gt;Now, let us talk about the final but important use case, &lt;em&gt;Sibling Scopes&lt;&#x2F;em&gt;. When there are two scopes side by
side and they each have a route inside them that resolve to the same uri, the framework should resolve the
ambiguity by giving priority to the routes defined in either ascending or descending order.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;NOTE&lt;&#x2F;strong&gt;: The code example given below might seem nonsensical but I chose it because it conveys the above
mentioned ambiguity in a simpler perspective.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;rails-3&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#rails-3&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Rails&lt;&#x2F;h4&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;scope &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;foo&#x2F;higher&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt; do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  get &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #56B6C2);&quot;&gt; to&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;photos#foo_higher&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;scope &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;foo&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt; do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  get &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;higher&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #56B6C2);&quot;&gt; to&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;photos#foo_common_higher&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  get &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;lower&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #56B6C2);&quot;&gt; to&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;photos#foo_common_lower&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;scope &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;foo&#x2F;lower&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt; do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  get &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #56B6C2);&quot;&gt; to&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;photos#foo_lower&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;When &lt;code&gt;&#x2F;foo&#x2F;higher&lt;&#x2F;code&gt; and &lt;code&gt;&#x2F;foo&#x2F;lower&lt;&#x2F;code&gt; is called in the below scenario, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;rubyonrails.org&quot;&gt;Rails&lt;&#x2F;a&gt; responds with the action
&lt;code&gt;foo_higher&lt;&#x2F;code&gt; and &lt;code&gt;foo_common_lower&lt;&#x2F;code&gt; respectively. As you can see, the routes defined at the top have higher
priority. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;djangoproject.com&quot;&gt;Django&lt;&#x2F;a&gt; follows the same behaviour while &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;laravel.com&quot;&gt;Laravel&lt;&#x2F;a&gt; gives priority to the routes defined at
the bottom.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;rust&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#rust&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Rust&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;actix.rs&quot;&gt;Actix&lt;&#x2F;a&gt;, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;warp&quot;&gt;Warp&lt;&#x2F;a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;gotham.rs&quot;&gt;Gotham&lt;&#x2F;a&gt; follow the rule by giving priority to the routes defined at the top&lt;&#x2F;p&gt;
&lt;h4 id=&quot;tide-3&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#tide-3&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Tide&lt;&#x2F;h4&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;app&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;at&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;foo&#x2F;higher&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;nest&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;    let&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt; mut&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt; app&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #56B6C2);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt; tide&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;new&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;    app&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;at&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;foo&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;higher&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;    app&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;app&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;at&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;foo&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;nest&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;    let&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt; mut&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt; app&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #56B6C2);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt; tide&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;new&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;    app&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;at&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;higher&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;foo&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;common_higher&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;    app&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;at&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;lower&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;foo&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;common_lower&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;    app&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;app&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;at&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;foo&#x2F;lower&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;nest&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;    let&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt; mut&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt; app&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #56B6C2);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt; tide&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;new&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;    app&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;at&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;foo&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;lower&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;    app&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Cons&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;MINOR&lt;&#x2F;strong&gt;: It seems to always go into the scope which matches the highest number of path segments. It
responds with &lt;code&gt;foo::higher&lt;&#x2F;code&gt; for &lt;code&gt;&#x2F;foo&#x2F;higher&lt;&#x2F;code&gt; and &lt;code&gt;foo::lower&lt;&#x2F;code&gt; for &lt;code&gt;&#x2F;foo&#x2F;lower&lt;&#x2F;code&gt; here.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;final-remarks&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#final-remarks&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    20
  
&quot;
    height=&quot;
  
    20
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Final Remarks&lt;&#x2F;h2&gt;
&lt;p&gt;Based on the comparison results above, we can rank &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;gotham.rs&quot;&gt;Gotham&lt;&#x2F;a&gt; as the most mature web micro framework in Rust
based on the routing capabilities. Next, we have a tie between &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;actix.rs&quot;&gt;Actix&lt;&#x2F;a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;warp&quot;&gt;Warp&lt;&#x2F;a&gt; while &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;tide&quot;&gt;Tide&lt;&#x2F;a&gt; occupies
the last spot by having the most deficiencies. I initially wanted to rank &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;warp&quot;&gt;Warp&lt;&#x2F;a&gt; above &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;actix.rs&quot;&gt;Actix&lt;&#x2F;a&gt; but
decided not to. I have tested more complicated use cases but they all fall into one of the above compared
sections.&lt;&#x2F;p&gt;
&lt;p&gt;I did this comparison because I suspected some scoping issues in &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;actix.rs&quot;&gt;Actix&lt;&#x2F;a&gt;. I also got disillusioned with
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;gotham.rs&quot;&gt;Gotham&lt;&#x2F;a&gt; since it looks like nobody is maintaning it anymore and I wanted to rule it out of the contention
for the best web micro framework race. The results actually reaffirmed my opinion that &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;gotham.rs&quot;&gt;Gotham&lt;&#x2F;a&gt; is the best
out of them all and I will keep using it and contributing to it.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Complex Vue.js App Structure</title>
        <published>2017-01-25T03:23:55+05:30</published>
        <updated>2017-01-25T03:23:55+05:30</updated>
        
        <author>
          <name>
            
              Pavan Sunkara
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pksunkara.com/tech-notes/complex-vuejs-app-structure/"/>
        <id>https://pksunkara.com/tech-notes/complex-vuejs-app-structure/</id>
        
        <content type="html" xml:base="https://pksunkara.com/tech-notes/complex-vuejs-app-structure/">&lt;p&gt;I have always liked it whenever a framework provides it&#x27;s own generators and&#x2F;or boilerplates. It&#x27;s what I liked about &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;rubyonrails.org&quot;&gt;Ruby on Rails&lt;&#x2F;a&gt; the most after the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Model%E2%80%93view%E2%80%93controller&quot;&gt;MVC&lt;&#x2F;a&gt; concept. Developers can understand a lot about the framework and the way it&#x27;s intended to be used from the official boilerplates. I am sad that the recent javascript frameworks has left this important job of generating code to the community and tools like yeoman instead of having something official.&lt;&#x2F;p&gt;
&lt;p&gt;When I started looking into &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vuejs.org&quot;&gt;Vue.js&lt;&#x2F;a&gt;, I was happy to discover that they have a small generator tool called &lt;strong&gt;vue-cli&lt;&#x2F;strong&gt; which can be used with official boilerplates provided at &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;vuejs-templates&quot;&gt;vuejs-templates&lt;&#x2F;a&gt;. Unfortunately, the happiness didn&#x27;t last long because the boilerplates are simple applications meant to get you started with &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vuejs.org&quot;&gt;Vue.js&lt;&#x2F;a&gt;. They don&#x27;t deal with all the other necessary packages such as &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vuex.vuejs.org&#x2F;en&#x2F;&quot;&gt;vuex&lt;&#x2F;a&gt;, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;router.vuejs.org&#x2F;en&#x2F;&quot;&gt;vue-router&lt;&#x2F;a&gt;, etc.. which are needed for a complex &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vuejs.org&quot;&gt;Vue.js&lt;&#x2F;a&gt; application. &lt;em&gt;(&lt;strong&gt;EDIT&lt;&#x2F;strong&gt;: At the time of writing this post, vue-router wasn&#x27;t present in the boilerplate)&lt;&#x2F;em&gt;. They did allow the tool to use third party boilerplates which resulted in me creating &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;pksunkara&#x2F;spoiler&quot;&gt;spoiler&lt;&#x2F;a&gt; built upon the official webpack boilerplate.&lt;&#x2F;p&gt;
&lt;p&gt;I would like to describe below about what I think should be the directory and file structure of a complex &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vuejs.org&quot;&gt;Vue.js&lt;&#x2F;a&gt; application and it&#x27;s conventions.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;overview&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#overview&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    20
  
&quot;
    height=&quot;
  
    20
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Overview&lt;&#x2F;h2&gt;
&lt;p&gt;The following example assumes that you will be using webpack build config from &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;vuejs-templates&#x2F;webpack&quot;&gt;vuejs-templates&#x2F;webpack&lt;&#x2F;a&gt; boilerplate.&lt;&#x2F;p&gt;
&lt;p&gt;Let&#x27;s also assume that you want to have a page named &lt;strong&gt;Hello&lt;&#x2F;strong&gt;, it will need a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vuejs.org&quot;&gt;vue.js&lt;&#x2F;a&gt; component named &lt;strong&gt;Hello&lt;&#x2F;strong&gt; and a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vuex.vuejs.org&#x2F;en&#x2F;&quot;&gt;vuex&lt;&#x2F;a&gt; module named &lt;strong&gt;Hello&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;├─&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; src&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;│&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  ├─&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; assets&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;               #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; module assets (processed by webpack)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;│&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  │&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  └─&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;│&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  ├─&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; components&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;│&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  │&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  └─&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; Hello.vue&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;         #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; Hello component&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;│&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  │&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  └─&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;│&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  ├─&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; store&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;│&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  │&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  └─&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; Hello.js&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;          #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; Hello module&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;│&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  │&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  └─&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; index.js&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;          #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; assemble vuex store&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;│&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  │&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  └─&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;│&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  ├─&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; router&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;│&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  │&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  └─&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; index.js&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;          #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; app route configuration&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;│&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  │&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  └─&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;│&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  ├─&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; App.vue&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;              #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; main app component&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;│&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  └─&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; main.js&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;              #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; app entry file&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;├─&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; public&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;                  #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; static assets (directly copied)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;│&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  └─&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;├─&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; index.html&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;              #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; index.html template&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;└─&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; package.json&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;            #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; build scripts and dependencies&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h4 id=&quot;index-html&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#index-html&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
index.html&lt;&#x2F;h4&gt;
&lt;p&gt;This is the main HTML template for your application. You can link your static assets inside the &lt;strong&gt;head&lt;&#x2F;strong&gt; tag while your processed assets will be auto injected in &lt;strong&gt;body&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;html&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;!&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;DOCTYPE&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; html&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;html&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;head&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;link&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; rel&lt;&#x2F;span&gt;&lt;span&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;shortcut icon&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; type&lt;&#x2F;span&gt;&lt;span&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;image&#x2F;png&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; href&lt;&#x2F;span&gt;&lt;span&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&#x2F;assets&#x2F;images&#x2F;favicon.png&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;head&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;body&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;div&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; id&lt;&#x2F;span&gt;&lt;span&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;app&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;div&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;body&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;html&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h4 id=&quot;src-router-index-js&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#src-router-index-js&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
src&#x2F;router&#x2F;index.js&lt;&#x2F;h4&gt;
&lt;p&gt;This is the file which initiates &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;router.vuejs.org&#x2F;en&#x2F;&quot;&gt;vue-router&lt;&#x2F;a&gt; with the given components.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;import&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt; Vue&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;vue&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;import&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt; VueRouter&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;vue-router&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;import&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt; Hello&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;@&#x2F;components&#x2F;Hello&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;Vue&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;use&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt;VueRouter&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;const&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #E5C07B);&quot;&gt; routes&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt; path&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #ABB2BF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt; name&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #ABB2BF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;Hello&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt; component&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #ABB2BF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt; Hello&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;&#x2F;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; eslint-disable no-new &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;*&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;export&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #C678DD);&quot;&gt; default&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt; new&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt; VueRouter&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;  routes&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;  mode&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #ABB2BF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;history&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h4 id=&quot;src-store-index-js&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#src-store-index-js&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
src&#x2F;store&#x2F;index.js&lt;&#x2F;h4&gt;
&lt;p&gt;This is the file which initiates &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vuex.vuejs.org&#x2F;en&#x2F;&quot;&gt;vuex&lt;&#x2F;a&gt; store with the given modules.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;import&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt; Vue&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;vue&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;import&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt; Vuex&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;vuex&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;import&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt; Hello&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;@&#x2F;store&#x2F;Hello&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;Vue&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;use&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt;Vuex&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;&#x2F;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; eslint-disable no-new &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;*&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;const&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #E5C07B);&quot;&gt; store&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt; new&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt; Vuex&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;Store&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;  modules&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #ABB2BF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt;    Hello&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;export&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #C678DD);&quot;&gt; default&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt; store&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h4 id=&quot;src-app-vue&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#src-app-vue&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
src&#x2F;App.vue&lt;&#x2F;h4&gt;
&lt;p&gt;This is the application&#x27;s main &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vuejs.org&quot;&gt;Vue.js&lt;&#x2F;a&gt; component which is basically just a wrapper for &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;router.vuejs.org&#x2F;en&#x2F;&quot;&gt;vue-router&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;vue&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;template&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;div&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; id&lt;&#x2F;span&gt;&lt;span&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;app&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;router-view&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;router-view&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;div&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;template&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;script&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;export&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #C678DD);&quot;&gt; default&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;script&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h4 id=&quot;src-main-js&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#src-main-js&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
src&#x2F;main.js&lt;&#x2F;h4&gt;
&lt;p&gt;This is the application entry file where you initiate your &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vuejs.org&quot;&gt;Vue.js&lt;&#x2F;a&gt; application with a router, store and the main &lt;strong&gt;App.vue&lt;&#x2F;strong&gt; component.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;import&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt; Vue&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;vue&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;import&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt; router&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;@&#x2F;router&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;import&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt; store&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;@&#x2F;store&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;import&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt; App&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;@&#x2F;App&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;&#x2F;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; eslint-disable no-new &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;*&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;new&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt; Vue&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;  el&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #ABB2BF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;#app&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt;  router&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt;  store&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;  render&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #ABB2BF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt; h&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt; h&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt;App&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h4 id=&quot;src-store-hello-js&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#src-store-hello-js&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
src&#x2F;store&#x2F;Hello.js&lt;&#x2F;h4&gt;
&lt;p&gt;This file represents a sample &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vuex.vuejs.org&#x2F;en&#x2F;&quot;&gt;vuex&lt;&#x2F;a&gt; module.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;export&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #C678DD);&quot;&gt; default&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;  namespaced&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #ABB2BF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; true&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;  state&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #ABB2BF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;    message&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #ABB2BF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;Hello Vue!&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h4 id=&quot;src-components-hello-vue&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#src-components-hello-vue&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
src&#x2F;components&#x2F;Hello.vue&lt;&#x2F;h4&gt;
&lt;p&gt;This file represents a sample &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vuejs.org&quot;&gt;Vue.js&lt;&#x2F;a&gt; component which will be used by the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;router.vuejs.org&#x2F;en&#x2F;&quot;&gt;vue-router&lt;&#x2F;a&gt;. Please note that &lt;strong&gt;Hello&lt;&#x2F;strong&gt; module&#x27;s state is being used in here.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;vue&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;template&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;div&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; class&lt;&#x2F;span&gt;&lt;span&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;hello&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;h1&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;{{ message }}&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;h1&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;div&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;template&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;script&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt; mapState&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;vuex&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;export&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #C678DD);&quot;&gt; default&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;  data&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;  computed&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #ABB2BF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt; mapState&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;    message&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #ABB2BF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt; state&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt; state&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E5C07B);&quot;&gt;Hello&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;message&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;script&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;questions&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#questions&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    20
  
&quot;
    height=&quot;
  
    20
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Questions&lt;&#x2F;h2&gt;
&lt;h4 id=&quot;why-is-router-a-directory-instead-of-a-single-file&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#why-is-router-a-directory-instead-of-a-single-file&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Why is router a directory instead of a single file?&lt;&#x2F;h4&gt;
&lt;p&gt;When applications grow, the number of routes grow. They might contain &lt;strong&gt;beforeEnter&lt;&#x2F;strong&gt; hooks and so on and sometimes you might want to put all that in a separate file, or files. With a subdirectory you can keep this all in one place without bloating one router.js file.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;why-are-there-no-root-actions-and-mutations-in-vuex&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#why-are-there-no-root-actions-and-mutations-in-vuex&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Why are there no root actions and mutations in vuex?&lt;&#x2F;h4&gt;
&lt;p&gt;In large applications, almost everything should be as independent of each other for better maintainability and readability of the codebase. Having root actions and mutations will hamper that and thus is not recommended.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;final-comments&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#final-comments&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    20
  
&quot;
    height=&quot;
  
    20
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Final Comments&lt;&#x2F;h2&gt;
&lt;p&gt;I wish the official webpack template supports &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;router.vuejs.org&#x2F;en&#x2F;&quot;&gt;vue-router&lt;&#x2F;a&gt;, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vuex.vuejs.org&#x2F;en&#x2F;&quot;&gt;vuex&lt;&#x2F;a&gt;, etc.. and hopefully guide lot of developers to the correct way of using &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vuejs.org&quot;&gt;Vue.js&lt;&#x2F;a&gt;. I also wish it contains some subcommands which can be used when creating a new component or module so that the official conventions are encouraged.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Cloudant: CouchDB as Backend</title>
        <published>2016-10-01T15:25:32+02:00</published>
        <updated>2016-10-01T15:25:32+02:00</updated>
        
        <author>
          <name>
            
              Pavan Sunkara
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pksunkara.com/tech-notes/cloudant-couchdb-as-backend/"/>
        <id>https://pksunkara.com/tech-notes/cloudant-couchdb-as-backend/</id>
        
        <content type="html" xml:base="https://pksunkara.com/tech-notes/cloudant-couchdb-as-backend/">&lt;p&gt;There have been a &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;blog.mattwoodward.com&#x2F;2012&#x2F;03&#x2F;definitive-guide-to-couchdb.html&quot;&gt;lot&lt;&#x2F;a&gt; &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.staticshin.com&#x2F;programming&#x2F;easy-user-accounts-management-with-couchdb&#x2F;&quot;&gt;of&lt;&#x2F;a&gt; &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;nolanlawson.com&#x2F;2013&#x2F;11&#x2F;15&#x2F;couchdb-doesnt-want-to-be-your-database-it-wants-to-be-your-web-site&#x2F;&quot;&gt;guides&lt;&#x2F;a&gt; on how to use &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;couchdb.apache.org&quot;&gt;CouchDB&lt;&#x2F;a&gt; as a database for the web while restricting users to write only the data they own. I have been recently experimenting with how to use &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;cloudant.com&quot;&gt;Cloudant&lt;&#x2F;a&gt;&#x27;s CouchDB as a backend directly for one of my Single Page Applications [&lt;strong&gt;SPA&lt;&#x2F;strong&gt;]. This blog post gives a little perspective on the limitations of the idea and how to achieve it.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;limitations&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#limitations&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    20
  
&quot;
    height=&quot;
  
    20
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Limitations&lt;&#x2F;h2&gt;
&lt;p&gt;The number one major limitation of CouchDB-as-a-backend is that every user can read all the data. This makes it not suitable for some kind of applications (finance etc..) but really well suited for other kinds of things. One famous example of this would be &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;npmjs.com&quot;&gt;NPM&lt;&#x2F;a&gt;, Node.js package manager.&lt;&#x2F;p&gt;
&lt;p&gt;The other major limitation is that there&#x27;s no password recovery. You can&#x27;t just say &quot;&lt;em&gt;give your email, we’ll send you a new one&lt;&#x2F;em&gt;&quot;. Fortunately, you can bypass this by using &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Single_sign-on&quot;&gt;Single sign-on&lt;&#x2F;a&gt;. I have personally decided to use &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;auth0.com&quot;&gt;Auth0&lt;&#x2F;a&gt; in my &lt;strong&gt;SPA&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;setting-up&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#setting-up&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    20
  
&quot;
    height=&quot;
  
    20
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Setting up&lt;&#x2F;h2&gt;
&lt;p&gt;I have listed below the steps on how to achieve this &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;cloudant.com&quot;&gt;Cloudant&lt;&#x2F;a&gt;. I am going to assume that you have an account ready to go with username &lt;strong&gt;name&lt;&#x2F;strong&gt; and password &lt;strong&gt;pass&lt;&#x2F;strong&gt;. Let&#x27;s use the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;npmjs.com&quot;&gt;NPM&lt;&#x2F;a&gt; service as an example.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;create-users-database&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#create-users-database&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Create Users Database&lt;&#x2F;h4&gt;
&lt;p&gt;You need to create an &lt;strong&gt;_users&lt;&#x2F;strong&gt; database which will be used for user authentication and authorization.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;curl&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;X&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; PUT&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;u&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; name:pass&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; https:&#x2F;&#x2F;name.cloudant.com&#x2F;_users&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h6 id=&quot;turn-off-cloudant-security&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#turn-off-cloudant-security&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    12
  
&quot;
    height=&quot;
  
    12
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Turn off Cloudant Security&lt;&#x2F;h6&gt;
&lt;p&gt;You need to turn off &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;cloudant.com&quot;&gt;Cloudant&lt;&#x2F;a&gt;&#x27;s security for this database so that you can allow anyone to register themselves as user.&lt;&#x2F;p&gt;
&lt;p&gt;Create the security document which needs to be uploaded as &lt;strong&gt;security.json&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;json&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;  &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;couchdb_auth_only&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #D19A66);&quot;&gt; true&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;  &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;members&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;    &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;names&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;    &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;roles&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;  &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;admins&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;    &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;names&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;    &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;roles&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Upload it.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;curl&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;X&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; PUT&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;u&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; name:pass&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; https:&#x2F;&#x2F;name.cloudant.com&#x2F;_users&#x2F;_security&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-H&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;Content-Type: application&#x2F;json&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-d&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; @security.json&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h4 id=&quot;create-application-database&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#create-application-database&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Create Application Database&lt;&#x2F;h4&gt;
&lt;p&gt;You need to create a database which will be used as backend of your application. Let&#x27;s create one called &lt;strong&gt;npm&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;curl&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;X&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; PUT&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;u&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; name:pass&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; https:&#x2F;&#x2F;name.cloudant.com&#x2F;npm&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h6 id=&quot;make-it-public&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#make-it-public&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    12
  
&quot;
    height=&quot;
  
    12
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Make it public&lt;&#x2F;h6&gt;
&lt;p&gt;You need to turn off &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;cloudant.com&quot;&gt;Cloudant&lt;&#x2F;a&gt;&#x27;s security for this database so that you can allow all users to read and write.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;curl&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;X&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; PUT&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;u&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; name:pass&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; https:&#x2F;&#x2F;name.cloudant.com&#x2F;npm&#x2F;_security&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-H&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;Content-Type: application&#x2F;json&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-d&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; @security.json&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h4 id=&quot;secure-application-for-user&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#secure-application-for-user&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Secure Application for User&lt;&#x2F;h4&gt;
&lt;p&gt;You need to add a validation function which runs whenever someone&#x27;s trying to write to the application database.&lt;&#x2F;p&gt;
&lt;p&gt;Create the validation function as &lt;strong&gt;validation.json&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;json&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;  &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;_id&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;_design&#x2F;_auth&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;  &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;language&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;javascript&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;  &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;validate_doc_update&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;function(newDoc, oldDoc, userCtx) {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  function require(beTrue, key, message) {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;    var err = {};&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;    err[key] = message;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;    if (!beTrue) throw(err);&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  }&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  require(userCtx.name, &amp;#39;unauthorized&amp;#39;, &amp;#39;You need to login&amp;#39;);&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  if (oldDoc) {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;    require((userCtx.roles.indexOf(&amp;#39;_admin&amp;#39;) != -1 || userCtx.name == oldDoc.user), &amp;#39;forbidden&amp;#39;, &amp;#39;You are not allowed to update it&amp;#39;);&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  }&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Upload it as a design document.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;curl&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;X&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; POST&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;u&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; name:pass&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; https:&#x2F;&#x2F;name.cloudant.com&#x2F;npm&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;-H&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;Content-Type: application&#x2F;json&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-d&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; @validation.json&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This validation function is explained &lt;a href=&quot;https:&#x2F;&#x2F;pksunkara.com&#x2F;tech-notes&#x2F;cloudant-couchdb-as-backend&#x2F;#application-database&quot;&gt;below&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;secure-user-data&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#secure-user-data&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Secure User Data&lt;&#x2F;h4&gt;
&lt;p&gt;You need to secure the authentication database data for users.&lt;&#x2F;p&gt;
&lt;p&gt;Create the validation function as &lt;strong&gt;authentication.json&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;json&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;  &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;_id&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;_design&#x2F;_auth&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;  &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;language&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;javascript&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;  &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;validate_doc_update&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;function(newDoc, oldDoc, userCtx) {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  if (newDoc._deleted === true) {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;    if (userCtx.roles.indexOf(&amp;#39;_admin&amp;#39;) == -1 &amp;amp;&amp;amp; userCtx.name != oldDoc.name) {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;      throw({forbidden: &amp;#39;Only admins may delete other user docs.&amp;#39;});&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;    }&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;    return;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  }&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  if ((oldDoc &amp;amp;&amp;amp; oldDoc.type !== &amp;#39;user&amp;#39;) || newDoc.type !== &amp;#39;user&amp;#39;) {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;    throw({forbidden : &amp;#39;doc.type must be user&amp;#39;});&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  }&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  if (!newDoc.name) {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;    throw({forbidden: &amp;#39;doc.name is required&amp;#39;});&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  }&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  if (!newDoc.roles) {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;    throw({forbidden: &amp;#39;doc.roles must exist&amp;#39;});&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  }&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  if (!isArray(newDoc.roles)) {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;    throw({forbidden: &amp;#39;doc.roles must be an array&amp;#39;});&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  }&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  for (var idx = 0; idx &amp;lt; newDoc.roles.length; idx++) {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;    if (typeof newDoc.roles[idx] !== &amp;#39;string&amp;#39;) {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;      throw({forbidden: &amp;#39;doc.roles can only contain strings&amp;#39;});&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;    }&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  }&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  if (newDoc._id !== (&amp;#39;org.couchdb.user:&amp;#39; + newDoc.name)) {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;    throw({forbidden: &amp;#39;Doc ID must be of the form org.couchdb.user:name&amp;#39;});&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  }&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  if (oldDoc) {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;    if (oldDoc.name !== newDoc.name) {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;      throw({forbidden: &amp;#39;Usernames can not be changed.&amp;#39;});&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;    }&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  }&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  if (newDoc.password_sha &amp;amp;&amp;amp; !newDoc.salt) {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;    throw({forbidden: &amp;#39;Users with password_sha must have a salt. See &#x2F;_utils&#x2F;script&#x2F;couch.js for example code.&amp;#39;});&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  }&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  if (newDoc.password_scheme === &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;pbkdf2&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;) {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;    if (typeof(newDoc.iterations) !== &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;number&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;) {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;       throw({forbidden: &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;iterations must be a number.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;});&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;    }&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;    if (typeof(newDoc.derived_key) !== &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;string&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;) {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;       throw({forbidden: &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;derived_key must be a string.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;});&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;    }&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  }&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  if (userCtx.roles.indexOf(&amp;#39;_admin&amp;#39;) == -1) {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;    if (oldDoc) {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;      if (userCtx.name !== newDoc.name) {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;        throw({forbidden: &amp;#39;You may only update your own user document.&amp;#39;});&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;      }&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;      var oldRoles = oldDoc.roles.sort();&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;      var newRoles = newDoc.roles.sort();&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;      if (oldRoles.length !== newRoles.length) {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;        throw({forbidden: &amp;#39;Only _admin may edit roles&amp;#39;});&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;      }&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;      for (var i = 0; i &amp;lt; oldRoles.length; i++) {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;        if (oldRoles[i] !== newRoles[i]) {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;          throw({forbidden: &amp;#39;Only _admin may edit roles&amp;#39;});&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;        }&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;      }&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;    } else if (newDoc.roles.length &amp;gt; 0) {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;      throw({forbidden: &amp;#39;Only _admin may set roles&amp;#39;});&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;    }&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  }&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  for (var i = 0; i &amp;lt; newDoc.roles.length; i++) {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;    if (newDoc.roles[i][0] === &amp;#39;_&amp;#39;) {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;      throw({forbidden: &amp;#39;No system roles (starting with underscore) in users db.&amp;#39;});&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;    }&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  }&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  if (newDoc.name[0] === &amp;#39;_&amp;#39;) {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;    throw({forbidden: &amp;#39;Username may not start with underscore.&amp;#39;});&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  }&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  var badUserNameChars = [&amp;#39;:&amp;#39;];&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  for (var i = 0; i &amp;lt; badUserNameChars.length; i++) {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;    if (newDoc.name.indexOf(badUserNameChars[i]) &amp;gt;= 0) {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;      throw({forbidden: &amp;#39;Character `&amp;#39; + badUserNameChars[i] + &amp;#39;` is not allowed in usernames.&amp;#39;});&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;    }&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;  }&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Upload it as a design document.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;curl&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;X&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; POST&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;u&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; name:pass&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; https:&#x2F;&#x2F;name.cloudant.com&#x2F;_users&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;-H&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;Content-Type: application&#x2F;json&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-d&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; @authentication.json&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This validation function is explained &lt;a href=&quot;https:&#x2F;&#x2F;pksunkara.com&#x2F;tech-notes&#x2F;cloudant-couchdb-as-backend&#x2F;#users-database&quot;&gt;below&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;explanations&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#explanations&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    20
  
&quot;
    height=&quot;
  
    20
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Explanations&lt;&#x2F;h2&gt;
&lt;p&gt;This section explains how the validation functions work.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;application-database&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#application-database&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    18
  
&quot;
    height=&quot;
  
    18
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Application Database&lt;&#x2F;h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;function&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt;newDoc&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt; oldDoc&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt; userCtx&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;  function&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt; require&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt;beTrue&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt; key&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt; message&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;    var&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt; err&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt;    err&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt;key&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt; message&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;!&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt;beTrue&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt; throw&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt;err&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;  &#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; You need the user to be logged in&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;  require&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;userCtx&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;unauthorized&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;You need to login&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;  &#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; If the user is updating a document, you need to make sure he owns it&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;  if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt;oldDoc&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;    require&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;userCtx&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E5C07B);&quot;&gt;roles&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;indexOf&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;_admin&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; !=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; ||&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt; userCtx&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;name&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt; oldDoc&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;user&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;forbidden&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;You are not allowed to update it&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;a name=&quot;user-explanation&quot;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;users-database&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#users-database&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    16
  
&quot;
    height=&quot;
  
    16
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Users Database&lt;&#x2F;h4&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#383A42, #ABB2BF); background-color: light-dark(#FAFAFA, #282C34);&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;function&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt;newDoc&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt; oldDoc&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt; userCtx&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;  if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;newDoc&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;_deleted&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; ===&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; true&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;    &#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; Allow deletes by admins and matching users without checking the other fields&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;userCtx&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E5C07B);&quot;&gt;roles&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;indexOf&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;_admin&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt; userCtx&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;name&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; !=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt; oldDoc&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;      throw&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;forbidden&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #ABB2BF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;Only admins may delete other user docs.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;  &#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; We only allow user docs for now&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;  if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt;oldDoc&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt; oldDoc&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;type&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; !==&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;user&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; ||&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt; newDoc&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;type&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; !==&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;user&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;    throw&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;forbidden &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #ABB2BF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;doc.type must be user&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;  if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;!&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;newDoc&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;    throw&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;forbidden&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #ABB2BF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;doc.name is required&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;  if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;!&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;newDoc&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;roles&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;    throw&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;forbidden&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #ABB2BF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;doc.roles must exist&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;  if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;!&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;isArray&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;newDoc&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;roles&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;    throw&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;forbidden&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #ABB2BF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;doc.roles must be an array&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;  for&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;var&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt; idx&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt; idx&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt; newDoc&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E5C07B);&quot;&gt;roles&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;length&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt; idx&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;++&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #C678DD);&quot;&gt;typeof&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt; newDoc&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;roles&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt;idx&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; !==&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;string&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;      throw&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;forbidden&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #ABB2BF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;doc.roles can only contain strings&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;  if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;newDoc&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;_id&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; !==&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;org.couchdb.user:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt; newDoc&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;    throw&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;forbidden&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #ABB2BF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;Doc ID must be of the form org.couchdb.user:name&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;  &#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; Don&amp;#39;t allow usernames to be changed&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;  if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt;oldDoc&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;oldDoc&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;name&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; !==&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt; newDoc&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;      throw&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;forbidden&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #ABB2BF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;Usernames can not be changed.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;  &#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; Password logic&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;  if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;newDoc&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;password_sha&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; !&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;newDoc&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;salt&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;    throw&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;forbidden&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #ABB2BF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;Users with password_sha must have a salt. See &#x2F;_utils&#x2F;script&#x2F;couch.js for example code.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;  if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;newDoc&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;password_scheme&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; ===&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;pbkdf2&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #C678DD);&quot;&gt;typeof&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;newDoc&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;iterations&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; !==&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;number&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;       throw&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;forbidden&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #ABB2BF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;iterations must be a number.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #C678DD);&quot;&gt;typeof&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;newDoc&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;derived_key&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; !==&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;string&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;       throw&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;forbidden&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #ABB2BF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;derived_key must be a string.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;  &#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; If user is not server admin&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;  if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;userCtx&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E5C07B);&quot;&gt;roles&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;indexOf&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;_admin&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt;oldDoc&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;      &#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; Allow user to update only their documents&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;      if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;userCtx&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;name&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; !==&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt; newDoc&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;        throw&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;forbidden&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #ABB2BF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;You may only update your own user document.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;      &#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; Validate role updates&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;      var&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt; oldRoles&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt; oldDoc&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E5C07B);&quot;&gt;roles&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;sort&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;      var&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt; newRoles&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt; newDoc&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E5C07B);&quot;&gt;roles&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;sort&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;      if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;oldRoles&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;length&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; !==&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt; newRoles&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;length&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;        throw&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;forbidden&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #ABB2BF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;Only _admin may edit roles&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;      for&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;var&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt; oldRoles&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;length&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;++&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt;oldRoles&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt;i&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; !==&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt; newRoles&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt;i&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;          throw&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;forbidden&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #ABB2BF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;Only _admin may edit roles&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt; else&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt; if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;newDoc&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E5C07B);&quot;&gt;roles&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;length&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;      throw&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;forbidden&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #ABB2BF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;Only _admin may set roles&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt;  &#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A0A1A7, #7F848E);font-style: italic;&quot;&gt; Character validations&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;  for&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;var&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt; newDoc&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E5C07B);&quot;&gt;roles&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;length&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;++&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;newDoc&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;roles&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt;i&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; ===&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;_&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;      throw&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;forbidden&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #ABB2BF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;No system roles (starting with underscore) in users db.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;  if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;newDoc&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; ===&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;_&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;    throw&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;forbidden&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #ABB2BF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;Username may not start with underscore.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;  var&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt; badUserNameChars&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;  for&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;var&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt; badUserNameChars&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;length&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt;++&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E5C07B);&quot;&gt;newDoc&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E5C07B);&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#4078F2, #61AFEF);&quot;&gt;indexOf&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt;badUserNameChars&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt;i&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; &amp;gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#986801, #D19A66);&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#A626A4, #C678DD);&quot;&gt;      throw&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E45649, #E06C75);&quot;&gt;forbidden&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #ABB2BF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;Character `&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt; badUserNameChars&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#383A42, #E06C75);&quot;&gt;i&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0184BC, #56B6C2);&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;` is not allowed in usernames.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#50A14F, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;addendum&quot;&gt;&lt;a class=&quot;permalink&quot; href=&quot;#addendum&quot;&gt;
  &lt;svg
    viewBox=&quot;0 0 16 16&quot;
    version=&quot;1.1&quot;
    width=&quot;
  
    20
  
&quot;
    height=&quot;
  
    20
  
&quot;
    aria-hidden=&quot;true&quot;
  &gt;
    &lt;path
      fill=&quot;currentColor&quot;
      fill-rule=&quot;evenodd&quot;
      d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;
    &gt;&lt;&#x2F;path&gt;
  &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
Addendum&lt;&#x2F;h2&gt;
&lt;p&gt;You need to make sure that every data document you create in the application database needs to have an &lt;strong&gt;user&lt;&#x2F;strong&gt; field which need to be filled with the username of the user. Otherwise the validation function will keep throwing up forbidden errors.&lt;&#x2F;p&gt;
&lt;p&gt;You are now ready to use CouchDB-as-a-backend on &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;cloudant.com&quot;&gt;Cloudant&lt;&#x2F;a&gt;. Enjoy!&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>About</title>
        <published>2016-09-27T17:55:24+02:00</published>
        <updated>2016-09-27T17:55:24+02:00</updated>
        
        <author>
          <name>
            
              Pavan Sunkara
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pksunkara.com/about/"/>
        <id>https://pksunkara.com/about/</id>
        
        <content type="html" xml:base="https://pksunkara.com/about/">&lt;p&gt;I am &lt;strong&gt;Pavan Sunkara&lt;&#x2F;strong&gt;, Founder &amp;amp; CEO at &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;juju.bi&quot;&gt;Jujubi&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;I am also a core-maintainer of: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;clap-rs&quot;&gt;clap&lt;&#x2F;a&gt;, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;diesel-rs&quot;&gt;diesel&lt;&#x2F;a&gt;, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;eyre-rs&#x2F;eyre&quot;&gt;eyre&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
        
    </entry>
</feed>
