[Bug] App Store grid fails to render (TypeError reading 'name') when only a v2-schema 3rd-party store is registered
Describe the bug
The App Store grid fails to render completely (stays blank) when only a third-party app store using the store-config.json schema "version": 2 is registered (such as bigbeartechworld/big-bear-casaos).
The browser DevTools console shows the following frontend crash:
TypeError: Cannot read properties of undefined (reading 'name')
at fn (AppPanel.vue?:/node_modules/casaos-ui/.../AppPanel.vue:306:38)
at normalized (vue.esm.js:2315:41)
at Proxy.renderSlot (vue.esm.js:1993:13)
Root cause:
- Backend: The endpoint
/v2/app_management/appstorereturns an array of registered stores but fails to expose a top-levelnamefield for custom v2 repositories. As shown in the logs below, the backend throws anextension x-casaos not founderror insideservice.(*App).StoreInfowhen attempting to parse the store structure. - Frontend: The Vue engine in
AppPanel.vuestrictly assumesstore.name(orcurrentCate.name/currentAuthor.name) is always defined. When it receives the payload with undefined fields, it throws an unhandled exception which crashes the entire app grid mount lifecycle.
To Reproduce
- Have the default
casaos.appstore fail or be unregistered. - Register only a third-party store that uses the
store-config.jsonv2 schema (e.g.,bigbeartechworld). - Open the App Store panel in the CasaOS web UI.
- Observe that the main application grid stays entirely blank/empty.
- Open the browser's Developer Tools (F12) and see the
TypeErrorconsole crash.
Expected behavior
The App Store should parse third-party index schemas gracefully. If the top-level name field is missing from the API response or formatted as a localized object under the version 2 specification, the UI should fallback safely to a default string or the repository URL instead of hard-crashing the render process.
Screenshot
Desktop (please complete the following information):
- OS: Ubuntu 26.04 LTS (x86_64 Server, headless)
- Browser: Brave (Chromium-based)
- Version: CasaOS-UI v0.4.25 / CasaOS-AppManagement v0.4.10-alpha2
System Time
Local time: Sun 2026-07-12 23:41:57 -05
Universal time: Mon 2026-07-13 04:41:57 UTC
RTC time: Mon 2026-07-13 04:41:57
Time zone: America/Bogota (-05, -0500)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
Logs
Output from sudo journalctl -u casaos-app-management --since "10 min ago" --no-pager:
jul 13 04:40:56 nexus casaos-app-management[51081]: 2026-07-13T04:40:56.453Z error extension x-casaos not found {"func": "service.(*App).StoreInfo", "file": "/home/runner/work/CasaOS-AppManagement/CasaOS-AppManagement/service/app.go", "line": 18}
jul 13 04:40:56 nexus casaos-app-management[51081]: {"time":"2026-07-13T04:40:56.554528468Z","id":"","remote_ip":"192.168.1.15","host":"192.168.1.11","method":"GET","uri":"/v2/app_management/web/appgrid","user_agent":"Mozilla/5.0...","status":200,"latency_human":"185.24ms","bytes_out":751}
jul 13 04:41:56 nexus casaos-app-management[51081]: 2026-07-13T04:41:56.456Z error extension x-casaos not found {"func": "service.(*App).StoreInfo", "file": "/home/runner/work/CasaOS-AppManagement/CasaOS-AppManagement/service/app.go", "line": 18}
jul 13 04:45:30 nexus casaos-app-management[51081]: 2026-07-13T04:45:30.920Z info appstore size not changed {"url": "[https://github.com/bigbeartechworld/big-bear-casaos/archive/refs/heads/master.zip](https://github.com/bigbeartechworld/big-bear-casaos/archive/refs/heads/master.zip)", "func": "service.(*appStore).UpdateCatalog", "line": 91}
(Note: Other modules such as casaos-gateway, casaos-user-service and casaos.service were checked and showed normal operations / HTTP 200 OK Pings without backend exceptions).
Additional context
This behavior was uncovered after clean-installing via get.casaos.io. The automated setup downloaded mismatched versions independently (UI v0.4.25 combined with an alpha app-management binary).
Simultaneously, the default casaos.app repository endpoint suffered a temporary TLS certificate validation issue on the server side (mismatched common name pointing to wildcard github domain properties), forcing its removal. Once the primary store was deleted and only the v2-schema custom store remained, the frontend logic hit this uncaught reference error.
Workaround applied: Manually patched the compiled UI JavaScript bundle to validate the presence of the properties before calling .name, which successfully restored the grid functionality. Not using a ZimaBoard device.
P.S. Finding this bug past midnight was wild JAJAJ. Honestly, studying anthropology makes you appreciate this: watching the frontend have a literal identity crisis and hard-crash just because it couldn't find a 'name' field was a fascinating phenomenon to witness. Vue.js took the missing text way too personally and chose absolute silence. Highly dramatic. Both the server and I definitely need a sudo poweroff at this point. I hope this helps! :D
Source: IceWhaleTech/CasaOS