Dialogs

zero-native provides native file and message dialogs accessible from Zig via PlatformServices or from JavaScript via the builtin bridge.

Open file dialog

FieldTypeDefault
title[]const u8""
default_path[]const u8""
filters[]const FileFilter&.
allow_directoriesboolfalse
allow_multipleboolfalse

Returns OpenDialogResult with count and paths.

Save file dialog

FieldTypeDefault
title[]const u8""
default_path[]const u8""
default_name[]const u8""
filters[]const FileFilter&.

Returns an optional path string.

Message dialog

FieldTypeDefault
styleMessageDialogStyle.info
title[]const u8""
message[]const u8""
informative_text[]const u8""
primary_button[]const u8"OK"
secondary_button[]const u8""
tertiary_button[]const u8""

MessageDialogStyle: info, warning, critical

MessageDialogResult: primary, secondary, tertiary

FileFilter

const filters = [_]zero_native.FileFilter{
    .{ .name = "Images", .extensions = &.{ "png", "jpg", "gif" } },
    .{ .name = "All Files", .extensions = &.{ "*" } },
};

From JavaScript

Dialogs require the builtin bridge to be enabled with an explicit policy. JSON field names use camelCase:

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

const path = await window.zero.invoke("zero-native.dialog.saveFile", {
  title: "Save as",
  defaultName: "untitled.txt",
});

const result = await window.zero.invoke("zero-native.dialog.showMessage", {
  style: "warning",
  title: "Confirm",
  message: "Delete this item?",
  informativeText: "This action cannot be undone.",
  primaryButton: "Delete",
  secondaryButton: "Cancel",
});