Tailwind CSS promised something radical — the ability to style rapidly without leaving your HTML or JSX. It did away with naming arguments and separated “what” from “how” through utility-first design. And it worked — in the beginning.
But speed has consequences. As our applications scaled, we began to see clear structural weaknesses in real-world Tailwind usage. Patterns that felt elegant in prototypes became fragile, entangled and opaque under pressure.
The problems weren’t about Tailwind itself, but how raw Tailwind usage broke down in larger systems including (but not necessarily limited to);
Tailwind gave us the power to build. But it gave us no rules to govern what we built.
We weren’t looking to replace Tailwind — we believed in its model. But we needed to wrap it in structure. We needed;
This is why we created the Named Style Object — or NSO.
An NSO is a Named Style Object — a clearly scoped, reusable style block declared in raw CSS (or structured TS object form or a hybrid of both), following Sentinel’s canonical grouping rules. It applies Tailwind utility tokens, but presents them in an organized, readable and maintainable structure.
Here is an example;
.auth-header {
/* 1. Layout */
display: flex;
justify-content: center;
/* 3. Text */
font-weight: theme(fontWeight.bold);
color: theme(colors.white);
/* 5. Visual Decoration */
text-shadow: 1px 1px 2px black;
}
It tells us what it styles, how it’s structured, and why it exists — all at a glance.
Tailwind v4 introduced a major upgrade: @theme blocks and full design token access through custom properties. This changed everything. Now we could;
This was the missing link. The upgrade that made NSOs not just helpful — but essential.
We no longer needed to choose between “utility speed” and “architecture.” Tailwind v4 let us have both — if we brought discipline to the format.
NSOs are that discipline.
Named Style Objects are covered in full in the next section — including formatting rules, canonical groupings, usage conventions and class-based scoping.