Osy#betaRun it on Osyrin: osyrin.com

Reference

UI

165 pages.

Arrangements — five ways to build a whole app, and which look wears each

A look decides how an app's pixels read; an ARRANGEMENT decides how the app is built — where navigation lives, how a record opens, where a person…

Designing an app that looks designed — direction, type, colour, composition and motion

How to make an Osy# app look like somebody designed it rather than like the default: commit to one visual direction, build it as a theme, set type…

Laying a graph out — ranks, routed edges and a run's path on the flow canvas

How the flow canvas draws a directed graph by itself: nodes in ranks from the starts to the ends, the main path on one straight row, every edge…

Looks for business apps — start from a finished design and make it yours

Osysharp.Ui.Looks ships seven finished looks for any app built on the UI kit — Ledger, Relay, Civic, Studio, Signal, Folio and Tempo — each a whole…

Menus, the command menu, and keyboard shortcuts

The kit's menus grow out of the control that opened them and keep a notch pointing back at it, carry icons, key hints and a checked mark, and are…

Pinned and recent pages, the app switcher, and presence in a shell

A work shell draws the reader's own shortcuts — the pages they PINNED and the ones they opened RECENTLY — above its nav, turns the brand into an app…

Pushed mail — Gmail through Pub/Sub, Microsoft 365 through Graph notifications

A watched mailbox that can PUSH is told of new mail the moment it lands instead of being asked every minute: Gmail publishes to a Cloud Pub/Sub topic…

Receiving mail — watched mailboxes (Gmail, Microsoft 365, IMAP)

