GUI and Windowed
Console-less applications
On Windows, a standard executable opens a terminal window when launched.
For desktop apps that use a native window (via winit/wgpu, for example), this is
undesirable. The --windowed flag (or its alias --gui) links the .zex
against the Windows GUI subsystem, suppressing the console window:
--standalone --windowed generates a console-free .zex on Windows; on other
platforms the flag is accepted but has no visible effect.
// Feature: console-free GUI build — `--windowed` / `--gui`
// Syntax: `zolo build file.zolo --emit zex --standalone --windowed`
// When to use: ship a desktop/GUI app on Windows that should NOT pop up
// a console window when launched.
// Run (Windows):
// zolo build 31-distribution/04-windowed-gui.zolo --emit zex --standalone --windowed
// # `--gui` is an alias for `--windowed`.
//
// `--windowed` builds a standalone Windows `.zex` linked against the GUI
// subsystem, so double-clicking it opens no console window. On other
// platforms the flag is accepted but a console app is the norm.
//
// You can also set this in zolo.toml instead of passing the flag:
// [build]
// gui = true
// A GUI program typically opens a window (winit/wgpu) rather than printing.
// This stub just shows the build invocation; for a real window see the
// graphics examples under ../../../examples/.
print("Built as a windowed app — no console on Windows.")
// expected (when run from a terminal): the line above.
Requires the Zolo CLI/host — open in the playground or run locally.
The same setting can be defined in zolo.toml to avoid passing the flag on
every build:
[build]
gui = true
Running ready-made files
The zolo run command accepts both .zolo source files and already-compiled
.zex or .zar files — it detects the format automatically and loads the
embedded bytecode. This is the consumer side of the distribution workflow: the
author delivers the .zex, and the user runs it without needing the source:
zolo run app.zex executes the packaged bytecode — no source needed.
// Feature: run a built archive — `zolo run <archive>`
// Syntax: `zolo run app.zex` | `zolo run lib.zar`
// When to use: execute a `.zex`/`.zar` you (or someone else) built,
// without rebuilding from source.
// Workflow:
// zolo build 31-distribution/05-run-archive.zolo --emit zex
// zolo run target/05-run-archive-0.0.0.zex
//
// `zolo run` accepts a `.zolo` source file OR a prebuilt `.zex`/`.zar`
// archive — it detects the format and loads the embedded bytecode. This
// is the consumer side of the distribution flow:
//
// author: zolo build app.zolo --emit zex (produces app.zex)
// consumer: zolo run app.zex (no source needed)
let parts = ["dist", "ribut", "ion"]
print(parts.join(""))
// expected: distribution
Requires the Zolo CLI/host — open in the playground or run locally.
Challenge
Compile 05-run-archive.zolo with --emit zex and then run the generated
.zex with zolo run. Confirm that the output is distribution without
recompiling.
See also