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). The asset-reference-undefined lint rule reports this before you build.

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**"

Three properties take an image directly, rather than through Markdown:

PropertyKind
spec.messageImageLayoutPage — the message row logo
spec.titleImageLayoutCard — the card title logo
spec.sourceImage component

Each takes the metadata.name of an asset — with or without the asset: prefix — or an absolute URL:

spec:
  messageImage: companyLogo # or: asset:companyLogo

A bare file path is not a valid value. Assets are served only under /assets/files/<name>; bino does not serve your project directory, so messageImage: images/logo.png cannot load even when that file exists next to the manifest. Declare an Asset with a localPath source instead, and reference it by name.

Unresolvable references are reported by the asset-reference-undefined lint rule, and an asset whose localPath file is missing by asset-source-missing.

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