@sebastienrousseau/zig-config
v0.0.1
Published
Shareable Zig configuration providing standardized Zig Language Server (ZLS) and build formatting rules adhering to modern 2026 standards.
Maintainers
Readme
Contents
Getting started
- Install — npm, pnpm, yarn, bun, source
- Requirements — runtime floor, platform support
- Quick Start — import and extend in seconds
The configuration ecosystem
- The configuration ecosystem —
@sebastienrousseau/configfamily map at a glance
Configuration reference
- Why this approach? — design rationale and engineering principles
- Modern Zig Language Server & Build Standards — before and after rule comparison
- Module compatibility — dual CJS/ESM exports and TypeScript declarations
Operational
- When not to use this configuration — boundaries and limitations
- Development — make targets, validation, test suite
- Security — supply chain, audit policies, commit integrity
- Documentation — all reference docs
- Stability guarantees — SemVer axis, deprecation window
- Minimum-toolchain policy — runtime floor guarantees
- License — dual license terms
Install
Using a package manager
Install @sebastienrousseau/zig-config as a development dependency:
# npm
npm install --save-dev @sebastienrousseau/zig-config
# pnpm
pnpm add -D @sebastienrousseau/zig-config
# yarn
yarn add -D @sebastienrousseau/zig-config
# bun
bun add -d @sebastienrousseau/zig-configBuild from source
git clone https://github.com/sebastienrousseau/zig-config.git
cd zig-config
make # check + testRequirements
- Node.js 18.0.0 or newer. Every package manifest declares
engines.node, and CI enforces the runtime floor on every push across macOS, Linux, and Windows. - npm 9.0.0 or newer (or modern pnpm / yarn / bun).
- Module systems. Full native support for ECMAScript Modules (ESM) and CommonJS (CJS).
- Target environment: Optimized for Zig 0.13+ / ZLS.
Quick Start
In package.json
{
"zig": "@sebastienrousseau/zig-config"
}In CommonJS Configuration
const config = require("@sebastienrousseau/zig-config");
module.exports = config;In ES Module Configuration
import config from "@sebastienrousseau/zig-config";
export default config;The configuration ecosystem
@sebastienrousseau/zig-config is a focused satellite of the @sebastienrousseau/config suite — a unified ecosystem of single-purpose, zero-overhead developer configurations designed to share a single design philosophy, strict typing, and zero runtime dependencies.
| Configuration | Target / Purpose | Native Standard |
| :--- | :--- | :--- |
| @sebastienrousseau/biome-config | Rust-powered linting & formatting | Biome 1.9+ |\n| @sebastienrousseau/browserslist-config | Target browser matrix | Browserslist 4+ |\n| @sebastienrousseau/c-config | Modern C23 clang-format and clang-tidy rules | Clang 18+ / C23 |\n| @sebastienrousseau/c8-config | V8 native code coverage thresholds | c8 / V8 |\n| @sebastienrousseau/commitlint-config | Conventional Commits standard | Commitlint 19+ |\n| @sebastienrousseau/cpp-config | Modern C++23 clang-format, tidy & cmake rules | Clang 18+ / C++23 |\n| @sebastienrousseau/csharp-config | C# Roslyn analyzers and OmniSharp rules | .NET 8/9 / Roslyn |\n| @sebastienrousseau/dart-config | Dart and Flutter analysis_options presets | Dart 3.x / Flutter |\n| @sebastienrousseau/docker-config | Multi-stage Docker hardening | Hadolint / BuildKit |\n| @sebastienrousseau/eslint-config | Strict ECMAScript & TypeScript linting | ESLint 9+ Flat Config |\n| @sebastienrousseau/go-config | Golangci-lint, staticcheck, and revive rules | Go 1.22+ / golangci-lint |\n| @sebastienrousseau/java-config | Checkstyle, SpotBugs, and PMD rulesets | Java 21+ / Checkstyle |\n| @sebastienrousseau/jsdoc-config | Structured API documentation generation | JSDoc 4+ |\n| @sebastienrousseau/knip-config | Unused files, exports & dependencies audit | Knip 5+ |\n| @sebastienrousseau/kotlin-config | Official ktlint formatting and Detekt analysis | Kotlin 2.0+ / Detekt |\n| @sebastienrousseau/lefthook-config | Fast, parallel Git hook automation | Lefthook 1.7+ |\n| @sebastienrousseau/lua-config | Lua 5.4, Neovim LuaCheck and StyLua presets | Lua 5.4 / StyLua |\n| @sebastienrousseau/markdownlint-config | Markdown document style & structure | markdownlint-cli2 |\n| @sebastienrousseau/mocha-config | BDD testing settings & reporting | Mocha 10+ |\n| @sebastienrousseau/oxlint-config | Sub-millisecond Rust JavaScript linting | Oxlint |\n| @sebastienrousseau/php-config | PER-CS 2.0, PSR-12 and Level 8 PHPStan | PHP 8.3+ / PHPStan |\n| @sebastienrousseau/playwright-config | Cross-browser end-to-end testing | Playwright 1.40+ |\n| @sebastienrousseau/prettier-config | Deterministic code formatting | Prettier 3+ |\n| @sebastienrousseau/python-config | Hardened Ruff, Black, Flake8, and MyPy rules | Python 3.12+ / Ruff |\n| @sebastienrousseau/r-config | Lintr and styler presets for data science | R 4.3+ / lintr |\n| @sebastienrousseau/remark-config | AST-based markdown verification | Remark 13+ |\n| @sebastienrousseau/ruby-config | RuboCop and StandardRB rules for Ruby 3.3+ | Ruby 3.3+ / RuboCop |\n| @sebastienrousseau/rust-config | Hardened rustfmt formatting and Clippy lints | Rust 2021 / Clippy |\n| @sebastienrousseau/semantic-release-config | Tag-driven automated releases & changelogs | semantic-release 24+ |\n| @sebastienrousseau/shell-config | Strict ShellCheck static analysis & shfmt presets | POSIX / Bash / ShellCheck |\n| @sebastienrousseau/size-limit-config | Performance bundle budget enforcement | Size Limit 11+ |\n| @sebastienrousseau/sql-config | Dialect-aware SQLFluff linting & formatting | SQLFluff / ANSI SQL |\n| @sebastienrousseau/stylelint-config | Modern CSS & SCSS quality assurance | Stylelint 16+ |\n| @sebastienrousseau/swift-config | Strict SwiftLint rules & SwiftFormat presets | Swift 5.10 / SwiftLint |\n| @sebastienrousseau/tailwindcss-config | Utility-first design tokens & typography | Tailwind CSS 4+ |\n| @sebastienrousseau/tsconfig-config | Strict type checking & modern module resolution | TypeScript 5+ |\n| @sebastienrousseau/vitest-config | Lightning-fast Vite-native unit testing | Vitest 2+ |\n| @sebastienrousseau/zig-config | Hardened ZLS and build formatting rules | Zig 0.13+ / ZLS |
To adopt the complete suite with a single import, install the master meta-package:
npm install --save-dev @sebastienrousseau/configWhy this approach?
Configuration rot is one of the most common vectors for project decay. Ad-hoc tool configurations copied between repositories quickly drift, leaving security vulnerabilities unpatched, formatting rules inconsistent, and CI times bloated.
@sebastienrousseau/zig-config solves this with three deliberate engineering choices:
- Zero Runtime Dependencies: The configuration contains only static, serialisable declarative definitions and clean programmatic adapters.
- Dual CJS/ESM Architecture: Ships dedicated CommonJS (
index.cjs) and ES Module (index.mjs) entrypoints alongside comprehensive TypeScript declarations (index.d.ts). - Deterministic Governance: Versioned strictly by
+0.0.1per release, cryptographically signed with published PGP keys, and audited continuously.
Modern Zig Language Server & Build Standards
Standardizes ZLS language server options, build.zig.zon package definitions, and deterministic zig fmt style guidelines.
Before (Unstandardized)
// zls.json
{}After (@sebastienrousseau/zig-config Enforced)
// zls.json
{
"$schema": "https://raw.githubusercontent.com/zigtools/zls/master/schema.json",
"enable_autofix": true,
"enable_snippets": true,
"warn_style": true,
"highlight_global_var_declarations": true
}Module Compatibility
This package exports dual module entrypoints via package.json exports:
"exports": {
".": {
"types": "./index.d.ts",
"import": "./index.mjs",
"require": "./index.cjs"
}
}Full TypeScript declarations (index.d.ts) are included out of the box, providing rich IDE autocomplete and JSDoc documentation inline.
When not to use this configuration
When compiling against legacy pre-0.11 Zig compilers with incompatible build runners or syntax.
Development
Contributors use a standard POSIX Makefile as the convention-based task runner:
| Task | Command | Purpose |
| :--- | :--- | :--- |
| Default gate | make | Runs full test and lint battery |
| Unit tests | make test | Executes native validation test suite |
| Lints | make lint | Runs syntax and code quality checks |
| Clean | make clean | Removes node_modules and temporary cache |
git clone https://github.com/sebastienrousseau/zig-config.git
cd zig-config
make testSecurity
- Private Reporting: Report security vulnerabilities by emailing [email protected]. Expect an initial response within 48 hours and a mitigation plan within 7 days.
- Commit Integrity: All commits on
mainand release tags are cryptographically signed. - Release Signing Key: The release-signing PGP key is published in
KEYS.asc:
Signing key4B7F16C909C7A8EE9BED338A4F047EDF5F90F638Sebastien Rousseau <[email protected]>, ed25519, expires 2028-08-16. - Supply Chain: Monitored continuously via Dependabot, CodeQL, and SLSA provenance. See
SECURITY.mdfor details.
Documentation
- Architecture — Architectural design, directory structure, and invariants.
- Development Guide — Toolchain prerequisites, task reproduction, and CI gates.
- Governance — Maintainer-led project model and decision-making framework.
- Support Guide — Channels for help, bug reports, and feature requests.
- Ecosystem Suite — The
@sebastienrousseau/configfamily repository.
Stability guarantees
- SemVer Discipline: Versioning increments strictly by
+0.0.1following the repository lifecycle standard. - Output Stability: A rule change that alters linting or formatting output in consumer code is treated as a notable breaking event, clearly documented in
CHANGELOG.md. - Deprecation Window: Deprecated options or configurations remain supported for at least two release cycles before removal.
Minimum-toolchain policy
The minimum supported Node.js version is 18.0.0. The floor may raise only when:
- An upstream LTS version reaches official End-of-Life (EOL).
- The reason is explicitly recorded in
CHANGELOG.mdandDEVELOPMENT.md.
License
Dual-licensed under either:
- Apache License, Version 2.0 (
LICENSE-APACHE) - MIT License (
LICENSE-MIT)
at your option.
SPDX-License-Identifier: Apache-2.0 OR MIT
