Div.main-section disappeared - broken assets?

I recently updated my frappe and erpnext working trees, ran bench build, and since then, my ERPNext dev instance has been completely unusable.

<div class="main-section"> is not visible on the webpage and has fallen below .body-sidebar-container:-

This is using frappe_docker on a Macbook, with develop branches of frappe, erpnext, webshop` and a custom app.

The only 404 errors when running bench serve appear to be of no concern:-

192.168.65.1 - - [13/May/2025 06:06:06] "GET /socket.io/?EIO=4&transport=polling&t=PR8G1iS HTTP/1.1" 404 - 192.168.65.1 - - [13/May/2025 06:24:09] "GET /supplier_feeds/icons/icons.svg?v=1747117399.205631 HTTP/1.1" 404 -

Creating a new site works initially:-

frappe@b3f6b97346bf:/workspace/development/frappe-bench $ bench new-site dev.localhost --install-app erpnext
Enter mysql super user [root]:
MySQL root password:

Installing frappe...
Updating DocTypes for frappe        : [========================================] 100%
Set Administrator password:
Updating Dashboard for frappe

Installing erpnext...
Updating DocTypes for erpnext       : [========================================] 100%
Updating customizations for Address
Updating customizations for Contact
Updating Dashboard for erpnext
dev.localhost: SystemSettings.enable_scheduler is UNSET
*** Scheduler is disabled ***
frappe@b3f6b97346bf:/workspace/development/frappe-bench $
frappe@b3f6b97346bf:/workspace/development/frappe-bench $ bench build
Assets for Commit e0df5ee076a4640f3a8bcd01899730e2cf7a67c2 don't exist
✔ Application Assets Linked


yarn run v1.22.22
$ node esbuild --run-build-command
Browserslist: caniuse-lite is outdated. Please run:
  npx update-browserslist-db@latest
  Why you should do it regularly: https://github.com/browserslist/update-db#readme
File                                                        Size

erpnext/dist/js/
├─ bank-reconciliation-tool.bundle.G7MHMAFO.js              28.11 Kb
├─ erpnext-web.bundle.253I7LT4.js                           0.43 Kb
├─ erpnext.bundle.4C5SZQQF.js                               397.99 Kb
├─ item-dashboard.bundle.KEKUE5QA.js                        14.73 Kb
├─ point-of-sale.bundle.WUOF2JXA.js                         160.06 Kb
└─ bom_configurator.bundle.WTULZBXN.js                      17.92 Kb

frappe/dist/js/
├─ billing.bundle.3M2NKQ7F.js                               5.41 Kb
├─ bootstrap-4-web.bundle.AZ67VXZX.js                       2.10 Kb
├─ calendar.bundle.CUFNYKMX.js                              511.13 Kb
├─ controls.bundle.C5QQ6JTC.js                              1638.07 Kb
├─ data_import_tools.bundle.H3V7DA22.js                     243.40 Kb
├─ desk.bundle.N76FLDP6.js                                  1898.74 Kb
├─ dialog.bundle.J6RP27MV.js                                97.73 Kb
├─ form.bundle.QPQCSN6F.js                                  282.31 Kb
├─ frappe-web.bundle.DYF2IWOI.js                            1609.89 Kb
├─ libs.bundle.LLRFRX7M.js                                  1048.03 Kb
├─ list.bundle.HIZ2R3FB.js                                  331.54 Kb
├─ logtypes.bundle.FWKQ24YH.js                              1.14 Kb
├─ onboarding_tours.bundle.P7QYMXLW.js                      13.43 Kb
├─ photoswipe.bundle.2BDW3PAH.js                            118.97 Kb
├─ report.bundle.2TI7GTFV.js                                371.88 Kb
├─ sentry.bundle.SI3DB3BY.js                                184.79 Kb
├─ telemetry.bundle.ZJBT5ETW.js                             3.90 Kb
├─ video_player.bundle.IOEIXC2G.js                          267.96 Kb
├─ web_form.bundle.5NREPDAO.js                              1985.67 Kb
├─ form_builder.bundle.H2G5DFCY.js                          1930.03 Kb
├─ form_builder.bundle.JDO65LGS.css                         28.86 Kb
├─ print_format_builder.bundle.YICCC6TB.js                  1668.50 Kb
├─ print_format_builder.bundle.TWXPKSFQ.css                 7.75 Kb
├─ workflow_builder.bundle.WNDNW5TJ.js                      962.60 Kb
├─ workflow_builder.bundle.5YSHMRH7.css                     15.04 Kb
├─ build_events.bundle.DVQJUGGD.js                          399.10 Kb
├─ build_events.bundle.3J3GYADH.css                         1.85 Kb
├─ file_uploader.bundle.MJHUMKDJ.js                         641.10 Kb
├─ file_uploader.bundle.ZJMANHXN.css                        8.95 Kb
└─ kanban_board.bundle.L56XYUZN.js                          1417.99 Kb

webshop/dist/js/
└─ web.bundle.UWGVC23C.js                                   51.71 Kb

erpnext/dist/css/
├─ erpnext-web.bundle.VPE4GYDV.css                          3.54 Kb
├─ erpnext.bundle.EEDJQURB.css                              55.38 Kb
└─ erpnext_email.bundle.NI4XEXFI.css                        0.75 Kb

frappe/dist/css/
├─ desk.bundle.UJ67DYIG.css                                 702.80 Kb
├─ email.bundle.TWYKSEI2.css                                7.37 Kb
├─ login.bundle.QNYRY6J5.css                                35.35 Kb
├─ print.bundle.IWETE72D.css                                249.09 Kb
├─ print_format.bundle.SBRDSYMP.css                         228.77 Kb
├─ report.bundle.LDHDPZPR.css                               6.80 Kb
├─ web_form.bundle.EVE24RXN.css                             17.93 Kb
└─ website.bundle.3JN5SHK3.css                              553.10 Kb

webshop/dist/css/
└─ webshop-web.bundle.JKAKZXX5.css                          26.94 Kb

erpnext/dist/css-rtl/
├─ erpnext-web.bundle.IVQWNL2L.css                          3.54 Kb
├─ erpnext.bundle.SFSHH4DS.css                              55.37 Kb
└─ erpnext_email.bundle.TBV47ZAE.css                        0.75 Kb

frappe/dist/css-rtl/
├─ desk.bundle.B4RVMIXJ.css                                 703.34 Kb
├─ email.bundle.HDCZOWWO.css                                7.38 Kb
├─ login.bundle.ACSQM3DR.css                                35.35 Kb
├─ print.bundle.HCMOARXC.css                                249.25 Kb
├─ print_format.bundle.ZFACZV3V.css                         228.89 Kb
├─ report.bundle.2JY3NHZQ.css                               6.79 Kb
├─ web_form.bundle.4YLXXM5S.css                             17.92 Kb
└─ website.bundle.QD3UZ75X.css                              553.27 Kb

webshop/dist/css-rtl/
└─ webshop-web.bundle.FPA4IQWV.css                          26.93 Kb

 DONE  Total Build Time: 8.298s
Done in 9.04s.
Compiling translations for frappe
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/bs/LC_MESSAGES/frappe.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/fr/LC_MESSAGES/frappe.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/hu/LC_MESSAGES/frappe.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/tr/LC_MESSAGES/frappe.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/sv/LC_MESSAGES/frappe.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/nl/LC_MESSAGES/frappe.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/zh/LC_MESSAGES/frappe.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/zh_TW/LC_MESSAGES/frappe.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/pt_BR/LC_MESSAGES/frappe.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/it/LC_MESSAGES/frappe.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/ar/LC_MESSAGES/frappe.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/fa/LC_MESSAGES/frappe.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/eo/LC_MESSAGES/frappe.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/es/LC_MESSAGES/frappe.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/de/LC_MESSAGES/frappe.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/sr_CS/LC_MESSAGES/frappe.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/vi/LC_MESSAGES/frappe.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/id/LC_MESSAGES/frappe.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/pt/LC_MESSAGES/frappe.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/hr/LC_MESSAGES/frappe.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/pl/LC_MESSAGES/frappe.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/af/LC_MESSAGES/frappe.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/fi/LC_MESSAGES/frappe.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/ru/LC_MESSAGES/frappe.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/th/LC_MESSAGES/frappe.mo
Compiling translations for payments
Compiling translations for supplier_feeds
Compiling translations for erpnext
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/hu/LC_MESSAGES/erpnext.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/fr/LC_MESSAGES/erpnext.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/tr/LC_MESSAGES/erpnext.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/bs/LC_MESSAGES/erpnext.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/zh/LC_MESSAGES/erpnext.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/nl/LC_MESSAGES/erpnext.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/sv/LC_MESSAGES/erpnext.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/zh_TW/LC_MESSAGES/erpnext.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/pt_BR/LC_MESSAGES/erpnext.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/ar/LC_MESSAGES/erpnext.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/it/LC_MESSAGES/erpnext.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/fa/LC_MESSAGES/erpnext.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/eo/LC_MESSAGES/erpnext.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/sr_CS/LC_MESSAGES/erpnext.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/es/LC_MESSAGES/erpnext.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/de/LC_MESSAGES/erpnext.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/id/LC_MESSAGES/erpnext.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/vi/LC_MESSAGES/erpnext.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/pt/LC_MESSAGES/erpnext.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/hr/LC_MESSAGES/erpnext.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/af/LC_MESSAGES/erpnext.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/pl/LC_MESSAGES/erpnext.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/ru/LC_MESSAGES/erpnext.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/fi/LC_MESSAGES/erpnext.mo
MO file already up to date at /workspace/development/frappe-bench/sites/assets/locale/th/LC_MESSAGES/erpnext.mo
Compiling translations for webshop

Actually, in writing this post, I’ve just pinned this down, since trying to figure it out since Thursday…

In my hooks.py, I have an Svg Icons section:-

# Svg Icons
# ------------------
# include app icons in desk
app_include_icons = "supplier_feeds/public/icons.svg"

I’ve just seen that commenting out app_include_icons, uninstalling and reinstalling my app and suddenly I get the main content back, but of course, without any icons…

I note there is no documentation at Hooks regarding app_include_icons, but in frappe’s hooks.py, it uses both app_include_icons and web_include_icons.

Further, I’ve just created a new app (bench new-app test), and it includes the same section. So, it’s not something I made up!

# Svg Icons
# ------------------
# include app icons in desk
# app_include_icons = "test/public/icons.svg"

Okay, questions!

  1. This worked fine before, when I was on a version-15 branch. There must be a breaking change on develop regarding app_include_icons. What changed, and how can I use app_include_icons now?
  2. Is there any documentation for app_include_icons? Why is app_include_icons included in the template hooks.py, but not documented online?
  3. Is there a new way to include SVG icons in frappe apps? The only vaguely relevant page I could find in the docs is: Custom Module Icon. This suggests I need to create a desktop/config.py file now?
  4. Debugging this has been immensely time-consuming and frustrating. I’ve not yet fixed it yet, but I struggle to understand why my site completely fell over, just because frappe has suddenly forgotten how to find this svg file? Can we improve this for anyone else in a similar situation?