Embed a kit UI in your own page
Section titled “Embed a kit UI in your own page”Every kit with a browser UI serves it at a URL on the container. This guide covers building that URL for one specific view with the options you want, such as a file open in the editor, a terminal in read-only mode, or one table in the database studio, and framing it in your own page. The SDK, the CLI and plain HTTP build the same URL from one published catalog, so a URL built in one place opens the same view as a URL built in another.
Build a URL
Section titled “Build a URL”A view is one page of a kit UI, named <kit>.<view>: files.editor, terminal.session, sqlite.tables. Each kit has a default view, used when you name the kit only. The view reference at the end of this page lists every view with its parameters.
import { HoodyClient } from 'hoody-sdk';
const hoody = await HoodyClient.login('https://api.hoody.com', { username, password });const { data: container } = await hoody.api.containers.get(containerId);if (!container?.id || !container.project_id) throw new Error('Container not found');
// One function per view: client.embeds.<kit>.<view>(container, options)const editor = hoody.embeds.files.editor( { ...container, id: container.id, project_id: container.project_id }, { params: { path: '/home/user/app/server.ts' } },);// https://PROJECT_ID-CONTAINER_ID-files-1.SERVER.containers.hoody.com/home/user/app/server.ts?edit=
// On a withContainer() client the container can be left out.const box = await hoody.withContainer(containerId);const terminal = box.embeds.terminal.session(undefined, { index: 2, params: { readonly: true, fontSize: 14 } });// https://PROJECT_ID-CONTAINER_ID-terminal-2.SERVER.containers.hoody.com/?readonly=true&fontSize=14
// By kit name, for views chosen at run time.const table = box.embeds.url('sqlite', undefined, { view: 'tables', params: { table: 'users' } });// https://PROJECT_ID-CONTAINER_ID-sqlite-1.SERVER.containers.hoody.com/tables?table=usersbuildEmbedUrl(kit, container, options) builds the same URL without a client, from the fields a hoody-api container response carries (id, project_id, server_name). box.embeds.views('files') lists a kit’s view names, default first, and box.embeds.catalog() returns the whole construction catalog. Both entry points of the package, Node and browser, export these functions.
# Open the editor view in your browser.hoody files open --container "$CONTAINER_ID" --view editor --path /home/user/app/server.ts
# Print the URL instead of opening it.hoody terminal open 2 --container "$CONTAINER_ID" --readonly --font-size 14 --url
# Every kit with a UI has an open command; its help lists the views and flags.hoody db open --helpThe positional number is the instance index, as in the SDK’s index option. --url prints the URL and opens and starts nothing.
# The construction catalog: host rule, domain rule, and every view with its parameters.curl -s https://docs.hoody.com/embeds/catalog.v1.json | jq '.views["files.editor"]'
# The three container fields the host is built from.curl -s "https://api.hoody.com/api/v1/containers/$CONTAINER_ID" \ -H "Authorization: Bearer $HOODY_TOKEN" | jq '.data | {id, project_id, server_name}'With those fields, fill the catalog’s host template and the view’s path, then append the query parameters in the order the catalog’s serialization section gives. The catalog also ships inside the SDK package, at generated/embeds.catalog.v1.json, versioned with the SDK.
URL shape
Section titled “URL shape”Every embed URL has the form of any other service URL on the container:
https://{projectId}-{containerId}-{segment}.{serverName}.{containersDomain}{path}?{query}segmentis the service and its instance number, such asfiles-1orterminal-2. The number is 1 or more and has an upper bound per service, which the catalog publishes. An index outside the bounds is refused; it is never rounded to the nearest valid one.containersDomaincomes from the API base URL:https://api.hoody.comgivescontainers.hoody.com, andhttps://api.hoody.comgivescontainers.hoody.com. The catalog’sdomainsection lists every rule in order.pathis the view’s path, with path parameters encoded as the catalog states. A file path keeps its slashes and percent-encodes each segment.- The query holds only parameters the view accepts. Booleans are
trueorfalse, and a flag such aseditis sent asedit=.
A DNS label holds at most 63 characters. With 24-character project and container IDs, a terminal number above 9999 makes the first label 64 characters long, so the SDK refuses it with HOST_LABEL_TOO_LONG.
Parameters an embed URL never carries
Section titled “Parameters an embed URL never carries”For a kit’s own views, the builders refuse three kinds of parameter the kit itself would read:
- Credentials and sign-in state, such as tokens, passwords and SSH or proxy credentials. Sign-in pages are not embed views.
- Parameters that change state, such as a command for the terminal to run, a startup script, a restart, or a download trigger. Use the kit’s HTTP API for those, where the request is explicit.
- Parameters the platform sets itself, such as the terminal or display number, which the hostname already selects.
Three views are outside these rules. http.content and https.content show your own application, so the builder passes any query you give it, credentials included. exec.script runs your script when the URL is opened and hands it every query parameter. Opening some other views also starts something, such as a shell, a desktop or the editor, or starts receiving on a pipe; the reference marks them with “starts a process” or “changes state”.
Each refusal is an error with a code, never a silently dropped parameter:
box.embeds.url('terminal', undefined, { query: { cmd: 'ls' } });// EmbedValidationError: PARAM_EXCLUDED: cmd cannot be set in an embed URL (mutating)The view reference lists the refused parameters of each kit with the reason. In the SDK the error is EmbedValidationError, and its code is one of the values below.
| Code | Meaning |
|---|---|
KIT_UNKNOWN, VIEW_UNKNOWN | The kit or view name is not in the catalog. |
KIT_NOT_BUILDABLE | The kit has no browser UI to embed. |
INDEX_OUT_OF_RANGE, INDEX_NOT_SUPPORTED, PORT_INVALID | The instance number or port is outside what the service accepts. |
HOST_LABEL_TOO_LONG | The first hostname label would be longer than 63 characters. |
TARGET_INVALID | The container fields are missing or cannot form a hostname. |
LOCAL_REFUSED | A local URL was requested. Several kit UIs only work at the root of their host. |
PARAM_EXCLUDED, PARAM_FORCED, PARAM_NON_UI, PARAM_DEAD | The parameter is a credential, changes state, is set by the platform, is not a UI parameter, or has no effect. |
PARAM_UNKNOWN, PARAM_NOT_ON_VIEW, PARAM_NOT_TYPED, QUERY_NOT_PASSTHROUGH | The parameter is not accepted by this view, or not in the form given. |
REQUIRED_MISSING, VALUE_INVALID, PATH_INVALID | A required parameter is missing, or a value is outside its allowed values or pattern. |
DUPLICATE_KEY, CONST_OVERRIDE | A key was given twice, or a fixed value of the view was overridden. |
ALIAS_URL_MISSING, ALIAS_MISMATCH, ALIAS_VIEW_UNSUPPORTED, ALIAS_TARGET_PATH_CONFLICT | The alias cannot serve this view (see below). |
Frame a view
Section titled “Frame a view”<iframe src="https://PROJECT_ID-CONTAINER_ID-files-1.SERVER.containers.hoody.com/home/user/app/server.ts?edit=" style="width: 100%; height: 640px; border: 0"></iframe>On kit UI pages the proxy sends Content-Security-Policy: frame-ancestors, which allows any origin by default; on the agent, only its web UI gets it. The proxy adds the directive to the kit’s own policy, so the kit’s other directives still apply. A page your own application serves on an http-{port} or https-{port} URL keeps whatever headers the application sends. Pages that must never be framed keep refusing: the sign-in and secret-entry pages of the chat bot answer with frame-ancestors 'none', and a notebook export keeps its own policy.
Each view in the catalog has a frameable value. yes views load in a frame from another origin. no views refuse framing; open them in a new tab instead.
Aliases
Section titled “Aliases”A view can also be opened through a proxy alias: pass the alias as the target instead of the container, and the builder uses the alias’s own address as the host.
box.embeds.cron.manager({ alias: 'jobs', program: 'cron', index: 1, url: 'https://jobs.example.com' });// https://jobs.example.com/Most kit UIs read their own identity from the hostname, so they cannot work under an alias hostname, and those views are refused with ALIAS_VIEW_UNSUPPORTED. The Alias column of the reference shows which views accept an alias.
View reference
Section titled “View reference”The tables below are generated from the construction catalog at /embeds/catalog.v1.json. The catalog is the machine-readable form of the same information. Parameters are listed by their URL query name; the SDK’s embed options use the same names, except that pipe.noscript takes its path as noscriptPath. Direct pipe page links, including autostart, which the builder refuses, are on the Pipe page.
Pipe page links open in the browser, so they do not carry the SDK’s kitAuth headers: the browser itself must be allowed by the container’s access rule. The embed builder limits the send page’s name to 1023 characters and pipe path values to 1023 characters after percent-encoding. noscriptPath has a separate 1024-character limit. Direct pipe links and PipeMedia.getPageUrl() allow names up to 1024 encoded characters. The pipe.video embed view does not accept n; for a fixed viewer count, use a direct ?video&n=3 link or media.getPageUrl('video', 'demo', { n: 3 }).
terminal
Section titled “terminal”Web terminal sessions in the browser.
| View | Label | Path | Required | Frameable | Alias | Notes |
|---|---|---|---|---|---|---|
terminal.session | Terminal session | / | none | yes | no | default, starts a process |
terminal.session
Section titled “terminal.session”A browser terminal attached to one session. Opening it starts a shell if the session is not running; a terminal that belongs to a daemon program attaches to that program instead and never starts a shell.
| Parameter | In | Values | Description |
|---|---|---|---|
cwd | query | string | Starting directory for a new session. The directory must already exist. |
readonly | query | boolean | Open the session read-only: output is shown, keyboard input is blocked. |
title | query | string | Browser tab title. HTML tags are removed. |
fontSize | query | integer (≥ 8, ≤ 72) | Font size in pixels. |
backgroundColor | query | string | Background colour: a hex colour (#RGB, #RRGGBB, #RRGGBBAA) or a CSS colour name. |
panel | query | URL | An http(s) URL to show in a side panel next to the terminal. |
panel-visible | query | boolean | Show the side panel on load. |
panel-position | query | left, right, top, bottom | Where the side panel sits. |
panel-width | query | string | Initial side-panel width, in pixels (400px) or percent, for a left or right panel. |
panel-height | query | string | Initial side-panel height, in pixels (300px) or percent, for a top or bottom panel. |
panel-resizable | query | boolean | Allow resizing the side panel by dragging. |
panel-width-pct | query | integer (≥ 5, ≤ 95) | Initial side-panel width as a percentage of the window. Takes precedence over panel-width. |
panel-height-pct | query | integer (≥ 5, ≤ 95) | Initial side-panel height as a percentage of the window. Takes precedence over panel-height. |
hide-toolbar | query | boolean | Hide the terminal toolbar. |
fontFamily | query | string | CSS font-family list for terminal text. |
fontWeight | query | normal, bold, 100, 200, 300, 400, 500, 600, 700, 800, 900 | Font weight for normal text. |
fontWeightBold | query | normal, bold, 100, 200, 300, 400, 500, 600, 700, 800, 900 | Font weight for bold text. |
lineHeight | query | integer (≥ 1) | Line height as a multiple of the font size. |
letterSpacing | query | integer | Extra spacing between characters, in whole pixels. |
cursorBlink | query | boolean | Make the cursor blink. |
cursorStyle | query | block, underline, bar | Cursor shape when the terminal has focus. |
cursorWidth | query | integer (≥ 1) | Cursor width in pixels when the cursor style is bar. |
cursorInactiveStyle | query | outline, block, bar, underline, none | Cursor shape when the terminal does not have focus. |
theme | query | object (JSON) | Colour theme as a JSON object (foreground, background, cursor, and the 16 ANSI colours). |
minimumContrastRatio | query | integer (≥ 1, ≤ 21) | Minimum contrast ratio between text and background; colours are adjusted to meet it. |
drawBoldTextInBrightColors | query | boolean | Draw bold text in the bright colour variants. |
scrollback | query | integer (≥ 0, ≤ 100000) | Number of lines kept above the visible screen. |
scrollSensitivity | query | integer (≥ 1) | Scroll speed multiplier. |
fastScrollSensitivity | query | integer (≥ 1) | Scroll speed multiplier while Alt is held. |
smoothScrollDuration | query | integer (≥ 0) | Smooth-scroll duration in milliseconds; 0 scrolls instantly. |
screenReaderMode | query | boolean | Enable screen-reader support. |
disableResizeOverlay | query | boolean | Do not show the size overlay while the window is resized. |
unicodeVersion | query | graphemes, 11 | Character-width rules: graphemes (default, emoji-aware) or 11. |
rendererType | query | dom, canvas, webgl | Renderer used to draw the terminal: webgl (the default; Firefox uses dom), dom, or canvas (drawn with WebGL). Phones, tablets and other touch-screen devices use dom even when webgl or canvas is asked for. Try dom if text renders wrongly with WebGL on a particular browser or GPU. |
Refused parameters: terminal_id (forced; use serviceIndex), display (forced; use serviceIndex), cwd_auto_create (mutating), shell (mutating), user (mutating), cmd (mutating), arg (mutating), reset (mutating), pid (mutating), env (mutating), startup_script (mutating), welcome (mutating), debug (mutating), env_inject (mutating), desktop (mutating), redirect (mutating), agent (mutating), ephemeral (mutating), desktop_env (mutating), ssh_host (credential), ssh_user (credential), ssh_port (credential), ssh_password (credential), ssh_key (credential), socks5_host (credential), socks5_port (credential), socks5_user (credential), socks5_pass (credential), redirect_delay (non-ui), wait_timeout (non-ui).
desktop
Section titled “desktop”A full graphical desktop environment in the browser.
| View | Label | Path | Required | Frameable | Alias | Notes |
|---|---|---|---|---|---|---|
desktop.session | Desktop | / | none | yes | no | default, starts a process |
desktop.session
Section titled “desktop.session”A full graphical desktop. Opening it starts the desktop if needed, then shows it once it is ready.
| Parameter | In | Values | Description |
|---|---|---|---|
desktop_env | query | xfce, mate | Desktop environment to start. |
redirect_delay | query | integer (≥ 0, ≤ 30) | Extra seconds to wait after the desktop is ready before it opens. |
wait_timeout | query | integer (≥ 1, ≤ 300) | Seconds to wait for the desktop to become ready. |
Refused parameters: terminal_id (forced; use serviceIndex), display (forced; use serviceIndex), desktop (forced; use view), redirect (forced; use view), cwd_auto_create (mutating), shell (mutating), user (mutating), cmd (mutating), arg (mutating), reset (mutating), pid (mutating), env (mutating), startup_script (mutating), welcome (mutating), debug (mutating), env_inject (mutating), agent (mutating), ssh_host (credential), ssh_user (credential), ssh_port (credential), ssh_password (credential), ssh_key (credential), socks5_host (credential), socks5_port (credential), socks5_user (credential), socks5_pass (credential), cwd (non-ui), readonly (non-ui), title (non-ui), fontSize (non-ui), backgroundColor (non-ui), panel (non-ui), panel-visible (non-ui), panel-position (non-ui), panel-width (non-ui), panel-height (non-ui), panel-resizable (non-ui), panel-width-pct (non-ui), panel-height-pct (non-ui), hide-toolbar (non-ui), fontFamily (non-ui), fontWeight (non-ui), fontWeightBold (non-ui), lineHeight (non-ui), letterSpacing (non-ui), cursorBlink (non-ui), cursorStyle (non-ui), cursorWidth (non-ui), cursorInactiveStyle (non-ui), theme (non-ui), minimumContrastRatio (non-ui), drawBoldTextInBrightColors (non-ui), scrollback (non-ui), scrollSensitivity (non-ui), fastScrollSensitivity (non-ui), smoothScrollDuration (non-ui), screenReaderMode (non-ui), disableResizeOverlay (non-ui), unicodeVersion (non-ui), rendererType (non-ui), ephemeral (mutating).
The Hoody agent’s interactive interface and API reference.
| View | Label | Path | Required | Frameable | Alias | Notes |
|---|---|---|---|---|---|---|
agent.webui | Agent | / | none | yes | no | default, starts a process |
agent.webui
Section titled “agent.webui”The agent’s interactive interface in a browser terminal. Opening it starts the agent if it is not running.
| Parameter | In | Values | Description |
|---|---|---|---|
title | query | string | Browser tab title. HTML tags are removed. |
fontSize | query | integer (≥ 8, ≤ 72) | Font size in pixels. |
backgroundColor | query | string | Background colour: a hex colour (#RGB, #RRGGBB, #RRGGBBAA) or a CSS colour name. |
panel | query | URL | An http(s) URL to show in a side panel next to the terminal. |
panel-visible | query | boolean | Show the side panel on load. |
panel-position | query | left, right, top, bottom | Where the side panel sits. |
panel-width | query | string | Initial side-panel width, in pixels (400px) or percent, for a left or right panel. |
panel-height | query | string | Initial side-panel height, in pixels (300px) or percent, for a top or bottom panel. |
panel-resizable | query | boolean | Allow resizing the side panel by dragging. |
panel-width-pct | query | integer (≥ 5, ≤ 95) | Initial side-panel width as a percentage of the window. Takes precedence over panel-width. |
panel-height-pct | query | integer (≥ 5, ≤ 95) | Initial side-panel height as a percentage of the window. Takes precedence over panel-height. |
fontFamily | query | string | CSS font-family list for terminal text. |
fontWeight | query | normal, bold, 100, 200, 300, 400, 500, 600, 700, 800, 900 | Font weight for normal text. |
fontWeightBold | query | normal, bold, 100, 200, 300, 400, 500, 600, 700, 800, 900 | Font weight for bold text. |
lineHeight | query | integer (≥ 1) | Line height as a multiple of the font size. |
letterSpacing | query | integer | Extra spacing between characters, in whole pixels. |
cursorBlink | query | boolean | Make the cursor blink. |
cursorStyle | query | block, underline, bar | Cursor shape when the terminal has focus. |
cursorWidth | query | integer (≥ 1) | Cursor width in pixels when the cursor style is bar. |
cursorInactiveStyle | query | outline, block, bar, underline, none | Cursor shape when the terminal does not have focus. |
theme | query | object (JSON) | Colour theme as a JSON object (foreground, background, cursor, and the 16 ANSI colours). |
minimumContrastRatio | query | integer (≥ 1, ≤ 21) | Minimum contrast ratio between text and background; colours are adjusted to meet it. |
drawBoldTextInBrightColors | query | boolean | Draw bold text in the bright colour variants. |
scrollback | query | integer (≥ 0, ≤ 100000) | Number of lines kept above the visible screen. |
scrollSensitivity | query | integer (≥ 1) | Scroll speed multiplier. |
fastScrollSensitivity | query | integer (≥ 1) | Scroll speed multiplier while Alt is held. |
smoothScrollDuration | query | integer (≥ 0) | Smooth-scroll duration in milliseconds; 0 scrolls instantly. |
screenReaderMode | query | boolean | Enable screen-reader support. |
disableResizeOverlay | query | boolean | Do not show the size overlay while the window is resized. |
unicodeVersion | query | graphemes, 11 | Character-width rules: graphemes (default, emoji-aware) or 11. |
rendererType | query | dom, canvas, webgl | Renderer used to draw the terminal: webgl (the default; Firefox uses dom), dom, or canvas (drawn with WebGL). Phones, tablets and other touch-screen devices use dom even when webgl or canvas is asked for. Try dom if text renders wrongly with WebGL on a particular browser or GPU. |
Refused parameters: terminal_id (forced; use serviceIndex), display (forced; use serviceIndex), agent (forced; use view), cwd_auto_create (mutating), shell (mutating), user (mutating), cmd (mutating), arg (mutating), reset (mutating), pid (mutating), env (mutating), startup_script (mutating), welcome (mutating), debug (mutating), env_inject (mutating), desktop (mutating), redirect (mutating), onboarding (mutating), desktop_env (mutating), cwd (mutating), readonly (mutating), ssh_host (credential), ssh_user (credential), ssh_port (credential), ssh_password (credential), ssh_key (credential), socks5_host (credential), socks5_port (credential), socks5_user (credential), socks5_pass (credential), redirect_delay (non-ui), wait_timeout (non-ui), ephemeral (mutating).
display
Section titled “display”Web viewer for one remote display.
| View | Label | Path | Required | Frameable | Alias | Notes |
|---|---|---|---|---|---|---|
display.client | Display | / | none | yes | no | default |
display.client
Section titled “display.client”Opens the display in the web viewer.
| Parameter | In | Values | Description |
|---|---|---|---|
decorations | query | boolean | Show window title bars and buttons. Set false for a frameless look. |
toolbar | query | boolean | Show the toolbar. false hides it, exactly as menu=false does. |
menu | query | boolean | Show the menu button. false hides it, exactly as toolbar=false does. |
maximize_new_windows | query | boolean | Open new application windows maximized. Takes effect only on a desktop of at least 1024x1024; on a smaller desktop new windows already fill the screen. |
readonly | query | boolean | View-only mode: keyboard and mouse input is not sent. |
dark_mode | query | boolean | Use the dark colour scheme. |
encoding | query | auto, webp, jpeg, png, rgb | Pre-selects the encoding in the settings dialog; does not change the stream encoding. |
offscreen | query | boolean | Render with an offscreen canvas. |
bandwidth_limit | query | integer (≥ 0) | Bandwidth limit for this viewer in bits per second; 0 means unlimited. |
override_width | query | string | Requested desktop width: auto or a number. |
override_height | query | string | Requested desktop height: auto or a number. |
vrefresh | query | integer | Refresh rate in Hz; -1 picks it automatically. |
suspend_inactive_tab | query | boolean | Pause updates while the browser tab is hidden. |
sound | query | boolean | Play the session’s audio in the viewer. |
audio_codec | query | string | Preferred audio codec. |
keyboard | query | boolean | Show the on-screen keyboard. |
swap_keys | query | boolean | Swap the Cmd and Ctrl keys. |
clipboard | query | false | Set false to turn clipboard sharing off for this viewer. |
clipboard_preferred_format | query | text/plain, text/html, UTF8_STRING | Preferred clipboard format. |
printing | query | false | Set false to turn print forwarding off. |
file_transfer | query | false | Set false to turn file transfer off. |
video | query | boolean | Allow video encodings. |
mediasource_video | query | boolean | Allow MediaSource video decoding. |
web_notifications | query | boolean | Pre-set the browser-notifications option in the connection dialog. |
display_notifications | query | boolean | Show notifications inside the display view. |
notification_connection_type | query | websocket, polling | Pre-set the notification connection type in the connection dialog. |
reconnect | query | boolean | Reconnect automatically after a lost connection. |
floating_menu | query | boolean | Show the floating menu. |
clock | query | boolean | Show the server clock. |
scroll_reverse_y | query | auto, true, false | Reverse vertical scrolling: auto, true or false. |
scroll_reverse_x | query | boolean | Reverse horizontal scrolling. |
title_show_hoody | query | boolean | Show Hoody in the page title. |
title_show_display_id | query | boolean | Show the display number in the page title. |
Refused parameters: displayId (mutating), node (mutating), project_id (mutating), container_id (mutating), url_display_id (mutating), ssl (mutating), webtransport (mutating), path (mutating), action (mutating), display (mutating), keyboard_layout (mutating), clipboard_poll (mutating), open_url (not-supported), notification_server_url (mutating), sharing (mutating), steal (mutating), app (mutating), remote_logging (mutating), insecure (auth), debug_main (mutating), debug_keyboard (mutating), debug_geometry (mutating), debug_mouse (mutating), debug_clipboard (mutating), debug_draw (mutating), debug_audio (mutating), debug_network (mutating), debug_file (mutating).
browser
Section titled “browser”Status page of the headless or headful browser service, and a full-page view of its display.
| View | Label | Path | Required | Frameable | Alias | Notes |
|---|---|---|---|---|---|---|
browser.status | Status | / | none | yes | no | default |
browser.display | Display | / | none | yes | no | none |
browser.status
Section titled “browser.status”Lists the running browser instances with links to their display and developer tools.
| Parameter | In | Values | Description |
|---|---|---|---|
maximize_new_windows | query | boolean | Open new browser windows maximized in the display. On by default. |
Always sent: start=false.
browser.display
Section titled “browser.display”Shows the browser’s display full-page.
| Parameter | In | Values | Description |
|---|---|---|---|
maximize_new_windows | query | boolean | Open new browser windows maximized in the display. On by default. |
iframe_url | query | URL | Web address shown in the full-page frame instead of the browser’s own display. Must start with http:// or https://. |
Always sent: view=display, start=false.
Refused parameters: display (forced; use serviceIndex).
A VS Code editor in the browser, opened on a folder of the container, optionally focused on a single extension.
| View | Label | Path | Required | Frameable | Alias | Notes |
|---|---|---|---|---|---|---|
code.root | Editor (default folder) | /api/v1/code | none | yes | no | starts a process |
code.editor | Editor | /api/v1/code | folder | yes | no | default, starts a process |
code.extension | Extension | /api/v1/code | extension | yes | no | starts a process |
code.root
Section titled “code.root”The editor opened on the default workspace folder the platform sets. Opening it starts the editor instance when it is not running yet.
| Parameter | In | Values | Description |
|---|---|---|---|
locale | query | string | Display language of the editor, as a language tag such as en or pt-BR. Applies when the instance starts. |
page-loader | query | boolean | Show a loading overlay while a newly started editor initialises. Applies when the instance starts. |
disable-walkthroughs | query | boolean | Hide the editor’s walkthrough pages. Applies when the instance starts. |
hoody-code | query | boolean | Load the Hoody page integration scripts, such as tab-title sync. Applies when the instance starts. |
code.editor
Section titled “code.editor”The editor opened on a folder. Opening it starts the editor instance when it is not running yet.
| Parameter | In | Values | Description |
|---|---|---|---|
folder | query | string | Absolute path of the folder to open. It applies when the editor instance starts; a running instance keeps the folder it was started with. |
locale | query | string | Display language of the editor, as a language tag such as en or pt-BR. Applies when the instance starts. |
page-loader | query | boolean | Show a loading overlay while a newly started editor initialises. Applies when the instance starts. |
disable-walkthroughs | query | boolean | Hide the editor’s walkthrough pages. Applies when the instance starts. |
hoody-code | query | boolean | Load the Hoody page integration scripts, such as tab-title sync. Applies when the instance starts. |
code.extension
Section titled “code.extension”The editor in extension-only mode: only the chosen extension’s view is shown. Opening it starts the editor instance when it is not running yet.
| Parameter | In | Values | Description |
|---|---|---|---|
folder | query | string | Absolute path of the folder to open. It applies when the editor instance starts; a running instance keeps the folder it was started with. |
extension | query | string | Extension identifier in PUBLISHER.NAME form. Opens the editor in extension-only mode, showing only that extension’s view. |
locale | query | string | Display language of the editor, as a language tag such as en or pt-BR. Applies when the instance starts. |
page-loader | query | boolean | Show a loading overlay while a newly started editor initialises. Applies when the instance starts. |
disable-walkthroughs | query | boolean | Hide the editor’s walkthrough pages. Applies when the instance starts. |
hoody-code | query | boolean | Load the Hoody page integration scripts, such as tab-title sync. Applies when the instance starts. |
Refused parameters: id (forced; use serviceIndex), restart (mutating), welcome-iframe-url (mutating), page-loader-path (mutating), proxy-domain (mutating), app-name (mutating).
A file manager for the container: folder listings, search, a code editor and a read-only viewer.
| View | Label | Path | Required | Frameable | Alias | Notes |
|---|---|---|---|---|---|---|
files.root | Root folder | / | none | yes | no | none |
files.folder | Folder | /{path} | path | yes | no | default |
files.editor | Editor | /{path} | path | yes | no | none |
files.search | Search | /{directory} | directory, q | yes | no | none |
files.root
Section titled “files.root”The listing of the container root folder, with upload, rename and delete controls for the user.
| Parameter | In | Values | Description |
|---|---|---|---|
sort | query | name, mtime, size | Sort the listing by name, modification time or size. |
order | query | asc, desc | Sort direction. Only desc changes the order; asc is the default. |
theme | query | oc-1, aura, ayu, carbonfox, catppuccin, dracula, gruvbox, monokai, nightowl, nord, onedarkpro, shadesofpurple, solarized, tokyonight, vesper | Colour theme of the page. |
colorScheme | query | light, dark | Light or dark colour scheme. Without it the page follows the system setting. |
font | query | ibm-plex-mono, cascadia-code, fira-code, hack, inconsolata, intel-one-mono, iosevka, jetbrains-mono, meslo-lgs, roboto-mono, source-code-pro, ubuntu-mono | Monospace font of the editor and listing. |
fontSize | query | integer (≥ 8, ≤ 72) | Editor font size in pixels, 8 to 72. |
embedderOrigin | query | URL | Origin of the embedding page, such as https://app.example.com. The page then accepts theme and layout messages from it and tells it when it is ready. |
chromeless | query | boolean | Hide the header, sidebar, preview, footer and borders at once. Each can be turned back on with its own option set to false. |
borderless | query | boolean | Hide the page borders. |
hideHeader | query | boolean | Hide the header bar. |
hideSidebar | query | boolean | Hide the sidebar. |
hidePreview | query | boolean | Hide the preview pane. |
hideFooter | query | boolean | Hide the footer. |
embedBg | query | transparent | Set to transparent to let the embedding page’s background show through. |
files.folder
Section titled “files.folder”The listing of a folder, with upload, rename and delete controls for the user.
| Parameter | In | Values | Description |
|---|---|---|---|
path | path | string | Absolute path inside the container, starting with /. Each segment is percent-encoded; the slashes between segments are kept. |
sort | query | name, mtime, size | Sort the listing by name, modification time or size. |
order | query | asc, desc | Sort direction. Only desc changes the order; asc is the default. |
theme | query | oc-1, aura, ayu, carbonfox, catppuccin, dracula, gruvbox, monokai, nightowl, nord, onedarkpro, shadesofpurple, solarized, tokyonight, vesper | Colour theme of the page. |
colorScheme | query | light, dark | Light or dark colour scheme. Without it the page follows the system setting. |
font | query | ibm-plex-mono, cascadia-code, fira-code, hack, inconsolata, intel-one-mono, iosevka, jetbrains-mono, meslo-lgs, roboto-mono, source-code-pro, ubuntu-mono | Monospace font of the editor and listing. |
fontSize | query | integer (≥ 8, ≤ 72) | Editor font size in pixels, 8 to 72. |
embedderOrigin | query | URL | Origin of the embedding page, such as https://app.example.com. The page then accepts theme and layout messages from it and tells it when it is ready. |
chromeless | query | boolean | Hide the header, sidebar, preview, footer and borders at once. Each can be turned back on with its own option set to false. |
borderless | query | boolean | Hide the page borders. |
hideHeader | query | boolean | Hide the header bar. |
hideSidebar | query | boolean | Hide the sidebar. |
hidePreview | query | boolean | Hide the preview pane. |
hideFooter | query | boolean | Hide the footer. |
embedBg | query | transparent | Set to transparent to let the embedding page’s background show through. |
files.editor
Section titled “files.editor”A text file opened in the code editor. Changes are saved only when the user saves.
| Parameter | In | Values | Description |
|---|---|---|---|
path | path | string | Absolute path inside the container, starting with /. Each segment is percent-encoded; the slashes between segments are kept. |
theme | query | oc-1, aura, ayu, carbonfox, catppuccin, dracula, gruvbox, monokai, nightowl, nord, onedarkpro, shadesofpurple, solarized, tokyonight, vesper | Colour theme of the page. |
colorScheme | query | light, dark | Light or dark colour scheme. Without it the page follows the system setting. |
font | query | ibm-plex-mono, cascadia-code, fira-code, hack, inconsolata, intel-one-mono, iosevka, jetbrains-mono, meslo-lgs, roboto-mono, source-code-pro, ubuntu-mono | Monospace font of the editor and listing. |
fontSize | query | integer (≥ 8, ≤ 72) | Editor font size in pixels, 8 to 72. |
embedderOrigin | query | URL | Origin of the embedding page, such as https://app.example.com. The page then accepts theme and layout messages from it and tells it when it is ready. |
chromeless | query | boolean | Hide the header, sidebar, preview, footer and borders at once. Each can be turned back on with its own option set to false. |
borderless | query | boolean | Hide the page borders. |
hideHeader | query | boolean | Hide the header bar. |
hideFooter | query | boolean | Hide the footer. |
embedBg | query | transparent | Set to transparent to let the embedding page’s background show through. |
Always sent: edit=.
files.search
Section titled “files.search”Search results for a text inside a folder and its subfolders.
| Parameter | In | Values | Description |
|---|---|---|---|
directory | path | string | Absolute path of the folder to search in, starting with /, encoded like path. |
q | query | string | Search text. Lists the entries below the folder whose names match. |
theme | query | oc-1, aura, ayu, carbonfox, catppuccin, dracula, gruvbox, monokai, nightowl, nord, onedarkpro, shadesofpurple, solarized, tokyonight, vesper | Colour theme of the page. |
colorScheme | query | light, dark | Light or dark colour scheme. Without it the page follows the system setting. |
font | query | ibm-plex-mono, cascadia-code, fira-code, hack, inconsolata, intel-one-mono, iosevka, jetbrains-mono, meslo-lgs, roboto-mono, source-code-pro, ubuntu-mono | Monospace font of the editor and listing. |
fontSize | query | integer (≥ 8, ≤ 72) | Editor font size in pixels, 8 to 72. |
embedderOrigin | query | URL | Origin of the embedding page, such as https://app.example.com. The page then accepts theme and layout messages from it and tells it when it is ready. |
chromeless | query | boolean | Hide the header, sidebar, preview, footer and borders at once. Each can be turned back on with its own option set to false. |
borderless | query | boolean | Hide the page borders. |
hideHeader | query | boolean | Hide the header bar. |
hideSidebar | query | boolean | Hide the sidebar. |
hidePreview | query | boolean | Hide the preview pane. |
hideFooter | query | boolean | Hide the footer. |
embedBg | query | transparent | Set to transparent to let the embedding page’s background show through. |
Refused parameters: json (non-ui), simple (non-ui), hash (non-ui), sha256 (non-ui), base64 (non-ui), view (not-read-only), download (mutating), content-type (non-ui), history (non-ui), at (non-ui), revision (non-ui), diff (non-ui), from_seq (non-ui), from_ts (non-ui), to_seq (non-ui), to_ts (non-ui), after_id (non-ui), limit (non-ui).
Hoody Notes: notebooks, pages and databases in the browser. Whether a framed Notes page shares its local cache with Notes open in a tab depends on the browser: a frame embedded by another site usually gets separate storage. Separate caches exchange changes, offline edits included, once they sync with the server. Offline edits survive a reload only when the browser gives Notes persistent storage; where it does not, Notes runs from memory and unsynced edits are lost on reload.
| View | Label | Path | Required | Frameable | Alias | Notes |
|---|---|---|---|---|---|---|
notes.home | Home | / | none | yes | no | default |
notes.create | Create notebook | /create | none | yes | no | none |
notes.notebook | Notebook | /notebook/{userId} | userId | yes | no | none |
notes.notebookHome | Notebook home | /notebook/{userId}/home | userId | yes | no | none |
notes.node | Page | /notebook/{userId}/{nodeId} | userId, nodeId | yes | no | none |
notes.modal | Page with modal | /notebook/{userId}/{nodeId}/modal/{modalNodeId} | userId, nodeId, modalNodeId | yes | no | none |
notes.alias | Page by alias | /notebook/{userId}/alias/{alias} | userId, alias | yes | no | none |
notes.files | Files | /notebook/{userId}/files | userId | yes | no | none |
notes.uploads | Uploads | /notebook/{userId}/uploads | userId | yes | no | none |
notes.downloads | Downloads | /notebook/{userId}/downloads | userId | yes | no | none |
notes.users | Users | /notebook/{userId}/users | userId | yes | no | none |
notes.settings | Notebook settings | /notebook/{userId}/settings | userId | yes | no | none |
notes.account | Account settings | /notebook/{userId}/account | userId | yes | no | none |
notes.home
Section titled “notes.home”Opens the last used locally available notebook, or the first available one.
| Parameter | In | Values | Description |
|---|---|---|---|
mode | query | readonly, readwrite | Share presentation. Either value hides the sidebar. readonly shows the notebook’s content and management views as a viewer sees them; your own account settings and appearance preferences stay editable. readwrite keeps the editing controls your permissions allow, including section and channel role overrides. Neither changes permissions. |
sidebar | query | hidden | Set to hidden to hide the notebook sidebar. |
theme | query | oc-1, hc-black, aura, ayu, carbonfox, catppuccin, dracula, gruvbox, monokai, nightowl, nord, onedarkpro, shadesofpurple, solarized, tokyonight, vesper | Colour theme id. |
colorScheme | query | light, dark | Light or dark colour scheme, over the saved preference. A page set to light or dark in its own appearance keeps it. |
font | query | ibm-plex-mono, jetbrains-mono, fira-code, cascadia-code, hack, source-code-pro, inconsolata, roboto-mono, ubuntu-mono, intel-one-mono, meslo-lgs, iosevka | Monospace font id. |
notes.create
Section titled “notes.create”Opens the form for creating a new notebook; only submitting the form creates one. Like any Notes page, the first visit may set up the default notebook and your user in it.
| Parameter | In | Values | Description |
|---|---|---|---|
theme | query | oc-1, hc-black, aura, ayu, carbonfox, catppuccin, dracula, gruvbox, monokai, nightowl, nord, onedarkpro, shadesofpurple, solarized, tokyonight, vesper | Colour theme id. |
colorScheme | query | light, dark | Light or dark colour scheme, over the saved preference. A page set to light or dark in its own appearance keeps it. |
font | query | ibm-plex-mono, jetbrains-mono, fira-code, cascadia-code, hack, source-code-pro, inconsolata, roboto-mono, ubuntu-mono, intel-one-mono, meslo-lgs, iosevka | Monospace font id. |
notes.notebook
Section titled “notes.notebook”Opens a notebook at its last visited location, or its home page.
| Parameter | In | Values | Description |
|---|---|---|---|
userId | path | string | Your own user id in the notebook to open, as the viewing identity knows it (not the notebook id, and not another member’s user id: an id the viewer does not have opens Notes home instead). New ids are 24 lowercase hexadecimal characters; older ids may be up to 28 lowercase letters and digits. |
mode | query | readonly, readwrite | Share presentation. Either value hides the sidebar. readonly shows the notebook’s content and management views as a viewer sees them; your own account settings and appearance preferences stay editable. readwrite keeps the editing controls your permissions allow, including section and channel role overrides. Neither changes permissions. |
sidebar | query | hidden | Set to hidden to hide the notebook sidebar. |
theme | query | oc-1, hc-black, aura, ayu, carbonfox, catppuccin, dracula, gruvbox, monokai, nightowl, nord, onedarkpro, shadesofpurple, solarized, tokyonight, vesper | Colour theme id. |
colorScheme | query | light, dark | Light or dark colour scheme, over the saved preference. A page set to light or dark in its own appearance keeps it. |
font | query | ibm-plex-mono, jetbrains-mono, fira-code, cascadia-code, hack, source-code-pro, inconsolata, roboto-mono, ubuntu-mono, intel-one-mono, meslo-lgs, iosevka | Monospace font id. |
notes.notebookHome
Section titled “notes.notebookHome”Opens the home page of a notebook.
| Parameter | In | Values | Description |
|---|---|---|---|
userId | path | string | Your own user id in the notebook to open, as the viewing identity knows it (not the notebook id, and not another member’s user id: an id the viewer does not have opens Notes home instead). New ids are 24 lowercase hexadecimal characters; older ids may be up to 28 lowercase letters and digits. |
mode | query | readonly, readwrite | Share presentation. Either value hides the sidebar. readonly shows the notebook’s content and management views as a viewer sees them; your own account settings and appearance preferences stay editable. readwrite keeps the editing controls your permissions allow, including section and channel role overrides. Neither changes permissions. |
sidebar | query | hidden | Set to hidden to hide the notebook sidebar. |
theme | query | oc-1, hc-black, aura, ayu, carbonfox, catppuccin, dracula, gruvbox, monokai, nightowl, nord, onedarkpro, shadesofpurple, solarized, tokyonight, vesper | Colour theme id. |
colorScheme | query | light, dark | Light or dark colour scheme, over the saved preference. A page set to light or dark in its own appearance keeps it. |
font | query | ibm-plex-mono, jetbrains-mono, fira-code, cascadia-code, hack, source-code-pro, inconsolata, roboto-mono, ubuntu-mono, intel-one-mono, meslo-lgs, iosevka | Monospace font id. |
notes.node
Section titled “notes.node”Opens one page or node of a notebook.
| Parameter | In | Values | Description |
|---|---|---|---|
userId | path | string | Your own user id in the notebook to open, as the viewing identity knows it (not the notebook id, and not another member’s user id: an id the viewer does not have opens Notes home instead). New ids are 24 lowercase hexadecimal characters; older ids may be up to 28 lowercase letters and digits. |
nodeId | path | string | Id of the page or node to open. New ids are 24 lowercase hexadecimal characters; older ids may be up to 28 lowercase letters and digits. |
mode | query | readonly, readwrite | Share presentation. Either value hides the sidebar. readonly shows the notebook’s content and management views as a viewer sees them; your own account settings and appearance preferences stay editable. readwrite keeps the editing controls your permissions allow, including section and channel role overrides. Neither changes permissions. |
sidebar | query | hidden | Set to hidden to hide the notebook sidebar. |
theme | query | oc-1, hc-black, aura, ayu, carbonfox, catppuccin, dracula, gruvbox, monokai, nightowl, nord, onedarkpro, shadesofpurple, solarized, tokyonight, vesper | Colour theme id. |
colorScheme | query | light, dark | Light or dark colour scheme, over the saved preference. A page set to light or dark in its own appearance keeps it. |
font | query | ibm-plex-mono, jetbrains-mono, fira-code, cascadia-code, hack, source-code-pro, inconsolata, roboto-mono, ubuntu-mono, intel-one-mono, meslo-lgs, iosevka | Monospace font id. |
notes.modal
Section titled “notes.modal”Opens a page with another node shown in a modal over it.
| Parameter | In | Values | Description |
|---|---|---|---|
userId | path | string | Your own user id in the notebook to open, as the viewing identity knows it (not the notebook id, and not another member’s user id: an id the viewer does not have opens Notes home instead). New ids are 24 lowercase hexadecimal characters; older ids may be up to 28 lowercase letters and digits. |
nodeId | path | string | Id of the page or node to open. New ids are 24 lowercase hexadecimal characters; older ids may be up to 28 lowercase letters and digits. |
modalNodeId | path | string | Id of the node shown in a modal over the page. New ids are 24 lowercase hexadecimal characters; older ids may be up to 28 lowercase letters and digits. |
mode | query | readonly, readwrite | Share presentation. Either value hides the sidebar. readonly shows the notebook’s content and management views as a viewer sees them; your own account settings and appearance preferences stay editable. readwrite keeps the editing controls your permissions allow, including section and channel role overrides. Neither changes permissions. |
sidebar | query | hidden | Set to hidden to hide the notebook sidebar. |
theme | query | oc-1, hc-black, aura, ayu, carbonfox, catppuccin, dracula, gruvbox, monokai, nightowl, nord, onedarkpro, shadesofpurple, solarized, tokyonight, vesper | Colour theme id. |
colorScheme | query | light, dark | Light or dark colour scheme, over the saved preference. A page set to light or dark in its own appearance keeps it. |
font | query | ibm-plex-mono, jetbrains-mono, fira-code, cascadia-code, hack, source-code-pro, inconsolata, roboto-mono, ubuntu-mono, intel-one-mono, meslo-lgs, iosevka | Monospace font id. |
notes.alias
Section titled “notes.alias”Opens the page that has the given alias, or the notebook home when none has it.
| Parameter | In | Values | Description |
|---|---|---|---|
userId | path | string | Your own user id in the notebook to open, as the viewing identity knows it (not the notebook id, and not another member’s user id: an id the viewer does not have opens Notes home instead). New ids are 24 lowercase hexadecimal characters; older ids may be up to 28 lowercase letters and digits. |
alias | path | string | Page alias (lowercase letters, digits, ’_’ and ’-’, up to 48 characters). Opens the page with that alias, or the notebook home when no page has it. |
mode | query | readonly, readwrite | Share presentation. Either value hides the sidebar. readonly shows the notebook’s content and management views as a viewer sees them; your own account settings and appearance preferences stay editable. readwrite keeps the editing controls your permissions allow, including section and channel role overrides. Neither changes permissions. |
sidebar | query | hidden | Set to hidden to hide the notebook sidebar. |
theme | query | oc-1, hc-black, aura, ayu, carbonfox, catppuccin, dracula, gruvbox, monokai, nightowl, nord, onedarkpro, shadesofpurple, solarized, tokyonight, vesper | Colour theme id. |
colorScheme | query | light, dark | Light or dark colour scheme, over the saved preference. A page set to light or dark in its own appearance keeps it. |
font | query | ibm-plex-mono, jetbrains-mono, fira-code, cascadia-code, hack, source-code-pro, inconsolata, roboto-mono, ubuntu-mono, intel-one-mono, meslo-lgs, iosevka | Monospace font id. |
notes.files
Section titled “notes.files”Opens the file tree of a notebook.
| Parameter | In | Values | Description |
|---|---|---|---|
userId | path | string | Your own user id in the notebook to open, as the viewing identity knows it (not the notebook id, and not another member’s user id: an id the viewer does not have opens Notes home instead). New ids are 24 lowercase hexadecimal characters; older ids may be up to 28 lowercase letters and digits. |
mode | query | readonly, readwrite | Share presentation. Either value hides the sidebar. readonly shows the notebook’s content and management views as a viewer sees them; your own account settings and appearance preferences stay editable. readwrite keeps the editing controls your permissions allow, including section and channel role overrides. Neither changes permissions. |
sidebar | query | hidden | Set to hidden to hide the notebook sidebar. |
theme | query | oc-1, hc-black, aura, ayu, carbonfox, catppuccin, dracula, gruvbox, monokai, nightowl, nord, onedarkpro, shadesofpurple, solarized, tokyonight, vesper | Colour theme id. |
colorScheme | query | light, dark | Light or dark colour scheme, over the saved preference. A page set to light or dark in its own appearance keeps it. |
font | query | ibm-plex-mono, jetbrains-mono, fira-code, cascadia-code, hack, source-code-pro, inconsolata, roboto-mono, ubuntu-mono, intel-one-mono, meslo-lgs, iosevka | Monospace font id. |
notes.uploads
Section titled “notes.uploads”Opens the uploads list of a notebook.
| Parameter | In | Values | Description |
|---|---|---|---|
userId | path | string | Your own user id in the notebook to open, as the viewing identity knows it (not the notebook id, and not another member’s user id: an id the viewer does not have opens Notes home instead). New ids are 24 lowercase hexadecimal characters; older ids may be up to 28 lowercase letters and digits. |
mode | query | readonly, readwrite | Share presentation. Either value hides the sidebar. readonly shows the notebook’s content and management views as a viewer sees them; your own account settings and appearance preferences stay editable. readwrite keeps the editing controls your permissions allow, including section and channel role overrides. Neither changes permissions. |
sidebar | query | hidden | Set to hidden to hide the notebook sidebar. |
theme | query | oc-1, hc-black, aura, ayu, carbonfox, catppuccin, dracula, gruvbox, monokai, nightowl, nord, onedarkpro, shadesofpurple, solarized, tokyonight, vesper | Colour theme id. |
colorScheme | query | light, dark | Light or dark colour scheme, over the saved preference. A page set to light or dark in its own appearance keeps it. |
font | query | ibm-plex-mono, jetbrains-mono, fira-code, cascadia-code, hack, source-code-pro, inconsolata, roboto-mono, ubuntu-mono, intel-one-mono, meslo-lgs, iosevka | Monospace font id. |
notes.downloads
Section titled “notes.downloads”Opens the downloads list of a notebook.
| Parameter | In | Values | Description |
|---|---|---|---|
userId | path | string | Your own user id in the notebook to open, as the viewing identity knows it (not the notebook id, and not another member’s user id: an id the viewer does not have opens Notes home instead). New ids are 24 lowercase hexadecimal characters; older ids may be up to 28 lowercase letters and digits. |
mode | query | readonly, readwrite | Share presentation. Either value hides the sidebar. readonly shows the notebook’s content and management views as a viewer sees them; your own account settings and appearance preferences stay editable. readwrite keeps the editing controls your permissions allow, including section and channel role overrides. Neither changes permissions. |
sidebar | query | hidden | Set to hidden to hide the notebook sidebar. |
theme | query | oc-1, hc-black, aura, ayu, carbonfox, catppuccin, dracula, gruvbox, monokai, nightowl, nord, onedarkpro, shadesofpurple, solarized, tokyonight, vesper | Colour theme id. |
colorScheme | query | light, dark | Light or dark colour scheme, over the saved preference. A page set to light or dark in its own appearance keeps it. |
font | query | ibm-plex-mono, jetbrains-mono, fira-code, cascadia-code, hack, source-code-pro, inconsolata, roboto-mono, ubuntu-mono, intel-one-mono, meslo-lgs, iosevka | Monospace font id. |
notes.users
Section titled “notes.users”Opens the member list of a notebook.
| Parameter | In | Values | Description |
|---|---|---|---|
userId | path | string | Your own user id in the notebook to open, as the viewing identity knows it (not the notebook id, and not another member’s user id: an id the viewer does not have opens Notes home instead). New ids are 24 lowercase hexadecimal characters; older ids may be up to 28 lowercase letters and digits. |
mode | query | readonly, readwrite | Share presentation. Either value hides the sidebar. readonly shows the notebook’s content and management views as a viewer sees them; your own account settings and appearance preferences stay editable. readwrite keeps the editing controls your permissions allow, including section and channel role overrides. Neither changes permissions. |
sidebar | query | hidden | Set to hidden to hide the notebook sidebar. |
theme | query | oc-1, hc-black, aura, ayu, carbonfox, catppuccin, dracula, gruvbox, monokai, nightowl, nord, onedarkpro, shadesofpurple, solarized, tokyonight, vesper | Colour theme id. |
colorScheme | query | light, dark | Light or dark colour scheme, over the saved preference. A page set to light or dark in its own appearance keeps it. |
font | query | ibm-plex-mono, jetbrains-mono, fira-code, cascadia-code, hack, source-code-pro, inconsolata, roboto-mono, ubuntu-mono, intel-one-mono, meslo-lgs, iosevka | Monospace font id. |
notes.settings
Section titled “notes.settings”Opens the settings of a notebook.
| Parameter | In | Values | Description |
|---|---|---|---|
userId | path | string | Your own user id in the notebook to open, as the viewing identity knows it (not the notebook id, and not another member’s user id: an id the viewer does not have opens Notes home instead). New ids are 24 lowercase hexadecimal characters; older ids may be up to 28 lowercase letters and digits. |
mode | query | readonly, readwrite | Share presentation. Either value hides the sidebar. readonly shows the notebook’s content and management views as a viewer sees them; your own account settings and appearance preferences stay editable. readwrite keeps the editing controls your permissions allow, including section and channel role overrides. Neither changes permissions. |
sidebar | query | hidden | Set to hidden to hide the notebook sidebar. |
theme | query | oc-1, hc-black, aura, ayu, carbonfox, catppuccin, dracula, gruvbox, monokai, nightowl, nord, onedarkpro, shadesofpurple, solarized, tokyonight, vesper | Colour theme id. |
colorScheme | query | light, dark | Light or dark colour scheme, over the saved preference. A page set to light or dark in its own appearance keeps it. |
font | query | ibm-plex-mono, jetbrains-mono, fira-code, cascadia-code, hack, source-code-pro, inconsolata, roboto-mono, ubuntu-mono, intel-one-mono, meslo-lgs, iosevka | Monospace font id. |
notes.account
Section titled “notes.account”Opens the account settings for a notebook’s account. The display name and avatar choice are kept in this browser for the signed-in identity and do not sync to other browsers or to a frame with separate storage; the avatar image itself is uploaded to the server.
| Parameter | In | Values | Description |
|---|---|---|---|
userId | path | string | Your own user id in the notebook to open, as the viewing identity knows it (not the notebook id, and not another member’s user id: an id the viewer does not have opens Notes home instead). New ids are 24 lowercase hexadecimal characters; older ids may be up to 28 lowercase letters and digits. |
mode | query | readonly, readwrite | Share presentation. Either value hides the sidebar. readonly shows the notebook’s content and management views as a viewer sees them; your own account settings and appearance preferences stay editable. readwrite keeps the editing controls your permissions allow, including section and channel role overrides. Neither changes permissions. |
sidebar | query | hidden | Set to hidden to hide the notebook sidebar. |
theme | query | oc-1, hc-black, aura, ayu, carbonfox, catppuccin, dracula, gruvbox, monokai, nightowl, nord, onedarkpro, shadesofpurple, solarized, tokyonight, vesper | Colour theme id. |
colorScheme | query | light, dark | Light or dark colour scheme, over the saved preference. A page set to light or dark in its own appearance keeps it. |
font | query | ibm-plex-mono, jetbrains-mono, fira-code, cascadia-code, hack, source-code-pro, inconsolata, roboto-mono, ubuntu-mono, intel-one-mono, meslo-lgs, iosevka | Monospace font id. |
Refused parameters: widgetId (mutating).
sqlite
Section titled “sqlite”Hoody SQLite studio: browse tables, run queries and manage key-value data.
| View | Label | Path | Required | Frameable | Alias | Notes |
|---|---|---|---|---|---|---|
sqlite.overview | Overview | / | none | yes | no | default |
sqlite.tables | Tables | /tables | none | yes | no | none |
sqlite.query | Query editor | /query | none | yes | no | none |
sqlite.kvStore | Key-value store | /kv-store | none | yes | no | none |
sqlite.history | History | /history | none | yes | no | none |
sqlite.pragmas | Pragmas | /pragmas | none | yes | no | none |
sqlite.overview
Section titled “sqlite.overview”Opens the database overview.
| Parameter | In | Values | Description |
|---|---|---|---|
db | query | string | Path of the database file to open. A missing file is reported as an error, never created. |
colorScheme | query | light, dark, system | Force the light or dark colour scheme, or follow the system. |
embed | query | boolean | Compact chrome for embedding: a thin navigation bar instead of the full header. |
sqlite.tables
Section titled “sqlite.tables”Opens the table browser, optionally with one table selected.
| Parameter | In | Values | Description |
|---|---|---|---|
table | query | string | Table to select. On the key-value view it names the key-value table (default kv_store). |
db | query | string | Path of the database file to open. A missing file is reported as an error, never created. |
colorScheme | query | light, dark, system | Force the light or dark colour scheme, or follow the system. |
embed | query | boolean | Compact chrome for embedding: a thin navigation bar instead of the full header. |
sqlite.query
Section titled “sqlite.query”Opens the SQL query editor. Nothing runs until you run a query.
| Parameter | In | Values | Description |
|---|---|---|---|
db | query | string | Path of the database file to open. A missing file is reported as an error, never created. |
colorScheme | query | light, dark, system | Force the light or dark colour scheme, or follow the system. |
embed | query | boolean | Compact chrome for embedding: a thin navigation bar instead of the full header. |
sqlite.kvStore
Section titled “sqlite.kvStore”Opens the key-value store browser.
| Parameter | In | Values | Description |
|---|---|---|---|
table | query | string | Table to select. On the key-value view it names the key-value table (default kv_store). |
db | query | string | Path of the database file to open. A missing file is reported as an error, never created. |
colorScheme | query | light, dark, system | Force the light or dark colour scheme, or follow the system. |
embed | query | boolean | Compact chrome for embedding: a thin navigation bar instead of the full header. |
sqlite.history
Section titled “sqlite.history”Opens the query history.
| Parameter | In | Values | Description |
|---|---|---|---|
db | query | string | Path of the database file to open. A missing file is reported as an error, never created. |
colorScheme | query | light, dark, system | Force the light or dark colour scheme, or follow the system. |
embed | query | boolean | Compact chrome for embedding: a thin navigation bar instead of the full header. |
sqlite.pragmas
Section titled “sqlite.pragmas”Opens the database pragma settings. Nothing changes until you save.
| Parameter | In | Values | Description |
|---|---|---|---|
db | query | string | Path of the database file to open. A missing file is reported as an error, never created. |
colorScheme | query | light, dark, system | Force the light or dark colour scheme, or follow the system. |
embed | query | boolean | Compact chrome for embedding: a thin navigation bar instead of the full header. |
Refused parameters: sql (not-supported).
notifications
Section titled “notifications”Notification landing page: recent notifications and a live feed from all displays, plus a test sender for one display.
| View | Label | Path | Required | Frameable | Alias | Notes |
|---|---|---|---|---|---|---|
notifications.landing | Notifications | / | none | yes | yes (display selects) | default |
notifications.landing
Section titled “notifications.landing”Recent and live notifications from every display, with a button to send a test notification to one display.
| Parameter | In | Values | Description |
|---|---|---|---|
display | query | string | Display number to send the test notification to. Takes precedence over the display named by the host. The feed always shows every display. |
displays | query | string | Alternative name for display; read only when display is absent. |
Browser pages for streaming data through a named pipe path: send files or text, receive downloads, share a screen, camera or microphone, watch video, and follow a transfer’s progress.
| View | Label | Path | Required | Frameable | Alias | Notes |
|---|---|---|---|---|---|---|
pipe.send | Send | /api/v1/pipe/ | none | yes | no | default |
pipe.noscript | Send without JavaScript | /api/v1/pipe/noscript | none | yes | no | none |
pipe.progress | Progress | /api/v1/pipe/{path} | path | yes | no | none |
pipe.video | Video player | /api/v1/pipe/{path} | path | yes | no | changes state |
pipe.share | Share screen, camera or audio | /api/v1/pipe/{path} | path | yes | no | none |
pipe.receive | Receive | /api/v1/pipe/{path} | path | yes | no | none |
pipe.send
Section titled “pipe.send”The page for sending a file or text to a pipe path. Its fields can be pre-filled, except the file itself, which the user picks; nothing is sent until the user confirms.
| Parameter | In | Values | Description |
|---|---|---|---|
name | query | string | Pipe name to pre-fill on the send page, without a leading slash. The values . and .. as a segment, control characters, backslashes and the reserved names help, noscript, health, metrics, favicon.ico and robots.txt are refused. Absent: the page picks a random name. |
n | query | integer (≥ 1, ≤ 256) | How many receivers the transfer waits for, from 1 to 256. It pre-fills the receivers field; nothing is sent or received until the user confirms on the page. |
text | query | string | Text to pre-fill on the send page; it selects text mode unless mode says otherwise. |
mode | query | file, text | Whether the form sends a file or typed text. Defaults to file, or on the send page to text when text is given. |
filename | query | string | A file name to pre-fill: on the send page the name given to a text or pasted send, on the receive page the download name. |
pipe.noscript
Section titled “pipe.noscript”A plain HTML form for sending a file or text to a pipe path, for browsers without JavaScript.
| Parameter | In | Values | Description |
|---|---|---|---|
path | query | string | Pipe path to prefill in the form, without a leading slash. Letters, digits and the characters . _ ~ : @ ! $ & ’ ( ) * + , ; = % - only. The values . and .., and the reserved names help, noscript, health, metrics, favicon.ico and robots.txt are refused. |
mode | query | file, text | Whether the form sends a file or typed text. Defaults to file, or on the send page to text when text is given. |
wait | query | integer (≥ 1, ≤ 3600) | Seconds the page’s own transfer waits for the other side, from 1 to 3600 (default 300): on the receive page how long the download waits for the sender, on the video player how long the player waits for the stream, on the send page without JavaScript how long the send waits for the receivers. It changes no other participant’s wait. |
sha256 | query | 1 | 1 to have the kit compute a SHA-256 digest of the transfer the page starts: the receive page’s download or the send of the page without JavaScript. Leave it out for none. The page without JavaScript shows the digest in its send result; the receive page shows none (the digest goes to the sender’s status). |
pipe.progress
Section titled “pipe.progress”A live view of a transfer’s progress on a pipe path. It only observes; it does not receive the data.
| Parameter | In | Values | Description |
|---|---|---|---|
path | path | string | The pipe path the sender uses, without a leading slash. Each segment is percent-encoded. |
Always sent: progress=true.
pipe.video
Section titled “pipe.video”A video player for a video streamed to a pipe path. Opening it starts receiving: the player takes the stream as one of the transfer’s receivers or, with live, joins a live stream from now on.
| Parameter | In | Values | Description |
|---|---|---|---|
path | path | string | The pipe path the sender uses, without a leading slash. Each segment is percent-encoded. |
live | query | 1 | 1 for a live stream. On the share page it pre-ticks Live: once the user starts, viewers join and leave at any time, and the receivers count is hidden and not used. On the video player the player joins a live stream from now on and keeps up with the newest data. Any n is then ignored. |
wait | query | integer (≥ 1, ≤ 3600) | Seconds the page’s own transfer waits for the other side, from 1 to 3600 (default 300): on the receive page how long the download waits for the sender, on the video player how long the player waits for the stream, on the send page without JavaScript how long the send waits for the receivers. It changes no other participant’s wait. |
Always sent: video=true.
pipe.share
Section titled “pipe.share”A page that streams the user’s screen, camera or microphone live to a pipe path, for viewers on the video view. Capture starts only on the user’s click. In an iframe, give the frame allow=“display-capture; camera; microphone; autoplay”.
| Parameter | In | Values | Description |
|---|---|---|---|
path | path | string | The pipe path the sender uses, without a leading slash. Each segment is percent-encoded. |
source | query | screen, camera, audio | What the share page captures: screen (default), camera or audio (microphone only). |
audio | query | 1, 0 | 1 to also capture audio when sharing a screen, 0 (default) for none. |
surface | query | monitor, window, browser | Which kind of surface the browser’s screen picker offers first: monitor, window or browser (tab). A hint; the user still picks. |
quality | query | low, medium, high | Video quality of the share: low, medium (default) or high. |
fps | query | integer (≥ 1, ≤ 60) | Frames per second of the share, from 1 to 60 (default 30). |
n | query | integer (≥ 1, ≤ 256) | How many receivers the transfer waits for, from 1 to 256. It pre-fills the receivers field; nothing is sent or received until the user confirms on the page. |
live | query | 1 | 1 for a live stream. On the share page it pre-ticks Live: once the user starts, viewers join and leave at any time, and the receivers count is hidden and not used. On the video player the player joins a live stream from now on and keeps up with the newest data. Any n is then ignored. |
Always sent: share=true.
pipe.receive
Section titled “pipe.receive”A page for receiving what is sent to a pipe path as a download. It shows the transfer state and starts the download only on the user’s click.
| Parameter | In | Values | Description |
|---|---|---|---|
path | path | string | The pipe path the sender uses, without a leading slash. Each segment is percent-encoded. |
n | query | integer (≥ 1, ≤ 256) | How many receivers the transfer waits for, from 1 to 256. It pre-fills the receivers field; nothing is sent or received until the user confirms on the page. |
filename | query | string | A file name to pre-fill: on the send page the name given to a text or pasted send, on the receive page the download name. |
wait | query | integer (≥ 1, ≤ 3600) | Seconds the page’s own transfer waits for the other side, from 1 to 3600 (default 300): on the receive page how long the download waits for the sender, on the video player how long the player waits for the stream, on the send page without JavaScript how long the send waits for the receivers. It changes no other participant’s wait. |
sha256 | query | 1 | 1 to have the kit compute a SHA-256 digest of the transfer the page starts: the receive page’s download or the send of the page without JavaScript. Leave it out for none. The page without JavaScript shows the digest in its send result; the receive page shows none (the digest goes to the sender’s status). |
Always sent: receive=true.
Refused parameters: download (mutating), autostart (mutating), status (non-ui), transfer (non-ui), ws (mutating).
Cron manager: browse and edit the crontab entries of each user.
| View | Label | Path | Required | Frameable | Alias | Notes |
|---|---|---|---|---|---|---|
cron.manager | Cron manager | / | none | yes | yes | default |
cron.manager
Section titled “cron.manager”Lists users and their cron entries; changes are made only through the page controls.
Management pages for chat-channel bot registrations.
| View | Label | Path | Required | Frameable | Alias | Notes |
|---|---|---|---|---|---|---|
bot.index | Bot registrations | / | none | yes | no | default |
bot.detail | Registration | /api/v1/bot/ui/registrations/{registrationId} | registrationId | yes | no | none |
bot.confirmDelete | Confirm deletion | /api/v1/bot/ui/registrations/{registrationId}/delete | registrationId | yes | no | none |
bot.index
Section titled “bot.index”Lists every bot registration of the owner, with a form to register a new one.
bot.detail
Section titled “bot.detail”One bot registration with its state and its start and stop controls.
| Parameter | In | Values | Description |
|---|---|---|---|
registrationId | path | string | Registration id, as returned when the bot was registered or listed. |
bot.confirmDelete
Section titled “bot.confirmDelete”Asks for confirmation before a registration is deleted. Opening this page deletes nothing.
| Parameter | In | Values | Description |
|---|---|---|---|
registrationId | path | string | Registration id, as returned when the bot was registered or listed. |
A results page that lists the applications matching a name, with their versions and the provider each comes from.
| View | Label | Path | Required | Frameable | Alias | Notes |
|---|---|---|---|---|---|---|
run.results | Results | /api/v1/run/resolve | app | yes | no | default |
run.results
Section titled “run.results”The list of applications matching a name. It only looks them up; nothing is installed or started.
| Parameter | In | Values | Description |
|---|---|---|---|
app | query | string | Name of the application to look up. |
os | query | linux, windows, any | Target operating system of the application. |
source | query | array[] | Source types to search: nix, pkgx, appimage, oci (Docker images already on the machine), registry, system or any. Repeat the key for several types. |
kind | query | gui, cli, any | Graphical or terminal applications. |
arch | query | amd64, arm64, any | Target CPU architecture. |
profile | query | string | Named preference profile to apply to this lookup; without it, the selected profile applies. The results page appears only when the profile leaves pick unset or set to ask: a profile that picks a result answers with JSON instead. |
version | query | string | Package version for pkgx candidates: the listed pkgx entry runs that version. It does not change which applications are listed. |
repo | query | string | Limits the GitHub-release applications to the configured repository with this name. |
release | query | string | Release tag to use for GitHub-release applications. |
asset | query | string | Asset-name filter for GitHub-release applications; with no matching asset the application is not listed. |
limit | query | integer (≥ 1, ≤ 100) | Maximum number of candidates, 1 to 100. The page lists at most 50. |
Always sent: format=html.
Refused parameters: pick (non-ui), pick_index (non-ui), candidate_id (non-ui), set_id (non-ui), terminal_id (non-ui), display (non-ui), dry_run (non-ui), print_curl (non-ui), origin (mutating).
A short information page about the watch service.
| View | Label | Path | Required | Frameable | Alias | Notes |
|---|---|---|---|---|---|---|
watch.index | About | / | none | yes | no | default |
watch.index
Section titled “watch.index”A static page describing the watch service and where its API starts.
Pages served by your own scripts. The address runs the script mapped to the path, and the script decides what is returned.
| View | Label | Path | Required | Frameable | Alias | Notes |
|---|---|---|---|---|---|---|
exec.script | Script page | /{path} | path | yes | no | default, starts a process, changes state |
exec.script
Section titled “exec.script”The response of your script for the given path. Opening it runs the script; any query parameters are passed to it unchanged.
| Parameter | In | Values | Description |
|---|---|---|---|
path | path | string | Path of the script route to open, without the leading slash. Each segment is percent-encoded; the slashes between segments are kept. |
Any other query parameter is passed through unchanged.
Whatever the application listening on the chosen port serves.
| View | Label | Path | Required | Frameable | Alias | Notes |
|---|---|---|---|---|---|---|
http.content | App content | /{path} | none | yes | no | default |
http.content
Section titled “http.content”A path of the application on this port, with any query the caller passes.
| Parameter | In | Values | Description |
|---|---|---|---|
path | path | string | Path inside the application, encoded segment by segment. |
Any other query parameter is passed through unchanged.
Whatever the application listening on the chosen port serves.
| View | Label | Path | Required | Frameable | Alias | Notes |
|---|---|---|---|---|---|---|
https.content | App content | /{path} | none | yes | no | default |
https.content
Section titled “https.content”A path of the application on this port, with any query the caller passes.
| Parameter | In | Values | Description |
|---|---|---|---|
path | path | string | Path inside the application, encoded segment by segment. |
Any other query parameter is passed through unchanged.
What’s next
Section titled “What’s next”- Kit services describes what each kit does once its UI is open.
- Proxy covers aliases, custom domains and permission rules for the URLs you embed.
- Security explains the open-by-default model and how to lock a container down before sharing it.