Skip to content
GitHub

Asset

Asset manifests declare binary resources such as logos, pictograms, and fonts. Layouts refer to assets by metadata.name so that paths and URLs are centralized.

apiVersion: bino.bi/v1alpha1
kind: Asset
metadata:
  name: brandLogo
  description: Main brand logo used in report headers
spec:
  type: image            # image | file | font
  mediaType: image/png   # MIME type
  source:
    # exactly one of: inlineBase64 | localPath | remoteURL

Important fields:

  • spec.type – one of image, file, font.
  • spec.mediaType – MIME type, for example image/png, image/svg+xml, font/woff2.
  • metadata.description – optional free-form description of this asset.
  • spec.source.inlineBase64 – base64-encoded content embedded in the manifest.
  • spec.source.localPath – relative or absolute path to a file in your project.
  • spec.source.remoteURL – HTTP/HTTPS URL pointing to a remote asset.
---
apiVersion: bino.bi/v1alpha1
kind: Asset
metadata:
  name: brandLogo
  description: Main brand logo
spec:
  type: image
  mediaType: image/png
  source:
    localPath: ./assets/brand-logo.png
---
apiVersion: bino.bi/v1alpha1
kind: Asset
metadata:
  name: sampleReportPreview
  description: Sample report preview screenshot
spec:
  type: image
  mediaType: image/png
  source:
    remoteURL: https://via.placeholder.com/1200x800?text=Report+Preview
---
apiVersion: bino.bi/v1alpha1
kind: Asset
metadata:
  name: corporateHeadingFont
  description: Heading font for corporate reports
spec:
  type: font
  mediaType: font/woff2
  source:
    localPath: ./assets/fonts/corporate-heading.woff2

You can reference any non-font asset from Markdown content using the asset: URL scheme:

![Company Logo](asset:brandLogo)

At build time bino resolves asset:brandLogo to the actual URL based on the asset’s source type:

Source typeResolved URL
localPath/assets/files/brandLogo
remoteURLThe URL as-is
inlineBase64data:image/png;base64,…

If the name does not match any asset the image renders as a broken link (#asset-not-found:name).

This works in two contexts:

  1. DocumentArtefact – inside .md source files rendered via spec.sources.
  2. Text components – in the spec.value Markdown of Text, LayoutPage inline text children, and Grid text cells.

Given this asset:

---
apiVersion: bino.bi/v1alpha1
kind: Asset
metadata:
  name: companyLogo
spec:
  type: image
  mediaType: image/png
  source:
    localPath: ./assets/logo.png

Reference it from a DocumentArtefact markdown file:

# Annual Report

![Company Logo](asset:companyLogo)

Welcome to the 2025 annual report.

Or from a Text component:

---
apiVersion: bino.bi/v1alpha1
kind: Text
metadata:
  name: headerWithLogo
spec:
  value: "![Logo](asset:companyLogo) **ACME Corp**"
AttributeTypeRequiredDefaultDescription
apiVersionstringyesMust be bino.bi/v1alpha1.
kindstringyesMust be Asset.
metadata.namestringyesUnique asset identifier. Used to reference this asset from layouts.
metadata.labelsobjectnoKey-value pairs for categorization and constraint matching.
metadata.annotationsobjectnoArbitrary key-value metadata, not used by the system.
metadata.descriptionstringnoFree-form description of this asset.
metadata.constraintsarraynoConditional inclusion rules. See Constraints.
AttributeTypeRequiredDefaultDescriptionSample
spec.typestringyesAsset type. Values: image, file, font.type: image
spec.mediaTypestringyesMIME type of the asset.mediaType: image/png
spec.sourceobjectyesAsset source. Exactly one of inlineBase64, localPath, or remoteURL.see below
spec.source.inlineBase64stringconditionalBase64-encoded content embedded in the manifest.inlineBase64: iVBORw0KGgo...
spec.source.localPathstringconditionalRelative or absolute file path to the asset.localPath: ./assets/logo.png
spec.source.remoteURLstringconditionalHTTP/HTTPS URL pointing to a remote asset.remoteURL: https://example.com/logo.png