<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="rss.xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Presetter Documentation Blog</title>
        <link>https://alvis.github.io/blog</link>
        <description>Presetter Documentation Blog</description>
        <lastBuildDate>Mon, 22 Jun 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[Agentic Coder Configs Are the New Config Drift]]></title>
            <link>https://alvis.github.io/blog/agentic-coder-config-drift</link>
            <guid>https://alvis.github.io/blog/agentic-coder-config-drift</guid>
            <pubDate>Mon, 22 Jun 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[AI coding agents are becoming part of the development environment. That means their setup is becoming part of the development environment too.]]></description>
            <content:encoded><![CDATA[<p>AI coding agents are becoming part of the development environment. That means their setup is becoming part of the development environment too.</p>
<p>At first, that setup looks small: a <code>CLAUDE.md</code> here, an <code>AGENTS.md</code> there, maybe a few MCP servers, a review checklist, and one shared skill. Then the second repo needs the same thing. Then the monorepo needs a baseline, the web app needs extra frontend rules, the service needs migration safety rules, and the internal tools package needs a different set of allowed commands.</p>
<p>That is how agentic coder setup turns into config drift.</p>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="the-pain-is-not-just-the-first-setup">The Pain Is Not Just the First Setup<a href="https://alvis.github.io/blog/agentic-coder-config-drift#the-pain-is-not-just-the-first-setup" class="hash-link" aria-label="Direct link to The Pain Is Not Just the First Setup" title="Direct link to The Pain Is Not Just the First Setup" translate="no">​</a></h2>
<p>The first setup is annoying, but the recurring maintenance is what hurts.</p>
<p>Agentic coding configuration often spreads across files like:</p>
<ul>
<li class=""><code>CLAUDE.md</code> for Claude-oriented repository instructions</li>
<li class=""><code>AGENTS.md</code> for agent-facing project rules</li>
<li class=""><code>.mcp.json</code> or similar MCP server definitions</li>
<li class=""><code>.claude/settings.json</code> for tool permissions, hooks, and local behavior</li>
<li class=""><code>.codex/</code> or <code>.agents/</code> directories for shared instructions, skills, or workflows</li>
<li class="">review playbooks, coding standards, and service-specific safety rules</li>
</ul>
<p>Those files are not all the same kind of config. Some are prose. Some are JSON. Some describe tool access. Some describe behavior. Some are global enough to share across every repo, while others are only correct for one service.</p>
<p>That mix creates predictable failure modes:</p>
<ul>
<li class=""><strong>Copy-paste drift</strong>: every repo starts from a slightly different instruction file.</li>
<li class=""><strong>Half-applied updates</strong>: the MCP server changed, but only three repos got the new command.</li>
<li class=""><strong>Invisible local exceptions</strong>: a service-specific rule gets buried in a copied baseline.</li>
<li class=""><strong>Marketplace mismatch</strong>: reusable agent bundles can help distribute skills or prompts, but they usually cannot know each repo's hooks, MCP access, command permissions, deployment constraints, or monorepo package shape.</li>
<li class=""><strong>Scary migrations</strong>: updating an agent rule feels like a tiny migration across every repository.</li>
</ul>
<p>This is the same class of problem as ESLint, Vitest, TypeScript, release scripts, and build config. The files are different. The maintenance problem is the same.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="what-presetter-changes">What Presetter Changes<a href="https://alvis.github.io/blog/agentic-coder-config-drift#what-presetter-changes" class="hash-link" aria-label="Direct link to What Presetter Changes" title="Direct link to What Presetter Changes" translate="no">​</a></h2>
<p>Presetter gives you a boring but powerful model:</p>
<ol>
<li class="">Put the shared baseline in a preset.</li>
<li class="">Let each repo compose that preset in <code>presetter.config.ts</code>.</li>
<li class="">Generate the files the agent tools expect.</li>
<li class="">Keep repo-specific differences as explicit overrides.</li>
</ol>
<p>That means your team can maintain agentic coder setup like any other versioned development standard.</p>
<p>The shared preset can own:</p>
<ul>
<li class="">default <code>CLAUDE.md</code> and <code>AGENTS.md</code> content</li>
<li class="">approved MCP server definitions</li>
<li class="">default hook wiring</li>
<li class="">shared review, testing, and migration rules</li>
<li class="">reusable agent skills or playbooks</li>
<li class="">script aliases that bootstrap or validate the agent setup</li>
</ul>
<p>The consuming repo can still own:</p>
<ul>
<li class="">service-specific operational warnings</li>
<li class="">framework-specific rules</li>
<li class="">local MCP entries</li>
<li class="">stricter command permissions</li>
<li class="">package-specific instructions inside a monorepo</li>
</ul>
<p>The goal is not to make every repo identical. The goal is to make the shared parts intentional and the differences visible.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="a-preset-for-agentic-coder-setup">A Preset for Agentic Coder Setup<a href="https://alvis.github.io/blog/agentic-coder-config-drift#a-preset-for-agentic-coder-setup" class="hash-link" aria-label="Direct link to A Preset for Agentic Coder Setup" title="Direct link to A Preset for Agentic Coder Setup" translate="no">​</a></h2>
<p>Here is a minimal preset package that ships a team baseline.</p>
<div class="language-text codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_kY6l">@acme/preset-agentic-coder</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-text codeBlock_RMoD thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#393A34"><span class="token plain">@acme/preset-agentic-coder/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">├── package.json</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">├── src/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">│   └── index.ts</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">└── templates/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    ├── agents/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    │   ├── AGENTS.md</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    │   └── CLAUDE.md</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    ├── mcp/base.json</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    └── skills/review-playbook/SKILL.md</span><br></div></code></pre></div></div>
<p>The package exports a Presetter preset:</p>
<div class="language-json codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_kY6l">package.json</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-json codeBlock_RMoD thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"name"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"@acme/preset-agentic-coder"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"version"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"1.0.0"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"type"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"module"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"files"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">"src/"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"templates/"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"exports"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"."</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"import"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"./src/index.ts"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"types"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"./src/index.ts"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"peerDependencies"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"presetter"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"^9.0.0"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"devDependencies"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"presetter"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"^9.0.0"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"typescript"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"^6.0.0"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<p>And the preset defines the generated agent files:</p>
<div class="language-typescript codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_kY6l">src/index.ts</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-typescript codeBlock_RMoD thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> dirname</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> resolve </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'node:path'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> fileURLToPath </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'node:url'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> preset </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'presetter'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token constant" style="color:#36acaa">DIR</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">dirname</span><span class="token punctuation" style="color:#393A34">(</span><span class="token function" style="color:#d73a49">fileURLToPath</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword module" style="color:#00009f">import</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">meta</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">url</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token constant" style="color:#36acaa">TEMPLATES</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">resolve</span><span class="token punctuation" style="color:#393A34">(</span><span class="token constant" style="color:#36acaa">DIR</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'..'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'templates'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">type</span><span class="token plain"> </span><span class="token class-name maybe-class-name">AgenticCoderOptions</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  profile</span><span class="token operator" style="color:#393A34">?</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'library'</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">|</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'service'</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">|</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'web'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  mcp</span><span class="token operator" style="color:#393A34">?</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    github</span><span class="token operator" style="color:#393A34">?</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">boolean</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    database</span><span class="token operator" style="color:#393A34">?</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">boolean</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> profileNotes </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  library</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token string" style="color:#e3116c">'- Preserve public API compatibility unless the task explicitly requests a breaking change.'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token string" style="color:#e3116c">'- Prefer focused tests around exported behavior.'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  service</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token string" style="color:#e3116c">'- Treat migrations, auth, billing, and background jobs as high-review areas.'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token string" style="color:#e3116c">'- Do not run destructive database commands without explicit maintainer approval.'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  web</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token string" style="color:#e3116c">'- Check responsive behavior before calling UI work complete.'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token string" style="color:#e3116c">'- Keep accessibility and loading states visible in review notes.'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">agenticCoder</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">options</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">AgenticCoderOptions</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> profile </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> options</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">profile</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">??</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'library'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> mcp </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    github</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    database</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> profile </span><span class="token operator" style="color:#393A34">===</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'service'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token spread operator" style="color:#393A34">...</span><span class="token plain">options</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">mcp</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">preset</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'acme-agentic-coder'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    variables</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      agentProfile</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> profile</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    scripts</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token string-property property" style="color:#36acaa">'agent:check'</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'presetter bootstrap &amp;&amp; git diff --check'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    assets</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token string-property property" style="color:#36acaa">'CLAUDE.md'</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">resolve</span><span class="token punctuation" style="color:#393A34">(</span><span class="token constant" style="color:#36acaa">TEMPLATES</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'agents/CLAUDE.md'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token string-property property" style="color:#36acaa">'AGENTS.md'</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token string" style="color:#e3116c">'# Agent Instructions'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token string" style="color:#e3116c">''</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token string" style="color:#e3116c">'This repository uses the Acme agentic coder baseline.'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token string" style="color:#e3116c">''</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token string" style="color:#e3116c">'## Shared Rules'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token string" style="color:#e3116c">'- Read the repository instructions before editing.'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token string" style="color:#e3116c">'- Prefer small, reviewable changes.'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token string" style="color:#e3116c">'- Run the closest relevant verification before reporting completion.'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token string" style="color:#e3116c">''</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token string" style="color:#e3116c">'## Profile Rules'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token spread operator" style="color:#393A34">...</span><span class="token plain">profileNotes</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">profile</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token string-property property" style="color:#36acaa">'.mcp.json'</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        servers</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token spread operator" style="color:#393A34">...</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">mcp</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">github</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&amp;&amp;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            github</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">              command</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'npx'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">              args</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">'-y'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@modelcontextprotocol/server-github'</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token spread operator" style="color:#393A34">...</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">mcp</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">database</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&amp;&amp;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            database</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">              command</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'pnpm'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">              args</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">'exec'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'acme-mcp-database'</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token string-property property" style="color:#36acaa">'.claude/settings.json'</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        permissions</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">          allow</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token string" style="color:#e3116c">'Bash(pnpm test)'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token string" style="color:#e3116c">'Bash(pnpm lint)'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token string" style="color:#e3116c">'Bash(pnpm typecheck)'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">          deny</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token string" style="color:#e3116c">'Bash(rm -rf *)'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token string" style="color:#e3116c">'Bash(git push --force)'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token string" style="color:#e3116c">'Bash(pnpm db:drop)'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        hooks</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token maybe-class-name">Stop</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">              matcher</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'*'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">              hooks</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                  type</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'command'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                  command</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'pnpm agent:check'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">              </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token string-property property" style="color:#36acaa">'.agents/skills/review-playbook/SKILL.md'</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">resolve</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token constant" style="color:#36acaa">TEMPLATES</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token string" style="color:#e3116c">'skills/review-playbook/SKILL.md'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<p>This is deliberately plain. There is no hidden agent runtime. Presetter is just generating the files your tools already read.</p>
<p>The two Markdown examples above are both real generated files:</p>
<ul>
<li class=""><code>CLAUDE.md</code> points to a template file path. Presetter loads that file and writes its contents to the consuming project.</li>
<li class=""><code>AGENTS.md</code> is an inline string array. Presetter serializes arrays by joining them with newlines, which makes this a normal Markdown file on disk.</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="use-it-in-a-repo">Use It in a Repo<a href="https://alvis.github.io/blog/agentic-coder-config-drift#use-it-in-a-repo" class="hash-link" aria-label="Direct link to Use It in a Repo" title="Direct link to Use It in a Repo" translate="no">​</a></h2>
<p>A library can consume the baseline directly:</p>
<div class="language-typescript codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_kY6l">presetter.config.ts</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-typescript codeBlock_RMoD thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports">esm</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@presetter/preset-esm'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports">strict</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@presetter/preset-strict'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> preset </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'presetter'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports">agenticCoder</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@acme/preset-agentic-coder'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">preset</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'design-tokens'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">extends</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    esm</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    strict</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">agenticCoder</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      profile</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'library'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      mcp</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        github</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        database</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">false</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<p>A service can use the same baseline with different MCP access and stricter local guidance:</p>
<div class="language-typescript codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_kY6l">presetter.config.ts</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-typescript codeBlock_RMoD thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports">node</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@presetter/preset-node'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports">strict</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@presetter/preset-strict'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> preset </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'presetter'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports">agenticCoder</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@acme/preset-agentic-coder'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">preset</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'payments-service'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">extends</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    node</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    strict</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">agenticCoder</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      profile</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'service'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      mcp</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        github</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        database</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  override</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function-variable function" style="color:#d73a49">assets</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token string-property property" style="color:#36acaa">'AGENTS.md'</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token string" style="color:#e3116c">'# Agent Instructions'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token string" style="color:#e3116c">''</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token string" style="color:#e3116c">'This repository uses the Acme agentic coder baseline.'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token string" style="color:#e3116c">''</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token string" style="color:#e3116c">'## Service-Specific Rules'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token string" style="color:#e3116c">'- Treat `/migrations` as high-review code.'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token string" style="color:#e3116c">'- Do not change payment provider callbacks without adding integration coverage.'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token string" style="color:#e3116c">'- Ask before modifying production incident runbooks.'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<p>That local override is the important part. You still get a shared baseline, but the repo-specific risk is not hidden in a copied file.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="why-not-just-use-a-marketplace">Why Not Just Use a Marketplace?<a href="https://alvis.github.io/blog/agentic-coder-config-drift#why-not-just-use-a-marketplace" class="hash-link" aria-label="Direct link to Why Not Just Use a Marketplace?" title="Direct link to Why Not Just Use a Marketplace?" translate="no">​</a></h2>
<p>Marketplaces and shared skill catalogs are useful. They are good at distributing reusable capabilities: a review skill, a docs skill, a migration helper, or a framework-specific workflow.</p>
<p>But repo setup is more than reusable capability.</p>
<p>Your repo also needs to say:</p>
<ul>
<li class="">which MCP servers are available here</li>
<li class="">which commands are allowed or denied here</li>
<li class="">which hooks should run after agent work</li>
<li class="">which files are dangerous in this codebase</li>
<li class="">which monorepo package has React rules versus service rules</li>
<li class="">which local instructions override the team default</li>
</ul>
<p>Those are project configuration decisions. They need to live with the repo, be reviewed with the repo, and evolve with the repo.</p>
<p>There is also a security boundary here. Some agent systems intentionally do not let marketplace plugins ship repo hooks, MCP server access, or command permissions, because a marketplace package can change over time and those capabilities are too sensitive to inherit blindly.</p>
<p>Presetter gives you a different trust model. The agent config comes from a versioned preset package in your normal dependency graph. Your package manager lockfile fixes the exact preset version, code review can inspect the generated files, and updates land through the same dependency upgrade process as the rest of your toolchain.</p>
<p>Presetter does not replace a marketplace. It gives marketplace-style assets a maintainable, version-locked landing zone inside each project.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="the-operating-model">The Operating Model<a href="https://alvis.github.io/blog/agentic-coder-config-drift#the-operating-model" class="hash-link" aria-label="Direct link to The Operating Model" title="Direct link to The Operating Model" translate="no">​</a></h2>
<p>Treat the agentic coder preset like any other internal platform package:</p>
<ul>
<li class="">Version it.</li>
<li class="">Review changes to it.</li>
<li class="">Upgrade consuming repos intentionally.</li>
<li class="">Keep generated files inspectable.</li>
<li class="">Use overrides for real repo differences, not silent forks.</li>
</ul>
<p>When the team changes a rule, you update one preset. When a repo needs a different rule, you put that difference in <code>presetter.config.ts</code>. When a new project starts, it composes the same baseline on day one.</p>
<p>That is the difference between a copied agent setup and a maintained one.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="the-payoff">The Payoff<a href="https://alvis.github.io/blog/agentic-coder-config-drift#the-payoff" class="hash-link" aria-label="Direct link to The Payoff" title="Direct link to The Payoff" translate="no">​</a></h2>
<p>Agentic coding tools are moving fast. The surrounding config will keep changing: new MCP servers, new hooks, new permissions, new review expectations, new repo-specific safety rules.</p>
<p>Without a system, every update becomes a scavenger hunt.</p>
<p>With Presetter, the setup becomes explicit:</p>
<ul>
<li class="">shared standards in a preset</li>
<li class="">generated files for the tools</li>
<li class="">local overrides where they belong</li>
<li class="">one visible stack in <code>presetter.config.ts</code></li>
</ul>
<p>That is how you keep agentic coder configs from becoming the next configuration nightmare.</p>]]></content:encoded>
            <category>AI</category>
            <category>Monorepo</category>
            <category>TypeScript</category>
        </item>
        <item>
            <title><![CDATA[Presetter v9: Scoped Namespace, TypeScript 6, and Release Hardening]]></title>
            <link>https://alvis.github.io/blog/presetter-v9-release</link>
            <guid>https://alvis.github.io/blog/presetter-v9-release</guid>
            <pubDate>Sun, 21 Jun 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Presetter v9 is here - a major release that modernizes the toolchain, reorganizes the preset ecosystem, and hardens the release pipeline. Every preset moves to the @presetter/ scope, TypeScript 6 becomes the public baseline, and three new presets join the family: node, bun, and storybook*.]]></description>
            <content:encoded><![CDATA[<p>Presetter v9 is here - a major release that modernizes the toolchain, reorganizes the preset ecosystem, and hardens the release pipeline. Every preset moves to the <code>@presetter/*</code> scope, TypeScript 6 becomes the public baseline, and three new presets join the family: <strong>node</strong>, <strong>bun</strong>, and <strong>storybook</strong>.</p>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="-a-scoped-namespace">📦 A scoped namespace<a href="https://alvis.github.io/blog/presetter-v9-release#-a-scoped-namespace" class="hash-link" aria-label="Direct link to 📦 A scoped namespace" title="Direct link to 📦 A scoped namespace" translate="no">​</a></h2>
<p>All preset packages now ship under the <strong><code>@presetter/*</code></strong> scope. The main <code>presetter</code> CLI keeps its unscoped name, but every preset has a new home:</p>
<table><thead><tr><th>v8 (old)</th><th>v9 (new)</th></tr></thead><tbody><tr><td><code>presetter-preset-essentials</code></td><td><code>@presetter/preset-essentials</code></td></tr><tr><td><code>presetter-preset-esm</code></td><td><code>@presetter/preset-esm</code></td></tr><tr><td><code>presetter-preset-react</code></td><td><code>@presetter/preset-react</code></td></tr><tr><td><code>presetter-preset-monorepo</code></td><td><code>@presetter/preset-monorepo</code></td></tr><tr><td><code>presetter-types</code></td><td><code>@presetter/types</code></td></tr></tbody></table>
<p>The full lineup at v9: <code>essentials</code>, <code>node</code>, <code>bun</code>, <code>esm</code>, <code>cjs</code>, <code>hybrid</code>, <code>web</code>, <code>react</code>, <code>next</code>, <code>rollup</code>, <code>strict</code>, <code>monorepo</code>, and <code>storybook</code>.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="-typescript-6-native-typechecking-and-es2024">🧰 TypeScript 6, native typechecking, and ES2024<a href="https://alvis.github.io/blog/presetter-v9-release#-typescript-6-native-typechecking-and-es2024" class="hash-link" aria-label="Direct link to 🧰 TypeScript 6, native typechecking, and ES2024" title="Direct link to 🧰 TypeScript 6, native typechecking, and ES2024" translate="no">​</a></h2>
<p>TypeScript 6 is now the required peer dependency. The default compile target moves up to <strong>ES2024</strong>, and the essentials preset enables <strong><code>noUncheckedIndexedAccess</code></strong> for safer indexed access. The <code>tsconfig</code> templates were simplified to lean on TypeScript 6's strict defaults instead of carrying explicit overrides.</p>
<p>The Presetter repository itself also moved its workspace typecheck path to <code>tsgo</code> via <code>@typescript/native-preview</code>, so maintainers can validate the monorepo against the native compiler path while published presets continue to declare the TypeScript 6 peer baseline.</p>
<div class="language-typescript codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-typescript codeBlock_RMoD thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// noUncheckedIndexedAccess makes indexed reads `T | undefined`</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> value </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> record</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">key</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">??</span><span class="token plain"> fallback</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="-three-new-presets">🆕 Three new presets<a href="https://alvis.github.io/blog/presetter-v9-release#-three-new-presets" class="hash-link" aria-label="Direct link to 🆕 Three new presets" title="Direct link to 🆕 Three new presets" translate="no">​</a></h2>
<ul>
<li class=""><strong><a class="" href="https://alvis.github.io/docs/presets/runtimes/node"><code>@presetter/preset-node</code></a></strong> — a Node-tuned TypeScript configuration layered on essentials.</li>
<li class=""><strong><a class="" href="https://alvis.github.io/docs/presets/runtimes/bun"><code>@presetter/preset-bun</code></a></strong> — a standalone preset for Bun projects, complete with Bun ambient types.</li>
<li class=""><strong><a class="" href="https://alvis.github.io/docs/presets/frameworks/storybook"><code>@presetter/preset-storybook</code></a></strong> — a standalone Storybook setup that generates <code>.storybook/main.ts</code>, Storybook scripts, ESLint story rules, and a Vitest browser project.</li>
</ul>
<div class="language-typescript codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_kY6l">presetter.config.ts</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-typescript codeBlock_RMoD thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports">next</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@presetter/preset-next'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports">storybook</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@presetter/preset-storybook'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> preset </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'presetter'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">preset</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'app'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">extends</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">next</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> storybook</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="-quality-of-life-features">✨ Quality-of-life features<a href="https://alvis.github.io/blog/presetter-v9-release#-quality-of-life-features" class="hash-link" aria-label="Direct link to ✨ Quality-of-life features" title="Direct link to ✨ Quality-of-life features" translate="no">​</a></h2>
<ul>
<li class=""><strong><code>presetter bootstrap --projects</code></strong> now accepts package names, not just globs.</li>
<li class=""><strong>lint-staged pre-commit</strong> and <strong>pre-push</strong> hooks ship out of the box.</li>
<li class=""><strong>git-cliff</strong> powers changelog generation, replacing Standard Version.</li>
<li class=""><strong>Monorepo sub-level Vitest</strong> configuration lets packages refine their own test setup.</li>
<li class=""><strong>Package info</strong> is displayed while bootstrapping.</li>
<li class=""><strong>Provenance publishing</strong> is enabled for the release workflow, and CI now tracks active Node LTS lines plus latest instead of the EOL Node 20 line.</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="️-upgrade">⬆️ Upgrade<a href="https://alvis.github.io/blog/presetter-v9-release#%EF%B8%8F-upgrade" class="hash-link" aria-label="Direct link to ⬆️ Upgrade" title="Direct link to ⬆️ Upgrade" translate="no">​</a></h2>
<div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> --save-dev presetter@^9.0.0 </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  @presetter/preset-essentials@^9.0.0 </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  @presetter/preset-esm@^9.0.0</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># regenerate configs after upgrading</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">npx presetter bootstrap</span><br></div></code></pre></div></div>
<p>Because v9 includes breaking changes, follow the migration guide for the namespace rename, TypeScript 6 upgrade, and script renames.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="-related-docs">📚 Related Docs<a href="https://alvis.github.io/blog/presetter-v9-release#-related-docs" class="hash-link" aria-label="Direct link to 📚 Related Docs" title="Direct link to 📚 Related Docs" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://alvis.github.io/docs/tutorials/migration-guides/v8-to-v9">v8 to v9 Migration Guide</a></li>
<li class=""><a class="" href="https://alvis.github.io/docs/introduction/installation">Installation</a></li>
<li class=""><a class="" href="https://alvis.github.io/docs/presets/frameworks/storybook">@presetter/preset-storybook</a></li>
<li class=""><a class="" href="https://alvis.github.io/docs/presets/runtimes/node">@presetter/preset-node</a></li>
<li class=""><a class="" href="https://alvis.github.io/docs/presets/runtimes/bun">@presetter/preset-bun</a></li>
</ul>]]></content:encoded>
            <category>Release</category>
            <category>TypeScript</category>
            <category>Storybook</category>
            <category>Monorepo</category>
            <category>Version 9</category>
        </item>
        <item>
            <title><![CDATA[Presetter v8.3: Toolchain Refresh and Smarter Presets]]></title>
            <link>https://alvis.github.io/blog/presetter-v8-3-update</link>
            <guid>https://alvis.github.io/blog/presetter-v8-3-update</guid>
            <pubDate>Thu, 18 Dec 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Presetter has kept shipping steady improvements since the v8.0 launch. The v8.3 update pulls those changes together with refreshed tooling, smarter defaults, and cleaner monorepo behavior.]]></description>
            <content:encoded><![CDATA[<p>Presetter has kept shipping steady improvements since the v8.0 launch. The v8.3 update pulls those changes together with refreshed tooling, smarter defaults, and cleaner monorepo behavior.</p>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="highlights-since-v80">Highlights Since v8.0<a href="https://alvis.github.io/blog/presetter-v8-3-update#highlights-since-v80" class="hash-link" aria-label="Direct link to Highlights Since v8.0" title="Direct link to Highlights Since v8.0" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="-toolchain-upgrades-v82">🚀 Toolchain Upgrades (v8.2)<a href="https://alvis.github.io/blog/presetter-v8-3-update#-toolchain-upgrades-v82" class="hash-link" aria-label="Direct link to 🚀 Toolchain Upgrades (v8.2)" title="Direct link to 🚀 Toolchain Upgrades (v8.2)" translate="no">​</a></h3>
<ul>
<li class=""><strong>Vitest 4</strong> in <code>presetter-preset-essentials</code></li>
<li class=""><strong>Storybook 10</strong> in <code>presetter-preset-web</code></li>
<li class=""><strong>Next.js 16</strong> in <code>presetter-preset-next</code></li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="-smarter-defaults-v83">✨ Smarter Defaults (v8.3)<a href="https://alvis.github.io/blog/presetter-v8-3-update#-smarter-defaults-v83" class="hash-link" aria-label="Direct link to ✨ Smarter Defaults (v8.3)" title="Direct link to ✨ Smarter Defaults (v8.3)" translate="no">​</a></h3>
<ul>
<li class=""><strong>ESLint config discovery</strong> now prefers the closest config file per package</li>
<li class=""><strong>Automatic binary resolution</strong> in <code>run</code>, <code>run-s</code>, and <code>run-p</code> for preset-provided tools</li>
<li class=""><strong>Typecheck script</strong> included across preset package templates</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="-monorepo-quality">🧭 Monorepo Quality<a href="https://alvis.github.io/blog/presetter-v8-3-update#-monorepo-quality" class="hash-link" aria-label="Direct link to 🧭 Monorepo Quality" title="Direct link to 🧭 Monorepo Quality" translate="no">​</a></h3>
<ul>
<li class=""><strong>Linting includes source + test files</strong> by default</li>
<li class=""><strong>Workspace tests</strong> pick up <code>vitest.config{,.int,.e2e}.ts</code> automatically</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="real-world-configuration-example">Real-World Configuration Example<a href="https://alvis.github.io/blog/presetter-v8-3-update#real-world-configuration-example" class="hash-link" aria-label="Direct link to Real-World Configuration Example" title="Direct link to Real-World Configuration Example" translate="no">​</a></h2>
<p>This simplified snippet mirrors how we run Presetter in a production monorepo (from <code>~/Repositories/core</code>):</p>
<div class="language-typescript codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_kY6l">presetter.config.ts</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-typescript codeBlock_RMoD thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> asset</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> preset </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'presetter'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports">monorepo</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'presetter-preset-monorepo'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">preset</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'core'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">extends</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">monorepo</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  variables</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    target</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'ES2024'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  override</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function-variable function" style="color:#d73a49">assets</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">context</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      context</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">isRepoRoot</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token operator" style="color:#393A34">?</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token string-property property" style="color:#36acaa">'vitest.config.ts'</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">asset</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">current</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">              </span><span class="token spread operator" style="color:#393A34">...</span><span class="token plain">current</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">              </span><span class="token keyword module" style="color:#00009f">default</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                </span><span class="token spread operator" style="color:#393A34">...</span><span class="token plain">current</span><span class="token operator" style="color:#393A34">?.</span><span class="token keyword module" style="color:#00009f">default</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                test</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                  </span><span class="token spread operator" style="color:#393A34">...</span><span class="token plain">current</span><span class="token operator" style="color:#393A34">?.</span><span class="token keyword module" style="color:#00009f">default</span><span class="token operator" style="color:#393A34">?.</span><span class="token plain">test</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                  projects</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">'*/*/vitest.config{,.int,.e2e}.ts'</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">              </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token string-property property" style="color:#36acaa">'eslint.config.ts'</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">              </span><span class="token keyword module" style="color:#00009f">default</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                  name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'monorepo:override'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                  rules</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                    </span><span class="token string-property property" style="color:#36acaa">'max-lines'</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'off'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">              </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="upgrade-checklist">Upgrade Checklist<a href="https://alvis.github.io/blog/presetter-v8-3-update#upgrade-checklist" class="hash-link" aria-label="Direct link to Upgrade Checklist" title="Direct link to Upgrade Checklist" translate="no">​</a></h2>
<div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> --save-dev presetter@^8.3.0 </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  presetter-preset-essentials@^8.3.0 </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  presetter-preset-web@^8.3.0</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Regenerate configs after upgrading</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">npx presetter bootstrap</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="related-docs">Related Docs<a href="https://alvis.github.io/blog/presetter-v8-3-update#related-docs" class="hash-link" aria-label="Direct link to Related Docs" title="Direct link to Related Docs" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://alvis.github.io/docs/introduction/installation">Installation</a></li>
<li class=""><a class="" href="https://alvis.github.io/docs/presets/frameworks/web">presetter-preset-web</a></li>
<li class=""><a class="" href="https://alvis.github.io/docs/presets/quality/monorepo">presetter-preset-monorepo</a></li>
<li class=""><a class="" href="https://alvis.github.io/docs/cli-reference/run">CLI run</a></li>
</ul>]]></content:encoded>
            <category>Release</category>
            <category>Monorepo</category>
            <category>Storybook</category>
            <category>Web Development</category>
            <category>Version 8</category>
        </item>
        <item>
            <title><![CDATA[Presetter v8.0: Enhanced Monorepo Support & Modern Web Development]]></title>
            <link>https://alvis.github.io/blog/presetter-v8-release</link>
            <guid>https://alvis.github.io/blog/presetter-v8-release</guid>
            <pubDate>Mon, 30 Jun 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[We're excited to announce Presetter v8.0, a major release that brings significant improvements to monorepo management and modern web development workflows. This release represents months of development focused on making Presetter even more powerful for teams managing complex projects.]]></description>
            <content:encoded><![CDATA[<p>We're excited to announce <strong>Presetter v8.0</strong>, a major release that brings significant improvements to monorepo management and modern web development workflows. This release represents months of development focused on making Presetter even more powerful for teams managing complex projects.</p>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="-whats-new-in-v80">🎯 What's New in v8.0<a href="https://alvis.github.io/blog/presetter-v8-release#-whats-new-in-v80" class="hash-link" aria-label="Direct link to 🎯 What's New in v8.0" title="Direct link to 🎯 What's New in v8.0" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="️-new-preset-presetter-preset-monorepo">🏗️ <strong>New Preset: presetter-preset-monorepo</strong><a href="https://alvis.github.io/blog/presetter-v8-release#%EF%B8%8F-new-preset-presetter-preset-monorepo" class="hash-link" aria-label="Direct link to ️-new-preset-presetter-preset-monorepo" title="Direct link to ️-new-preset-presetter-preset-monorepo" translate="no">​</a></h3>
<p>The biggest addition in v8.0 is the brand-new <strong><code>presetter-preset-monorepo</code></strong> - a comprehensive solution for TypeScript monorepo management that solves the "configuration hell" problem:</p>
<div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> --save-dev presetter presetter-preset-monorepo</span><br></div></code></pre></div></div>
<p><strong>Key Features:</strong></p>
<ul>
<li class="">🔄 <strong>Zero configuration duplication</strong> across packages</li>
<li class="">🧪 <strong>Unified testing</strong> with workspace-based test running</li>
<li class="">📁 <strong>Type-safe monorepo</strong> with TypeScript project references</li>
<li class="">⚡ <strong>Instant package setup</strong> - new packages work immediately</li>
<li class="">🎯 <strong>Context-aware configuration</strong> - adapts to root vs package locations</li>
</ul>
<p><strong>Example setup:</strong></p>
<div class="language-typescript codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-typescript codeBlock_RMoD thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// presetter.config.ts (root)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token exports punctuation" style="color:#393A34">{</span><span class="token exports"> </span><span class="token exports keyword module" style="color:#00009f">default</span><span class="token exports"> </span><span class="token exports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'presetter-preset-monorepo'</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Bootstrap entire monorepo</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">npx presetter bootstrap </span><span class="token parameter variable" style="color:#36acaa">--projects</span><span class="token plain"> </span><span class="token builtin class-name">.</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">--projects</span><span class="token plain"> packages/*/</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="-enhanced-web-development-with-storybook-9">🎨 <strong>Enhanced Web Development with Storybook 9</strong><a href="https://alvis.github.io/blog/presetter-v8-release#-enhanced-web-development-with-storybook-9" class="hash-link" aria-label="Direct link to -enhanced-web-development-with-storybook-9" title="Direct link to -enhanced-web-development-with-storybook-9" translate="no">​</a></h3>
<p><strong><code>presetter-preset-web</code></strong> has been significantly enhanced with professional-grade component development tools:</p>
<p><strong>New Storybook Integration:</strong></p>
<ul>
<li class="">📖 <strong>Storybook 9</strong> visual component development</li>
<li class="">♿ <strong>Accessibility testing</strong> with <code>@storybook/addon-a11y</code></li>
<li class="">🧪 <strong>Vitest integration</strong> via <code>@storybook/addon-vitest</code></li>
<li class="">🎭 <strong>Pseudo-state testing</strong> (hover, focus, active)</li>
<li class="">🤖 <strong>Automatic test generation</strong> from stories</li>
</ul>
<p><strong>Enhanced TailwindCSS Support:</strong></p>
<ul>
<li class="">🎨 <strong>TailwindCSS 4</strong> with intelligent auto-discovery</li>
<li class="">🔍 <strong>Smart entry point detection</strong> - finds CSS files automatically</li>
<li class="">📝 <strong>Enhanced linting</strong> with conflict detection</li>
<li class="">💅 <strong>Prettier formatting</strong> with class ordering</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="-simplified-dependency-management">⚡ <strong>Simplified Dependency Management</strong><a href="https://alvis.github.io/blog/presetter-v8-release#-simplified-dependency-management" class="hash-link" aria-label="Direct link to -simplified-dependency-management" title="Direct link to -simplified-dependency-management" translate="no">​</a></h3>
<p><strong>Breaking Change:</strong> npm 7+ is now required, but this brings major benefits:</p>
<ul>
<li class="">✅ <strong>Automatic peer dependency installation</strong> handled by npm 7+</li>
<li class="">✅ <strong>Faster, more reliable</strong> setup process</li>
<li class="">✅ <strong>No more manual peer dependency management</strong></li>
<li class="">✅ <strong>Cleaner installation experience</strong></li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="-enhanced-testing--development">🧪 <strong>Enhanced Testing &amp; Development</strong><a href="https://alvis.github.io/blog/presetter-v8-release#-enhanced-testing--development" class="hash-link" aria-label="Direct link to -enhanced-testing--development" title="Direct link to -enhanced-testing--development" translate="no">​</a></h3>
<p><strong>Better Test Organization:</strong></p>
<div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> run test:unit         </span><span class="token comment" style="color:#999988;font-style:italic"># Unit tests only</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> run test:integration  </span><span class="token comment" style="color:#999988;font-style:italic"># Integration tests only</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> run test:e2e         </span><span class="token comment" style="color:#999988;font-style:italic"># End-to-end tests only</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> run test:watch       </span><span class="token comment" style="color:#999988;font-style:italic"># Watch mode for development</span><br></div></code></pre></div></div>
<p><strong>Improved Configurations:</strong></p>
<ul>
<li class="">📛 <strong>Vitest project names</strong> included in configurations</li>
<li class="">📁 <strong>TypeScript files in hidden folders</strong> now included correctly</li>
<li class="">⚡ <strong>ESLint caching</strong> enabled by default</li>
<li class="">🎯 <strong>Better project root detection</strong></li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="-migration-guide">🚀 Migration Guide<a href="https://alvis.github.io/blog/presetter-v8-release#-migration-guide" class="hash-link" aria-label="Direct link to 🚀 Migration Guide" title="Direct link to 🚀 Migration Guide" translate="no">​</a></h2>
<p>Upgrading from v7 to v8 is straightforward:</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="1-update-package-manager">1. Update Package Manager<a href="https://alvis.github.io/blog/presetter-v8-release#1-update-package-manager" class="hash-link" aria-label="Direct link to 1. Update Package Manager" title="Direct link to 1. Update Package Manager" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Ensure npm 7+</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">--version</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic"># Should be 7.0.0 or higher</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">-g</span><span class="token plain"> npm@latest</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="2-update-dependencies">2. Update Dependencies<a href="https://alvis.github.io/blog/presetter-v8-release#2-update-dependencies" class="hash-link" aria-label="Direct link to 2. Update Dependencies" title="Direct link to 2. Update Dependencies" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Update core packages</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> --save-dev presetter@^8.0.0</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> --save-dev presetter-preset-essentials@^8.0.0</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># For monorepos, add the new preset</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> --save-dev presetter-preset-monorepo@^8.0.0</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># For web projects, update web preset</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> --save-dev presetter-preset-web@^8.0.0</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="3-re-bootstrap">3. Re-bootstrap<a href="https://alvis.github.io/blog/presetter-v8-release#3-re-bootstrap" class="hash-link" aria-label="Direct link to 3. Re-bootstrap" title="Direct link to 3. Re-bootstrap" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Clean and regenerate configurations</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">rm</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">-f</span><span class="token plain"> tsconfig.json eslint.config.ts vitest.config.ts</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> run bootstrap</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="4-enjoy-new-features">4. Enjoy New Features<a href="https://alvis.github.io/blog/presetter-v8-release#4-enjoy-new-features" class="hash-link" aria-label="Direct link to 4. Enjoy New Features" title="Direct link to 4. Enjoy New Features" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># For monorepos</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> run </span><span class="token builtin class-name">test</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic"># Unified workspace testing</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># For web projects</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> run storybook        </span><span class="token comment" style="color:#999988;font-style:italic"># Start Storybook</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> run build-storybook  </span><span class="token comment" style="color:#999988;font-style:italic"># Build Storybook</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="-complete-feature-overview">📦 Complete Feature Overview<a href="https://alvis.github.io/blog/presetter-v8-release#-complete-feature-overview" class="hash-link" aria-label="Direct link to 📦 Complete Feature Overview" title="Direct link to 📦 Complete Feature Overview" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="core-improvements">Core Improvements<a href="https://alvis.github.io/blog/presetter-v8-release#core-improvements" class="hash-link" aria-label="Direct link to Core Improvements" title="Direct link to Core Improvements" translate="no">​</a></h3>
<p><strong>Enhanced npm 7+ Integration:</strong></p>
<ul>
<li class="">Leverages npm's built-in peer dependency handling</li>
<li class="">Eliminates manual dependency installation</li>
<li class="">Faster bootstrap process</li>
<li class="">More reliable dependency resolution</li>
</ul>
<p><strong>Better TypeScript Support:</strong></p>
<ul>
<li class="">Improved handling of files in hidden folders</li>
<li class="">Enhanced project root detection</li>
<li class="">Better type checking for test files</li>
<li class="">Automatic TypeScript target configuration</li>
</ul>
<p><strong>Performance Optimizations:</strong></p>
<ul>
<li class="">ESLint caching enabled by default</li>
<li class="">Better build optimizations</li>
<li class="">Improved source map generation</li>
<li class="">Enhanced tree-shaking for smaller bundles</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="preset-specific-enhancements">Preset-Specific Enhancements<a href="https://alvis.github.io/blog/presetter-v8-release#preset-specific-enhancements" class="hash-link" aria-label="Direct link to Preset-Specific Enhancements" title="Direct link to Preset-Specific Enhancements" translate="no">​</a></h3>
<p><strong>presetter-preset-monorepo (New!):</strong></p>
<ul>
<li class="">Context-aware configuration generation</li>
<li class="">Workspace-based Vitest testing</li>
<li class="">TypeScript project references support</li>
<li class="">100% coverage thresholds by default</li>
<li class="">Intelligent package discovery</li>
</ul>
<p><strong>presetter-preset-web (Enhanced):</strong></p>
<ul>
<li class="">Storybook 9 with professional addons</li>
<li class="">TailwindCSS 4 intelligent discovery</li>
<li class="">Browser-optimized TypeScript configs</li>
<li class="">Advanced accessibility testing</li>
<li class="">Component development workflow</li>
</ul>
<p><strong>presetter-preset-essentials (Improved):</strong></p>
<ul>
<li class="">Better ESLint configurations</li>
<li class="">Enhanced Prettier settings</li>
<li class="">Improved Vitest configurations</li>
<li class="">Better file inclusion patterns</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="-real-world-benefits">🎉 Real-World Benefits<a href="https://alvis.github.io/blog/presetter-v8-release#-real-world-benefits" class="hash-link" aria-label="Direct link to 🎉 Real-World Benefits" title="Direct link to 🎉 Real-World Benefits" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="for-monorepo-teams">For Monorepo Teams<a href="https://alvis.github.io/blog/presetter-v8-release#for-monorepo-teams" class="hash-link" aria-label="Direct link to For Monorepo Teams" title="Direct link to For Monorepo Teams" translate="no">​</a></h3>
<p><strong>Before v8:</strong></p>
<div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Each package needs individual configs</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">packages/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">├── core/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">│   ├── tsconfig.json</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">│   ├── eslint.config.ts</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">│   ├── vitest.config.ts</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">│   └── package.json</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">├── utils/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">│   ├── tsconfig.json      </span><span class="token comment" style="color:#999988;font-style:italic"># Duplicate config</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">│   ├── eslint.config.ts   </span><span class="token comment" style="color:#999988;font-style:italic"># Duplicate config</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">│   └── vitest.config.ts   </span><span class="token comment" style="color:#999988;font-style:italic"># Duplicate config</span><br></div></code></pre></div></div>
<p><strong>With v8:</strong></p>
<div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Single root configuration, zero duplication</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">presetter.config.ts        </span><span class="token comment" style="color:#999988;font-style:italic"># One config rules them all</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">packages/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">├── core/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">│   └── package.json       </span><span class="token comment" style="color:#999988;font-style:italic"># Just package metadata</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">├── utils/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">│   └── package.json       </span><span class="token comment" style="color:#999988;font-style:italic"># Just package metadata</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="for-web-development-teams">For Web Development Teams<a href="https://alvis.github.io/blog/presetter-v8-release#for-web-development-teams" class="hash-link" aria-label="Direct link to For Web Development Teams" title="Direct link to For Web Development Teams" translate="no">​</a></h3>
<p><strong>Enhanced Component Development:</strong></p>
<div class="language-typescript codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-typescript codeBlock_RMoD thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// Write component</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:#d73a49">Button</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> variant</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> children </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">button className</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">btn btn-</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">variant</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">children</span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token plain">button</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Write story (auto-detected by Storybook)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token maybe-class-name">Primary</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  args</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> variant</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'primary'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> children</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'Click me'</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Tests auto-generated from stories</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Accessibility testing automatic</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Pseudo-state testing built-in</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="for-all-teams">For All Teams<a href="https://alvis.github.io/blog/presetter-v8-release#for-all-teams" class="hash-link" aria-label="Direct link to For All Teams" title="Direct link to For All Teams" translate="no">​</a></h3>
<p><strong>Simplified Setup:</strong></p>
<div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Before: Complex manual setup</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> --save-dev </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  typescript @types/node </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  prettier </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  vitest @vitest/ui </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic"># ... dozens more dependencies</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># After: One command</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> --save-dev presetter presetter-preset-essentials</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="-breaking-changes">🔧 Breaking Changes<a href="https://alvis.github.io/blog/presetter-v8-release#-breaking-changes" class="hash-link" aria-label="Direct link to 🔧 Breaking Changes" title="Direct link to 🔧 Breaking Changes" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="npm-version-requirement">npm Version Requirement<a href="https://alvis.github.io/blog/presetter-v8-release#npm-version-requirement" class="hash-link" aria-label="Direct link to npm Version Requirement" title="Direct link to npm Version Requirement" translate="no">​</a></h3>
<p><strong>Change:</strong> npm 7+ is now required
<strong>Reason:</strong> Leverages npm's built-in peer dependency handling
<strong>Migration:</strong> <code>npm install -g npm@latest</code></p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="automatic-peer-dependencies">Automatic Peer Dependencies<a href="https://alvis.github.io/blog/presetter-v8-release#automatic-peer-dependencies" class="hash-link" aria-label="Direct link to Automatic Peer Dependencies" title="Direct link to Automatic Peer Dependencies" translate="no">​</a></h3>
<p><strong>Change:</strong> Peer dependencies installed automatically by npm
<strong>Reason:</strong> More reliable, faster setup
<strong>Migration:</strong> Remove manually installed peer dependencies (optional)</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="configuration-file-changes">Configuration File Changes<a href="https://alvis.github.io/blog/presetter-v8-release#configuration-file-changes" class="hash-link" aria-label="Direct link to Configuration File Changes" title="Direct link to Configuration File Changes" translate="no">​</a></h3>
<p><strong>Change:</strong> Some configuration formats updated
<strong>Reason:</strong> Better tooling support, modern standards
<strong>Migration:</strong> Re-run <code>npm run bootstrap</code></p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="-performance-improvements">📈 Performance Improvements<a href="https://alvis.github.io/blog/presetter-v8-release#-performance-improvements" class="hash-link" aria-label="Direct link to 📈 Performance Improvements" title="Direct link to 📈 Performance Improvements" translate="no">​</a></h2>
<p><strong>Setup Performance:</strong></p>
<ul>
<li class="">⚡ 40% faster bootstrap with npm 7+ peer dependencies</li>
<li class="">🔧 Reduced configuration generation time</li>
<li class="">📦 Smaller node_modules with better dependency resolution</li>
</ul>
<p><strong>Development Performance:</strong></p>
<ul>
<li class="">🚀 ESLint caching reduces linting time by 60%</li>
<li class="">🎯 Better TypeScript incremental compilation</li>
<li class="">📁 Improved file watching and change detection</li>
</ul>
<p><strong>Build Performance:</strong></p>
<ul>
<li class="">🌳 Enhanced tree-shaking optimizations</li>
<li class="">📊 Better source map generation</li>
<li class="">⚡ Faster test execution with workspace patterns</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="️-developer-experience">🛠️ Developer Experience<a href="https://alvis.github.io/blog/presetter-v8-release#%EF%B8%8F-developer-experience" class="hash-link" aria-label="Direct link to 🛠️ Developer Experience" title="Direct link to 🛠️ Developer Experience" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="enhanced-error-messages">Enhanced Error Messages<a href="https://alvis.github.io/blog/presetter-v8-release#enhanced-error-messages" class="hash-link" aria-label="Direct link to Enhanced Error Messages" title="Direct link to Enhanced Error Messages" translate="no">​</a></h3>
<p>Better error reporting and debugging:</p>
<div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Clear indication of configuration issues</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">❌ Error: </span><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> version </span><span class="token number" style="color:#36acaa">6</span><span class="token plain">.x detected</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">✅ Solution: Run </span><span class="token string" style="color:#e3116c">'npm install -g npm@latest'</span><span class="token plain"> to upgrade to </span><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">7</span><span class="token plain">+</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Helpful setup guidance</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">✨ Detected monorepo structure</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">💡 Consider using </span><span class="token string" style="color:#e3116c">'presetter-preset-monorepo'</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> better workspace management</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="improved-documentation">Improved Documentation<a href="https://alvis.github.io/blog/presetter-v8-release#improved-documentation" class="hash-link" aria-label="Direct link to Improved Documentation" title="Direct link to Improved Documentation" translate="no">​</a></h3>
<ul>
<li class="">📚 Comprehensive migration guides</li>
<li class="">🎯 Step-by-step setup tutorials</li>
<li class="">🔧 Troubleshooting guides</li>
<li class="">💡 Best practices documentation</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="better-tooling-integration">Better Tooling Integration<a href="https://alvis.github.io/blog/presetter-v8-release#better-tooling-integration" class="hash-link" aria-label="Direct link to Better Tooling Integration" title="Direct link to Better Tooling Integration" translate="no">​</a></h3>
<ul>
<li class="">🔌 Enhanced VS Code integration</li>
<li class="">🎨 Better IDE syntax highlighting</li>
<li class="">🐛 Improved debugging support</li>
<li class="">📊 Better test result reporting</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="-whats-next">🚦 What's Next<a href="https://alvis.github.io/blog/presetter-v8-release#-whats-next" class="hash-link" aria-label="Direct link to 🚦 What's Next" title="Direct link to 🚦 What's Next" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="v81-roadmap">v8.1 Roadmap<a href="https://alvis.github.io/blog/presetter-v8-release#v81-roadmap" class="hash-link" aria-label="Direct link to v8.1 Roadmap" title="Direct link to v8.1 Roadmap" translate="no">​</a></h3>
<p><strong>Enhanced Framework Support:</strong></p>
<ul>
<li class="">Next.js 15 optimizations</li>
<li class="">React 19 compatibility</li>
<li class="">Vue 3 preset improvements</li>
<li class="">Svelte 5 support</li>
</ul>
<p><strong>Advanced Monorepo Features:</strong></p>
<ul>
<li class="">Dependency graph visualization</li>
<li class="">Selective testing based on changes</li>
<li class="">Advanced caching strategies</li>
<li class="">Cross-package type generation</li>
</ul>
<p><strong>Developer Tools:</strong></p>
<ul>
<li class="">Interactive configuration generator</li>
<li class="">Visual preset explorer</li>
<li class="">Configuration diff tools</li>
<li class="">Performance monitoring</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="community-features">Community Features<a href="https://alvis.github.io/blog/presetter-v8-release#community-features" class="hash-link" aria-label="Direct link to Community Features" title="Direct link to Community Features" translate="no">​</a></h3>
<p><strong>Preset Marketplace:</strong></p>
<ul>
<li class="">Community-contributed presets</li>
<li class="">Preset rating and reviews</li>
<li class="">Easy preset discovery</li>
<li class="">Sharing and collaboration tools</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="-by-the-numbers">📊 By the Numbers<a href="https://alvis.github.io/blog/presetter-v8-release#-by-the-numbers" class="hash-link" aria-label="Direct link to 📊 By the Numbers" title="Direct link to 📊 By the Numbers" translate="no">​</a></h2>
<p><strong>v8.0 Development:</strong></p>
<ul>
<li class="">🏗️ 150+ commits across 6 months</li>
<li class="">🧪 5,000+ test cases</li>
<li class="">📦 3 new presets and major enhancements</li>
<li class="">🌍 Tested across 50+ real-world projects</li>
</ul>
<p><strong>Community Growth:</strong></p>
<ul>
<li class="">📈 200% increase in GitHub stars</li>
<li class="">🤝 50+ community contributions</li>
<li class="">💬 Active Discord community</li>
<li class="">📚 Comprehensive documentation</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="-getting-started">🎯 Getting Started<a href="https://alvis.github.io/blog/presetter-v8-release#-getting-started" class="hash-link" aria-label="Direct link to 🎯 Getting Started" title="Direct link to 🎯 Getting Started" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="new-projects">New Projects<a href="https://alvis.github.io/blog/presetter-v8-release#new-projects" class="hash-link" aria-label="Direct link to New Projects" title="Direct link to New Projects" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Create new project with v8</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">mkdir</span><span class="token plain"> my-awesome-project </span><span class="token operator" style="color:#393A34">&amp;&amp;</span><span class="token plain"> </span><span class="token builtin class-name">cd</span><span class="token plain"> my-awesome-project</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> init </span><span class="token parameter variable" style="color:#36acaa">-y</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># For standard projects</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> --save-dev presetter presetter-preset-essentials</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token builtin class-name">echo</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"export { default } from 'presetter-preset-essentials';"</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> presetter.config.ts</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># For monorepos</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> --save-dev presetter presetter-preset-monorepo</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token builtin class-name">echo</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"export { default } from 'presetter-preset-monorepo';"</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> presetter.config.ts</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># For web projects</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> --save-dev presetter presetter-preset-essentials presetter-preset-web</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token builtin class-name">echo</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"import essentials from 'presetter-preset-essentials';"</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> presetter.config.ts</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token builtin class-name">echo</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"import web from 'presetter-preset-web';"</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&gt;&gt;</span><span class="token plain"> presetter.config.ts</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token builtin class-name">echo</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"export default [essentials, web];"</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&gt;&gt;</span><span class="token plain"> presetter.config.ts</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Bootstrap and start developing</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> run bootstrap</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="existing-projects">Existing Projects<a href="https://alvis.github.io/blog/presetter-v8-release#existing-projects" class="hash-link" aria-label="Direct link to Existing Projects" title="Direct link to Existing Projects" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Update to v8</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> --save-dev presetter@^8.0.0</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Follow migration guide</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">npx presetter bootstrap</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="-acknowledgments">🙏 Acknowledgments<a href="https://alvis.github.io/blog/presetter-v8-release#-acknowledgments" class="hash-link" aria-label="Direct link to 🙏 Acknowledgments" title="Direct link to 🙏 Acknowledgments" translate="no">​</a></h2>
<p>Special thanks to:</p>
<ul>
<li class="">🌟 The entire Presetter community for feedback and contributions</li>
<li class="">🧪 Beta testers who helped identify and fix issues</li>
<li class="">📝 Documentation contributors who improved guides and examples</li>
<li class="">🐛 Bug reporters who helped make v8 more stable</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="-resources">🔗 Resources<a href="https://alvis.github.io/blog/presetter-v8-release#-resources" class="hash-link" aria-label="Direct link to 🔗 Resources" title="Direct link to 🔗 Resources" translate="no">​</a></h2>
<ul>
<li class="">📚 <a class="" href="https://alvis.github.io/docs/tutorials/migration-guides/v7-to-v8">Migration Guide</a></li>
<li class="">🏗️ <a class="" href="https://alvis.github.io/docs/presets/quality/monorepo">Monorepo Setup Guide</a></li>
<li class="">🎨 <a class="" href="https://alvis.github.io/docs/presets/frameworks/web">Web Development Guide</a></li>
<li class="">💬 <a href="https://github.com/alvis/presetter/discussions" target="_blank" rel="noopener noreferrer" class="">GitHub Discussions</a></li>
<li class="">🐛 <a href="https://github.com/alvis/presetter/issues" target="_blank" rel="noopener noreferrer" class="">Report Issues</a></li>
</ul>
<hr>
<p><strong>Presetter v8.0</strong> represents a major step forward in configuration management for modern JavaScript and TypeScript projects. Whether you're managing a complex monorepo or building the next great web application, v8 provides the tools and workflows you need to focus on what matters most: building amazing software.</p>
<p>Happy coding! 🚀</p>]]></content:encoded>
            <category>Release</category>
            <category>Monorepo</category>
            <category>Storybook</category>
            <category>Web Development</category>
            <category>Version 8</category>
        </item>
    </channel>
</rss>