Prerequisites
Setup required before using @osdk/react-components or @osdk/cbac-components.
Install dependencies
npm install @osdk/api@beta @osdk/client@beta @osdk/react@beta
npm install @osdk/react-components
npm install @osdk/cbac-components # if using CBAC components
npm install react react-dom classnames
Configure the OSDK client
Create an OSDK client and wrap your app with OsdkProvider2:
import { createClient } from "@osdk/client";
import { OsdkProvider2 } from "@osdk/react/experimental";
const client = createClient(
"https://your-stack.palantirfoundry.com",
"ri.ontology.main.ontology.00000000-0000-0000-0000-000000000000",
async () => {
// return your auth token
},
);
function App() {
return <OsdkProvider2 client={client}>{/* your app */}</OsdkProvider2>;
}
All component packages require an OsdkProvider2 wrapping your app. Without it, data fetching hooks will throw.
CSS setup
Components use CSS @layer for predictable theming. Add these imports to your application's entry CSS file (e.g., index.css).
Layers
| Layer | Purpose |
|---|---|
osdk.tokens | Design tokens (colors, spacing, typography) — the defaults |
osdk.components | Component structural styles (layout, borders, sizing) |
Later layers always win when styles conflict, regardless of selector specificity.
Without Tailwind
/* index.css */
@layer osdk.components, cbac.components;
@import "@osdk/react-components/styles.css" layer(osdk.components);
@import "@osdk/cbac-components/styles.css" layer(cbac.components); /* only needed if using CBAC components */
With Tailwind CSS v4
/* index.css */
@layer tailwind, osdk.components, cbac.components;
@import "tailwindcss" layer(tailwind);
@import "@osdk/react-components/styles.css" layer(osdk.components);
@import "@osdk/cbac-components/styles.css" layer(cbac.components); /* only needed if using CBAC components */
Custom theme overrides
Add a custom layer after the OSDK layers to override any token:
@layer osdk.components, user.brand;
@import "@osdk/react-components/styles.css" layer(osdk.components);
@import "@osdk/cbac-components/styles.css" layer(cbac.components); /* only needed if using CBAC components */
@import "./user-brand.css" layer(user.brand);
Portal isolation (required)
Components use Base UI portals, which require stacking context isolation:
.root {
isolation: isolate;
}
Apply this to your root element. See the Base UI docs for details.