Troubleshooting
Most first-time starter users and retrofit users get stuck in similar places.
This page is meant to help you decide where to look first.
Start with frontron check
Before changing files by hand, run:
npx frontron checkIt checks the first-run CLI contract:
package.json- root
frontron.config.ts app:devandapp:build- inferred or explicit
web.devandweb.build - dev-port conflicts before
app:devstarts - frontend build output,
.frontron/, and packaged output state - Rust toolchain presence when
rust.enabledis true - monorepo and custom-script hints when inference is likely ambiguous
If the app does not start
Check these things first:
npx frontron checkalready showed the first failing itemnpm installfinished successfullynpm run app:devdoes not already show a terminal error- your Node.js version is
22+ - the root
frontron.config.tsexists
If you see a blank page
A blank page is often a development-server mismatch.
Check:
- the port in
vite.config.ts - the
web.dev.urlvalue in the rootfrontron.config.ts - whether another process is already using the same port
If frontron check says the dev URL already responds before Frontron starts, another server is already occupying the target port.
- stop the stale server and run
npm run app:devagain - or keep
web.dev.urlpointed at that running server on purpose
If window buttons or bridge calls do not react
Window controls and desktop bridge calls only work when frontron/client is connected to the frontron runtime.
Check these first:
- Make sure you ran
npm run app:dev, notnpm run dev - Make sure the renderer imports
frontron/client - Check the terminal for preload or runtime errors
If you only see Web preview in the title bar, you are in browser-only preview mode, not desktop mode.
If you are still running an older generated app
Older generated apps often fail here because they still use removed APIs.
window.electronis no longer supported- renderer code must use
frontron/client - the old
src/electron/*structure is not part of the official contract anymore
The first things to check are:
- the renderer import comes from
frontron/client - direct preload-global reads are gone
- window and system calls go through
bridge.window.*andbridge.system.*
If the icon does not change
Check these in order:
- confirm that
public/icon.icowas replaced - confirm that
app.iconin the rootfrontron.config.tsstill points to that file - run the build again
- make sure you are not looking at an old packaged output
If output/ is empty or missing expected files
First confirm that the build finished all the way through.
Check:
dist/exists.frontron/exists.frontron/runtime/build/app/containsmanifest.json,main.mjs,preload.mjs, andweb/- the last terminal lines do not show an error
On Windows, the current default output usually includes win-unpacked/ and an installer .exe.
frontron check now also reports:
- whether the frontend build output exists or is empty
- whether
.frontron/runtime/build/app/is complete - whether the packaged output directory exists but is empty
If .frontron/runtime/build/app/ is incomplete, remove .frontron/ and run npm run app:build again.
If Rust is enabled and check reports cargo missing
frontron check only checks this when rust.enabled is true.
Do one of these:
- install Rust and make sure
cargo --versionworks in the same terminal - or disable
rust.enableduntil the Rust slot is ready
If the project is a monorepo or uses wrapper scripts
Inference is intentionally conservative for workspace wrappers.
If check shows a monorepo/custom-script hint, prefer explicit config in the root frontron.config.ts:
web: {
dev: {
command: 'pnpm --filter web dev',
url: 'http://localhost:5173',
},
build: {
command: 'pnpm --filter web build',
outDir: 'apps/web/dist',
},
}If Windows packaging fails with file-not-found errors
Very deep project paths can still break Windows packaging.
If you see long paths inside packaging output, especially under staged app paths, try moving the project to a shorter path and build again.
- example:
C:\dev\my-app - example:
C:\work\demo
TIP
When something breaks, start with the file you changed most recently.