A simple package for building command line apps in Zig.
Inspired by urfave/cli Go package.
--option1
, -o
=
sign: --address=127.0.0.1
equals --address 127.0.0.1
-a -b -c
equals -abc
command1 -option1 subcommand2 -option2
--opt val1 --opt val2 --opt val3
--opt EnumValue1
--opt1 val1 arg1 -v
--
: command -- --abc
will consider --abc
as a positional argument to command
.ERROR: option 'ip' is required
--help
const std = @import("std");
const cli = @import("zig-cli");
// Define a configuration structure with default values.
var config = struct {
host: []const u8 = "localhost",
port: u16 = undefined,
}{};
pub fn main() !void {
var r = try cli.AppRunner.init(std.heap.page_allocator);
// Create an App with a command named "short" that takes host and port options.
const app = cli.App{
.command = cli.Command{
.name = "short",
.options = try r.allocOptions(&.{
// Define an Option for the "host" command-line argument.
.{
.long_name = "host",
.help = "host to listen on",
.value_ref = r.mkRef(&config.host),
},
// Define an Option for the "port" command-line argument.
.{
.long_name = "port",
.help = "port to bind to",
.required = true,
.value_ref = r.mkRef(&config.port),
},
}),
.target = cli.CommandTarget{
.action = cli.CommandAction{ .exec = run_server },
},
},
};
return r.run(&app);
}
// Action function to execute when the "short" command is invoked.
fn run_server() !void {
// Log a debug message indicating the server is listening on the specified host and port.
std.log.debug("server is listening on {s}:{d}", .{ config.host, config.port });
}
Add zig-cli
to your build.zig.zon
zig fetch --save git+https://github.com/sam701/zig-cli
See the standalone
example in the examples
folder.
See simple.zig
$ ./zig-out/bin/simple sub1 --help
USAGE:
abc sub1 [OPTIONS]
another awesome command
this is my awesome multiline description.
This is already line 2.
And this is line 3.
COMMANDS:
sub2 sub2 help
OPTIONS:
-i, --ip <IP> this is the IP address
--int <VALUE> this is an int
--bool this is a bool
--float <VALUE> this is a float
-h, --help Prints help information
MIT