npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@dryui/lint

v1.2.0

Published

Svelte preprocessor that enforces DryUI layout, markup, and CSS rules.

Readme

@dryui/lint

Svelte preprocessor for DryUI projects.

It validates component code against DryUI rules during Svelte preprocessing. It is designed to catch layout, markup, and style violations early in dev and build.

This package does not ship a CLI binary. The public API is a library function:

import { dryuiLint, dryuiLayoutCss } from '@dryui/lint';

What It Enforces

  • Page layout rules for grid/flex/container CSS
  • No display: flex in scoped component styles
  • No inline styles
  • No width or inline-size layout sizing in scoped styles
  • Strict src/layout.css checks for page-level grid, flex, container, spacing, and alignment CSS
  • src/app.css must set a global body font family when present
  • No <!-- svelte-ignore css_unused_selector -->
  • No leaked agent transcript/tool artifacts such as toolu_*, <tool_use>, <tool_call>, <task-notification>, TaskOutput, TodoWrite, or analysis to=functions.exec_command
  • Additional DryUI markup and component usage rules

Install

npm install -D @dryui/lint

Use In svelte.config.js

import { dryuiLint } from '@dryui/lint';
import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';

/** @type {import('@sveltejs/kit').Config} */
const config = {
	preprocess: [
		dryuiLint({
			strict: true,
			exclude: ['.svelte-kit/', '/dist/']
		}),
		vitePreprocess()
	]
};

export default config;

Use In vite.config.ts

import { dryuiLayoutCss } from '@dryui/lint';

export default {
	plugins: [dryuiLayoutCss()]
};

dryuiLayoutCss() checks the canonical src/layout.css file and the canonical src/app.css file during Vite dev startup, HMR updates, and builds. Missing src/layout.css logs a warning only. src/app.css, when present, must set body { font-family: ... } so popovers, dialogs, and native top-layer content inherit app typography. Violations throw.

API

dryuiLint(options?)

Returns a Svelte PreprocessorGroup.

Options:

  • strict?: boolean When true, violations throw and fail the build. When false, violations are logged as warnings.
  • include?: string[] Substring patterns that opt files into linting. When set, non-matching files are skipped.
  • exclude?: string[] Substring patterns used to skip matching filenames.
  • includeDryuiPackages?: boolean First-party mode. Lints linked @dryui/* package source instead of skipping it as upstream dependency code.

Rules are always-on; there is no way to opt out of dryui/no-raw-element (raw native HTML tags) or dryui/no-raw-grid (raw CSS grid outside src/layout.css). Use [data-layout]/[data-layout-area] hooks for shell elements and route page-layout grid through src/layout.css.

checkLayoutCss(content, filename?, options?)

Validates canonical layout CSS. Allowed declarations cover page-level display, CSS grid, flexbox, container queries, spacing, block sizing, and box-alignment. Spacing declarations still use var(--dry-space-*), 0, token-only calc() values, and auto for margins. Selectors must target [data-layout] or [data-layout-area] hooks. @container wrappers are allowed.

checkAppCss(content, filename?)

Validates canonical app CSS. The current contract requires a body selector with a non-empty font-family declaration. The recommended value is var(--dry-font-sans).

dryuiLayoutCss(options?)

Returns a Vite-compatible plugin that checks src/layout.css and src/app.css in dev and build.

Options:

  • root?: string Project root. Defaults to Vite's resolved root.
  • file?: string Canonical layout CSS path relative to root. Defaults to src/layout.css.
  • appFile?: string | false Canonical app CSS path relative to root. Defaults to src/app.css. Set to false to skip global app CSS checks.

Notes

  • This package validates code. It does not rewrite or transform your source.
  • It is meant to be used from preprocess in Svelte or SvelteKit config.
  • If you need component lookup or lint-rule explanations inside an agent session, use the dryui-build skill sidecar (scripts/check-component.mjs) and its bundled data/component-manifest.json / data/lint-rules.json.