Skip to main content
Version: 2026.8.0

Custom apps

Modules and bundles cover a lot, but sometimes you want a screen that's exactly yours: a picking view for a worker, a dashboard, a one-off tool. Custom apps let you build that on top of your data, without standing up a separate app.

An app is a set of pages, and a page is a stack of blocks. Blocks stay structured (there's no freeform canvas), which is what keeps a hand-built or AI-built app safe to render. If you've rearranged your dashboard, it's the same idea taken further: your own pages, your choice of pieces. You assemble a page block by block in the editor.

The blocks​

  • View: embed a saved view, with an optional title.
  • Record: show one record's detail, picked by an id from the page context.
  • Action: a button that runs a registered action, with your label on it.
  • Form: create or edit a record of some kind, showing only the fields you choose. This is how an intake page shows three fields instead of twenty.
  • Stat: a number over a view: a count, or a sum of a field. Dashboard tiles.
  • Markdown: instructions, headings, links, the prose between the working parts.
  • Scan: the capture surface, embedded where the job needs it.
  • Custom: your own code, sandboxed (below), for what the blocks can't say. The AI builder can write one from a description too.

Custom code, sandboxed​

A custom block is an HTML and JavaScript bundle the app player renders inside a sandboxed iframe. The code never holds a token and can't call the API directly: it asks for reads over a message channel, and the player fulfils them with a short-lived, capability-scoped credential. Untrusted code can never do more than the person viewing it could.

While you edit a custom block, a live preview renders it in that same sandbox, with real data scoped to your access, so what you see is what a member with your access gets. A refresh button re-runs it with your current code.

Read scope​

A custom app only sees the fields you give it. That boundary is the point: you can hand a worker a focused tool over part of your data without exposing the rest of the workspace. Pair it with People & permissions and members land straight in the app, with only the abilities you granted.

Make it look like yours​

An app can carry its own theme, because the point is that it looks like the builder's thing, not like Cobblr: colors, font, corner radius, a logo. Themes are validated tokens rather than raw CSS (a hex color can't inject a stylesheet), and a logo or font can be uploaded inline so a self-hosted app has no external dependencies. Anything unset falls back to Cobblr's defaults.