Capabilities

Everything Cure can do, in one place.

Forms, UI flow, server flow and what sits behind them. The lists below are not written by hand — they are generated from the same catalogue the Studio editors are read into, so the page cannot quietly fall behind the product.

59
components
390
properties
49
UI flow nodes
19
server flow nodes

Generated 2026-09-17 · Contract for design tools →

01 · Forms

One grid, 59 components.

Every form sits on a 12-column grid. A component takes between 1 and 12 columns, and the row wraps on its own once they run out. Panels nest, so a layout is built by putting grids inside grids rather than by pointing at pixels.

Layout

11
  • PanelCurePanel18 properties
  • FlikarCureTabs13 properties
  • ToolbarCureToolbar18 properties
  • NavigationCureNavigation2 properties
  • Button GroupCureButtonGroup
  • RubrikHeading7 properties
  • TextTextLabel9 properties
  • Cure TextCureText2 properties
  • MarkdownCureMarkdown2 properties
  • Cure ImageCureImage27 properties
  • AvdelareDivider

Input

19
  • Text InputUInput7 properties
  • TextareaUTextarea3 properties
  • Rich Text EditorUEditor1 properties
  • Cure EditorCureEditor9 properties
  • Number InputUInputNumber4 properties
  • Date PickerUInputDate2 properties
  • Time PickerUInputTime1 properties
  • Datum & TidCureDateTimeInput3 properties
  • CalendarUCalendar
  • SliderUSlider3 properties
  • Select DropdownUSelect8 properties
  • Tree SelectUTreeSelect8 properties
  • CheckboxUCheckbox2 properties
  • Checkbox GroupUCheckboxGroup3 properties
  • Radio GroupURadioGroup3 properties
  • Toggle SwitchUSwitch3 properties
  • Tags InputUInputTags1 properties
  • PIN InputUPinInput3 properties
  • Color PickerUColorPicker

Files

2
  • File UploadUFileUpload3 properties
  • File BrowserCureFileBrowser3 properties

Record set

11
  • TableCureTable
  • Progress TableCureProgressTable9 properties
  • CalendarCureCalendar15 properties
  • MapCureMap21 properties
  • GanttCureGantt20 properties
  • Resource SchedulerCureResourceScheduler26 properties
  • KanbanCureKanban26 properties
  • Status FlowCureStatusFlow14 properties
  • Status TimelineCureStatusTimeline9 properties
  • Panel FormsCurePanelForms20 properties
  • Scriptable SVGCureSvg5 properties

Visualisation

3
  • MetrixCureMetrix6 properties
  • ChartsCureCharts7 properties
  • Circle PackingCureCirclePacking7 properties

Display

11
  • BadgeUBadge1 properties
  • AlertUAlert4 properties
  • AvatarUAvatar3 properties
  • Progress BarUProgress2 properties
  • Keyboard KeyUKbd
  • SkeletonUSkeleton
  • ChipUChip
  • Morph NumberCureMorphNumber8 properties
  • Stat CardCureStatCard4 properties
  • Stat SectionCureStatSection3 properties
  • Scriptable SVGCureSvg5 properties

Actions

3
  • ButtonUButton5 properties
  • Button GroupUFieldGroup
  • Dropdown MenuUDropdownMenu2 properties

Seven shared property sections

Every component inherits the same groups: binding to a field, display and column width, colour, variant and size, validation, per-role permissions, table settings and the form’s outer frame. On top of those, components have their own.

Field types pick the component

The data type decides which component a field gets by default — text, number, date, time, choice, boolean, file, or a reference to another record. The choice can be overridden per field.

Custom CSS per component

Every component takes a customCss property, and panels additionally expose frame, title row, icon, collapsibility, background colour and elevation as ordinary settings.

Record set components

Table, kanban, gantt, calendar, map, panel forms and status flow search out a set of records themselves — and the datasource need not be the form’s own.

Scriptable SVG

When no component fits, CureSvg draws anything at all from a datasource, with your own JavaScript in a confined context.

