Skip to content

Latest commit

 

History

356 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Jess logo

Jess

Very early alpha. Jess is still settling. The usable public entry point right now is the jess CLI compiling .less. Expect rough edges, missing pieces, and change while the language and tooling settle. Please report bugs.

A stylesheet language and compiler for modern CSS-heavy codebases.

Jess is about keeping the parts people reach for preprocessors for - variables, reusable rules, functions, composition, and module boundaries - while staying close to CSS and the platform's direction. It is meant to give stylesheets more leverage without pushing teams into runtime styling or away from the platform.

Architecturally, Jess is growing toward a common stylesheet runtime: CSS, Less, SCSS/Sass+, and Jess parse into one canonical stylesheet model, then share the same evaluation and emission engine. The comparison is broad rather than literal, but the intent is similar to what the CLR did for .NET languages or LLVM did for compiler back ends: each language keeps its syntax while sharing a strong lower-level representation.

The alpha starts by earning trust on familiar Less workflows, then opens toward broader Jess syntax and composition over time. This repo is the home of the Jess compiler, parsers, CLI tools, and supporting packages. Docs live at jesscss.github.io.

Why Jess

  • CSS stays central. Jess is for stylesheet authoring, not runtime UI code.
  • Compile-time power. Variables, mixins, functions, and composition resolve ahead of time and ship as CSS.
  • A migration path, not a cliff. The alpha starts from familiar Less workflows while the broader Jess language takes shape.
  • Modern CSS friendly. Built to live with nesting, @layer, @scope, container queries, and the way the platform is moving.
  • A bigger language direction. The current shipping entry point is narrow, but the project is broader than a Less-only toolchain.

What you can use right now

The current alpha entry point is intentionally narrow so the engine can harden against real workloads first:

  • Write .less.
  • Compile with jess.
  • Keep the familiar Less mental model: variables, mixins, guards, nesting, extend, maps, operations, and built-in functions.
  • Preserve nesting by default; use --collapse-nesting if you want flattened selector output.

A quick feel

Jess the language is the bigger direction for the project, even though the public alpha currently starts with Less-compatible input. The shape it is growing toward looks more like this:

// Pull in styles from Less and Sass sources.
@-compose './theme.less' as theme;
@-compose './mixins.scss' as *;

// Jess keeps stylesheet authoring in CSS-space, but gives it richer composition.
.card {
  color: $theme.primary-color;
  $ > rounded(8px);

  & > .title {
    font-weight: 700;
  }
}

Two caveats on that snippet, since it is the shape and not the state of things: module resolution is not wired up yet (@-compose currently round-trips verbatim), and the parent selector & is deliberately still out of the .jess parser.

Repo layout

Jess is a pnpm monorepo. These are the major workspace packages today. Some supporting packages are still experimental, in flux, or likely to merge back into other packages as the alpha settles, so treat this as a map of the repo more than a forever package contract.

Package Role
jess Main CLI entry point for the current alpha.
@jesscss/core Compiler engine: AST, evaluation, and CSS emission.
@jesscss/css-parser Shared CSS base parser.
@jesscss/less-parser Less grammar on top of the CSS parser.
@jesscss/scss-parser Experimental SCSS grammar.
@jesscss/fns Built-in function library.
@jesscss/plugin-less Less language engine and defaults.
@jesscss/plugin-scss Experimental SCSS language engine.
@jesscss/plugin-less-compat AST-v2 native Less function contributions.
@jesscss/plugin-node-modules Module resolution from node_modules.
@jesscss/plugin-js JavaScript and TypeScript module imports.
@jesscss/style-resolver Import path resolution across stylesheet formats.
styles-config Shared configuration schema and loader.

Smaller helpers, tooling packages, and experiments also live under packages/, but not every workspace package should be read as a stable long-term public surface.

Install

npm install jess

Jess supports the current Node LTS line and the prior three LTS lines. The current derived floor is Node 18; it advances only when that rolling window advances.

CLI

# Compile a Less file to CSS (writes input.css next to it)
jess input.less

# Choose the output file, or an output directory
jess input.less output.css
jess input.less -o dist

Programmatic API

The CLI is the public surface today. The JavaScript/TypeScript API is still settling, so this README stays focused on the CLI. Watch the docs site for API docs as that surface firms up.

Contributing

Start here:

This repo uses pnpm (npm and yarn are blocked via only-allow):

pnpm install
pnpm -r build
pnpm test

Docs & license

About

If you like CSS, Less, Sass, and/or CSS modules, you're gonna want to star this repo.

Topics

Resources

Code of conduct

Contributing

Stars

29 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages