zopt: parser de línea de comandos minimalista para Zig
zopt es una biblioteca ligera que delega la mayor parte del manejo de argumentos al código del usuario, ideal para herramientas pequeñas en Zig.
zopt ha sido publicado en Codeberg como una alternativa de bajo nivel al típico parser de argumentos. A diferencia de los analizadores basados en esquemas, zopt emplea una estrategia schema on read: escanea argv sólo cuando el programa solicita un flag o una opción, en lugar de procesar todo de antemano. Esta decisión reduce la complejidad del API y permite que la aplicación controle por completo la generación del texto de ayuda, la gestión de errores y los valores por defecto.
La biblioteca se implementa como un contenedor muy fino alrededor de std.process.Args, por lo que su huella es mínima y no introduce dependencias adicionales. Su público objetivo son utilidades de línea de comandos con un conjunto reducido de opciones, donde la sobrecarga de un parser con validación de esquema resultaría innecesaria. Aunque carece de validación automática, zopt mantiene internamente los flags y opciones consultados, de modo que después puede ofrecer la lista de argumentos posicionales (aquellos que no empiezan con -).
Uso básico
Para incorporar zopt basta con añadirlo como dependencia con zig fetch --save git+https://codeberg.org/hgrsd/zopt/#HEAD o apuntar a una versión específica, por ejemplo #v0.0.11. El siguiente fragmento muestra la API principal:
const std = @import("std");
const Zopt = @import("zopt").Zopt;
pub fn main(init: std.process.Init) !void {
const arena = init.arena.allocator();
const z = try Zopt.from(arena, init.minimal.args);
// flag simple
const flag = z.flag('F', "foo");
// opción con valor y fallback
const value = z.option('F', "foo") orelse "default";
// opción repetible
const values = try z.optionRepeated('F', "foo");
// parsear a tipo concreto
const int_value = try z.optionAs(usize, 'F', "foo");
// argumentos posicionales
const positional_args = try z.positionals();
}
Los métodos principales son:
flag(short, long): devuelveboolsi el flag está presente.option(short, long): devuelve?[]const u8con el valor asociado.optionRepeated(...): recopila todas las coincidencias en un[]const []const u8.optionAs(T, ...): intenta convertir el valor a un tipo Zig comousize,f64o unenum.unknownArguments(): lista los argumentos que no encajan en ninguna opción conocida, útil para detectar errores de escritura.positionals(),positional(idx): exponen los argumentos restantes.
El proyecto incluye una carpeta examples con casos de uso que pueden ejecutarse directamente, y una referencia práctica en el proyecto duplik que muestra cómo integrar zopt en una aplicación real.
Aunque la biblioteca no provee generación automática de ayuda, su diseño “a la carta” permite que el desarrollador construya mensajes de ayuda específicos del dominio, lo que resulta en una interfaz de usuario más consistente con la lógica del programa.
En resumen, zopt ofrece una solución de parsing de argumentos que prioriza la simplicidad y el control del desarrollador, perfecta para scripts y utilidades pequeñas escritas en Zig.


