// contributing.md

CSS carries most of the weight here.
The rest is up to you.

FrontAlign ships as a JIT-compiled utility engine, a small attribute-driven runtime, and an OKLCH theming layer — maintained by the people who use it. If you have filed an issue, built a component, or fixed a typo in the docs, you have already contributed.

How the codebase thinks

Three constraints shape every pull request we accept. Read them before your first one.

--engine: css-first;

CSS carries the logic

Interactive states lean on :has(), :user-invalid, and logical properties wherever the platform allows it. JavaScript is the fallback, never the default.

--runtime: attribute-driven;

One attribute, no state

The runtime listens for fa-* attributes through a single delegated observer. No component instances, no framework-specific state to keep in sync.

--theme: oklch;

Color is a variable

Every shade in the system is computed in OKLCH. New components inherit theme, contrast, and dark mode automatically — never hardcode a color value.

Local setup

Three commands take you from a clone to a running dev build with hot-reloading utilities.

$ git clone https://github.com/frontalign/frontalign.git
$ cd frontalign && npm install
$ npm run dev

Coding conventions, commit format, and the review process are documented in CONTRIBUTING.md.

FrontAlign