Installation
Run the SolidJS version of Kumo locally and import its components.
Package Status
The SolidJS port currently lives in this monorepo as
@photon-ai/kumo-solid version 0.0.0. The package is
marked private while compatibility work is completed, so it is not available
from the public npm registry yet.
The original @cloudflare/kumo package remains the React package. This site
and all of its interactive examples now run against the SolidJS port.
Run the Documentation Site
From the repository root, install dependencies and start Astro’s development server:
pnpm install
pnpm --filter @photon-ai/kumo-solid build
pnpm --filter @cloudflare/kumo-docs-astro dev
The local site is available at http://localhost:4321. Astro renders the pages
on the server and hydrates interactive Solid components in the browser.
Install Package
While the package remains private, other workspace packages can depend on it with the workspace protocol:
{
"dependencies": {
"@photon-ai/kumo-solid": "workspace:*",
"echarts": "^6.0.0",
"solid-js": "^1.9.0"
}
}
After the Solid package is published, the consumer installation command will be:
pnpm add @photon-ai/kumo-solid solid-js echarts
solid-js and echarts are peer dependencies. ECharts is only needed by the
chart components, but declaring it at the application level keeps package
resolution predictable.
Import Components
Import components from the main package or use granular component exports:
Main Package Import
import { Button, Input, LayerCard } from "@photon-ai/kumo-solid";
Granular Import
import { Button } from "@photon-ai/kumo-solid/components/button";
import { Input } from "@photon-ai/kumo-solid/components/input";
Base UI Primitives
Kumo Solid is built on
Base UI Solid, an accessible,
unstyled primitive library for SolidJS. Kumo consumes
@photon-ai/base-ui-solid internally.
The Solid package does not currently re-export raw primitives. Import a styled Kumo component whenever one exists. For an advanced custom component, install Base UI Solid directly and compose its primitive with Kumo semantic tokens:
pnpm add @photon-ai/base-ui-solid
import { Popover } from "@photon-ai/base-ui-solid/popover";
Raw primitives are intentionally unstyled. Components built from them must supply their own states, semantic-token styling, and application-specific behavior.
Import Styles
Kumo provides two CSS distribution options.
For Tailwind CSS Users (Recommended)
Add the package build to Tailwind’s source scan and import Kumo before Tailwind:
Tailwind CSS v4 does not scan node_modules/ by default. Without the
@source directive, component utility classes can be omitted from the
generated stylesheet.
/* app.css or main.css */
@source "../node_modules/@photon-ai/kumo-solid/dist/**/*.{js,jsx,ts,tsx}";
@import "@photon-ai/kumo-solid/styles/tailwind";
@import "tailwindcss";
The @source path is relative to your CSS file. The default
@photon-ai/kumo-solid/styles export is equivalent to styles/tailwind.
For Non-Tailwind Users
Import the standalone build, which includes the compiled utilities used by Kumo:
import "@photon-ai/kumo-solid/styles/standalone";
Usage Example
CSS File (app.css)
@source "../node_modules/@photon-ai/kumo-solid/dist/**/*.{js,jsx,ts,tsx}";
@import "@photon-ai/kumo-solid/styles/tailwind";
@import "tailwindcss";
Solid Component (App.tsx)
import { Button, Input, LayerCard } from "@photon-ai/kumo-solid";
import "./app.css";
export default function App() {
return (
<LayerCard class="rounded-lg p-6">
<h1 class="mb-4 text-2xl font-bold">Welcome to Kumo</h1>
<Input placeholder="Enter your name..." class="mb-4" />
<Button variant="primary">Submit</Button>
</LayerCard>
);
}
Blocks vs Components
Components
Components are versioned package exports such as Button, Input, and
Dialog:
import { Button, Dialog, Input } from "@photon-ai/kumo-solid";
Blocks
Blocks are higher-level compositions whose source is copied into an
application. The blocks used by this documentation site have been ported to
SolidJS and live under src/components/kumo/.
The existing npx @cloudflare/kumo block installer emits React source. A
Solid-aware block installer has not been published yet. Until it is, copy the
Solid block implementation from this repository into your project.
import { PageHeader } from "./components/kumo/page-header/page-header";
Utilities
Kumo Solid also exports utilities for class composition, stable IDs, and router-link adaptation:
import { cn, LinkProvider, safeRandomId } from "@photon-ai/kumo-solid";
const className = cn("base-class", condition && "conditional-class");
const id = safeRandomId();
<LinkProvider component={YourAppLink}>
<App />
</LinkProvider>;