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.
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.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
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.iconhas existed in the kit's source since punktfunkf62a48d4, but that commit never bumped the version and the kit had cut0.4.0the day before — so the newest kit any plugin could resolve had no such field, and this repo'stsc --noEmitgate rejected the property outright: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 --noEmitclean,biome checkclean,bun test10/10 pass,bun run buildsucceeds — and the builtdist/index.jscontains bothicon: "steam"occurrences.End-to-end on a real host (
192.168.1.41, Bazzite canary): with these entries reaching the host,GET /api/v1/libraryand the web console's own authenticated endpoint both returnicon: "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.ymlpublishes on av*tag.mainis already at0.1.1and unreleased (onlyv0.1.0is tagged), sov0.1.1follows this merge.