NebulaKit is designed around authored composition rather than generated structure. Instead of hiding application architecture behind high-level abstractions, it encourages developers to build interfaces directly from a small set of predictable primitives and orchestration components. The goal is not to minimize JSX at all costs, but rather produce application code that remains understandable, compositional and resistant to entropy as projects grow.
Authored NebulaKit applications tend to share several structural characteristics:
NebulaKit favors explicit composition over hidden orchestration. Layout, grouping and structure are usually authored directly through primitives such as Box, Flex, Grid and Text. Components are intentionally built on top of one another using the same vocabulary exposed publicly to the user.
<Flex flexDirection="column" rowGap="sm"> <Section heading="Account"> <Form> ... </Form> </Section></Flex>Rather than replacing layout concepts with semantic aliases everywhere, NebulaKit preserves the underlying mental model of the web platform. This keeps authored UI predictable and easier to reason about over time.
NebulaKit intentionally avoids introducing abstractions purely to reduce repeated JSX. Repeated layout or repeated visual structure alone is usually not enough reason to create a new component. Higher-order abstractions are expected to emerge primarily from repeated behavioral orchestration.
For example:
toggling password visibility
coordinating overlay behavior
handling accessibility mechanics
synchronizing async interaction state
are strong candidates for reusable abstractions.
Meanwhile small presentation-specific patterns are usually expected to remain local to the application itself. This keeps the framework smaller while allowing applications to evolve their own domain language naturally.
NebulaKit components typically own rendering mechanics and accessibility behavior, while applications remain responsible for workflow orchestration.
For example:
Dialog manages focus, layering and dismissal behavior
Select manages dropdown interaction and keyboard navigation
Button manages interaction states and visuals
But applications still explicitly control:
navigation flow
async actions
overlay coordination
routing decisions
business workflows
This separation keeps application behavior visible instead of hiding it behind framework-specific APIs.
Responsive behavior is authored directly through responsive props instead of separate CSS files or generated utility classes.
<Grid gridTemplateColumns={{ base: '1fr', md: 'repeat(2, 1fr)', xl: 'repeat(4, 1fr)', }} gap="sm"/>NebulaKit intentionally preserves familiar layout concepts such as flexbox, grid, spacing and sizing instead of replacing them with framework-specific DSLs. Developers are still expected to understand the underlying concepts of the platform itself. NebulaKit reduces implementation friction, not platform literacy.
NebulaKit encourages applications to create their own lightweight local abstractions when repeated patterns become stable within a project. Small application-specific wrappers are preferred over framework-level expansion when the abstraction:
belongs to a single product area
represents domain semantics
does not introduce reusable behavioral infrastructure
This helps prevent abstraction creep inside the framework itself while keeping authored application code clean and maintainable.
NebulaKit is strongest when building structured application interfaces such as:
dashboards
admin panels
settings pages
onboarding flows
CRUD interfaces
authenticated application shells
documentation systems
internal tools
The system prioritizes:
explicit structure
compositional clarity
responsive predictability
architectural consistency
resistance to entropy
over ultra-short syntax or highly abstracted visual DSLs.
As applications grow, the authored code is expected to remain readable, editable and structurally obvious rather than increasingly magical or framework-driven.
Most NebulaKit applications naturally converge toward:
visible composition
explicit responsive behavior
primitive-first layout
restrained abstractions
local orchestration ownership
predictable architectural structure
The resulting code typically remains close to standard React mental models while reducing the amount of CSS infrastructure, styling coordination and UI orchestration developers need to build repeatedly across projects.