Skip to main content
Every app feather new creates starts with a foundation, so the first page you build is not a blank stylesheet. app.css imports the stylesheet, base.html loads the script, and both are already wired when the project is created.

Start with the tokens

The tokens are Tailwind theme variables, so each one is both a CSS variable and a utility (bg-accent, text-ink-2, font-display, rounded-ui). Setting an app’s look means editing them, and their dark mode values, before building pages:
static/css/ui.css
Change those eight values and every button, field, card and dialog follows.

The components

Classes, used in your templates the way any named class is:
templates/pages/photos.html

Behaviours, with no JavaScript of your own

Add data-upload-progress to a form containing an uploader and it submits with a progress bar instead of a blank page.

Making it yours

Extend a class rather than replacing it:
static/css/app.css
Rules that apply to the foundation as they do to the rest of a Feather app: the classes live in CSS, not in template attributes, there are no inline styles or scripts, and dialogs and confirms are the framework’s, never the browser’s.
The foundation is copied into your project, so it is yours to edit. The macros and behaviours come from the framework, so a pin bump brings fixes to them.