--- title: "Provide Context" description: "Provide a typed context value from a RadiantElement or RadiantController host." group: Context order: 2 --- # @provideContext Use `@provideContext(...)` to attach a context provider to a host. It works on both `RadiantElement` and `RadiantController` hosts. ## Example ```typescript import { RadiantElement, customElement } from '@ecopages/radiant'; import { createContext, provideContext, type ContextProvider } from '@ecopages/radiant/context'; type ThemeContext = { mode: 'light' | 'dark'; }; export const themeContext = createContext(Symbol('theme-context')); @customElement('theme-provider') export class ThemeProvider extends RadiantElement { @provideContext({ context: themeContext, initialValue: { mode: 'light' }, }) provider!: ContextProvider; } ``` ## Options | Option | Type | Description | | :-- | :-- | :-- | | `context` | `Context` | The typed context token to provide | | `initialValue` | `T` | Initial provider value | | `hydrate` | `String \| Number \| Boolean \| Object \| Array` | Serializes and restores provider state during SSR hydration | | `serialize` | `(value: T) => unknown` | Projects the live context into an SSR-safe hydration payload | ## SSR Hydration When `hydrate` is set, the provider can restore its context value from server-rendered hydration data. ```typescript @provideContext({ context: themeContext, initialValue: { mode: 'light' }, hydrate: Object, }) provider!: ContextProvider; ``` Use `serialize(...)` when the live client context includes members that should not be emitted into SSR JSON. ```typescript class ThemeLogger { log(message: string) { console.log(message); } } @provideContext({ context: themeContext, initialValue: { mode: 'light', logger: new ThemeLogger() }, hydrate: Object, serialize: ({ mode }) => ({ mode }), }) provider!: ContextProvider; ``` When `hydrate: Object` is active, the parsed payload merges back into `initialValue`, so omitted client-only members keep their defaults. When Radiant owns SSR for the host, prefer `renderComponent(...)` so hydration scripts are emitted as raw markup. Those SSR helpers live under `@ecopages/radiant/server/*`. Avoid placing JSON strings directly inside `