Unify Applications
Logo
Custom Components Overview

Custom Components Overview

Logo

5 mins READ

What Is a Custom Code-Component?

A custom code-component is a component your developers write in code and register with the platform, so builders can drop it onto a page like any built-in block. It lives as its own versioned entity — separate from any single app — with a name, one in-progress test version, and any number of promoted production versions.

Once registered, the same component can be reused across every app in the project. This is the developer path; for composing existing no-code blocks into a reusable component without code, use template components instead.

The Two Halves

These are two distinct parts of the same feature:

PartWhat it isWhere
Custom code-componentThe registered, versioned bundle of developer code. Created and versioned in the Custom Components manager. Does not appear on any page by itself.Applications → Custom Components manager
Custom blockThe on-canvas block that renders one of these components on a page. It picks a version of the component, feeds it the data you bind, and exposes its events to your page.Page builder → block picker

One component can back many Custom blocks across many apps and pages.

unify-applications-custom-components-overview-01-custom-block-on-canvas-inspector.png
unify-applications-custom-components-overview-01-custom-block-on-canvas-inspector.png

The Component Lifecycle

A custom code-component moves through four stages:

  1. Register. A developer creates the component in the Custom Components manager and gives it a name. See Registering & Versioning.

  2. Test. The component's in-progress work is served live from a manifest URL. Developers iterate and see changes without a formal release. See Registering & Versioning.

  3. Promote. When ready, it is packaged, uploaded, and deployed as a numbered production version — optionally tagged with release notes. See Registering & Versioning.

  4. Use. A builder adds a Custom block to a page, picks a version, and binds data and events. See Using in the Builder.

unify-applications-custom-components-overview-02-custom-components-manager.png
unify-applications-custom-components-overview-02-custom-components-manager.png

The Manifest

Both development and production versions rely on a manifest — a small manifest.json file the developer ships with the component. It tells the platform how to load and label the component:

FieldRequiredDescription
nameRequiredDisplay name shown in the builder
typeRequiredUnique type identifier. Must be unique across the project — duplicate types cause one to silently not appear.
mainRequiredThe component's main entry file
styleOptionalThe component's stylesheet
iconOptionalThe component's icon shown in the picker
keywordsOptionalSearch keywords for the block picker

A manifest looks roughly like this:

{ "name": "Gantt Chart", "type": "GanttChart", "main": "index.js", "style": "index.css", "icon": "icon.svg", "keywords": "gantt timeline schedule" }

Adding a Custom Component

From the Custom Components manager, click Add Component and choose a deployment mode:

ModeDescriptionInput required
DevelopmentTest and debug before sharing. Platform loads the component live from your local/dev URL.Manifest URL — the URL of your local manifest file
ProductionStable, optimized components ready for platform-wide use.Upload a packaged .zip, with optional version tag and release notes

When you upload a production build, the platform runs File Checks before saving — confirming the manifest file is present, the component type is defined, the UI code is included, and a component icon is available.

unify-applications-custom-components-overview-03-add-component-dialog.png
unify-applications-custom-components-overview-03-add-component-dialog.png

Pushing Data into a Custom Component

To push data into a custom component placed on a page, add an action (for example on a button's On Click), choose Trigger Component Method, pick the component, then choose a method. Two methods write data into the component:

  • Update State — writes to the component's own top-level state.

  • Update Data — writes into the component's data, one or more path-and-value pairs at a time. It merges rather than replaces, so setting a nested field leaves its siblings untouched.

The method list also shows general block methods, such as Export Block and Scroll Into View; they don't change the component's data. See Using Custom Components in the Builder.

unify-applications-custom-components-overview-04-pushing-data-update-state-update-data.png
unify-applications-custom-components-overview-04-pushing-data-update-state-update-data.png

When a Dev Component Is Blocked from Loading

If the canvas shows "Custom component blocked — The dev URL {host} isn't on this app's allowlist", the app's Content Security Policy doesn't allow your local or dev host. Use the Allow & reload action on that message. What it does is described in Using Custom Components in the Builder.

Project-Level Asset

A custom code-component is a project-level asset, not part of one app. Registering it once makes it available to every app in the project. A new production version becomes available everywhere the component is used — whether that's a good thing or requires careful versioning is up to you. Pin apps to a specific version if you need to isolate them from future promotions.

  • Registering & Versioning — creating, testing, and promoting versions

  • Using in the Builder — placing and wiring a custom component on a page

  • Template Components Overview — the no-code alternative to custom components

FAQs

Who should register and manage custom components?

Custom components are the developer path — a developer writes the component code and registers it. Builders (non-developers) then place the registered component on pages using the Custom block, just like any built-in component. The developer manages versions; the builder manages placement and data binding.

What's the difference between a custom code-component and a template component?

A custom code-component is written in code (JavaScript/TypeScript) for behavior the built-in blocks can't express — a Gantt chart, a rich map, a specialized visualization. A template component is built by composing existing no-code blocks into a reusable pattern. Use code when the built-in blocks aren't enough; use a template component when they are.

Can I use a custom component before it has a production version?

Yes — place a Custom block and choose the development version. But switch to a deployed version before publishing your app, so end users don't see unreleased work or suffer from a developer's mid-day redeploy.

What happens if two custom components declare the same type in the manifest?

Only the first one loaded is registered; the second silently never appears in the block picker. Each component's type in manifest.json must be unique across the entire project.