Permissions down to the field

Roles govern not only who sees a view, but which fields and which rows. The rules are evaluated on the server, not in the client.

02 · UI flow

32 triggers, 17 actions — in the browser.

UI flow runs inside the open form and sees the fields as the user sees them. Behaviour belongs here: conditional fields, calculations while typing, navigation between views, driving a map component. None of it needs a round trip to the server.

Triggers

32
After Modifyform.afterModifyEfter lyckad modify
After Submitform.afterSubmitEfter lyckad submit
Attachment Start/Endfield.attachmentBilaga start/slut
Button/Menufield.buttonKnapp eller menyval
Clearfield.clearFält rensas
Collapse/Expandfield.collapseExpandPanel kollaps/expand
Content Changefield.contentChangeInnehåll ändras
Displayform.displayEfter load innan visning
Dragfield.dragDrag start
Dropfield.dropSläpp över droppable
Eventwindow.eventInternt klient-event (anropbar från workflow/JS)
Gain Focusfield.focusFokus in på fält
Hoverfield.hoverHover på fält/data/label
Intervalwindow.intervalPeriodiskt när fönster är öppet
Level Double Clicktable.levelDoubleDrill-down i tree
Lose Focusfield.blurFokus lämnar fält
Menu Choicefield.menuChoiceVal i menyfält
Modifyform.modifyInnan ändring skickas
Returnfield.returnEnter/Shift-Enter
Row Choicetable.rowChoiceVälj rad
Row Collapsetable.rowCollapseRad kollapsar
Row Double Clicktable.rowDoubleDrill-down
Row Expansiontable.rowExpandRad expanderas
Row Unselecttable.rowUnselectRad avmarkeras
Searchform.searchInnan sökning körs
Set Defaultform.setDefaultNär defaults sätts
Submitform.submitInnan ny request skickas
Table Refreshtable.refreshNär tabell laddas/refresh
URL Clickfield.urlClickLänk klickad
Un-Displayform.unDisplayNär request lämnar vyn
Window Closedwindow.closedNär fönster stängs
Window Openwindow.openNär fönster öppnas

Actions

17
Call Component Methodui.callComponentAnropa en publicerad metod på en komponentinstans
Call Processui.processKör extern process
Change Fieldui.changeFieldÄndra UI-egenskaper
Close Pageui.closePageStäng sida / modal
Commit Changesui.commitSpara/commit ändringar
Create Folderui.fileFolderCreateSkapa folder i File Browser
Delete Folderui.fileFolderDeleteTa bort folder i File Browser
Fire Eventui.fireEventSänd internt event (window.event)
Gotoui.gotoHoppa i exekvering
Map Actionsui.mapActionsStyr kartkomponent (pins, zoom, center)
Messageui.messageVisa meddelande/stoppa
Open Pageui.openPageÖppna annat formulär
Post Submitui.postSubmitStyr beteende efter submit (rensa/ladda)
Put Fieldsui.putSkapa/uppdatera entries
Refresh Tableui.refreshTableLadda om tabell-data
Setui.setSätt fältvärden
Validate Fieldsui.validateFieldsValidera obligatoriska fält

Flow

2
Ifcondition.ifVillkorad gren med true/false
Labelflow.labelNamngiven hoppunkt i flödet
03 · Server flow

6 triggers, 13 actions — behind the data.

Server flow runs where the record is saved, whatever wrote it: a form, the integration API, or another flow. Rules that must always hold belong here, not in the client.

Conditions are written against three namespaces: TR. is the value submitted in this transaction, DB. is the value currently stored, and an unprefixed field is what the flow is working with right now. The difference between the first two is what makes “did the status change” expressible at all.

Triggers

6
Createrecord.createdTriggers when a new record is created
Deleterecord.deleteTriggers when a record is deleted by a user
Getrecord.getTriggers when a record is fetched from server
ProcessprocessTriggered when called as a subroutine from ui.process
Scheduleschedule.cronRun on a schedule (calendar or interval)
Updaterecord.updatedTriggers when a record is updated

