Shared TypeScript, oxlint, and Rust configuration for stella public packages.
This repo intentionally contains only portable tooling policy:
@stll/typescript-config: strict TypeScript config presets.@stll/oxlint-config: general upstream oxlint rules and the sharedstella-lowercaseandno-raw-colorsJS plugins.rust/: source-of-truth Rust formatting, lint, and Cargo profile templates.rust-lints/: Dylint libraries for stella-specific Rust rules.
Repo-specific stella rules stay in the consuming repo: custom oxlint plugins, security rules, i18n rules, generated native artifacts, benchmark exceptions, and package-specific ignores.
Install the shared TypeScript and oxlint packages:
bun add -d @stll/typescript-config @stll/oxlint-config oxlint oxlint-tsgolint typescriptUse the library TypeScript preset:
{
"extends": "@stll/typescript-config/library.json",
"include": ["src"]
}Use the oxlint preset with local exceptions:
import { library } from "@stll/oxlint-config";
export default library({
ignorePatterns: ["dist/", "npm/", "*.node"],
overrides: [
{
files: ["scripts/**"],
rules: {
"no-console": "off",
},
},
],
});Use the helper directly as the root config when possible. That keeps root-level options, shared JS plugins, shared ignores, and local exceptions in one merged object.
If a repo needs the extends style used by other oxlint config packages, keep
repo-specific ignores in the root config:
import stella from "@stll/oxlint-config";
import { defineConfig } from "oxlint";
export default defineConfig({
extends: [stella],
ignorePatterns: ["dist/", "npm/", "*.node"],
});CommonJS repos can use require in oxlint.config.ts:
const { library } = require("@stll/oxlint-config");
module.exports = library();Recommended scripts:
{
"scripts": {
"typecheck": "tsc --noEmit",
"lint": "bun --bun oxlint -c oxlint.config.ts --report-unused-disable-directives-severity=error --deny-warnings --type-aware .",
"lint:fix": "bun --bun oxlint -c oxlint.config.ts --type-aware --fix ."
}
}Use the Rust templates by copying them into a Rust repository:
cp rust/rustfmt.toml /path/to/repo/rustfmt.toml
cp rust/clippy.toml /path/to/repo/clippy.toml
cp rust/dylint.toml /path/to/repo/dylint.tomlThen copy either rust/cargo-root.toml or rust/cargo-workspace.toml into the
repository's root Cargo.toml. Cargo does not support extending these settings
from another package, so the templates are kept here as the canonical source and
synced into consumers.
Pin the rev in dylint.toml to the exact tooling commit being adopted. Then
run Clippy first and Dylint second:
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo dylint --workspace --all -- --all-targets --all-features -- -D warnings