Sass API

The Sass API is the framework's SCSS source, open since 3.2. A custom stack serves either an official released build or its own build compiled from this source; these pages document the build-your-own path. The TRMNL Platform always serves official builds.

TRMNL Platform trmnl.com
Custom Stack BYOS, trmnlp, ...

You never build or serve the framework. The TRMNL Platform renders every plugin against its official builds: recipes can pin a specific release, and the developer license lets a private plugin tie to one.

You choose the framework build your screens load: a released build straight from the releases CDN, or your own build compiled from this SCSS source.

<!-- plugins.css (platform-provided) -->
<!-- plugins.js (platform-provided) -->
<div class="screen">...</div>
<!-- Option 1: serve a released build -->
<link rel="stylesheet" href="https://usetrmnl.com/css/latest/plugins.css">
<script src="https://usetrmnl.com/js/latest/plugins.js"></script>

<!-- Option 2: compile and serve your own build -->
<link rel="stylesheet" href="/assets/plugins.css">
<script src="/assets/plugins.js"></script>
#

The source at a glance

Everything compiles from one entrypoint. plugins.scss loads the framework module (framework/index.scss), which composes the configuration, the mixins, and the style layers in a fixed cascade order.

// framework/index.scss: configuration and mixins load first,
// then every style lands in a declared cascade layer.
@forward 'config/custom';
@use 'config/tokens' as vars;
@use 'mixins' as mixins;

@layer tn--normalize, tn--elements, tn--components, tn--base,
    tn--device-overrides, tn--themes, tn--utilities;

Every rule lands in a tn-- prefixed cascade layer, so a custom stack can run the framework next to other CSS without specificity fights. The codebase is pure Dart Sass module system: @use and @forward throughout, no @import.

For the repository tour, the license, and the release pipeline, see Open Source .

#

Public and internal surface

Theme stylesheets have their own authoring contract built on the theme-slot mixins; it is documented on Authoring Themes and enforced by rake framework:themes:lint.

#

Go deeper