Skip to main content

SDK: Palette

The Palette client provides methods for managing design tokens, registering components, exporting token bundles, and searching across the design system.

Access it via client.palette.

Tokens​

List design tokens​

const tokens = await client.palette.tokens.list();
// tokens: Token[]

Returns an array of Token objects:

interface Token {
id: string;
name: string;
value: string;
category: string;
description?: string;
createdAt: string;
}

Create a design token​

const token = await client.palette.tokens.create({
name: "color-primary",
value: "#2563eb",
category: "color",
description: "Primary brand color",
});

Components​

List components​

const components = await client.palette.components.list();
// components: Component[]

Returns an array of Component objects:

interface Component {
id: string;
name: string;
description: string;
props: ComponentProp[];
variants: ComponentVariant[];
createdAt: string;
}

interface ComponentProp {
name: string;
type: string;
required: boolean;
defaultValue?: string;
}

interface ComponentVariant {
name: string;
props: Record<string, string>;
}

Register a component​

const component = await client.palette.components.create({
name: "CalendarGrid",
description: "Renders a monthly calendar grid with selectable days",
});

Add a prop to a component​

await client.palette.components.addProp(component.id, {
name: "selectedDate",
type: "Date",
required: false,
defaultValue: "new Date()",
});

Add a variant to a component​

await client.palette.components.addVariant(component.id, {
name: "compact",
props: { size: "sm", showWeekNumbers: "false" },
});

Export​

Export all design tokens in a given format:

// Export as CSS custom properties
const css = await client.palette.export("css");
// :root { --color-primary: #2563eb; --spacing-sm: 0.5rem; ... }

// Export as JSON
const json = await client.palette.export("json");
// { "color-primary": "#2563eb", "spacing-sm": "0.5rem", ... }

Search across token names, component names, and descriptions:

const results = await client.palette.search("calendar");

Full Example​

import { createClient } from "@the-shift/sdk";

const client = createClient({
gatewayUrl: "https://app.the-shift.dev",
apiKey: process.env.SHIFT_API_KEY,
});

// Create design tokens
await client.palette.tokens.create({
name: "color-primary",
value: "#2563eb",
category: "color",
});

await client.palette.tokens.create({
name: "color-surface",
value: "#f8fafc",
category: "color",
});

await client.palette.tokens.create({
name: "spacing-sm",
value: "0.5rem",
category: "spacing",
});

await client.palette.tokens.create({
name: "font-family-sans",
value: "Inter, system-ui, sans-serif",
category: "typography",
});

// Register a component with props and variants
const grid = await client.palette.components.create({
name: "CalendarGrid",
description: "Monthly calendar grid with selectable days",
});

await client.palette.components.addProp(grid.id, {
name: "month",
type: "number",
required: true,
});

await client.palette.components.addProp(grid.id, {
name: "year",
type: "number",
required: true,
});

await client.palette.components.addVariant(grid.id, {
name: "compact",
props: { size: "sm" },
});

// Export tokens
const css = await client.palette.export("css");
console.log(css);

// Search
const results = await client.palette.search("calendar");
console.log(`Found ${results.length} results`);