Builtin Commands

zero-native provides built-in bridge commands for window management and native dialogs. These are controlled by the builtin_bridge policy in RuntimeOptions, separate from app-defined commands.

Window commands

CommandRequired permissionDescription
zero-native.window.listwindowList all open windows
zero-native.window.createwindowCreate a new window
zero-native.window.focuswindowFocus a window by ID
zero-native.window.closewindowClose a window by ID

Window commands are available through window.zero.windows.* when js_window_api is true, but the runtime still checks the request origin and the window permission when permissions are configured. Use an explicit builtin_bridge policy when you want per-command origin lists.

Dialog commands

CommandDescription
zero-native.dialog.openFileShow a file open dialog
zero-native.dialog.saveFileShow a file save dialog
zero-native.dialog.showMessageShow a message dialog

Dialog commands are always default-deny and require an explicit builtin_bridge policy.

Enabling builtin commands

const app_permissions = [_][]const u8{zero_native.security.permission_window};

.security = .{
    .permissions = &app_permissions,
    .navigation = .{ .allowed_origins = &.{ "zero://app" } },
},
.builtin_bridge = .{
    .enabled = true,
    .commands = &.{
        .{ .name = "zero-native.window.list", .permissions = .{ "window" }, .origins = .{ "zero://app" } },
        .{ .name = "zero-native.window.create", .permissions = .{ "window" }, .origins = .{ "zero://app" } },
        .{ .name = "zero-native.dialog.openFile", .origins = .{ "zero://app" } },
        .{ .name = "zero-native.dialog.showMessage", .origins = .{ "zero://app" } },
    },
},

JavaScript usage

const win = await window.zero.windows.create({
  label: "tools",
  title: "Tools",
  width: 420,
  height: 320,
});

const files = await window.zero.invoke("zero-native.dialog.openFile", {
  title: "Select a file",
  allowMultiple: true,
});

const result = await window.zero.invoke("zero-native.dialog.showMessage", {
  style: "warning",
  title: "Confirm",
  message: "Are you sure?",
  primaryButton: "Yes",
  secondaryButton: "No",
});

See also: Dialogs for the full dialog type reference, Security for policy details.