Repository navigation
feat(core): discover project icons automatically - #56698
Open
kitlangton wants to merge 1 commit into
Open
kitlangton wants to merge 1 commit into
kitlangton wants to merge 1 commit into
Conversation
kitlangton
force-pushed
the
project-icons
branch
2 times, most recently
from
October 20, 2026 19:16
e37eea8 to
22eb137
Compare
This was referenced Oct 20, 2026
kitlangton
force-pushed
the
project-icons
branch
2 times, most recently
from
October 20, 2026 22:27
b96f66a to
69c4e2e
Compare
kitlangton
force-pushed
the
project-remote-names
branch
from
October 20, 2026 22:27
763c6dd to
abd6f0e
Compare
kitlangton
force-pushed
the
project-icons
branch
5 times, most recently
from
October 21, 2026 01:01
5efaf8f to
9ca7f24
Compare
kitlangton
force-pushed
the
project-icons
branch
from
October 21, 2026 01:20
9ca7f24 to
f62c23f
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
How it works
Project.resolvewhenproject.icon_urlis unset, and across unarchived projects during the hourlyProject.sweep.opencode.json(c)/.opencode/opencode.json(c)iconfirst (https:URLs kept as-is; relative paths validated inside the project root), then a fixed priority list of well-known paths (Xcode.appiconsetpicking a 128–256 px entry, Icon Composer.iconfront layer,assets/app-icon.*,build/icon.*,src-tauri/icons/icon.*,resources/icon.*,icons/icon.*,extension/icons/icon.*, web favicons/apple-touch-icon inpublic//app//src/app//site/public//root, andlogo.*/icon.*inassets//public//root).project.icon_urlcolumn (no database migration or schema change) and exposes/api/project/<id>/icon?v=<hash>onProject.Info.icon.url.GET /api/project/:projectID/icon): Resolves the stored relative path inside the project's canonical worktree (rejecting any path escaping it at the boundary), streams the image bytes withContent-Type,ETag: "<hash>", andCache-Control(private, max-age=31536000, immutablewhen?v=matches,304onIf-None-Match), and returns404when the file is missing soProjectAvatarfalls back to the letter tile.Project.sweepupdates thev=hash if the file changed, or clears and rediscovers if the file was deleted.Stack
+9 / -4code,+21tests)GET /api/project/:projectID/icon(+216 / -21code,+190 / -1tests,+42 / -4generated client, 0 migrations)Proof