<?xml version="1.0" encoding="utf-8"?>
<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>eslint-plugin-vite Blog</title>
        <link>https://nick2bad4u.github.io/eslint-plugin-vite/blog</link>
        <description>eslint-plugin-vite Blog</description>
        <lastBuildDate>Sat, 21 Mar 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[Why eslint-plugin-vite centers config safety and Vitest workspaces]]></title>
            <link>https://nick2bad4u.github.io/eslint-plugin-vite/blog/config-safety-and-workspaces</link>
            <guid>https://nick2bad4u.github.io/eslint-plugin-vite/blog/config-safety-and-workspaces</guid>
            <pubDate>Sat, 21 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[When Vite projects go wrong, the problem is often not a generic syntax issue. It is usually a mismatch with one of Vite's runtime contracts:]]></description>
            <content:encoded><![CDATA[<p>When Vite projects go wrong, the problem is often not a generic syntax issue. It is usually a mismatch with one of Vite's runtime contracts:</p>
<ul>
<li class="">a config file exports the wrong shape</li>
<li class="">a client bundle relies on dynamic <code>import.meta.env</code> access</li>
<li class="">a workspace mixes test and benchmark APIs in ways that make results harder to trust</li>
<li class="">a server option disables a protection that Vite enables by default</li>
</ul>
<p>That is why <code>eslint-plugin-vite</code> is intentionally centered on config safety and workspace correctness.</p>
<h2 class="anchor anchorTargetStickyNavbar_SAay" id="a-focused-scope-keeps-the-plugin-useful">A focused scope keeps the plugin useful<a href="https://nick2bad4u.github.io/eslint-plugin-vite/blog/config-safety-and-workspaces#a-focused-scope-keeps-the-plugin-useful" class="hash-link" aria-label="Direct link to A focused scope keeps the plugin useful" title="Direct link to A focused scope keeps the plugin useful" translate="no">​</a></h2>
<p>General-purpose ESLint stacks already cover broad style and correctness concerns. This plugin earns its place by catching issues that those broader stacks typically do not model.</p>
<h2 class="anchor anchorTargetStickyNavbar_SAay" id="that-scope-also-shapes-the-presets">That scope also shapes the presets<a href="https://nick2bad4u.github.io/eslint-plugin-vite/blog/config-safety-and-workspaces#that-scope-also-shapes-the-presets" class="hash-link" aria-label="Direct link to That scope also shapes the presets" title="Direct link to That scope also shapes the presets" translate="no">​</a></h2>
<p>The current presets are organized around practical Vite workflows rather than generic severity tiers alone:</p>
<ul>
<li class="">config-file hardening</li>
<li class="">client runtime constraints</li>
<li class="">Vitest workspace correctness</li>
<li class="">benchmark/test separation</li>
</ul>
<p>As the rule set grows, keeping that workflow-oriented focus is more important than chasing raw rule count.</p>]]></content:encoded>
            <category>architecture</category>
            <category>vite</category>
            <category>vitest</category>
        </item>
        <item>
            <title><![CDATA[Establishing the eslint-plugin-vite baseline]]></title>
            <link>https://nick2bad4u.github.io/eslint-plugin-vite/blog/vite-baseline</link>
            <guid>https://nick2bad4u.github.io/eslint-plugin-vite/blog/vite-baseline</guid>
            <pubDate>Sat, 21 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[eslint-plugin-vite now has a clearer baseline for the things maintainers and users touch first: branding assets, docs navigation, ADRs, charts, and repository-wide validation.]]></description>
            <content:encoded><![CDATA[<p><code>eslint-plugin-vite</code> now has a clearer baseline for the things maintainers and users touch first: branding assets, docs navigation, ADRs, charts, and repository-wide validation.</p>
<p>That baseline work matters because the project is no longer a generic plugin template. The site, manifest, and docs structure need to communicate that this package is about Vite config safety, client-runtime correctness, and Vitest workspace discipline.</p>
<h2 class="anchor anchorTargetStickyNavbar_SAay" id="what-changed-in-the-baseline-pass">What changed in the baseline pass<a href="https://nick2bad4u.github.io/eslint-plugin-vite/blog/vite-baseline#what-changed-in-the-baseline-pass" class="hash-link" aria-label="Direct link to What changed in the baseline pass" title="Direct link to What changed in the baseline pass" translate="no">​</a></h2>
<ul>
<li class="">Vite-branded icons and favicon assets were generated for the docs site.</li>
<li class="">Docusaurus navigation now has dedicated maintainer-facing sections for ADRs and charts.</li>
<li class="">Mermaid support is enabled so architectural notes can stay visual and close to the codebase.</li>
<li class="">Template leftovers were trimmed so the public docs no longer read like a renamed scaffold.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SAay" id="why-this-matters-before-adding-more-rules">Why this matters before adding more rules<a href="https://nick2bad4u.github.io/eslint-plugin-vite/blog/vite-baseline#why-this-matters-before-adding-more-rules" class="hash-link" aria-label="Direct link to Why this matters before adding more rules" title="Direct link to Why this matters before adding more rules" translate="no">​</a></h2>
<p>A wider rule catalog is only helpful when the surrounding repo stays understandable and trustworthy. Maintaining a clean baseline keeps future rule work easier to explain, easier to review, and easier to release.</p>]]></content:encoded>
            <category>announcement</category>
            <category>docs</category>
            <category>branding</category>
        </item>
    </channel>
</rss>