A simple command-line argument parser for MoonBit.
Dependencies
{
"deps": {
"dowdiness/margs": "*"
}
}moon install dowdiness/margsfn main {
@margs.create_cli("hello", description="Greeting CLI", version="0.1.1")
.add_command(
@margs.command("greet", handler=fn(args) {
let name = match args.get_string("name") {
Some(v) => v
None => "World"
}
println("Hello, \{name}!")
})
.add_option(@margs.str_option("name", short='n', long="name", default="World")),
)
.run()
}mytool --port 3000MY_APP_PORT=3000 mytool# ~/.mytoolrc.json
{ "port": 3000 }int_option("port", default=8080)let cli = create_cli("myapp")
.add_option(str_option(
"host",
long="host",
env="MYAPP_HOST", // Falls back to $MYAPP_HOST
default="localhost",
help="Server hostname"
))
.add_option(int_option(
"port",
long="port",
env="MYAPP_PORT", // Falls back to $MYAPP_PORT
default=8080,
help="Server port"
))
.add_option(flag(
"verbose",
short='v',
env="MYAPP_VERBOSE", // Accepts: 1, true, yes, on
help="Enable verbose logging"
))# Uses default
myapp
# → host=localhost, port=8080
# Uses env var
MYAPP_PORT=3000 myapp
# → host=localhost, port=3000
# CLI overrides env var
MYAPP_PORT=3000 myapp --port 9000
# → host=localhost, port=9000let cli = create_cli("myapp")
.with_config_file(".myapprc.json")
.add_option(str_option("host", env="MYAPP_HOST", default="localhost"))
.add_option(int_option("port", env="MYAPP_PORT", default=8080)){
"host": "prod.example.com",
"port": "3000",
"verbose": "true"
}# Config: host=prod.example.com, port=3000
# Env: MYAPP_PORT=5000
# CLI: --host custom.com
myapp
# → host=custom.com (CLI), port=5000 (env)let cli = create_cli("myapp", version="1.0.0")
.add_option(str_option("host", long="host", help="Server hostname"))
.add_option(int_option("port", short='p', help="Server port"))
.add_command(
command("serve", handler=fn(_) { () })
.add_option(flag("daemon", short='d', help="Run as daemon"))
)
let metadata = generate_metadata(cli.to_parser())
println(metadata){
"name": "myapp",
"version": "1.0.0",
"options": [
{
"key": "host",
"type": "string",
"long": "host",
"help": "Server hostname",
"metavar": "VALUE",
"required": false
},
{
"key": "port",
"type": "int",
"short": "p",
"help": "Server port",
"metavar": "NUM",
"required": false
}
],
"commands": [
{
"name": "serve",
"options": [
{
"key": "daemon",
"type": "bool",
"short": "d",
"help": "Run as daemon",
"required": false
}
],
"subcommands": []
}
]
}command("deploy", handler=fn(args) {
section("Deployment")
step("Building application...")
// build logic here
step("Uploading to server...")
// upload logic here
success("Deployment completed")
kv("Status", "deployed")
kv("Version", "1.2.3")
kv("URL", "https://app.example.com")
})=== Deployment ===
• Building application...
• Uploading to server...
✓ Deployment completed
Status: deployed
Version: 1.2.3
URL: https://app.example.commoon run src/example -- --help
moon run src/example -- serve --help
moon run src/example -- build -o out -t wasm -t js
moon run src/example -- init my-appmoon check # fast type-check
moon build # build module
moon test # run test suite
moon test -v # verbose tests
moon run src/example -- --helpA simple command-line argument parser for MoonBit.
Dependencies