See also: README.md (install / verify), docs/README.md (docs map), docs/consumer-contract.md (misses are supported), docs/sources.md (allowlists / offline).
Security fixes land on main and ship in the next tagged release. Older tags are not backported unless a consumer reports a severe issue.
Please do not open a public GitHub issue for security-sensitive reports.
- Prefer GitHub private vulnerability reporting on this repository.
- Or email the maintainer via the address on the GitHub profile for bolens.
Include: affected version/commit, reproduce steps, impact, and any suggested fix.
appicon resolves icons to local paths. Network use is optional and cache-first:
- Warm cache /
--offlinemust not hit remotes (including SVGL). - Downloads are restricted to allowlisted hosts (built-in stages such as
api.svgl.app/svgl.app; customhttp-indexonly with an explicit host allowlist you control). - Opt-in CDN / API / GitHub stages are never enabled by default — configure them via
sources.json/sources.yaml/--order. Asset downloads for thegithubstage are HTTPS-only. - Bring-your-own-key (BYOK): API tokens for Logo.dev, Noun Project, GitHub PAT, and optional
http-indexBearer auth are read from environment variables named intoken_env/secret_env. Never put secrets in config files. Missing credentials skip that stage. - The optional daemon uses the same resolve path and allowlists; the socket is under
$XDG_RUNTIME_DIRwith mode0600.appicon statusreportsdaemon_alivevia ping. - Local packs (
pack install/pack add/ MCPpack_*): treat pack trees and archive contents as untrusted input.index.jsonsize and paths are bounded, and--subdirpaths are confined to the pack/install root; archive extracts reject Zip Slip, skip symlink/hardlink members, refuse writes through existing symlinks, cap entry count and member/total size, and use fixed file modes. Non-loopback archive URLs require HTTPS; redirects cannot target cloud metadata / link-local hosts. Custom--path/ MCPpathmay point outside the packs data dir, butappiconwill not wipe a non-empty tree there (and refuses/,., and$HOME). - Cache / raster: cache keys must stay under
$XDG_CACHE_HOME/appicon; PNG raster size is capped at 512px (resolveclamps larger--sizevalues).
Treat resolve misses (exit 1) as normal. Do not require appicon for a working bar — fall back to glyphs.
Release assets include SHA256SUMS and a keyless Sigstore bundle SHA256SUMS.sigstore.json. See README.md for sha256sum / cosign verify-blob examples.
GitHub also publishes build provenance attestations for release tarballs (and related artifacts). Verify with:
gh attestation verify dist/appicon_vX.Y.Z_linux_amd64.tar.gz \
--repo bolens/appicon- Do not commit secrets or live API tokens. Use
token_env/secret_envpointing at your own env / secret manager (sops, agenix, etc.). - Do not vendor third-party icon catalogs into this repository’s releases unless via the optional packs bundle workflow, which carries upstream licenses in-tree.