Renduo

Assets

Fonts and images you upload once and bake into template versions.

An asset is a font or image your organization owns, uploaded to a shared registry and baked into the templates that declare it. Because the render sandbox runs with the network blocked, a template can never fetch a resource at render time — the bytes must already be inside the baked shell. Assets are how brand fonts and logos get in.

Kinds & accepted formats

KindContent typesExtensions
fontwoff2, woff, ttf, otf.woff2 .woff .ttf .otf
imagepng, jpeg, webp, svg+xml.png .jpg .jpeg .webp .svg

Uploads are validated twice: the declared content type must be in the accepted list, and the file's real magic bytes must match what was declared (so a renamed .png posing as a font is rejected at the border, not at render time).

Naming

An asset name is a conservative slug: 2–64 characters, lowercase letters, numbers, and hyphens, starting and ending with a letter or number (e.g. acme-sans, company-logo). The name is the contract:

  • Fonts — the component uses it as the literal CSS font-family: font-family: 'acme-sans';
  • Images — the component reads it from the asset map: window.__RENDUO_ASSETS__['company-logo'] (returns a data URI ready for a src).

Uploading

Assets live at the organization level — a brand font is uploaded once and shared across templates. Upload via the CLI:

renduo assets push ./acme-sans.woff2 --name acme-sans
renduo assets list

or from the dashboard's Assets page. There is no per-file size cap beyond the limits below.

Declaring assets in a template

A template declares which assets it uses at push time. Only the declared assets are baked into the version's shell — never the whole registry — so a version only weighs what it actually uses:

renduo push Invoice.tsx --slug invoice --assets acme-sans,company-logo

If a declared asset doesn't exist, the push fails with a clear error at registration time — never at render time. In your component:

const props = JSON.parse(window.__RENDUO_PROPS__)
const logo = window.__RENDUO_ASSETS__['company-logo'] // data URI

Storage limits

Assets count against your plan's storage quota, not your template count:

PlanStorageMax assets
Free10 MB5
Starter100 MBunlimited
Growth500 MBunlimited
Enterprisecustomcustom

renduo assets list shows current usage vs. the limit.

Immutability

Assets are baked into the version. Re-uploading an asset does not change templates you already published, and deleting an asset does not break anything already published — it only stops you from declaring it in future versions. See templates & versions for the full reasoning.

See also

On this page