A tile that opens Lutris itself #1

Merged
enricobuehler merged 1 commits from feat/launcher-tile into main 2026-08-06 17:24:26 +00:00
Owner

defineLibraryPlugin has taken a launchers() hook since kit 0.3.0 — entries that open the launcher rather than a title (design D4) — and nothing implemented it. The host has resolved launcher_ui valued "lutris" since the same release. The whole path existed end to end with no producer at either end.

One entry, config-toggled (launcher, default on): it is the one tile that lets someone install or fix a game from the couch, and it costs a single card.

launcher_ui is valued by store id, never a command. The host turns "lutris" into the command that opens the window (D1) — and that is also the only shape available to a plugin, since the 2026-08-05 review made launch.kind = "command" operator-only: a plugin publishing one has its entire reconcile refused.

Deliberately art-less. Lutris ships a square app icon and every client cover-crops a 2:3 tile, so an icon would arrive as a cropped strip. The clients render an art-less launcher entry on purpose — accent face, the launcher named — which reads as "opens Lutris" rather than as a game whose poster failed to load.

launcherEntries is exported for the same reason artFile is: the shape is testable without standing up the whole plugin.

Gates: tsc --noEmit clean, 5 tests pass (2 new), biome clean.

Requires a host carrying the M2 wire (role + launcher_ui) — on main via punktfunk#59, with the client-side rendering in punktfunk#70. On an older host the entry is refused with a 400 rather than silently becoming a dead tile.

Not in this PR: publishing to the registry or the index pin.

`defineLibraryPlugin` has taken a `launchers()` hook since kit 0.3.0 — entries that open the **launcher** rather than a title (design D4) — and nothing implemented it. The host has resolved `launcher_ui` valued `"lutris"` since the same release. The whole path existed end to end with no producer at either end. One entry, config-toggled (`launcher`, default on): it is the one tile that lets someone install or fix a game from the couch, and it costs a single card. **`launcher_ui` is valued by store id, never a command.** The host turns `"lutris"` into the command that opens the window (D1) — and that is also the *only* shape available to a plugin, since the 2026-08-05 review made `launch.kind = "command"` operator-only: a plugin publishing one has its entire reconcile refused. **Deliberately art-less.** Lutris ships a square app icon and every client cover-crops a 2:3 tile, so an icon would arrive as a cropped strip. The clients render an art-less launcher entry on purpose — accent face, the launcher named — which reads as "opens Lutris" rather than as a game whose poster failed to load. `launcherEntries` is exported for the same reason `artFile` is: the shape is testable without standing up the whole plugin. **Gates:** `tsc --noEmit` clean, **5 tests pass** (2 new), biome clean. **Requires** a host carrying the M2 wire (`role` + `launcher_ui`) — on `main` via punktfunk#59, with the client-side rendering in punktfunk#70. On an older host the entry is refused with a 400 rather than silently becoming a dead tile. Not in this PR: publishing to the registry or the index pin.
enricobuehler added 1 commit 2026-08-06 13:17:37 +00:00
feat: a tile that opens Lutris itself
CI / build (pull_request) Successful in 17s
CI / publish (pull_request) Skipped
bedf43214c
`defineLibraryPlugin` has taken a `launchers()` hook since kit 0.3.0 — entries that
open the LAUNCHER rather than a title (design D4) — and nothing implemented it. The
host has resolved `launcher_ui` valued `"lutris"` since the same release. So the
whole path existed end to end with no producer at either end.

One entry, config-toggled and on by default: it is the one tile that lets someone
install or fix a game from the couch, and it costs a single card.

`launcher_ui` is valued by STORE ID, never a command: the host turns "lutris" into
the command that opens the window (D1). That is also the only shape available to a
plugin at all — the 2026-08-05 review made `launch.kind = "command"` operator-only,
so a plugin publishing one has its entire reconcile refused.

Deliberately art-less. Lutris ships a square app icon and every client cover-crops a
2:3 tile, so an icon would arrive as a cropped strip. The clients render an art-less
launcher entry on purpose — accent face, the launcher named — which reads as "opens
Lutris" rather than as a game whose poster failed to load.

`launcherEntries` is exported for the same reason `artFile` is: so the shape is
testable without standing up the whole plugin.

Gates: tsc --noEmit clean, 5 tests pass (2 new), biome clean.
Needs a host carrying the M2 wire (`role` + `launcher_ui`), which is on main.
enricobuehler merged commit 0e89cc4c9d into main 2026-08-06 17:24:26 +00:00
enricobuehler deleted branch feat/launcher-tile 2026-08-06 17:24:27 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: unom/punktfunk-plugin-lutris#1