React, but set up already.

A batteries-included React stack that gives coding agents and developers a stable, opinionated surface — so you ship features, not config.

$ bunx create-rejoice-app@latest your_app_name

Requires Bun installed. That's it.

Read the docs

Connect MCP Server

Add the rejoice-js docs MCP server to your editor or agent.

claude mcp add --transport http rejoice-docs https://rejoice-docs-mcp-taxnvq53va-uc.a.run.app/mcp

Run this in your terminal. The server will be available in all Claude Code sessions.

codex mcp add rejoice-docs https://rejoice-docs-mcp-taxnvq53va-uc.a.run.app/mcp

Run this in your terminal. Adds the server to ~/.codex/config.toml.

Add to .cursor/mcp.json in your project root:

{
  "mcpServers": {
    "rejoice-docs": {
      "url": "https://rejoice-docs-mcp-taxnvq53va-uc.a.run.app/mcp"
    }
  }
}

Add a .mcp.json file to your project root:

{
  "mcpServers": {
    "rejoice-docs": {
      "type": "http",
      "url": "https://rejoice-docs-mcp-taxnvq53va-uc.a.run.app/mcp"
    }
  }
}

Works with any MCP-compatible client.

Everything you need. Nothing you don't.

What Why
TypeScript Full type safety out of the box. Zero-config JSX runtime — no import React needed.
Ant Design 5 24+ components pre-exported. Buttons, Forms, Modals, Tables, Layout — one import.
Zustand Lightweight state management with middleware. Built-in persistent theme store included.
Lucide Icons Beautiful, consistent icon set. Tree-shakeable — only icons you use ship to production.
Dark Mode Light and dark themes built in. Persistent via localStorage. One hook to toggle.
Bun Runtime Default bundler and runtime. Faster installs, faster builds, fewer moving parts.

Built for coding agents.

When an AI agent scaffolds a new app, it shouldn't have to choose between Tailwind or CSS Modules, Redux or Zustand, Webpack or Vite. Every choice is a coin flip that compounds into drift.

rejoice eliminates that entropy. One package, one import, one set of conventions. The agent always knows what's available, where it lives, and how to use it — because the answer never changes.

That's determinism: a stable surface that makes AI-generated code predictable, reviewable, and mergeable. No more "which UI library did the agent pick this time?"

// One import. Everything you need.
import {
  useState,
  Button,
  Card,
  styled,
  useTheme,
  create,
} from "rejoice-js";

const Counter = () => {
  const [count, setCount] = useState(0);
  const { isDarkMode } = useTheme();

  return (
    <Card title="Counter">
      <Button onClick={() => setCount(c => c + 1)}>
        {count}
      </Button>
    </Card>
  );
};

Don't confuse your agent, let it rejoice.

Back to top