This repository was archived by the owner on Oct 4, 2026. It is now read-only.
Repository navigation
feat(frontend): make webv2 default through call sites - #375
Merged
Merged
Conversation
Select webv2 for launches, frontend tooling, wheels, containers and dependency installation while preserving both source paths. Retain explicit legacy fallback, shared API artifact ownership and deployment-scoped browser worker cleanup.
Reset native pointer state, edit partial numbers in one keyboard sequence, and await lazy graph rows. Use a portable real-transformer dtype fixture while preserving encoder/model allocation coverage.
Move all 1,870 tracked legacy files unchanged so Git can follow their existing history.
Update legacy fallback, shared static assets, package data, build loops, CI filters, and developer commands. Keep generated contracts and frontend storage identities unchanged; align guidance and launch fixtures.
Preserve canonical schema and generator history with content-identical Git renames.
Run UI quality checks on webv2 and generate contracts with an independent locked API package. Retain legacy type imports and bundle packaging; update generation commands, tests and ownership docs.
joshistoast
marked this pull request as ready for review
September 30, 2026 01:15
joshistoast
requested review from
JPPhoto,
Pfannkuchensack,
blessedcoolant and
lstein
as code owners
September 30, 2026 01:15
joshistoast
enabled auto-merge
September 30, 2026 01:23
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
Summary
Make webv2 the default UI by switching its consumers; its source stays at
invokeai/frontend/webv2. Rename the legacy directory fromwebtowebv1withgit mvin a dedicated, content-identical rename commit, followed by the reference updates. Existing Git history is preserved; persisted formats are unchanged.Default launch, Make targets, wheel/container builds, and the shared dependency-install action now select webv2. Frontend quality CI runs webv2 only. OpenAPI/type generation and drift checks move to a shared
invokeai/frontend/apipackage with their own pinned tools and lockfile; CI no longer installs webv1 for contract generation. Both bundles are packaged;--web-legacyexplicitly selects legacy web and--webv2remains a compatibility alias. Legacy bootstrap releases this deployment's webv2 worker and cached assets before starting.Related Issues / Discussions
Alternative to #374, which promotes the source directory names. These are competing approaches; merge only the selected one.
QA Instructions
Validated with Node v22.14.0 from
.nvmrc, pnpm 10.12.4, and the existing Python environment:pnpm -C invokeai/frontend/webv2 lint: passes, including 72 architecture tests.pnpm -C invokeai/frontend/webv2 check:release: passes with 9,085 unit tests, 1,901 Chromium tests, and all fixture, production-build, architecture/performance, project-file, and accessibility gates.OMP_NUM_THREADS=1 uv run --no-sync pytest tests/backend/ideogram4 tests/app/api/test_frontend.py: 97 pass. The real-transformer conditioning test uses float64 to retain the encoder/model dtype distinction without the CPU bfloat16 instruction crash observed on Windows CI.pnpm -C invokeai/frontend/webv1 lintand production bundle: pass. The suite passes 2,368 tests initially; its one stale OpenAPI path is corrected and all 51 tests in that file pass on rerun. Legacy lint/test commands remain available locally.uv run --no-sync pytest tests/app/api/test_frontend.py tests/test_imports.py: 11 pass. Covers default/alias/legacy flags, conflicts, prefixed URLs, assets, API routing, documentation assets, and missing bundles.pnpm -C docs build: passes; 331 pages build with the updated paths.pnpm -C invokeai/frontend/api testandlintpass; real TypeScript consumer fixtures cover binary uploads, nullability, metadata, enums, optional defaults, and invalid-input preservation.webv1andwebv2; the oldwebpackage path is absent.CI status: All 12 applicable hosted checks pass on
2a45334b6c, including webv2 release gates, shared OpenAPI/type generation, and Python suites on Linux, macOS, and Windows. The two legacy UI jobs are retired. Documentation build/deploy checks are skipped while draft; the local docs build passes. The PR is mergeable with a clean merge state.Unavailable checks: Docker execution is unavailable because the current OS user cannot access the daemon socket; container wiring was inspected and both package builds pass. No hardware generation or model downloads were performed.
Manual verification from a checkout with both bundles built:
uv run --no-sync invokeai-weband verify webv2 opens.--webv2should select the same UI.--web-legacyon the same origin. Verify legacy opens after worker cleanup and existing browser data remains./docs,/static/docs/invoke-favicon-docs.svg, and a deep UI route in each mode. Confirm conflicting frontend flags are rejected.Review
No material findings remain. Default consumer paths, shared contract ownership, CI installation/filter behavior, packaging, route ordering, and cache cleanup were checked. Stale release-guide descriptions were corrected. Browser timing and Windows CPU fixture failures were addressed without weakening assertions or budgets. The wheel build loop now selects
webv2andwebv1consistently with packaging and cleanup. Docker validation remains unavailable as described above.Compatibility / Rollout
webtowebv1; webv2 stays in place. Git history remains traceable withgit log --follow. Use a merge commit or rebase merge to retain the dedicated rename commits. API schemas, database names, frontend package identities, localStorage/IndexedDB keys, queue origins, and project/export formats are unchanged. No persisted-data migration is required.webv1. Generated contracts and tooling move with exact Git renames tofrontend/api; webv1 keeps a type-onlyservices/api/schemare-export for existing callers. Contract CI installs only the shared package. Its pinned TypeScript 5 peer is independent of webv2's TypeScript 7.frontendv2-*Make targets remain aliases.frontend-*targets operate on webv2, with explicitfrontend-legacy-*build/dev/install targets for fallback.Checklist
What's Newcopy (if doing a release after this PR)