The launcher tiles carry the Steam mark #2

Merged
enricobuehler merged 1 commits from feat/launcher-icon-token into main 2026-08-12 22:43:23 +00:00
Owner

Both tiles this plugin publishes — Big Picture and the desktop client — now name their brand mark with icon: "steam", so every client draws the real logo instead of the launcher's name on a flat accent face.

Why a token and not art

A launcher's own icon is square, every client cover-crops a 2:3 poster, and that crop turns a mark into a strip — which is exactly why these tiles deliberately shipped no artwork at all. Naming the mark instead of sending it lets each client draw the vector it already bundles (punktfunk assets/launcher-icons), letterboxed at whatever size its tile happens to be and in the tile's own ink. A client that ships no Steam mark, or one too old to know the field, falls back to the named accent face — the previous design, unchanged.

Both tiles carry the same token because they open the same client into different front ends; their titles are what tell them apart.

Why the kit dependency moves

^0.3.3^0.4.1, and it has to. ProviderEntry.icon has existed in the kit's source since punktfunk f62a48d4, but that commit never bumped the version and the kit had cut 0.4.0 the day before — so the newest kit any plugin could resolve had no such field, and this repo's tsc --noEmit gate rejected the property outright:

src/plugin.ts(178,4): error TS2353: Object literal may only specify known properties,
and 'icon' does not exist in type '{ readonly title: string; ... }'.

That is the reason the token's producers never shipped alongside the token itself — they could not be committed against a kit that had nothing to fill. Fixed by punktfunk PR #186, published as @punktfunk/plugin-kit@0.4.1.

Verified

Full CI gate locally against the published 0.4.1: tsc --noEmit clean, biome check clean, bun test 10/10 pass, bun run build succeeds — and the built dist/index.js contains both icon: "steam" occurrences.

End-to-end on a real host (192.168.1.41, Bazzite canary): with these entries reaching the host, GET /api/v1/library and the web console's own authenticated endpoint both return icon: "steam" on the Big Picture tile, and the deployed console bundle carries the matching vector. Before this, that field was absent and every client fell back to the name.

Release

Merging does not publish — ci.yml publishes on a v* tag. main is already at 0.1.1 and unreleased (only v0.1.0 is tagged), so v0.1.1 follows this merge.

Both tiles this plugin publishes — Big Picture and the desktop client — now name their brand mark with `icon: "steam"`, so every client draws the real logo instead of the launcher's name on a flat accent face. ## Why a token and not art A launcher's own icon is square, every client cover-crops a 2:3 poster, and that crop turns a mark into a strip — which is exactly why these tiles deliberately shipped no artwork at all. Naming the mark instead of sending it lets each client draw the vector it already bundles (`punktfunk assets/launcher-icons`), letterboxed at whatever size its tile happens to be and in the tile's own ink. A client that ships no Steam mark, or one too old to know the field, falls back to the named accent face — the previous design, unchanged. Both tiles carry the same token because they open the same client into different front ends; their titles are what tell them apart. ## Why the kit dependency moves `^0.3.3` → `^0.4.1`, and it has to. `ProviderEntry.icon` has existed in the kit's *source* since punktfunk `f62a48d4`, but that commit never bumped the version and the kit had cut `0.4.0` the day before — so the newest kit any plugin could resolve had no such field, and this repo's `tsc --noEmit` gate rejected the property outright: ``` src/plugin.ts(178,4): error TS2353: Object literal may only specify known properties, and 'icon' does not exist in type '{ readonly title: string; ... }'. ``` That is the reason the token's producers never shipped alongside the token itself — they could not be committed against a kit that had nothing to fill. Fixed by punktfunk PR #186, published as `@punktfunk/plugin-kit@0.4.1`. ## Verified Full CI gate locally against the published `0.4.1`: `tsc --noEmit` clean, `biome check` clean, `bun test` 10/10 pass, `bun run build` succeeds — and the built `dist/index.js` contains both `icon: "steam"` occurrences. End-to-end on a real host (`192.168.1.41`, Bazzite canary): with these entries reaching the host, `GET /api/v1/library` and the web console's own authenticated endpoint both return `icon: "steam"` on the Big Picture tile, and the deployed console bundle carries the matching vector. Before this, that field was absent and every client fell back to the name. ## Release Merging does not publish — `ci.yml` publishes on a `v*` tag. `main` is already at `0.1.1` and unreleased (only `v0.1.0` is tagged), so `v0.1.1` follows this merge.
enricobuehler added 1 commit 2026-08-12 22:40:35 +00:00
feat: the launcher tiles carry the Steam mark
CI / build (pull_request) Successful in 54s
CI / publish (pull_request) Skipped
c8031897e4
Both tiles this plugin publishes — Big Picture and the desktop client —
now name their brand mark with `icon: "steam"`, so every client draws the
real logo instead of the launcher's name on a flat accent face.

A token, not art, and the distinction is the whole point: a launcher's own
icon is square, every client cover-crops a 2:3 poster, and that crop turns
a mark into a strip — which is why these tiles deliberately shipped no
artwork at all. Naming the mark instead of sending it lets each client draw
the vector it already bundles (punktfunk assets/launcher-icons), letterboxed
at whatever size its tile happens to be and in the tile's own ink. A client
that ships no Steam mark, or one too old to know the field, falls back to
the named accent face — the previous design, unchanged.

Both tiles carry the same token because they open the same client into
different front ends; their titles are what tell them apart.

The dependency moves to plugin-kit ^0.4.1 because it has to.
`ProviderEntry.icon` has existed in the kit's source since punktfunk
f62a48d4, but that commit never bumped the version and the kit had cut
0.4.0 the day before — so the registry's newest kit had no such field, and
this plugin's `tsc --noEmit` gate rejected the property outright. That is
the reason the token's producers never shipped with the token: they could
not be committed against a kit that had nothing to fill.
enricobuehler merged commit 79dd5893ae into main 2026-08-12 22:43:22 +00:00
enricobuehler deleted branch feat/launcher-icon-token 2026-08-12 22:43:38 +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-steam#2