MeoNode UI
  • Getting Started
    • Overview
    • Installation
    • Usage
    • Styling
    • Theming
    • Rules & Patterns
    • Framework Integration
    • FAQ
    • Release Notes
  • Components

Overview — MeoNode UI

Type-safe React components without JSX

A production-ready component library that replaces JSX with function-based composition, featuring direct CSS prop styling, context-based theming, automatic memoization, and full React Server Components support—powered by @emotion/react.


Core Concept

MeoNode UI eliminates JSX while maintaining full React compatibility through functional composition. Style components with CSS properties as props, leverage automatic theme resolution via React Context, and benefit from intelligent caching without manual optimization.

JSX Pattern:

<div style={{ padding: '20px', borderRadius: '12px' }}>
  <h2 style={{ fontSize: '1.5rem', marginBottom: '8px' }}>{title}</h2>
  {children}
</div>

MeoNode Pattern:

Div({
  padding: '20px',
  borderRadius: '12px',
  backgroundColor: 'theme​.primary',
  children: [H2(title, { fontSize: '1.5rem', marginBottom: '8px' }), ...children],
})

Features

Function-Based Composition

Plain JavaScript functions replace JSX—no build transforms, no syntax extensions. Compose UIs as first-class function trees with full TypeScript inference.

Direct CSS-in-Props

Pass CSS properties directly to components. No separate styled-components declarations, no className juggling. All valid CSS properties work as props with full type safety.

Button('Submit', {
  padding: '12px 24px',
  backgroundColor: 'theme​.primary',
  borderRadius: 8,
  transition: 'all 0.2s ease',
  css: {
    ':hover': { transform: 'scale(1.05)' },
  },
})

Context-Based Theming

Theme values resolve automatically through React Context. Reference semantic tokens anywhere without prop drilling. Supports nested themes and dynamic switching.

ThemeProvider({
  theme: {
    mode: 'dark',
    system: {
      primary: { default: '#FF6B6B', content: '#4A0000' },
      spacing: { sm: 8, md: 16, lg: 24 },
    },
  },
  children: [
    /* your app */
  ],
})

Surgical Memoization

Memoize at node-level granularity—not just entire components. Control re-renders with precision by specifying dependency arrays directly on individual nodes.

Node-Level Memoization:

const UserCard = ({ user }) =>
  Div(
    {
      padding: 16,
      children: [
        H2(user.name), // Re-renders on any prop change
        Text(user.bio),
      ],
    },
    [user.id],
  ).render() // Only re-render when user.id changes

Component-Level Memoization:

Node(ExpensiveComponent, { data }, [data.id]).render()

React Server Components Compatible

Full RSC support with proper client/server component boundaries. Use in Next.js App Router, Remix, or any RSC-enabled environment without configuration.

Emotion-Powered Styling

Built on @emotion/react for:

  • Automatic critical CSS extraction
  • Vendor prefixing
  • Dead code elimination
  • Server-side rendering support

Smart Prop Differentiation

Automatically separates style props from DOM attributes. Pass onClick, aria-*, data-* alongside CSS props—MeoNode routes them correctly.

Button('Click Me', {
  padding: '12px', // → style
  color: 'theme​.primary', // → style
  onClick: handleClick, // → DOM attribute
  'aria-label': 'Submit', // → DOM attribute
  disabled: isLoading, // → DOM attribute
})

Quick Start

import { ThemeProvider, Center, Column, H1, Button, Text } from '@meonode/ui'

const theme = {
  mode: 'light',
  system: {
    primary: { default: '#FF6B6B', content: '#FFFFFF' },
    base: { default: '#F8F8F8', content: '#333333' },
  },
}

const App = () =>
  ThemeProvider({
    theme,
    children: [
      Center({
        padding: 40,
        backgroundColor: 'theme​.base',
        children: Column({
          gap: 24,
          children: [
            H1('MeoNode UI', {
              fontSize: '3rem',
              color: 'theme​.primary',
            }),
            Text('Type-safe React without JSX', {
              fontSize: '1.2rem',
              color: 'theme​.base.content',
            }),
            Button('Get Started', {
              backgroundColor: 'theme​.primary',
              color: 'theme​.primary.content',
              padding: '12px 24px',
              borderRadius: 8,
              cursor: 'pointer',
              onClick: () => console.log('Started!'),
            }),
          ],
        }),
      }),
    ],
  }).render()

Architecture

Component Factory System
Node factory + Component wrapper + semantic elements (Div, Button, etc.) enable both rapid prototyping and sophisticated component architectures.

Theme Resolution Engine
Context-based theme propagation with automatic value resolution. Nested theme objects inherit and override parent values without explicit passing.

Portal Management
First-class portal support for modals, tooltips, overlays—integrated with theme context for consistent styling across React trees.

CSS Engine
@emotion/react provides CSS-in-JS with automatic optimization, critical CSS extraction for SSR, and zero-runtime overhead in production builds.

Why MeoNode UI?

For Teams Building Design Systems:

  • Context-based theme propagation
  • Semantic token system ensures visual consistency
  • Component composition patterns scale naturally
  • Full TypeScript support catches design token errors

For Performance-Critical Applications:

  • Emotion's CSS optimization and caching
  • Surgical memoization at node granularity
  • SSR-ready with critical CSS extraction
  • RSC compatibility for modern React architectures

For Developer Productivity:

  • No JSX compilation overhead
  • Direct CSS-in-props reduces context switching
  • Intelligent prop routing (style vs DOM attributes)
  • Full autocomplete for all CSS properties
  • Composable function trees with first-class JavaScript

Next Steps

Ready to build React applications without JSX?

  • Installation: Step-by-step guide to installing @meonode/ui using Yarn or npm.
  • Usage: Learn the fundamental principles and common patterns for building user interfaces with @meonode/ui.
  • Styling: Advanced styling with css prop, pseudo-classes, media queries, and animations.
  • Theming: Learn how to customize your design system with the Context-based theming system.
  • Framework Integration: Learn how to integrate @meonode/ui with Next.js, Vite, and other React setups.
  • FAQ: Find answers to common questions and troubleshooting tips.
  • Release Notes: Stay updated with the latest changes and improvements.

On this page