Attribute-first
Describe your interface directly in markup. Spacing, colors, layout and typography stay close to the element.
Every spacing, color, and layout decision lives as an attribute on the element it styles — so a component still reads like the thing it renders, not a class-name index.
<section bg="surface" p="8" rounded="2xl" display="grid" grid-cols="1" md-grid-cols="2" gap="8">
<div>
<h1 font-size="5xl" font-weight="bold">
Build faster.
</h1>
<p text="muted">
Ship without the class soup.
</p>
</div>
<button bg="primary" text="white" px="6" py="3" rounded="lg">
Get started
</button>
</section>
WHY ATOMATTR
Every styling decision sits on the element it affects.
No fifteen-class utility strings, and no separate
stylesheet to cross-reference just to know what a
<div> looks like.
Describe your interface directly in markup. Spacing, colors, layout and typography stay close to the element.
Keep responsive behavior readable with attributes like
md-grid-cols="2" and
lg-grid-cols="4".
Bring the same styling concepts into React Native while respecting what each platform can actually do.
THE API
There's one place a style decision lives: the attribute
itself. Not a class, not a modifier, not a wrapper
component — just bg=, p=,
rounded=, spelled the way you'd say them.
Use simple attributes for spacing, layout, typography, borders and color.
Put breakpoint behavior exactly where it belongs.
Build interfaces around meaning instead of raw values.
<div
display="grid"
grid-cols="1"
md-grid-cols="2"
lg-grid-cols="4"
gap="4"
row-gap="2"
col-gap="3">
<article
bg="surface"
p="6"
rounded="xl"
border="border">
...
</article>
</div>
CROSS-PLATFORM
HTML and React Native have different rendering models. Atomattr gives you a consistent styling API without pretending those platforms are identical.
<div
display="grid"
grid-cols="3"
gap="4"
>
...
</div>
<View
display="grid"
grid-cols="3"
gap="4"
/>
COLOR SYSTEM
The primary color below isn't a screenshot — it's read
straight out of --aa-color-primary at render
time, in whichever mode your system is currently in.
Primary
Success
Warning
Danger
Palette shades
Live gradient
Tokens stay stable, palettes can change.
Text variation example
This preview demonstrates how text can adapt between light and dark modes using semantic color tokens.
Custom theme
A user can change these values in their theme configuration without changing the underlying semantic token names.
SOCIAL
Follow progress, ask questions, share experiments, and help shape the attribute API as it grows.
START SMALL
Open the docs, copy a pattern, and see how the markup feels before changing anything big in your project.