Skip to Content

Stop fighting the framework.
Style Flutter your way.

Headless, accessible Flutter components with the behavior already handled. Style every pixel with Mix — the look is entirely yours.

final style = RemixButtonStyle()
    .color(const Color(0xFF00EB03))
    .labelColor(const Color(0xFF05040A))
    .paddingX(22)
    .paddingY(11)
    .borderRadiusAll(const Radius.circular(10))
    .onHovered(
      RemixButtonStyle().color(const Color(0xFF33FF36)),
    );
Waiting...
20+Live components
100%Headless & yours
0Override wars
BSD-3Free forever

Material hands you a look you then spend weeks overriding. Remix hands you behavior and gets out of the way, so styling becomes the part you actually enjoy.

Why Remix

Everything you need. Nothing you have to fight.

A foundation that handles the hard parts — behavior, focus, accessibility — and then disappears so your design can take over.

Headless by design

Behavior, focus, and state are handled. Remix has zero opinion on how it looks — that part is entirely yours.

Styled with Mix

Compose pixel-perfect styles with a fluent, type-safe API — variants, states, and tokens all in one place.

Accessible out of the box

Keyboard navigation and screen-reader support baked into every widget.

Define once, reuse everywhere

Share one style across your whole app. No drifting variants.

Real, running Flutter

Everything on this page is a live app — never a screenshot.

Components

Every component, running live on this page.

Real, running Flutter apps. Hover them, focus them, click them. Nothing here is a screenshot.

Waiting...

Button

Waiting...

TextField

Waiting...

Switch

Waiting...

Slider

Waiting...

Avatar

Styling

Define a look once. Reuse it everywhere.

Compose a style with Mix's fluent API, then share it across your whole app. No deep widget trees, no copy-pasted variants drifting out of sync.

  • Type-safe, fluent, and composable
  • Variants, states, and tokens in one place
  • Works on any Remix component
app_button.dart
final style = RemixButtonStyle()
    .color(const Color(0xFF00EB03))
    .labelColor(const Color(0xFF05040A))
    .paddingX(22)
    .paddingY(11)
    .borderRadiusAll(const Radius.circular(10))
    .onHovered(
      RemixButtonStyle().color(const Color(0xFF33FF36)),
    );
FAQ

Questions, answered.

Is it production-ready?

The component set is real, running, and usable in production apps today. Every component on this page is live proof. Remix is in Beta because the API is still evolving and new components and guides land continuously, not because the components are unstable.

How is it different from Material or Cupertino?

Material and Cupertino give you a look you then have to fight. Remix gives you behavior with no opinionated look, so you style every pixel with Mix. Full control, no override wars.

Do I need to know Mix first?

It helps, but no. Remix ships with sensible styles you can use immediately, then customize with Mix's fluent API as you grow.

Is it accessible and keyboard-navigable?

Yes. It is built into every component. You don't wire it up yourself.

Is Remix free?

Yes. Remix is open source and free. No tiers, no license fees, and it is BSD 3-Clause licensed.

Can I use it in a commercial app?

Yes. It is open source under BSD 3-Clause, so build whatever you want.

Build Flutter UI that's finally yours.

Open source, free, and in active Beta. Explore the components, read the docs, and shape it with the community.