Notice: this repo has moved to https://github.com/jiacai2050/zigcli.
A simple, opinionated, struct-based argument parser in Zig, taking full advantage of comptime.
Blog post explaining how simargs is implemented:
- Supported data type:
- All primitive types, such as
i8,f32,bool []const u8Enum
- All primitive types, such as
- Optional fields and fields with default value mean they are optional arguments
- Use
comptimeas possible as I can - Provide
print_help()out of the box
See demo.zig
# Run demo
zig build && ./zig-out/bin/demo -o /tmp/a.out --user-agent Firefox hello world 2>&1------------------------------Program------------------------------
./zig-out/bin/demo
------------------------------Arguments------------------------------
verbose: null
user-agent: demo.main__struct_1677.main__struct_1677__enum_1777.Firefox
timeout: 30
output: /tmp/a.out
help: false
------------------------------Positionals------------------------------
1: hello
2: world
------------------------------print_help------------------------------
USAGE:
./zig-out/bin/demo [OPTIONS] [--] [file]
OPTIONS:
-v, --verbose Make the operation more talkative
-A, --user-agent STRING (valid: Chrome|Firefox|Safari)(default: Firefox)
--timeout INTEGER Max time this request can cost(default: 30)
-o, --output STRING Write to file instead of stdout(required)
-h, --help
First add simargs to build.zig.zon of your project
.{
.name = "..",
.version = "..",
.dependencies = .{
.simargs = .{
.url = "https://github.com/jiacai2050/simargs/archive/0a1a2afd072cc915009a063075743192fc6b1fd5.tar.gz",
.hash = "1220a6554eccb2e9a9d7d63047e062314851ffd11315b9e6d1b5e06a9dde3275f150",
},
},
}
Then addModule in build.zig
const dep_simargs = b.dependency("simargs", .{
.target = target,
.optimize = optimize,
});
exe.addModule("simargs", dep_simargs.module("simargs"));Finally import like this in your Zig code:
const simargs = @import("simargs");If you’d like to be added to this list, welcome to open a PR.
When implement simargs, I refer following projects to learn how to write
idiomatic Zig code. Big Thanks!