"A window in config is a window you get at launch. A window in code is a window you get whenever you decide."
Two Ways to Make a Window
You can declare windows statically in tauri.conf.json (they open at startup), or create them at runtime in Rust with WebviewWindowBuilder. The static path is perfect for your main window; the runtime path is for windows you open on demand — a settings window when the user clicks Preferences, a second document window, a popup. Both produce the same WebviewWindow type.
What URL Does It Show?
A window needs to know what to render, and that's WebviewUrl. WebviewUrl::App("index.html".into()) (or a route path) loads your bundled frontend — the normal case. WebviewUrl::External(url) points the window at a remote site, which you should treat with care (see the security track on trusting remote content). WebviewUrl::default() loads your app's entry point. Most windows you create use App with a route, so the new window shows a specific screen of your own UI.
The Builder Pattern
WebviewWindowBuilder chains settings — title, size, resizability — and ends in .build(), which returns the live window (or an error). You need an AppHandle or &App to start the builder, which is why window creation usually happens in setup, in a command, or in an event handler where you have one of those in hand.