Aurora UI

View Source

A free, MIT-licensed Phoenix LiveView + Tailwind UI kit. 15 cohesive, accessible, themeable component families with complete interaction states, purposeful motion, and an optional — separately bundled — Three.js experience layer. Server-rendered HEEx is always the source of truth; JavaScript only enhances.

Aurora UI is built and maintained by PHXTemplates. The source is genuinely free and will never sit behind an email gate.

CI Hex.pm License: MIT


Why Aurora UI

  • Accessible by construction. Every family targets WCAG 2.2 AA — real focus management, keyboard + touch parity, reduced-motion equivalents, forced-colors support, and restrained live regions. Not bolted on afterward.
  • Themeable without forking. Everything visual resolves to a --aui-* CSS custom property. Override the tokens in your own CSS; no recompile, no patched source, no PHXTemplates branding leaking into your app.
  • Pay only for what you render. Core components are plain Phoenix.Component functions. The command palette, enhanced combobox, advanced motion, and Three.js scene are separate JS entry points loaded lazily — a page that renders only a button ships none of them.
  • Removable. Copy a component into your app and delete the dependency, or use the Hex package. Either path is supported and documented.

Install

Add the dependency:

# mix.exs
def deps do
  [
    {:aurora_ui, "~> 0.1"}
  ]
end

Import the CSS (before your app layer) and register the hooks:

/* assets/css/app.css */
@import "aurora_ui/aurora_ui.css";
// assets/js/app.js
import { AuroraHooks } from "aurora_ui"

const liveSocket = new LiveSocket("/live", Socket, {
  params: { _csrf_token: csrfToken },
  hooks: { ...AuroraHooks }
})

Make the components available in your HTML helpers:

# lib/my_app_web.ex
defp html_helpers do
  quote do
    use AuroraUI            # imports all families
    # ...your existing imports
  end
end

Prefer a tighter surface? Import one family at a time instead:

import AuroraUI.Components.Actions
import AuroraUI.Components.Overlay

Then render:

<.button variant="primary">Save changes</.button>

<.dialog id="confirm" open={@open}>
  <:title>Delete project?</:title>
  <:description>This can't be undone.</:description>
  <.button variant="danger" phx-click="delete">Delete</.button>
</.dialog>

See the full docs & component lab or run them locally: cd demo && mix setup && mix phx.server.

The 15 families

#FamilyHighlights
1Actionsbutton, icon button, button group, link treatments
2Fieldinput, textarea, label/help/error, prefix/suffix, char count
3Choicescheckbox, radio group, switch, segmented control
4Selectionnative select, accessible enhanced combobox
5Navigationnavbar, sidebar, breadcrumbs, pagination, steps
6Tabs & disclosuretabs, accordion
7Overlaysdialog, alert dialog, drawer/sheet
8Floatingmenu, popover, tooltip
9Feedbackalert, toast, inline status, LiveView connection state
10Data displaycard, badge, avatar, stat, description list
11Data navigationtable, data grid, filter shell, empty state
12Loading/progressspinner, progress, skeleton, async/streaming
13Search/commandsearch field, results, command palette
14Media/contentaspect media, gallery, code block, prose, callout
15Experiencereveal/stagger, spotlight, tilt, Three.js scene host

Compatibility

DependencySupported
Elixir1.14 – 1.20
OTP25 – 27
Phoenix1.7+
Phoenix LiveView0.20 and 1.0
Tailwind3.4 and 4.x (tokens are framework-agnostic CSS variables)
Browserslast 2 versions of Chrome, Edge, Firefox, Safari (incl. iOS)

See docs/compatibility.md for the full support policy, deprecation window, and maintenance cadence.

Documentation

Contributing

Read AGENTS.md (the component contract) and CONTRIBUTING.md. Accessibility and security regressions are triaged ahead of new visual variants. By participating you agree to the Code of Conduct.

Stay in the loop (optional)

Want new-component announcements, recipes, and accessibility tips? Subscribe to the Aurora UI list — explicit opt-in, one-click unsubscribe, no tracking pixels. The source is free regardless; the newsletter is a bonus, never a gate.

License

MIT © 2026 Liam Killingback and the Aurora UI contributors. See LICENSE and third-party attributions in NOTICE.md.