Architecture
Design decisions are recorded as architecture decision records in
adrs/. Read them before proposing a change in
direction.
Crates
Section titled “Crates”| Crate | Role |
|---|---|
skif-cli |
The command line: argument parsing, exit codes, install step after fixes. |
skif |
Embeddable facade: discover a workspace, lint it and plan fixes without IO side effects. |
skif-config |
skif.toml model, loading, CLI overrides and the JSON Schema. |
skif-core |
Diagnostic, fix, report and filesystem types shared by the other crates. |
skif-workspace |
Workspace discovery for npm, pnpm, yarn and bun: packages, manifests and catalogs. |
skif-lint |
Rule engine: rule registry, diagnostic emitter and parallel runner. |
skif-rules |
Built-in manifest and workspace rules. |
skif-specifier |
npm dependency specifier parsing and comparison, vendored from syncpack. |
skif-edit |
Format-preserving JSON and YAML edits used by autofixes. |
skif-report |
Human, JSON, SARIF and GitHub renderers. |
skif-js |
JavaScript and TypeScript module graph and dependency rules, built on oxc. |
skif-js-syntax |
oxc-based module facts and static config extraction; never executes code. |
skif-js-plugins |
package.json script parsing and the declarative plugin table. |
skif-node |
The Node-API addon behind the npm package. |
Key decisions
Section titled “Key decisions”- Mission and scope
- Library-first embedding
- Configuration model
- Rule and diagnostic model
- Fix and edit model
- Version and catalog policies
- JS analysis on oxc
- CLI contract
The full list is the ADR index.
Pipeline
Section titled “Pipeline”skif-configresolves defaults, then the file, then CLI overrides.skif-workspacediscovers packages and reports facts; it never decides that a fact is a problem.skif-lintbuilds a registry from the rule providers, validates every rule’s options, and runs the rules in parallel. Rules emit diagnostics, optionally with fixes.skif-editturns fixes into aFixPlanof format-preserving edits; the CLI writes the plan.skif-reportrenders the report as human, JSON, SARIF or GitHub output.