# Guide: Theme Without Redeploying

**Goal:** change your app's colors, spacing, or fonts — at zero gas, no redeploy.

Presentation is a render-time parameter. Pass a presentation context when you render:

```ts
import { renderComponent } from "@chainrender/client/runtime";

const html = await renderComponent({
  rpc, hash,
  context: { themeId: "0x<theme>", chartW: 960, chartH: 520 },
});
```

For **whole-page** spacing/font changes, override the design tokens — the component CSS is token-driven, so scaling
a spacing token re-flows the entire page. This happens in the browser (or via the render context) at **zero gas and
zero chain calls** during iteration; you seed a chosen theme on-chain only once, when it's final.

To commit a theme as your app's default, seed its CSS to the on-chain store and point your app at the new theme id.
See **[Concepts → Theming](../concepts/theming.md)**.