An app WATCHES a mailbox — it is never a mail server. The mail arrives where it always did (a Google Workspace or Microsoft 365 inbox, any IMAP…

The AuditLog kit — the app's audit log, as a page of its settings

`Osysharp.AuditLog` is a default audit log page an app mounts with one line. It reads the platform's change trail (`EntityAuditRecord`) as the reader…

The Automations kit — rules that do an app's routine work when something happens

`Osysharp.Automations` runs rules — WHEN something happens to a record (any event about it, or every hour), IF the record is so (its own fields, as…

The Conversations kit — one timeline per conversation, across every channel

`Osysharp.Conversations` keeps a conversation with a customer as ONE ordered timeline — their messages, the team's replies, internal notes, AI drafts…

The CustomFields kit — fields admins add to records, forms that ask them, and an editor for each record

`Osysharp.CustomFields` lets an app's admins add fields to its records without a release — text, numbers, yes or no, one of a list, a date; required…

The EmailTemplates kit — mail that looks designed

`Osysharp.EmailTemplates` ships the parts a designed mail is built from — a layout with its preview line, logo and a footer carrying the sender's…

The IncidentReports kit — confidential reports, their review, corrective actions and the people who must be told

`Osysharp.IncidentReports` keeps incident reports — injuries, near misses, damage, concerns — readable by the person who filed them and by whoever…

The KnowledgeBase kit — a knowledge base and the help centre it is read in

`Osysharp.KnowledgeBase` keeps a knowledge base — markdown articles in categories and sections, written as drafts and published as numbered versions…

The Mail kit — send a message, keep a record, pick a sender

`Osysharp.Mail` is the contract between an app that sends mail and whatever carries it. `SendMail` writes the message to an outbox in the caller's…

The MailingLists kit — a newsletter done properly

`Osysharp.MailingLists` keeps an app's mailing lists: sign-up with double opt-in, consent recorded word for word, a link in every mail that shows the…

The Memberships kit — what lets a person in: passes, memberships and visit cards

`Osysharp.Memberships` sells what lets people in — a day ticket, a monthly membership, a card of ten visits, a family year — and lets them in: a…

The Notifications kit — telling a person that something needs them

`Osysharp.Notifications` tells a person that something needs them — in the app, a bell with a live count and a list with read and unread and "Mark…

The OfferSales kit — sell a few simple offers online or across a counter, and hand over what was bought once

`Osysharp.OfferSales` sells a handful of fixed-price offers — a ticket, a pass, a pack, a membership — online through any Osysharp.Payments provider…

The PDF kit — a document viewer and a page thumbnail

Two controls over a stored PDF: a reader with fit, zoom and a real text layer, and a thumbnail that draws one page as a picture. Shipped as an…

The PageBuilder kit — the desk staff arrange the site at

`Osysharp.PageBuilder` is the desk where the people who run a site arrange its [[ui-blocks|regions]]: add, move, fill in and take out blocks beside a…

The PrepaidCredits kit — prepaid uses, spent from the pack that expires first, never below zero

`Osysharp.PrepaidCredits` keeps prepaid uses — a class pack, a ten-visit card, machine hours — as packs of credits a person holds. A spend takes from…

The Qualifications kit — licences, certificates, inductions and signed waivers a person holds

`Osysharp.Qualifications` keeps what a person holds that lets them do something — a licence, a certificate, an induction, a background check, a…

The RecordTimeline kit — what happened to a record, on its own timeline

`Osysharp.RecordTimeline` puts what happened to a record on its timeline: every event the app and its kits raise about it, one line each, said in the…

The ReplyComposer kit — where a person writes a reply, on any record

`Osysharp.ReplyComposer` is the box a person writes a reply in — on a ticket, a case, an order, a lead. Saved replies with placeholders the APP…

The Reports kit — reports a team builds, and the overview it opens every morning

`Osysharp.Reports` lets a team build its own reports — start from one thing the app keeps, pick fields by following its relations (Order › Café ›…

The SEO kit — schema.org structured data for a page's head

`Osysharp.Seo` ships schema.org's shapes as classes: a product with its offer, rating and brand, an article, a breadcrumb trail, the organization…

The SatisfactionSurveys kit — asking the person a piece of work served how it went

`Osysharp.SatisfactionSurveys` asks the person a piece of work was for "how did we do?" — one good-or-bad answer and, if they want, a comment. They…

The ShiftScheduling kit — a staff rota: shifts, places, time off, cover and hours

`Osysharp.ShiftScheduling` is a staff rota: shifts with a number of numbered places, built as drafts and published in one go, filled by a manager or…

The Shop kit's listing — search, sizes and sorting, with a card of your own

`ShopSearchPage` is the Shop kit's listing: every listed product as a card with its photograph, its price and how much is left, under a search box, a…

The Sms kit — send a text message, keep a record, pick a carrier

`Osysharp.Sms` is the contract between an app that sends text messages and whatever carries them, shaped like the Mail kit. `SendSms` writes the…

The TimeZone kit — the time zone an app's days start in, picked from a list

`Osysharp.TimeZone` is the app's one answer to "what day is it here?" — the time zone the team's days start in and the day its week starts, picked by…

The UI (components, and the five layers under them)

Every screen in an Osy# app is a `component` — the one archetype. A page is a component with a route on it, a layout is a component, a reusable…

The Webhooks kit — telling other systems, signed, when something happens

`Osysharp.Webhooks` sends other systems a signed JSON document each time an event happens to a record — any public event of the app or its kits…

The WorkQueues kit's screens — the rail, the list, an item's head, the team, the settings

`Osysharp.WorkQueues` ships the screens a team works an inbox from, on the Switchboard floor: its views, queues and saved views as rows of the app's…

The analytics kit — Plausible or Google Analytics 4, with consent

`Osysharp.WebAnalytics` reports an app's page views and e-commerce events to Plausible or Google Analytics 4. The app picks the provider in its…

The barcode kit — a QR and barcode scanner you opt into

A live camera scanner for QR codes and barcodes, shipped as an optional KIT you depend on with one line. It owns the camera and the decode loop and…

The chart kit — line, column, bar, scatter and candle, with no JavaScript

Line, area, column, bar, scatter and OHLC candle marks over one shared value scale, plus a Pie — an optional KIT you depend on with one line. Marks…

The colour kit — contrast, OKLCH, and palettes from one colour

`Osysharp.Color` is colour maths in plain Osy#, for an app that lets people choose colours: read a hex however it is typed, work in OKLCH, measure…

The flow kit — a node-and-edge canvas whose nodes are your own Osy#

A modelling canvas — pan, zoom, drag nodes, draw edges between ports, select and delete, by mouse and by keyboard — shipped as an optional KIT. Nodes…

The machine-translation kit — which language a text is in, and the text in another, with your own model

`Osysharp.MachineTranslation` tells which language a text is in — offline first, from its script or the commonest words of twelve European languages…

The markdown editor kit — a rich editor you opt into

A full rich-text markdown editor — sections, partial saves, a block menu, tables, find and replace, maths and diagrams — shipped as an optional KIT…

The orbs kit — thinking orbs that say what a wait is for

`Osysharp.LoadingOrbs` draws a small dotted 3D sphere for a wait — nine states (searching, composing, weaving, connecting…) at two sizes — so a…

The reactivity & lifecycle model

How an Osy# component comes alive and stays in sync: declarations are live value bindings, `on mount`/`on unmount` are once-only lifecycle bodies…

The stemming kit — an inflected word finds its other forms

`Osysharp.Stemming` puts words in their base form, per language, so a search for "betalningen" finds "betalningar" and a search for "بالبطاقة" finds…

What an app page is allowed to load

Every app page is served with a Content-Security-Policy the browser enforces. Scripts, styles, fonts, workers and data connections must come from the…

Writing a component — what differs from C#

Osy# is C# almost everywhere, which is what makes the handful of deliberate differences worth knowing before you hit them. Ordinary C# works and…

A callback that answers

A component's callback parameter may return a value. Typed `Func<T, R>` and invoked from an action, it runs the parent's handler to completion and…

A chart over every row

osy lint's ui-chart-over-unbounded-rows (SHOULD) fires when a chart or a map is drawn from a page query that reads every row of an entity with no…

A failing query

When a query a region reads fails or is refused, that region shows the failure in place — the server's own sentence, the correlation id to look it up…

A list or table with no bound

osy lint's ui-unbounded-list-does-not-page (SHOULD) fires when a page draws a list with foreach from a query that reads every row of an entity with…

A page query with no bound

osy lint's ui-page-query-without-a-take (CONSIDER) is the catch-all: a page query reads every row of an entity with no Take, and the page uses it…

A page's unit of work — what the platform does for an editing page, end to end

A page that edits rows writes no save machinery. Every edit joins the page's unit of work; each action a person runs and each field they type into is…

A picker over every row — the SearchPicker

A Dropdown is usable for a few dozen options; over an entity that grows, past the first answer (about 2 MB of rows) the rows after it are not offered…

Acting on data — a calm grid header, filters as chips, and a toolbar that follows the selection

A DataGrid reads calmly: its per-column filter row is shut until somebody asks to filter (the Filter toggle, or a column's funnel), a filter that is…

An order the person maintains

When the order of a list is a fact the person owns rather than something a field implies, store it: an int Position on the row, written when the row…

App shells

An app shell is the frame around every page: a brand, a navigation tree, the signed-in person and a menu behind them, a search slot and a place for a…

AssistantPanel

An in-app assistant over the page: a panel floating at the right edge (a full-screen sheet on a phone) with the conversation so far, suggested…

Blocks and regions — pages the staff arrange

A `[Block]` is a component staff can place on a page: its parameters are the fields they fill in, and each parameter's type chooses the editor. A…

Building a look — from an empty kit to a design a store can wear

A look is a kit that draws two contracts: the general site contract (`Osysharp.Site.Looks` — a hero, a quote, the footer) and one category's…

Calling helpers from render

A render expression may call a PURE client helper — a component `method`, a client class method, a top-level function — and render the value it…

Canvas

A drawing surface, and the verbs that paint on it. Put a `Canvas` in a render block, call `Draw.*` from an `on frame` body, and the picture is…

Canvas 3D

A lit, shadowed 3D scene on the same `Canvas` the 2D verbs paint. Build meshes once into fields, then each frame place a camera, a sun and some fog…

Cell template (your own content in a control's cell)

A control that paints cells — a grid — writes plain text in each one. A `slot <Field> { row => … }` block on the call replaces that column's cell…

Clipboard

Put a string on the visitor's system clipboard. One verb, callable from any action, so a copy button — an API key, a share link, a code snippet, an…

Connection

The live state of the browser's link to the server, and the two verbs that recover it. A component you nominate as your app's connection-loss surface…

Device.HasKeyboard — whether to show key hints

`Device.HasKeyboard` is true when the page is used with keys worth hinting at: a mouse or a trackpad (a fine pointer that can hover), or once a…

Dialog.Open / Dialog.Ask / Dialog.Confirm / Dialog.Discard

Opens a component in an overlay above the current screen, with a unit of work you choose: `Inherit` makes its edits a savepoint of the work already…

Dock

The page's drawers: the page in the middle, a drawer docked on the right (the record a row opened, an inspector) and one along the bottom (a log, a…

Facts

Information about one thing as a key/value table: what each fact is on the left, its value on the right, one line per fact with a rule under it, and…

Failure — what went wrong the last time an action ran

When an action fails — a security denial, a constraint violation, a server that refused — the platform records why, and `Failure` is how a page says…

FocusedShell

An app shell for completing a single task — a checkout, an approval, a configuration step, a guided flow. It is built around three things a task…

Frame

`Frame(html)` shows a whole HTML document inside the page, in a frame of its own — what a mail preview is. The document is sandboxed whatever it…

Func<T, R>

A parameter or class field typed `Func<T, R>` takes a lambda and can be invoked for a result, so reusable code can be told HOW to get a value rather…

Heading — a page's outline, h1 to h6

A heading is part of a page's outline, not only its type: a screen-reader user moves through a page by jumping from heading to heading. `PageTitle`…

How many rows a page is sent

A page's query is sent bounded. Its own .Take(n) is the ceiling: the browser may ask for fewer of those rows, never more. A page query with no Take…

ISettingsProvider and [OrgPolicy]: kits announce their settings, and a setting says whether an organisation may govern it

A kit with something an admin configures implements `ISettingsProvider` and serves its pages under `[Layout(SettingsFrame)]`. `SettingsArea()` with…

Layout.ScrollHeight and Layout.ScrollWidth

`Layout.ScrollHeight` is how tall a container's CONTENT is; `Layout.Height` is how tall the container is. The difference is what "is there more here…

Layout.TextWidth

Answers how wide a string will actually paint, measured against the font the surrounding container paints with. Null wherever there is no font to…

LeavePrompt — asking before a page with unsaved edits is left

When somebody presses another row in the sidebar shell's rail while the page holds unsaved edits, the shell asks first: Keep editing, Save and leave…

Lists that load more

A page's list over a big table holds the first answer's rows (about 2 MB of them). rows.HasMore says whether the set holds rows past what the page…

Looks — a site's whole design, picked per version

A LOOK is a site's whole design — its frame, its pages, its theme and fonts, its design of every block type — declared in code (normally in a look…

Markdown — rendering markdown text

`Markdown(text)` renders a markdown string as formatted content — headings, lists, tables, code, links. It is a read-only renderer, not an editor:…

Member selectors — a control prop that names a member of your row: xField: s => s.X

A control prop declared Func<TRow, V> is a member selector: the call site writes `xField: s => s.X`, the compiler checks it against the row type the…

Naming a value in render

A `render` block can name a value the way any C# block does — `var lapsed = …;` to infer the type, or `bool lapsed = …;` to declare it. The name is…

Navigation

The routes the user has open, which of them hold UNSAVED edits, and the verbs that move between them or close one without losing work. Read…

Osysharp.Ui (the UI kit)

The bundled UI kit — ready-made styled controls like `Button`, the shared design-system vocabularies (`Tone`, `Size`) and a starter theme — reaches a…

Paper

A sheet of paper on the page's ground — a reading width, generous margins, the theme's hairline and lift — so an invoice, a contract or a report…

Pending

When a control's action waits on the server, the platform shows a busy spinner and disables the control — but only after a short delay, so a fast…

Pinning a kit version (using Ui@3)

A kit like `Ui` is versioned independently of the platform, so you pin the major you build against with `using Ui@3;`. The number is a stability…

Placing and naming a component — m:, w:, grow:, alignSelf:, animation:, label: on a component call

A caller may PLACE, SPACE and ANIMATE a component it calls — `m*`, `w`/`h` and their min/max, `grow`, `shrink`, `basis`, `alignSelf`, `order`…

Playing a video on a page

`Video` plays one film, addressed one of three ways: a film the app SHIPS in `model/videos/` (`video: Videos.Harbour`, compile-checked), a clip…

QrCode

A QR code a phone can scan, drawn from the rows `Qr.Encode(text)` answers: dark modules on white whatever the theme, inside the four-module white…

RadioGroup

One choice of a few, all in view — a radio per option under a caption. The same shape as Dropdown: value is a two-way Binding<T>, options default to…

RailShell

An app shell built around a permanently narrow icon rail, in the shape Slack, Linear and Discord converge on. Every row reveals its label on hover…

SVG assets

Drop a `.svg` into `model/art/` and render it with `Svg(Art.Hexgrid)`. Unlike an icon, an asset keeps its own colours, gradients and patterns — it is…

Save, discard, undo — three ways to show a page's unit of work

Every edit on a page joins the route's unit of work; how the page OFFERS to keep it is a choice of presentation. `SaveBar` rises at the foot while…

Sections of a page — Link(to:) and Navigation.ScrollTo

Give an element an `id:` handle and it becomes a section the rest of the page can go to: `Link(to: services)` is an in-page link to it, and…

Select the fields a page shows

osy lint's cost-page-ships-whole-rows-for-few-fields (CONSIDER) fires when a page reads whole rows of a wide entity and shows only a few of their…

Session.CurrentUser

`Session.CurrentUser` is the person the app is being shown to, as your own `[Principal]` entity. Read it in a member, in a render expression, or…

SettingsArea — an app's settings: sections, explicit save and discard, undo, who changed what

The kit's settings vocabulary: `SettingsArea` lays out an app's settings — its sections in a grouped nav, the current one lit, each section's page…

Showing a picture on a page

`Image` is the element that shows a picture, and it addresses one of two ways. `src` takes a URL — for a file in the app's own path store…

Slot (child content)

A `Slot` marks where a component renders the content block its caller wrapped around it. Writing `Card { Text("hi"); }` passes `Text("hi")` as Card's…

Slot(item) — let the caller decide what each row looks like

`Slot(item)` renders the caller's template once for that item. It is how a component owns the list — the layout, the scrolling, the selection — while…

Sorting by a column the user picks

A sortable table names its sort key with the chosen column's own selector, never with a string. Over rows already loaded the sort happens in memory…

SubNav

Navigation inside a tab: a list down the side of a tab's body that moves between that tab's own places — a record's invoices one at a time, a…

TabbedShell

An app shell whose primary navigation is a horizontal strip of tabs under the brand row, and a bottom tab bar within thumb reach on a phone. It takes…

The conflict notice — when a page's save meets somebody else's change

When a person's save from a page meets a row somebody else changed while they were editing it, and nothing in the app catches the ConflictException…

The site's frame — a menu, a strip and a footer staff change

The frame around every page — the menu, the strip across the top, the footer — can be the staff's to change, like a page's regions: `SiteMenu(…)`…

Validation

You declare a field's rules once, on the entity — `[Required]`, `[Pattern]`, `[MaxLength]` — and give each rule the sentence to show when it fails. A…

Viewport.AtLeast and Layout.AtLeast — the window, or the room this component has

Two questions with one shape. `Layout.AtLeast(Tablet)` asks whether THIS component's container is at least the breakpoint wide — the right question…

Visitor

`Visitor.Id` names the browser someone is using. The platform issues it on their first visit, proves it on every request with a sealed HttpOnly…

WidgetGrid

A workspace of cards — figures, charts and lists side by side on a four-column grid (two on a tablet, one on a phone), each a Widget with a title and…

WorkbenchShell

The arrangement of a developer tool or an operator's console: an activity bar with one mark per section, an explorer beside it listing the current…

WorkspaceShell, WorkspaceFrame and [Nav] — a kit's pages in your app's shell and navigation

A kit's working pages (a knowledge base's desk, its review queue) name `[Layout(WorkspaceFrame)]`, and the settings area stands in it too: design…

[Authorize] on an action

`[Authorize]` on one action (or method) of a component makes that action members-only, on any page — a public `[AllowAnonymous]` page included. A…

[Composable] — presentational components in public pages

Mark a presentational, composition-only component `[Composable]` so a public page can compose it without marking it `[AllowAnonymous]` itself. A…

[Email] — mail rendered from data

An `[Email]` component is a mail template. It is rendered on the server — from any function, a workflow step included — into HTML every mail client…

[Remembered] — a component field the reader's browser keeps

`[Remembered]` on a component field keeps the reader's last value in their browser — per app, signed-in user, component and field — and the next…

[Settings] and [Setting]: a settings section declared on its row, each field drawn by its type

Mark the row staff configure `[Settings("Title", Authorize = Policy)]` and each field on it `[Setting("Label")]`, and the settings area draws the…

[Slot] and contributions — a place on a page that other kits, and the app, add to

A slot is a place on a page others add to. A kit marks one (`[Slot] public abstract component QuotePanel(Quote quote);`), and every component that…

accessibility

Tags already give an element its role, focus and keyboard behaviour. The semantic props say the rest: `role:` for a widget a tag cannot name…

action vs. method

A component's `action` and its plain `method` run the exact same body grammar with the exact same capabilities — reads, writes, commits, effects…

animation — keyframe motion, on entry, on exit, in a loop, or as it scrolls into view

An `animation` block declares reusable keyframe motion — an entrance, a shimmer, a pulse, a flash that decays. Its stops are written with the…

animationKey — play an animation again when a value changes; a line that draws itself

`animationKey: value` on any element makes its animation play each time the value CHANGES — and not when the element first appears, so a page load…

camera and microphone

Take a photograph, record a video, or record audio. `Camera.Start()` asks for the device and `Camera()` shows the viewfinder; `Camera.Capture()`…

canPress / canEdit / canSee

`canPress`/`canEdit`/`canSee: <policy>` ties a control to a declared `policy`: `canPress` disables a button, `canEdit` makes a value control…

chunks — assets a control loads on demand

A `chunks { }` block declares assets a control ships but does not need at mount — a maths renderer, a diagram engine, a stylesheet only one feature…

color palettes

`Palette.From("#seed")` turns one brand color into a full ramp of shades. A bare reference (`Primary`) is the seed itself; `Primary.Hover` and…

commands — the verbs a control accepts

A `commands { }` block declares the verbs a control accepts — the mirror of its events. An event is the control telling the app something happened; a…

compiling with a different theme

`--theme <file>` compiles an app with the theme in that file INSTEAD of its own — a replacement, never a merge, so the look you get is one you can…

component

The one archetype for all UI: a bounded reactive unit — typed props, reactive members (fields, `live` queries/computeds, actions, methods), and a…

control — foreign UI controls (charts, grids, maps)

A `control` block declares the contract of a foreign UI widget — a chart, a data grid, a map — that a small JavaScript module implements. You declare…

creating & saving data

A UI `action` creates, updates and deletes data by writing `new Entity { … }`, assigning fields, and calling `.Delete()`. Edits apply instantly and…

debounce

`debounce: 300` tells a control to wait for a pause before it runs its event handler. Without it, an `onInput` handler fires on every keystroke — so…

drag

`drag:` binds a number to a drag gesture: grabbing the element moves the value, arrow keys move the same value, and Escape puts it back where it…

generic component

A component with type parameters, bound at each call site from the arguments — one component that works over any enum or any row type, instead of a…

head

A routed page's document head — its title, description, canonical address, share image, structured data, whether it may be indexed, and whether it…

icons

Drop `.svg` files into `model/icons/` and render them with `Icon(Icons.Search)`. The name is checked at compile time, so a typo is an error rather…

key: on a component call

`key:` on a component call names the instance. While the key reads the same the instance stays and takes its new arguments; when it reads differently…

keys

`keys:` declares that an element owns a set of keys: it becomes focusable, those keys stop scrolling the page, and `Keyboard.Down(Left)` answers…

layout primitives

The built-in layout primitives and how they arrange children. `Stack` stacks children in a column, `Row` lays them in a row, and `Box` is a plain…

on change

`on change { … }` is a reactive **side-effect**: the runtime re-runs it whenever a value it read changes, so it's how you keep something OUTSIDE the…

on every

`on every (TimeSpan.FromSeconds(5)) { … }` runs a block on a repeating cadence for as long as the component is mounted. Unlike `on frame` it is…

on mount / on unmount

`on mount { … }` runs a block ONCE, the first time a component appears, beside its first reads; `on unmount { … }` runs a block ONCE when it goes…

on settled — run something once, when a stream finishes

`on settled(x) { … }` runs once when the stream `x` finishes arriving — whether it completed or failed. It is how you store a streamed answer, and it…

onEnter

`onEnter` runs an action when the Enter key is pressed while an element is focused — the keyboard peer of `onClick`. There is no form to submit: in…

onEscape

`onEscape` runs an action when the Escape key is pressed while the element is on screen. Unlike `onEnter` it is not scoped to the focused element —…

page authorization (policies)

A `policy` names a reusable authorization predicate over the current user — e.g. `policy Admins => UserRole.Any(r => r.User == user && r.Role ==…

pointer

`onPointerEnter` / `onPointerLeave` run an action when the pointer enters or leaves an element. They are the half of hover an app can ACT on — a…

probe — what a control says about itself

A `probe { }` block declares the facts a control publishes about its OWN internal state, so an app's tests can ask for them. It is the one direction…

qualified element (Owner.Name.Element)

Names the package whose component or control you mean, as Owner.Name.Element. Use it when your own declaration shadows a package's, or when two…

reading data inside an action

A data read written inside an `action`, `method` or lifecycle hook runs at that point in the body: the platform fetches it from the server and the…

routes and pages

How a component becomes a page: it declares a route with `[Route("/catalog/{slug}")]`, and navigating to a matching path serves it. Covers route…

sizing — how the platform sizes a control's box

A control declares how the element it is mounted into should be sized — grow with its content, fill the box the app put it in, or keep a fixed ratio…

skeleton

A second render tree that stands in for a page or a component while its first read — its queries, its live server calls, the row a page's address…

sound

Drop `.mp3`, `.wav`, `.ogg` or `.m4a` files into `model/sounds/` and play them with `Sound.Play(Sounds.Flap)`. The name is a compile-checked member…

store

`store` declares a headless reactive unit — the same members a component has, minus `render` — meant to hold UI state and actions shared across…

style props

Inside a `variants` block, each `Name = value` is a style prop from a fixed vocabulary the renderer maps to CSS — paint (`Bg`, `Color`, `Border`)…

styles — a control's own look knobs

A `styles { }` block declares the look values a control owns — its paddings, widths, shadows — as named knobs an app can override. It is how a…

textures

Drop `.png`, `.jpg` or `.webp` files into `model/textures/` and blit them onto a canvas with `Draw.Image(wall, …)`. The name is checked at compile…

theme tokens

A `theme` block names your app's design tokens — colors, spacing, radii, and more — as reusable values. A token can hold a literal value (`Primary =…

upload

`Upload(onUploaded: Ingest) { … }` is a file picker wearing whatever you put inside it. When someone chooses a file its bytes are stored and your…

web fonts — shipping a typeface with your app

Naming a font in your theme asks for it; `osy font add` ships it. The command pins a font file in your project's lock, every compile carries it to…