tasty.gallery
Chrome · Startup
← Design
Specs
Theme

Chrome · Startup

Preview the screen shown while Tasty starts. It combines the logo, a spinner, and the current startup phase until the app is ready.

This page uses a saved copy of the design system, last changed on . It may differ from the current design source.

When to use it
Read the usage notes to choose a component for your task.
Design tokens
See which tokens each example uses and what they control.
Check dimensions
Turn on Specs at the top right to show the 4px grid and measurements.

Default — 1280 × 720 (logical)

Boot screen — full client area, centered stack

Shown from the very first presented GPU frame until Ready (GpuInit → WaitingPlugins → RestoringLayout). App-background fill, no chrome (sidebar/tabs/status don't exist yet), non-interactive, short + variable, frame-drop tolerant. Frame shown at 60%; token dimensions are real values.

tastytasty.
Loading plugins…
Layout spec
surface
client area = --tasty-bg-app solid (= GPU clear color)
stack
lockup → (space-xl 24) → spinner → (space-lg 16) → phase slot
lockup
64px mark · space-sm 8 · tasty. mono 38px · melon dot (no overlap — 2026-10-07)
spinner
32px · stroke 3 · accent-primary · track 0.22 · 900ms linear
phase slot
fixed --tasty-size-16 · font-size-body · text-muted
Tokens used
bg-app— full surfaceaccent-primary— spinner arcbrand-melon-flesh— wordmark dotspinner-duration— 900ms rotationspace-xl / -lg— stack gaps

Non-interactive · frame-drop tolerant: single constant-velocity arc, angle = f(time), so a 50–300ms atomic boot task (GPU init) that stalls the frame loop won't strobe or jump.

Minimal window — 640 × 480 (true size)

Same stack, no responsive shrink

Minimum window size. Stack elements, gaps, and spinner size are identical to the default — centered placement still has ample margin, so implementation needs one centered layout regardless of window size.

tastytasty.
Restoring layout…

Phase variants (3) + no-text

Fixed-height phase slot — swap/omit never shifts the stack

Phase strings map 1:1 to the boot state machine and are confirmed in English → i18n keys verbatim (en/ko/ja). The slot always occupies --tasty-size-16 whether filled or empty, so the lockup + spinner never move; phases not all appearing (e.g. fresh install with no layout restore) is fine.

tastytasty.
Initializing graphics…
tastytasty.
Loading plugins…
tastytasty.
Restoring layout…
tastytasty.
·
Layout spec
1 · GpuInit
Initializing graphics…
2 · WaitingPlugins
Loading plugins…
3 · RestoringLayout
Restoring layout…
no-text (§2-4)
wordmark + spinner only; slot reserved, empty
Tokens used
size-16— fixed phase-slot heighttext-muted— phase color

Spinner spec

Spinner.jsx reused — size 16 → 32 for boot hero

Same visual vocabulary as components/feedback/Spinner.jsx (thin arc on a faint track). Only the size is bumped one step to a boot-hero 32px; no new spinner invented. reduced-motion freezes the arc (Spinner's built-in static fallback).

animated · reduced-motion (3-dot fallback)
Layout spec
size
32px (catalog 16 → hero) · viewBox 24
stroke
3px · arc round cap
arc / track
90° accent-primary / full-circle currentColor @0.22
rotation
--tasty-spinner-duration 900ms linear ∞ (constant velocity)
reduced-motion
arc frozen / Spinner 3-dot fallback
Tokens used
spinner-indicator— = accent-primaryspinner-track— 0.22 trackspinner-duration— 900ms

Latte variant (theme-following)

Follows the saved theme — no dark flash for light users

Settings are loaded by boot time, so the loading screen adopts the user's theme. Mocha is the default (above); this Latte frame is the same tokens resolved in the light theme — a light user never sees a dark flash.

tastytasty.
Loading plugins…

Same token names, light values. The --tasty-bg-app fill doubles as the GPU clear color, so it must be read from the resolved theme (not hard-coded dark) on the implementing side.

First-run shell setup — 2026-09-29

Shell path form — Quit / Use this shell

Shown on the boot surface when no usable shell is configured (render_shell_setup). Same fill and lockup as the loading screen, then a 360-wide form: title, a sub that may wrap to two lines (body, line-height-ui; never truncated), mono path Input, a validation line (glyph + word), and a right-aligned button row. The confirm moves to the shared Button primary (md) — the hand-painted accent-success fill goes, there is no success variant — and is labelled by what it does, Use this shell (the untranslated "OK" goes; i18n key). Quit (was Cancel — it exits the app) is Button secondary. The validation line has one message per host verdict, and on Windows a warning caption names the missing Git Bash (2026-10-06). While the path is not an executable, the primary is disabled with the shared ink rule; the validation line says why.

tastytasty.
Choose a shell
New terminals start this shell. You can change it later in Settings.
Git Bash was not found. Install Git for Windows, or enter the path to bash.exe.
tastytasty.
Choose a shell
New terminals start this shell. You can change it later in Settings.
Git Bash was not found. Install Git for Windows, or enter the path to bash.exe.
No file at this path
tastytasty.
Choose a shell
New terminals start this shell. You can change it later in Settings.
Git Bash was not found. Install Git for Windows, or enter the path to bash.exe.
Not a bash or zsh executable
tastytasty.
Choose a shell
New terminals start this shell. You can change it later in Settings.
Git Bash was not found. Install Git for Windows, or enter the path to bash.exe.
Shell found
tastytasty.
Choose a shell
New terminals start this shell. You can change it later in Settings.
Not a bash or zsh executable
tastytasty.
Choose a shell
New terminals start this shell. You can change it later in Settings.
Shell found
tastytasty.
Choose a shell
New terminals start this shell. You can change it later in Settings.
Git Bash was not found. Install Git for Windows, or enter the path to bash.exe.
No file at this path
tastytasty.
Choose a shell
New terminals start this shell. You can change it later in Settings.
Shell found
Layout spec
form width
360 · --tasty-size-360
stack
lockup → (space-xl) → title · sub · input · validation · buttons (space-sm)
title
14 / 600 · text-primary
validation (2026-10-06)
empty → blank line, height reserved · No file at this path · Not a bash or zsh executable (danger) · Shell found (success)
Git Bash notice
Windows only · caption line alertTriangle + warning ink · between sub and Input · no box
confirm
Button primary md · Use this shell · disabled unless valid · Enter = confirm when valid
cancel → Quit
Button secondary md · labelled Quit because it exits the app
no card
the host's 440 card, 12px literal and 32 input go: control-height Input, caption type, size-360 form
Tokens used
accent-success— valid lineaccent-danger— invalid linestate-disabled-fg— disabled confirm ink

Shutdown screen — 2026-10-07

Same surface as boot, shutdown phases

When quitting has work to wait for, the window shows the boot surface again — same fill, lockup, spinner and fixed phase slot, no chrome, non-interactive — with the shutdown phase in the slot. Values are identical to the boot screen; only the copy differs. If there is nothing to wait for, no frame is drawn and the window just closes.

tastytasty.
Saving layout…
tastytasty.
Saving layout…
tastytasty.
Stopping background worker…
tastytasty.
Closing surfaces…
tastytasty.
Stopping plugins…
Layout spec
surface · stack
identical to boot (lockup → space-xl → spinner → space-lg → phase slot)
1 · SavingLayout
Saving layout…
2 · ReclaimingBootWorker
Stopping background worker…
3 · ClosingSurfaces
Closing surfaces…
4 · StoppingPlugins
Stopping plugins…
nothing to wait for
no frame — the window closes
theme
follows the saved theme, like boot
Tokens used
bg-app— full surfaceaccent-primary— spinner arctext-muted— phase

No new tokens. Phase copy is new i18n (shutdown.saving_layout · shutdown.reclaiming_boot_worker · shutdown.closing_surfaces · shutdown.stopping_plugins); keep the trailing ellipsis character.

Boot error screen — 2026-10-10 (b12)

Could not start — engine · data folder in use · webhook port

Shown instead of the app when Tasty cannot start. It is the same boot stage as the loading and first-run shell screens, so it takes the same structure: app-bg fill, the lockup, then a 360 form (--tasty-boot-form-width). The diagnostic card goes (its 460 width, 120 × 34 Quit and 6px corner had no token). The title row leads with alertCircle in --tasty-boot-error-glyph (danger); the title itself is text-primary 14 / 600 like every other title — the glyph carries the tone, so danger is not repeated on the title and the button. Body (13, text-secondary) holds the sentence and the OS detail; guidance (caption, muted) says what to do, with CLI pieces as code runs. Quit is the shared Button secondary md, right-aligned, as on shell setup — there is no danger-fill variant and quitting is the only choice, not a destructive one. Esc, Enter and the window close all quit with code 1.

tastytasty.
Could not start the terminal
Tasty could not start a terminal. Details: No such file or directory (os error 2)
Check general.shell in your config.toml and make sure the shell exists, then start Tasty again.
tastytasty.
Data folder already in use
Another Tasty is already using this data folder: /Users/hana/Library/Application Support/tasty-workspaces/personal/profile-default
Use the Tasty that is already running, or start this one with a different TASTY_HOME.
tastytasty.
Webhook port in use
The webhook port 7420 could not be opened: Address already in use (os error 48)
Stop the app that is using port 7420, or start Tasty with --webhook-port 7421. tasty --help lists the other start options.
tastytasty.
Data folder already in use
Another Tasty is already using this data folder: /Users/hana/Library/Application Support/tasty-workspaces/personal/profile-default
Use the Tasty that is already running, or start this one with a different TASTY_HOME.
Layout spec
structure
lockup → (space-xl) → form 360 · gaps space-sm · no card, no shadow
title row
alertCircle 16 · boot-error-glyph → accent-danger · gap space-sm · title 14 / 600 text-primary, wraps
body
font-size-body · text-secondary · line-height-ui · wraps; paths and OS errors break anywhere (overflow-wrap: anywhere)
guidance
caption · text-muted · CLI pieces = code runs (ui-code-*)
Quit
Button secondary md · right · Enter / Esc / close = Quit (exit 1)
long content
never truncated · when the stack is taller than the window − 2 × space-xl, the lockup is dropped first; past that the form scrolls (standard scrollbar), Quit stays pinned under it
theme
follows the saved theme when it could be read; else Mocha
Tokens used
boot-form-width— → size-360boot-error-glyph— → accent-dangertext-secondary— bodytext-muted— guidanceui-code-bg— CLI runs

Copy is unchanged from the app (boot_error.*); the OS error and path in the samples are illustrative. The webhook guidance shown here is a sample of the longest case (three runs) — use the app's string.