Tracking issue so this isn't lost. Not urgent — nothing here is user-visible, and a big-bang upgrade is actively risky under Gameface. Recommendation at the bottom is the incremental path.
Current state
The WebUI is on Vue 2.7.16 (the final 2.x release) plus a stack of packages that have no Vue 3 version:
| Package |
Version |
Vue 3 status |
element-ui |
2.15.9 |
Vue 2 only -> element-plus (different API). ~10 component types in use (el-menu, el-input, el-checkbox, …) |
vue-class-component |
7.2.6 |
No Vue 3 support |
vue-property-decorator |
9.1.2 |
No Vue 3 support |
@vue/composition-api |
1.7.2 |
Backport shim, removed in Vue 3 (imported by 26 components) |
vuex |
3.6.2 |
-> Vuex 4 / Pinia |
vue-router |
3.5.2 |
-> vue-router 4 |
vue-virtual-scroller |
1.0.10 |
Vue 2 only |
vue-promised |
2.2.0 |
Vue 2 only |
golden-layout / vue-golden-layout |
1.5.9 / 2.1.1 |
Already unused — the Gameface port replaced the docking with a static flexbox layout, but the dependency is still declared |
Component split on the Gameface branch: 26 of 48 .vue files already use defineComponent; 15 are still class components (the big ones: Inspector, Hierarchy, History, Explorer, Viewport, Toolbar, Console…).
development already started this — 3a9fb935 chore(vue): migrate away from class components — but that branch has diverged from Gameface and the two migrations would conflict in exactly those 15 files.
Why this is not a simple upgrade
The WebUI does not run in a browser — it runs in Gameface/Cohtml, which is where most of our UI bugs come from (no CSS Grid, no :not()/:last-child, elements have no .click(), scrollIntoView unreliable, native checkboxes don't toggle). Vue 3 changes the renderer and swaps reactivity to Proxies; none of that has been validated against Cohtml, and breakage would only surface at runtime, in-game.
The upgrade delivers zero user-visible features. It's pure maintenance.
element-ui is a liability regardless of Vue version
el-checkbox does not toggle in Cohtml — it was already replaced with a plain clickable div in the bool control. So the useful direction is removing element-ui, not porting it to element-plus.
Recommended incremental path (low risk, any order)
- Drop
golden-layout + vue-golden-layout — already unused; free win.
- Replace remaining
element-ui usages with Gameface-safe primitives, as they're touched.
- Convert the last 15 class components to
defineComponent opportunistically.
That leaves the codebase Vue-3-ready without a big-bang, and matches the direction development was already heading. Only after 1-3 does an actual Vue 3 bump become a contained piece of work.
Context: filed while working on branch live-ebx; a legacy branch was created at development's tip (1a37ff76) as a restore point.
Tracking issue so this isn't lost. Not urgent — nothing here is user-visible, and a big-bang upgrade is actively risky under Gameface. Recommendation at the bottom is the incremental path.
Current state
The WebUI is on Vue 2.7.16 (the final 2.x release) plus a stack of packages that have no Vue 3 version:
element-uielement-plus(different API). ~10 component types in use (el-menu,el-input,el-checkbox, …)vue-class-componentvue-property-decorator@vue/composition-apivuexvue-routervue-virtual-scrollervue-promisedgolden-layout/vue-golden-layoutComponent split on the Gameface branch: 26 of 48
.vuefiles already usedefineComponent; 15 are still class components (the big ones: Inspector, Hierarchy, History, Explorer, Viewport, Toolbar, Console…).developmentalready started this —3a9fb935 chore(vue): migrate away from class components— but that branch has diverged fromGamefaceand the two migrations would conflict in exactly those 15 files.Why this is not a simple upgrade
The WebUI does not run in a browser — it runs in Gameface/Cohtml, which is where most of our UI bugs come from (no CSS Grid, no
:not()/:last-child, elements have no.click(),scrollIntoViewunreliable, native checkboxes don't toggle). Vue 3 changes the renderer and swaps reactivity to Proxies; none of that has been validated against Cohtml, and breakage would only surface at runtime, in-game.The upgrade delivers zero user-visible features. It's pure maintenance.
element-ui is a liability regardless of Vue version
el-checkboxdoes not toggle in Cohtml — it was already replaced with a plain clickable div in the bool control. So the useful direction is removing element-ui, not porting it to element-plus.Recommended incremental path (low risk, any order)
golden-layout+vue-golden-layout— already unused; free win.element-uiusages with Gameface-safe primitives, as they're touched.defineComponentopportunistically.That leaves the codebase Vue-3-ready without a big-bang, and matches the direction
developmentwas already heading. Only after 1-3 does an actual Vue 3 bump become a contained piece of work.Context: filed while working on branch
live-ebx; alegacybranch was created atdevelopment's tip (1a37ff76) as a restore point.