Ammolite is a CSS-in-JS library written in TypeScript.
- You are a professional TypeScript and CSS developer working on this repository.
- Do not hallucinate.
- Do not invent APIs, files, or behavior.
- Do not assume features that are not present in the repository.
- Do not introduce new dependencies unless explicitly requested.
- Preserve existing code style.
- Preserve file and directory structure.
This repository is a pnpm workspace.
packages/compiler- CSS-in-JS compiler (AST transforms, codegen, static extraction)packages/integration- Shared integration layer for build toolspackages/web- User-facing API
plugins/unplugin- Rollup, Vite, Webpackplugins/rsbuild- Rsbuild integrationplugins/next- Next.js Integrationplugins/postcss- PostCSS integration
tests/compiler- CSS-in-JS compiler teststests/plugins/core- Core package for plugin teststests/plugins/webpack- Webpack plugin teststests/plugins/webpack-postcss- Webpack PostCSS plugin teststests/plugins/rsbuild- Rsbuild plugin teststests/plugins/rsbuild-postcss- Rsbuild PostCSS plugin teststests/plugins/next-webpack- Next.js webpack plugin teststests/plugins/next-turbopack- Next.js Turbopack plugin teststests/plugins/rollup- Rollup plugin teststests/plugins/rolldown- Rollup plugin tests (Rolldown)tests/plugins/vite- Vite plugin teststests/plugins/vite-postcss- Vite PostCSS plugin teststests/web- User-facing API tests
-
packages/compilermust NOT depend on:packages/integrationpackages/web- any
plugins/*
-
packages/integrationmay depend on:packages/compiler
-
plugins/*may depend on:packages/compilerpackages/integration
-
packages/webmay depend on (mostly unnecessary):packages/compiler
-
tests/*may only depend on the package they test.
Do not introduce circular dependencies.
Language:
- TypeScript only.
- No
anyunless unavoidable. - All variables must have explicit types.
- All exported APIs must have explicit types.
Style:
- Functional programming only.
- No classes unless the codebase already uses one in that exact location.
- No OOP abstractions.
- No mutation unless required.
- Prefer pure functions.
- Prefer small composable utilities.
When modifying code:
- Prefer minimal diffs.
- Do not refactor unrelated code.
- Do not rename files or symbols unless they are incorrect.
- If behavior changes, update tests accordingly.
- Never change public API semantics without explicit instruction.
If uncertain about intended behavior:
- Prefer reading tests as source of truth.
- Do not guess.
If a change affects multiple packages:
- Update in dependency order (compiler → integration → plugins → web).
- Do not delete failing tests to fix errors.
- Do not weaken assertions.
- Add tests when adding new behavior.
- Keep test style consistent with existing tests.
- Avoid runtime allocations inside hot paths.
- Avoid unnecessary object cloning.
- Avoid non-deterministic behavior.
- Ensure stable output ordering where relevant.
- Compiler output must be deterministic.
The project uses:
- Node.js
- pnpm (workspace)
- just (task runner)
- ls-lint
- typos-cli
Always prefer just commands.
Never run raw pnpm unless explicitly required.
Install dependencies:
just iBuild:
just buildFormat:
just fmtLint:
just lintTest:
just test- Do not migrate tooling.
- Do not introduce frameworks.
- Do not add config files unless explicitly requested.
- Do not add formatting rules.
- Do not silently change build behavior.