Getting started
@togetheragency/ui is a collection of re-usable headless React components.
It ships raw, minimally styled primitives that you compose into your own design system —
with first-class animation support via motion and styling
hooks that play nicely with Tailwind CSS .
The library is authored and published by together.agency , initially for use across our internal projects. We’ve open sourced it so others can build on the same foundation we do.
Open sourced
@togetheragency/ui is free, MIT-licensed, and developed in the open. The
library was born out of patterns we found ourselves rewriting across client
work at together.agency .
- Peer-dep friendly.
react ^17 || ^18 || ^19,motion ^12, andtailwindcss ^4are peer dependencies — there’s no second copy of React or motion getting bundled into your app. - No build step. Components are shipped as raw source. Your bundler transpiles them alongside the rest of your code, so tree-shaking and source maps work the way you expect.
- Issues and PRs welcome. If something is missing, broken, or could be more ergonomic, open an issue or send a patch.
Composition
Every component in @togetheragency/ui is headless by default — it owns
behavior, state, and accessibility, and leaves the look and feel up to you.
That means:
- Composition over configuration. Instead of a giant prop surface, you get small primitives you compose into the exact shape your design calls for. Slots, render props, and forwardRef’d elements let you reach in wherever you need to.
- Bring your own styles. Default classes (when any exist) are minimal and
always overridable — pass
classNameand it merges last, so your styles win. You’re not fighting the library to make it look like your product. - Controlled or uncontrolled. Components support both patterns where it
makes sense, and expose internal state through
data-*attributes (e.g.data-state,data-open) so you can style or query against them.
AI-Ready
The library is built to be legible to humans and to coding agents alike. Files
are small, exports are explicit, folder layout is predictable, and every
component lives in its own directory with a README.md next to the source.
Each component ships with a focused skills entry — a
machine-readable description of the component’s API, intended usage, and
composition patterns — that you can feed directly to Claude Code, Cursor, or
any other agentic tool. Point your assistant at @togetheragency/ui and it can
scaffold, wire up, and customize components without hallucinating an API that
doesn’t exist.