Rulix can be used as a TypeScript/JavaScript library. Install it as a dependency and import from "rulix".
npm install rulixThese functions compose lower-level APIs into single-call operations. They throw RulixError on failure.
Loads the full ruleset (config + rules) from a project directory.
import { loadRuleset } from "rulix";
const ruleset = await loadRuleset("./my-project");
// ruleset.rules — Rule[]
// ruleset.config — RulixConfigParameters:
projectRoot: string— Path to the project root
Returns: Promise<Ruleset>
Throws: RulixError if config is invalid or rules cannot be parsed.
Imports rules from a tool-specific format into canonical IR.
import { importRules } from "rulix";
const result = await importRules("cursor", "./my-project");
// result.rules — Rule[]
// result.warnings — ImportWarning[]
// result.source — string (e.g. ".cursor/rules/")Parameters:
adapterName: string— Adapter name ("cursor","claude-code")projectRoot: string— Path to the project root
Returns: Promise<ImportResult>
Exports canonical rules to a tool's native format.
import { exportRules } from "rulix";
const result = await exportRules("cursor", ruleset.rules, "./my-project", {
strategy: "overwrite",
dryRun: false,
});
// result.filesWritten — string[]
// result.filesDeleted — string[]
// result.warnings — ExportWarning[]Parameters:
adapterName: string— Target adapter namerules: Rule[]— Rules to exportprojectRoot: string— Path to the project rootoptions?: ExportOptions— Export options
Returns: Promise<ExportResult>
Validates a ruleset for structural issues.
import { loadRuleset, validateRuleset } from "rulix";
const ruleset = await loadRuleset("./my-project");
const result = validateRuleset(ruleset);
if (!result.passed) {
for (const error of result.errors) {
console.error(`${error.code}: ${error.message}`);
}
}Parameters:
ruleset: Ruleset— The ruleset to validate
Returns: ValidationResult
Returns token budget usage for a specific adapter.
import { getTokenBudget } from "rulix";
const usage = getTokenBudget("cursor", ruleset.rules);
// usage.used — number (tokens used)
// usage.max — number (token limit)
// usage.percent — number (0-100)
// usage.exceeded — booleanParameters:
adapterName: string— Adapter namerules: Rule[]— Rules to measure
Returns: TokenBudgetUsage
Lower-level functions for fine-grained control.
import { parseRule, serializeRule, loadRules, writeRule } from "rulix";Parses a Markdown string with YAML frontmatter into a Rule.
const result = parseRule(`---
id: my-rule
scope: always
description: "My rule"
---
Rule content here.
`);
if (result.ok) {
console.log(result.value); // Rule
}Returns: Result<Rule, RulixError>
Converts a Rule back to Markdown with frontmatter.
const markdown = serializeRule(rule);
// ---
// id: my-rule
// scope: always
// ...
// ---
// Rule content here.Returns: string
Reads all .rulix/rules/*.md files and parses them.
Returns: Promise<Result<Rule[], RulixError>>
Writes a single rule to .rulix/rules/{id}.md.
Returns: Promise<void>
import { loadConfig, resolveConfig, createDefaultConfig, configPath, rulesPath } from "rulix";Reads and validates .rulix/config.json. Returns defaults if the file doesn't exist.
Returns: Promise<Result<RulixConfig, RulixError>>
Pure validation: validates a raw object against the config schema and merges with defaults.
Returns: Result<RulixConfig, RulixError>
Returns a RulixConfig with all defaults applied.
Returns: RulixConfig
Returns the absolute path to .rulix/config.json.
Returns the absolute path to .rulix/rules/.
import { estimateTokens, estimateRuleTokens, sumTokens, computeBudgetUsage } from "rulix";Estimates token count for a string (~4 chars per token).
Returns: number
Estimates total tokens for a rule (content + description).
Returns: number
Sums an array of token counts.
Returns: number
Calculates budget usage percentage and exceeded flag.
Returns: TokenBudgetUsage
import { validateRules } from "rulix";Validates an array of rules for structural issues (V001-V012).
Parameters:
rules: Rule[]— Rules to validatetargets?: string[]— Optional adapter names. Enables target-specific checks (e.g. V011 for Cursor)
Returns: ValidationResult
import { getAdapter, getAdapters, getAdapterNames, detectAdapters } from "rulix";Returns an adapter by name, or undefined.
Returns all registered adapters.
Returns all adapter names as string[].
Auto-detects which tools have existing configs in the project.
Returns: Promise<RulixAdapter[]>
All types are exported from "rulix":
import type {
Rule,
RuleScope,
RuleCategory,
RuleSource,
Ruleset,
RulixConfig,
RulixConfigOptions,
RulixAdapter,
TokenBudget,
TokenBudgetUsage,
ExportOptions,
ExportResult,
ExportWarning,
ExportStrategy,
ImportResult,
ImportWarning,
ValidationResult,
ValidationIssue,
ValidationSeverity,
Result,
TokenEstimation,
} from "rulix";See the source types for full JSDoc documentation on each type.
The high-level API (loadRuleset, importRules, exportRules) throws RulixError on failure.
The core API uses the Result<T, E> pattern:
import { loadConfig, RulixError } from "rulix";
const result = await loadConfig("./my-project");
if (result.ok) {
console.log(result.value.targets);
} else {
console.error(result.error.code, result.error.message);
}RulixError always includes a machine-readable code string for programmatic handling.