Context

Pass values through resource boundaries without prop drilling.

The context API is experimental and not yet stable. It may change significantly in a future version.

Context lets you pass values through the resource tree without threading props through every level — the same idea as React's createContext / useContext.

createResourceContext

Create a context with a default value.

import { createResourceContext } from "@assistant-ui/tap";

const ThemeContext = createResourceContext("light");

Reading context

Read the current value of a context inside a resource with tap.

import { tap } from "@assistant-ui/tap";

const Button = resource(() => {
  const theme = tap(ThemeContext);
  // ...
});

withContextProvider

Provide a context value to all resources rendered within the callback.

import { withContextProvider } from "@assistant-ui/tap";

const App = resource(() => {
  const child = withContextProvider(ThemeContext, "dark", () => {
    return tapResource(Button());
  });

  return child;
});

Any resource rendered inside the callback — including deeply nested children — will read "dark" from ThemeContext.

Context is not properly persisted across tapResourceRoot boundaries. If a child resource is wrapped with tapResourceRoot, it may not see context values provided by its ancestors. This is a known bug.