When to use
Use this skill when building a WinUI 3 UI and you need to discover which
control fits an intent and get a real, working code example — without leaving the
CLI or guessing at control names and APIs.
winapp find-ui searches the WinUI 3 Gallery and the Windows Community
Toolkit (plus a few curated core patterns) and returns a working code
snippet plus where it came from. A third source, the microsoft-ui-reactor
ReactorGallery, is opt-in: it is excluded from a normal search and is only
searched when you pass --source reactor.
- WinUI-only. The corpus is WinUI 3 Gallery + Windows Community Toolkit (+
Reactor when opted in). It does not cover WPF, WinForms, or other UI
frameworks.
- Reactor is opt-in and for Reactor projects only. Reactor is a C#-only
declarative/MVU framework — its samples can't paste into a standard
dotnet new winui XAML + code-behind app, so a default search deliberately omits it. Only
reach for --source reactor when you're actually building a Reactor app.
- Result shape varies by source. Gallery and Toolkit scenarios return XAML,
C#, or both (one-sided samples are kept); Reactor scenarios are C#-only
declarative WinUI (no XAML).
- Distinct from
winapp ui search, which searches a running app's UI tree via
UI Automation — unrelated to control/sample discovery.
Front-load lookups, then code. Search for each feature you need up front, pick
the right control and scenario id, fetch its full code with --id, then write your
XAML — don't interleave search-and-code.
Workflow
# 1. Search compactly to find the control + its scenario ids (WinUI-only)
winapp find-ui "tabbed layout"
# 2. Fetch the full XAML + C# (and prerequisite notes) for the best match
winapp find-ui --id gallery-tabview-1
# 3. Batch: fetch several scenarios at once
winapp find-ui --id gallery-tabview-1 --id toolkit-tabbedcommandbar-1
Examples
# Natural-intent search
winapp find-ui "a card with an image and title"
winapp find-ui "swipeable list rows"
# Restrict to one source
winapp find-ui "settings card" --source toolkit
winapp find-ui "color picker" --source gallery
# Reactor is opt-in: excluded from a normal search, only searched with --source reactor
# (use this only for a Reactor/MVU project — its C#-only samples don't fit standard XAML apps)
winapp find-ui "flex layout" --source reactor
# Return more candidates
winapp find-ui "navigation" --max 6
# Browse everything (heavy — prefer search; excludes opt-in Reactor)
winapp find-ui --list
# Force a corpus refresh from GitHub
winapp find-ui "info bar" --refresh
# Search the built-in core patterns fully offline (no network, no fetch)
winapp find-ui "file picker" --source core
Agent-friendly output
Add --json for a structured, grounded result an agent can consume in one shot:
winapp find-ui "color picker" --json
- Search →
{ query, matchCount, matches: [ { source, control, score, description?, scenarios: [ { id, header } ] } ] } — compact; use the id values to fetch code.
--id → { results: [ { id, found, content } ] } — content is the code markdown block (XAML and/or C# for Gallery/Toolkit; C# only for Reactor).
--list → { count, items: [ { id, header } ] }.
- On error,
--json emits { "error": "..." } on stdout with a non-zero exit code.
Notes & tips
- One mode at a time. A search query,
--id, and --list are mutually
exclusive — combining them is rejected. --source applies to search only.
- Reactor is opt-in. A normal search and
--list cover Gallery + Toolkit +
core only. Pass --source reactor to search Reactor (reactor-only results);
a reactor-<control>-<n> --id still fetches even without the flag. Skipping
Reactor by default keeps its C#-only samples from outranking usable controls in
a standard XAML app.
- Everything works offline. The Gallery/Toolkit/Reactor corpus ships inside the
CLI, so search,
--list, and --id all work with no network access — including
on a first run in a sandbox or behind a proxy that blocks
raw.githubusercontent.com. When GitHub is reachable the CLI refreshes from it
and caches per-user under <global .winapp>/cache/find-ui (refreshed at most
every 24 hours, or on demand with --refresh); the built-in corpus is a floor,
never a ceiling, so live data always wins. --source core searches the curated
built-in patterns and never touches the network at all.
- Check the corpus provenance when it matters.
--json carries "corpus":
"network" (fetched this run), "cache" (this machine's earlier fetch), or
"embedded" (served from the corpus built into the CLI — either the fetch failed
or the local cache predates the bake). Only "embedded" may lag upstream —
re-run with --refresh if a sample looks out of date.
- Scenario ids are stable within a cached corpus and case-insensitive —
GALLERY-TABVIEW-1 resolves the same as gallery-tabview-1. Gallery/Toolkit/Reactor ids
look like gallery-<control>-<n> / toolkit-<control>-<n> /
reactor-<control>-<n>; the <source>- prefix disambiguates controls that
exist in more than one gallery (e.g. ColorPicker). Curated core patterns
use a plain descriptive id with no <source>-<control>-<n> shape (e.g.
file-picker-desktop, live-charts); fetch them the same way with --id, and
browse them with --source core.
--json is always JSON. With --json, every failure — including argument/parser
errors such as a non-integer --max — is emitted as a flat {"error": "..."} object
on stdout with a non-zero exit code, so an agent can parse the result on every path.
- Exit codes are script-friendly:
0 on a hit, 1 on no match / error.
- Keep queries focused (one feature per query) — the lexical ranker rewards
specific phrasing. Batch multiple focused queries rather than one broad one.
Related skills
- winapp-ui-automation — inspect and drive a running app's UI tree (a
different job from discovering controls to write).
CLI reference
Run winapp find-ui --help for current command options, or winapp --cli-schema
for the complete machine-readable command schema.
1---2name: winapp-find-ui3description: Search WinUI 3 controls and samples for a working code example. Use when building a WinUI 3 UI and you need to discover which control fits an intent (e.g. 'tabbed layout', 'a card with an image and title', 'swipeable list rows') and get a real code example from the WinUI Gallery or the Windows Community Toolkit (Gallery/Toolkit return XAML and/or C#). The microsoft-ui-reactor ReactorGallery is an opt-in source (C#-only declarative WinUI) searched only via --source reactor. WinUI-only — not WPF/WinForms. Distinct from 'winapp ui', which automates a running app's UI.4---5## When to use67Use this skill when building a **WinUI 3** UI and you need to discover which8control fits an intent and get a real, working code example — without leaving the9CLI or guessing at control names and APIs.1011`winapp find-ui` searches the **WinUI 3 Gallery** and the **Windows Community12Toolkit** (plus a few curated **core** patterns) and returns a working code13snippet plus where it came from. A third source, the **microsoft-ui-reactor14ReactorGallery**, is **opt-in**: it is excluded from a normal search and is only15searched when you pass `--source reactor`.1617- **WinUI-only.** The corpus is WinUI 3 Gallery + Windows Community Toolkit (+18 Reactor when opted in). It does **not** cover WPF, WinForms, or other UI19 frameworks.20- **Reactor is opt-in and for Reactor projects only.** Reactor is a C#-only21 declarative/MVU framework — its samples can't paste into a standard `dotnet new22 winui` XAML + code-behind app, so a default search deliberately omits it. Only23 reach for `--source reactor` when you're actually building a Reactor app.24- **Result shape varies by source.** Gallery and Toolkit scenarios return XAML,25 C#, or both (one-sided samples are kept); Reactor scenarios are C#-only26 declarative WinUI (no XAML).27- Distinct from `winapp ui search`, which searches a *running app's* UI tree via28 UI Automation — unrelated to control/sample discovery.2930**Front-load lookups, then code.** Search for each feature you need up front, pick31the right control and scenario id, fetch its full code with `--id`, then write your32XAML — don't interleave search-and-code.3334## Workflow3536```bash37# 1. Search compactly to find the control + its scenario ids (WinUI-only)38winapp find-ui "tabbed layout"3940# 2. Fetch the full XAML + C# (and prerequisite notes) for the best match41winapp find-ui --id gallery-tabview-14243# 3. Batch: fetch several scenarios at once44winapp find-ui --id gallery-tabview-1 --id toolkit-tabbedcommandbar-145```4647## Examples4849```bash50# Natural-intent search51winapp find-ui "a card with an image and title"52winapp find-ui "swipeable list rows"5354# Restrict to one source55winapp find-ui "settings card" --source toolkit56winapp find-ui "color picker" --source gallery5758# Reactor is opt-in: excluded from a normal search, only searched with --source reactor59# (use this only for a Reactor/MVU project — its C#-only samples don't fit standard XAML apps)60winapp find-ui "flex layout" --source reactor6162# Return more candidates63winapp find-ui "navigation" --max 66465# Browse everything (heavy — prefer search; excludes opt-in Reactor)66winapp find-ui --list6768# Force a corpus refresh from GitHub69winapp find-ui "info bar" --refresh7071# Search the built-in core patterns fully offline (no network, no fetch)72winapp find-ui "file picker" --source core73```7475## Agent-friendly output7677Add `--json` for a structured, grounded result an agent can consume in one shot:7879```bash80winapp find-ui "color picker" --json81```8283- **Search** → `{ query, matchCount, matches: [ { source, control, score, description?, scenarios: [ { id, header } ] } ] }` — compact; use the `id` values to fetch code.84- **`--id`** → `{ results: [ { id, found, content } ] }` — `content` is the code markdown block (XAML and/or C# for Gallery/Toolkit; C# only for Reactor).85- **`--list`** → `{ count, items: [ { id, header } ] }`.86- On error, `--json` emits `{ "error": "..." }` on stdout with a non-zero exit code.8788## Notes & tips8990- **One mode at a time.** A search query, `--id`, and `--list` are mutually91 exclusive — combining them is rejected. `--source` applies to search only.92- **Reactor is opt-in.** A normal search and `--list` cover Gallery + Toolkit +93 core only. Pass `--source reactor` to search Reactor (reactor-only results);94 a `reactor-<control>-<n>` `--id` still fetches even without the flag. Skipping95 Reactor by default keeps its C#-only samples from outranking usable controls in96 a standard XAML app.97- **Everything works offline.** The Gallery/Toolkit/Reactor corpus ships inside the98 CLI, so search, `--list`, and `--id` all work with no network access — including99 on a first run in a sandbox or behind a proxy that blocks100 `raw.githubusercontent.com`. When GitHub is reachable the CLI refreshes from it101 and caches per-user under `<global .winapp>/cache/find-ui` (refreshed at most102 every 24 hours, or on demand with `--refresh`); the built-in corpus is a floor,103 never a ceiling, so live data always wins. `--source core` searches the curated104 built-in patterns and never touches the network at all.105- **Check the corpus provenance when it matters.** `--json` carries `"corpus"`:106 `"network"` (fetched this run), `"cache"` (this machine's earlier fetch), or107 `"embedded"` (served from the corpus built into the CLI — either the fetch failed108 or the local cache predates the bake). Only `"embedded"` may lag upstream —109 re-run with `--refresh` if a sample looks out of date.110- **Scenario ids** are stable within a cached corpus and **case-insensitive** —111 `GALLERY-TABVIEW-1` resolves the same as `gallery-tabview-1`. Gallery/Toolkit/Reactor ids112 look like `gallery-<control>-<n>` / `toolkit-<control>-<n>` /113 `reactor-<control>-<n>`; the `<source>-` prefix disambiguates controls that114 exist in more than one gallery (e.g. `ColorPicker`). Curated **core** patterns115 use a plain descriptive id with **no** `<source>-<control>-<n>` shape (e.g.116 `file-picker-desktop`, `live-charts`); fetch them the same way with `--id`, and117 browse them with `--source core`.118- **`--json` is always JSON.** With `--json`, every failure — including argument/parser119 errors such as a non-integer `--max` — is emitted as a flat `{"error": "..."}` object120 on stdout with a non-zero exit code, so an agent can parse the result on every path.121- **Exit codes** are script-friendly: `0` on a hit, `1` on no match / error.122- Keep queries **focused** (one feature per query) — the lexical ranker rewards123 specific phrasing. Batch multiple focused queries rather than one broad one.124125## Related skills126127- **winapp-ui-automation** — inspect and drive a *running* app's UI tree (a128 different job from discovering controls to write).129130## CLI reference131132Run `winapp find-ui --help` for current command options, or `winapp --cli-schema`133for the complete machine-readable command schema.