Actions

13
CALLflow.callInvoke subflow and return
CALL N8Nintegration.n8nInvoke n8n workflow and read response
Create Folderrecord.fileFolderCreateSkapa folder för postens filyta
Delete Folderrecord.fileFolderDeleteTa bort folder för postens filyta
E-mailcommunication.emailSkicka e-post med eventuella bifogade filer från appens filmetadata
Exitflow.exitTerminate workflow (with/without commit)
Gotoflow.gotoHoppa i exekvering
LOGsystem.logWrite to audit/debug log
MESSAGEui.messageSend message to client (info, warning, error)
PUTrecord.putCreate or update record in database
Render documentdocument.renderRendera ett formulär till PDF med Typst
SETrecord.setSet field values (static, function, lookup, REST)
Track Status Changerecord.trackStatusSpårar statusändring till {app}_statustransitions

Flow

2
Ifcondition.ifConditional branching with true/false paths
Labelflow.labelNamngiven hoppunkt i flödet
04 · Data and integration

Six ways to fetch a value.

A SET action in UI flow takes its value from one of six sources. The same six wherever in the form the value is going to land.

currentValues from the form that is open right now.
datasourceA search against a record definition, with filter, sorting, paging and a pick modal when more than one row matches.
sqlA SQL query, with the same handling of zero or several matches.
restA REST call to an external service.
n8nAn n8n flow that runs, and whose response is read back into the fields.
server-functionOne of your own server functions — see the section below.

n8n

Server flow has a CALL N8N action of its own that starts an n8n flow and reads the response. n8n can run as part of the installation, both under Docker and in Kubernetes.

Integration API

A public REST API for reading and writing records from outside. Keys expire, can be bound to a single application, carry a policy for what they may touch, and have their own rate limit.

MCP

Cure is an MCP server. An AI agent can read the catalogues, build applications in an isolated draft, render a preview to an image and activate the result — all against metadata, never against source code.

Subflows and processes

Server flow calls other flows with CALL and returns. UI flow starts a server flow as a process and waits for the answer.

05 · Server functions

Your own code where it is needed — and only there.

When a rule cannot be expressed as a flow, you write a server function: a Python class that declares its input and output as schemas. The engine builds the input from the flow's context, runs the function, and maps the output back through the same SET pipeline as everything else. The function receives the tenant, the application, the record's new and previous values, and tenant-isolated database access.

Plugins are read from a directory on disk and can be scoped to one application, to one datasource, or left as free functions. They load at startup and can be switched off entirely with a setting — an installation that does not want to run custom code runs none.

<CURE_SET_FUNCTIONS_ROOT>/
  <application>/
    datasource/<datasource>/functions/my_function.py
    custom/functions/standalone_function.py
06 · Platform

What holds for every application.

Documents to PDF

Server flow renders a form to PDF with Typst, table rows included, with a ceiling on how many rows each table may contribute.

A file area per record

Every record has a file area with folders. Both UI flow and server flow can create and delete folders, and the e-mail action can attach the files from there.

Typed relationships

many-to-one, one-to-one and many-to-many become real foreign keys or a join table in Postgres when the application is published, with configurable delete behaviour.

Status and approvals

Status tracking writes every transition to a table of its own, which the status flow component reads. Approval decisions are stored. Timed escalation does not exist yet.

Versions and lifecycle

An application is draft, active or maintenance. The runtime tables are created when it leaves draft. Versions are kept as frozen snapshots.

Scheduled runs

Server flow starts on a calendar or an interval, without anyone having to keep a window open.

Cure runs as shared SaaS, as a dedicated customer environment, in your own Kubernetes or OpenShift, or under Docker — the same product in every case. Read about the deployment options →

Building with an AI agent?

The same capabilities exist as a machine-readable contract, meant to be pasted into tools like claude.ai/design.

Go to the design contract →