<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://nick2bad4u.github.io/eslint-plugin-vite/blog</id>
    <title>eslint-plugin-vite Blog</title>
    <updated>2026-03-21T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://nick2bad4u.github.io/eslint-plugin-vite/blog"/>
    <subtitle>eslint-plugin-vite Blog</subtitle>
    <icon>https://nick2bad4u.github.io/eslint-plugin-vite/img/favicon.ico</icon>
    <entry>
        <title type="html"><![CDATA[Why eslint-plugin-vite centers config safety and Vitest workspaces]]></title>
        <id>https://nick2bad4u.github.io/eslint-plugin-vite/blog/config-safety-and-workspaces</id>
        <link href="https://nick2bad4u.github.io/eslint-plugin-vite/blog/config-safety-and-workspaces"/>
        <updated>2026-03-21T00:00:00.000Z</updated>
        <summary type="html"><![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:]]></summary>
        <content type="html"><![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>
        <author>
            <name>Nick2bad4u</name>
            <uri>https://github.com/Nick2bad4u</uri>
        </author>
        <category label="architecture" term="architecture"/>
        <category label="vite" term="vite"/>
        <category label="vitest" term="vitest"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Establishing the eslint-plugin-vite baseline]]></title>
        <id>https://nick2bad4u.github.io/eslint-plugin-vite/blog/vite-baseline</id>
        <link href="https://nick2bad4u.github.io/eslint-plugin-vite/blog/vite-baseline"/>
        <updated>2026-03-21T00:00:00.000Z</updated>
        <summary type="html"><![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.]]></summary>
        <content type="html"><![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>
        <author>
            <name>Nick2bad4u</name>
            <uri>https://github.com/Nick2bad4u</uri>
        </author>
        <category label="announcement" term="announcement"/>
        <category label="docs" term="docs"/>
        <category label="branding" term="branding"/>
    </entry>
</feed>