Frontile is a modern, accessible, and extensible component library for Ember.js applications. Built with Tailwind CSS and Tailwind Variants, Frontile provides the building blocks you need to create consistent, beautiful, and accessible user interfaces while following best practices from the Ember.js community.
Frontile aims to provide the legos (components, helpers, modifiers, and styles) necessary for building consistent and powerful Ember.js apps while following best practices from the community. Whether you're building a simple application or a complex design system, Frontile offers both low-level primitives and high-level components to meet your needs.
Get started with Frontile in just a few steps:
pnpm install frontile @frontile/theme
Add Frontile's theme configuration to your app/styles/app.css for Tailwind CSS v4:
@import 'tailwindcss' source('../../');
@plugin "@frontile/theme/plugin/default";
@import "@frontile/theme";
/* Tailwind skips node_modules when scanning for classes, so Frontile's own
templates have to be pointed at or their classes get purged. */
@source '../../node_modules/frontile';
@source '../../node_modules/@frontile';
Paths are relative to the CSS file. Under Vite the entry stylesheet is usually
app/app.css, one level shallower, so the sources become
'../node_modules/...'.
The dark variant comes from @import "@frontile/theme" — you do not need to
declare @custom-variant dark yourself, and the version the theme ships also
handles theme-inverse.
import Component from '@glimmer/component';
import { Button } from 'frontile';
export default class Example extends Component {
onPress = () => {
alert('Welcome to Frontile!');
};
<template>
<Button @intent='primary' @size='lg' @onPress={{this.onPress}}>
Get Started
</Button>
</template>
}
Note: The following packages are deprecated and will be removed before v1 release:
@frontile/changeset-form- Usefrontileforms instead@frontile/forms-legacy- Migrate to the newfrontileforms
Frontile follows a component composition pattern that prioritizes:
Frontile supports all modern browsers and follows Ember.js compatibility guidelines:
Frontile is currently in active development and approaching v1.0. While the API is stabilizing, breaking changes may still occur. We recommend using Frontile in production with appropriate version pinning.
Frontile draws inspiration from the excellent work of many frontend component libraries and design systems. We're grateful to these projects for paving the way and establishing patterns that make building accessible, beautiful user interfaces possible:
These projects have significantly influenced Frontile's approach to component design, accessibility, theming, and developer experience. We encourage you to explore these libraries as they represent some of the best practices in modern frontend development.
Ready to get started? Check out our Installation Guide to begin building with Frontile.