{"id":50336989,"url":"https://github.com/benoitpetit/lumos","last_synced_at":"2026-05-29T14:01:34.101Z","repository":{"id":351567317,"uuid":"1210282957","full_name":"benoitpetit/lumos","owner":"benoitpetit","description":"A modern CLI framework for Lua Build powerful command-line applications with ease","archived":false,"fork":false,"pushed_at":"2026-04-25T22:19:07.000Z","size":5809,"stargazers_count":2,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-26T00:31:52.565Z","etag":null,"topics":["cli","framework","lua","lumos"],"latest_commit_sha":null,"homepage":"https://lumos.devbyben.fr","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/benoitpetit.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"docs/security.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-14T09:01:58.000Z","updated_at":"2026-04-25T22:19:09.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/benoitpetit/lumos","commit_stats":null,"previous_names":["benoitpetit/lumos"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/benoitpetit/lumos","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benoitpetit%2Flumos","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benoitpetit%2Flumos/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benoitpetit%2Flumos/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benoitpetit%2Flumos/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/benoitpetit","download_url":"https://codeload.github.com/benoitpetit/lumos/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benoitpetit%2Flumos/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33655441,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-29T02:00:06.066Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","framework","lua","lumos"],"created_at":"2026-05-29T14:01:32.976Z","updated_at":"2026-05-29T14:01:34.084Z","avatar_url":"https://github.com/benoitpetit.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Lumos CLI Framework\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"assets/lumosb\u0026wclear.png\" alt=\"Lumos Logo\" width=\"250\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003cstrong\u003eA modern CLI framework for Lua\u003c/strong\u003e\u003cbr\u003e\n    Build powerful command-line applications with ease\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"docs/qs.md\"\u003eQuick Start\u003c/a\u003e \u0026bull;\n    \u003ca href=\"docs/api.md\"\u003eAPI Docs\u003c/a\u003e \u0026bull;\n    \u003ca href=\"docs/use.md\"\u003eExamples\u003c/a\u003e \u0026bull;\n    \u003ca href=\"#installation\"\u003eInstall\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\u003e 💡 **Lumos is actively developed.** If you encounter a bug or have a feature request, please [open an issue](https://github.com/benoitpetit/lumos/issues/new) — we read everything.\n\n\n**Lumos** (Latin for \"light\") brings clarity to CLI development in Lua. Inspired by Cobra for Go, it provides everything you need to build professional command-line applications with minimal code and maximum functionality.\n\n## What Makes Lumos Special\n\n- **Project Generator** - `lumos new` creates complete CLI projects in seconds\n- **Intuitive API** - Fluent, chainable methods for defining commands and flags\n- **POSIX Compliance** - Supports `--` end-of-options and `-abc` combined short flags\n- **Rich UI Components** - Colors, progress bars, prompts, tables out of the box\n- **Middleware Chain** - Express-like middleware with auth, dry-run, retry, rate-limiting, and more\n- **Advanced Flags** - int, float, array, enum, path, url, email with built-in validation\n- **Hidden \u0026 Deprecated Flags** - Evolve your CLI without breaking users\n- **Shell Integration** - Bash, Zsh, Fish, and PowerShell completions with enum/subcommand support, plus man pages and docs generation\n- **Configuration Management** - JSON, YAML, TOML, and key=value files, environment variables, built-in cache\n- **Test-Ready** - Generated projects include a Busted configuration and a starter test file\n- **Minimal Dependencies** - Only requires `luafilesystem`, modular architecture\n- **Cross-Platform** - Linux, macOS, and native Windows with automatic detection\n- **Portable Bundles** - Create self-contained single-file Lua scripts with `lumos bundle`\n- **Standalone Packages** - Create zero-dependency executables with `lumos package`\n- **Native Builds** - Compile to native binaries with `lumos build` (embeds Lua VM)\n- **Security Built-in** - Input sanitization, safe file operations, rate limiting\n- **Structured Logging** - 5-level logger with child loggers and environment configuration\n- **Native HTTP Client** - GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS with curl backend\n- **Lazy Loading** - On-demand module loading for fast startup (\u003c 30ms)\n\n## 5-Minute Quick Start\n\n### TL;DR\n\n```bash\n# Install Lumos from LuaRocks\nluarocks install --local lumos\n\n# Create your first CLI app\nlumos new hello-world \u0026\u0026 cd hello-world\n\n# Run it!\nlua src/main.lua greet \"CLI Master\"\n# Output: Hello, CLI Master!\n```\n\n### Step-by-Step Guide\n\n**Step 1: Install Lumos**\n```bash\nluarocks install --local lumos\n\n# Add to PATH if needed\necho 'export PATH=\"$HOME/.luarocks/bin:$PATH\"' \u003e\u003e ~/.bashrc\nsource ~/.bashrc\n```\n\n**Step 2: Create Your CLI Project**\n```bash\nlumos new my-awesome-cli\n# Follow the interactive prompts\ncd my-awesome-cli\n```\n\n**Step 3: Test Your CLI**\n```bash\nlua src/main.lua --help        # See generated help\nlua src/main.lua greet World   # Try the sample command\n```\n\n**Step 4: Develop \u0026 Test**\n```bash\nmake install  # Install test dependencies\nmake test     # Run the test suite\n```\n\n**Step 5: Distribute Your CLI (Optional)**\n\n```bash\n# Fast: bundled Lua script (requires Lua on target)\nlumos bundle src/main.lua -o dist/myapp\n\n# Zero dependencies: standalone package using a precompiled launcher\nlumos package src/main.lua -o dist/myapp\n\n# Target a different OS (e.g. Windows from Linux)\nlumos package src/main.lua -o dist/myapp -t windows-x86_64\n\n# See which package targets are available in your installation\nlumos package --list-targets\n\n# (Optional) Download missing launchers for known targets\nlumos package --sync-runtime --list-targets\n\n# Maximum control: native binary with embedded Lua VM\nlumos build src/main.lua -o dist/myapp\n\n# Cross-compile to Windows from Linux\nlumos build src/main.lua -o dist/myapp -t windows-x86_64\n\n# For macOS targets from Linux, use package launchers\nlumos package src/main.lua -o dist/myapp -t darwin-aarch64\n\n./dist/myapp --help\n```\n\n## Example CLI Code\n\n```lua\nlocal lumos = require('lumos')\nlocal color = require('lumos.color')\n\nlocal app = lumos.new_app({\n    name = \"my-awesome-cli\",\n    version = \"0.3.8\",\n    description = \"My awesome CLI application\"\n})\n\nlocal greet = app:command(\"greet\", \"Greet someone\")\ngreet:arg(\"name\", \"Name of person to greet\")\ngreet:flag(\"-u --uppercase\", \"Use uppercase\")\ngreet:flag(\"-c --colorful\", \"Use colors\")\n\ngreet:action(function(ctx)\n    local name = ctx.args[1] or \"World\"\n    local message = \"Hello, \" .. name .. \"!\"\n\n    if ctx.flags.uppercase then\n        message = message:upper()\n    end\n\n    if ctx.flags.colorful then\n        message = color.green(message)\n    end\n\n    print(message)\n    return lumos.success({ greeted = name })\nend)\n\napp:run(arg)\n```\n\n## Installation\n\n### Prerequisites\n- Lua 5.1+ or LuaJIT\n- LuaRocks \u003e= 3.8\n\n### Option 1: From LuaRocks (Recommended)\n```bash\nluarocks install --local lumos\n\n# Add to PATH if needed\necho 'export PATH=\"$HOME/.luarocks/bin:$PATH\"' \u003e\u003e ~/.bashrc\nsource ~/.bashrc\n```\n\n### Option 2: System-wide Installation\n```bash\nsudo luarocks install lumos\n```\n\n### Option 3: Development Installation\n```bash\ngit clone https://github.com/benoitpetit/lumos.git\ncd lumos\nluarocks make --local lumos-dev-1.rockspec\n```\n\n### Verify Installation\n```bash\nlumos version\n# Should output: Lumos CLI Framework v0.3.8\n```\n\n## The Runtime \u0026 Distribution Model\n\nLumos ships with a **`runtime/`** directory containing everything needed to bundle, package, or build your CLI without external dependencies:\n\n- **Precompiled launchers** (`runtime/lumos-launcher-\u003cos\u003e-\u003carch\u003e`): Standalone binaries embedding a Lua interpreter. Used by `lumos package` to create zero-dependency executables without a C compiler.\n- **Static libraries \u0026 headers** (`runtime/lib/\u003cplatform\u003e/liblua.a` + `include/*.h`): Bundled cross-compilation toolchains. `lumos build` prefers these over system libraries to guarantee version compatibility, especially when cross-compiling (e.g. Windows from Linux). They also serve as a fallback if system Lua dev packages are not installed.\n- **`launcher.c`**: Source code of the launcher, useful for custom builds or auditing.\n\nAll of these are installed automatically when you run `luarocks install lumos` or `luarocks make`.\n\n### Three Ways to Distribute Your CLI\n\n| Method | Command | Output | Needs Lua on target? | Needs C compiler? | Includes native C modules? |\n|--------|---------|--------|----------------------|-------------------|---------------------------|\n| **Bundle** | `lumos bundle` | Single `.lua` script | ✅ Yes | ❌ No | ❌ No |\n| **Package** | `lumos package` | Native executable | ❌ No | ❌ No | ❌ No (fails if detected) |\n| **Build** | `lumos build` | Native binary | ❌ No | ✅ Yes | ✅ Yes (`liblua.a` always bundled; optional user C modules like `lfs`/`lpeg` if `.a` found) |\n\n- **`bundle`** is fastest and most portable among Lua users.\n- **`package`** gives you a native binary with **no C compiler required** on your build machine, thanks to the precompiled launchers.\n- **`build`** gives maximum control: it compiles a native binary embedding the Lua VM, and can statically link C modules like `lfs` or `lpeg` if their `.a` archives are available.\n\n### Cross-Compilation\n\n`lumos package` works from any host to any target because it uses precompiled launchers:\n\n```bash\n# From Linux, package for Windows or macOS\nlumos package src/main.lua -t windows-x86_64\nlumos package src/main.lua -t darwin-aarch64\n```\n\n`lumos build` compiles a native binary and requires a matching cross-compiler:\n\n| From → To | Supported | Required Tool |\n|-----------|-----------|---------------|\n| Linux → Windows | ✅ Yes | `x86_64-w64-mingw32-gcc` (mingw-w64) |\n| Linux → Linux ARM64 | ✅ Yes | `aarch64-linux-gnu-gcc` |\n| Linux → macOS | ❌ No* | Install [osxcross](https://github.com/tpoechtrager/osxcross) to unblock |\n| macOS → Any | ✅ Yes | Xcode Command Line Tools |\n\n\\* From Linux, use `lumos package -t darwin-*` instead for macOS targets.\n\n## Key Features\n\n### Commands \u0026 Flags\n```lua\nlocal deploy = app:command(\"deploy\", \"Deploy application\")\ndeploy:arg(\"environment\", \"Target environment\")\ndeploy:flag(\"-f --force\", \"Force deployment\")\ndeploy:option(\"--timeout\", \"Deployment timeout\")\n```\n\n### Advanced Typed Flags\n```lua\ncmd:flag_int(\"-p --port\", \"Port number\", 1, 65535)\ncmd:flag_float(\"-r --rate\", \"Rate\", { min = 0.0, max = 1.0, precision = 2 })\ncmd:flag_array(\"-t --tags\", \"Tags\", { separator = \",\", unique = true })\ncmd:flag_enum(\"-l --level\", \"Log level\", {\"debug\", \"info\", \"warn\", \"error\"})\ncmd:flag_path(\"-c --config\", \"Config file\", { must_exist = true, extensions = {\".json\", \".toml\"} })\ncmd:flag_url(\"--endpoint\", \"API endpoint\", { schemes = {\"https\"} })\ncmd:flag_email(\"--notify\", \"Notification email\")\n```\n\n### Combined Short Flags (POSIX)\n```bash\nmyapp deploy -fvt production\n# Equivalent to: myapp deploy -f -v -t production\n```\n\n### End-of-Options Delimiter\n```bash\nmyapp rm -- -file-starting-with-dash\n# Treats -file-starting-with-dash as a positional argument, not a flag\n```\n\n### Mutually Exclusive Flags\n```lua\ncmd:flag_string(\"-f --file\", \"Input file\")\ncmd:flag_string(\"-u --url\", \"Input URL\")\ncmd:mutex_group(\"input\", {\"file\", \"url\"}, { required = true })\n```\n\n### Hidden \u0026 Deprecated Flags\n```lua\n-- Hide a command from help (visible only with LUMOS_DEBUG=1)\ncmd:hidden(true)\n\n-- Mark a flag as deprecated\ncmd:flag(\"--legacy-mode\", \"Old mode\")\n    :deprecated(\"Use --modern-mode instead\")\n```\n\n### Typed Errors\n```lua\ncmd:action(function(ctx)\n    if not file_exists(ctx.flags.config) then\n        return lumos.new_error(\"CONFIG_ERROR\", \"Config file not found\", {\n            path = ctx.flags.config,\n            suggestion = \"Create it with 'lumos init'\"\n        })\n    end\n    return lumos.success({ deployed = true })\nend)\n```\n\n### Middleware\n```lua\napp:use(lumos.middleware.builtin.logger())\napp:use(lumos.middleware.builtin.dry_run())\napp:use(lumos.middleware.builtin.verbosity())  -- Standard -v / -vv / -vvv\n\napp:command(\"deploy\", \"Deploy\")\n    :use(lumos.middleware.builtin.auth({ env_var = \"API_KEY\" }))\n    :use(lumos.middleware.builtin.confirm({ message = \"Deploy to production?\" }))\n    :use(lumos.middleware.builtin.rate_limit({ max_requests = 10, window_seconds = 60 }))\n    :use(lumos.middleware.builtin.retry({ max_attempts = 3, backoff = \"exponential\" }))\n    :action(function(ctx) ... end)\n```\n\n### Rich UI Components\n```lua\nlocal color = require('lumos.color')\nlocal progress = require('lumos.progress')\nlocal prompt = require('lumos.prompt')\n\nprint(color.green(\"Success!\"))\nprogress.simple(75, 100)\nlocal name = prompt.input(\"Your name:\", \"Anonymous\")\nlocal confirmed = prompt.confirm(\"Continue?\", true)\nlocal choice = prompt.select(\"Choose\", {\"apple\", \"banana\"})\n```\n\n### Cross-Platform Detection\n```lua\nlocal platform = require('lumos.platform')\nprint(platform.name())        -- \"linux\", \"macos\", \"windows\"\nprint(platform.arch())        -- \"amd64\", \"arm64\"\nplatform.supports_colors()    -- boolean\nplatform.is_interactive()     -- boolean\nplatform.is_piped()           -- boolean (auto-disables colors)\n```\n\n### Configuration Management\n```lua\nlocal config = require('lumos.config')\nlocal core = require('lumos.core')\n\n-- Supports JSON, YAML, TOML, and key=value files\nlocal settings = config.merge_configs(\n    {timeout = 30},                   -- defaults\n    core.load_config(\"config.yaml\"),  -- file (JSON, YAML, TOML, or key=value)\n    config.load_env(\"MYAPP\"),         -- environment variables\n    ctx.flags                         -- command line\n)\n\n-- With in-memory cache\nlocal cached = config.load_file_cached(\"config.json\")\n```\n\n### Countable Flags (POSIX-style `-vvv`)\n```lua\ncmd:flag(\"-v --verbose\", \"Increase verbosity\"):countable()\n-- myapp -vvv  →  ctx.flags.verbose == 3\n```\n\n### Middleware: Timeout \u0026 Circuit Breaker\n```lua\n-- Abort commands that run too long\napp:command(\"sync\", \"Sync data\")\n    :use(lumos.middleware.builtin.timeout({ seconds = 30 }))\n\n-- Stop calling failing commands after repeated errors\napp:command(\"api\", \"Call API\")\n    :use(lumos.middleware.builtin.circuit_breaker({\n        failure_threshold = 5,\n        recovery_timeout = 60\n    }))\n```\n\n### JSON Logging\n```lua\nlocal logger = require('lumos.logger')\nlogger.set_format(\"json\")\nlogger.info(\"Server started\", { port = 8080 })\n-- {\"timestamp\":\"2026-04-22 12:00:00\",\"level\":\"INFO\",\"message\":\"Server started\",\"context\":{\"port\":8080}}\n```\n\n### Global Quiet Mode\n```bash\nmyapp --quiet   # Suppresses all non-error output\nmyapp -q        # Short alias\n```\n\n### Integrated Profiling\n```lua\nlocal profiler = require('lumos.profiler')\nprofiler.enable()\nprofiler.start(\"heavy_task\")\n-- ... code ...\nprofiler.stop(\"heavy_task\")\nprofiler.report()\n```\n\n### Minimal Bundles (Tree-Shaking)\n```lua\nlocal bundle = require('lumos.bundle')\nbundle.minimal(\"src/main.lua\", \"dist/myapp.lua\", { minify = true })\n```\n\n### Shell Integration\n```lua\n-- Auto-add a completion command to your app\napp:add_completion_command()\n\n-- Generate completions for any supported shell\nlocal bash = app:generate_completion(\"bash\")\nlocal zsh  = app:generate_completion(\"zsh\")\nlocal fish = app:generate_completion(\"fish\")\nlocal ps   = app:generate_completion(\"powershell\")\n\n-- Generate all shells at once\napp:generate_completion(\"all\", \"./completions\")\n\n-- Custom completion values for flags\ncmd:flag_enum(\"--env\", \"Environment\", {\"dev\", \"staging\", \"prod\"})\n   :complete({\"dev\", \"staging\", \"prod\"})\n\n-- Generate man pages\nlocal manpage = app:generate_manpage()\n\n-- Generate markdown documentation\nlocal docs = app:generate_docs(\"markdown\", \"./docs\")\n```\n\n### Security \u0026 Logging\n```lua\nlocal security = require('lumos.security')\nlocal logger = require('lumos.logger')\n\nlocal safe = security.sanitize_output(user_input)\nlocal path, err = security.sanitize_path(user_path)\nlocal ok, err = security.safe_mkdir(\"./data\")\n\nlogger.info(\"Action performed\", {user = \"john\", id = 42})\n```\n\n### Native HTTP Client\n```lua\nlocal http = require('lumos.http')\n\n-- GET with query parameters\nlocal resp, err = http.get(\"https://api.example.com/users\", {\n    query = {page = \"1\", limit = \"10\"}\n})\n\n-- POST with JSON body (auto-encoded)\nlocal resp, err = http.post(\"https://api.example.com/users\", {\n    body = {name = \"Alice\", email = \"alice@example.com\"},\n    headers = {[\"X-Request-ID\"] = \"abc123\"}\n})\n\n-- Authenticated request\nlocal resp, err = http.put(\"https://api.example.com/users/1\", {\n    body = {name = \"Bob\"},\n    auth = {bearer = \"my_api_token\"},\n    timeout = 10\n})\n\n-- Response helpers\nif resp and resp.ok then\n    local data = resp.json()\n    print(data.id)\nend\n```\n\n### Advanced Prompts\n```lua\nlocal prompt = require('lumos.prompt')\n\n-- Numeric input with constraints\nlocal age = prompt.number(\"Age\", 0, 120)\n\n-- Multi-line editor ($EDITOR or notepad.exe on Windows)\nlocal notes = prompt.editor(\"Notes\", \"Default text...\")\n\n-- Form builder\nlocal profile = prompt.form(\"Profile\", {\n    {name = \"name\", type = \"input\", required = true},\n    {name = \"email\", type = \"input\", validate = prompt.validators.email},\n    {name = \"newsletter\", type = \"confirm\", default = false}\n})\n\n-- Wizard\nlocal result = prompt.wizard(\"Setup\", {\n    {title = \"Profile\", fields = {\n        {name = \"username\", type = \"input\", required = true}\n    }},\n    {title = \"Confirm\", fields = {\n        {name = \"agree\", type = \"confirm\", required = true}\n    }}\n})\n```\n\n### Output Format Control\n```bash\n# Get structured JSON output\nmyapp info --format=json\n# or\nmyapp info --json\n```\n\n### Plugins \u0026 Hooks\n```lua\n-- Register a plugin globally on the app\nlumos.use(app, function(app, opts)\n    app:flag(\"--dry-run\", \"Simulate without side effects\")\nend)\n\n-- Or attach to a single command\napp:command(\"deploy\", \"Deploy app\")\n    :plugin(function(cmd, opts)\n        cmd:flag(\"--region\", \"Target region\")\n    end)\n\n-- Hooks for setup / teardown\napp:command(\"migrate\", \"Run migrations\")\n    :pre_run(function(ctx)\n        print(\"Connecting to database...\")\n    end)\n    :post_run(function(ctx)\n        print(\"Migration complete!\")\n    end)\n\n-- Global hooks\napp:persistent_pre_run(function(ctx)\n    logger.info(\"Starting command\", {cmd = ctx.command.name})\nend)\n```\n\n### No-Args-Is-Help\n```lua\nlocal app = lumos.new_app({\n    name = \"myapp\",\n    no_args_is_help = true  -- Shows help instead of error when no subcommand given\n})\n```\n\n## Documentation\n\nComplete documentation is available in the `docs/` directory:\n\n- **[Quick Start Guide](docs/qs.md)** - Get running in 5 minutes\n- **[CLI Tool Usage](docs/cli.md)** - How to use `lumos new` to create projects\n- **[API Reference](docs/api.md)** - Complete framework API documentation\n- **[Usage Examples](docs/use.md)** - Real-world CLI examples and patterns\n- **[Security Guide](docs/security.md)** - Security features and best practices\n- **[Bundling Guide](docs/bundle.md)** - Creating portable single-file executables\n\n## Examples\n\nExplore real CLI applications built with Lumos in our [Usage Examples](docs/use.md).\n\n## Contributing\n\nWe welcome contributions!\n\n### Development Setup\n```bash\ngit clone https://github.com/benoitpetit/lumos.git\ncd lumos\n\n# Install for development\nluarocks make --local lumos-dev-1.rockspec\n\n# Run tests\nbusted\n\n# Test CLI generation\n./bin/lumos new test-project\ncd test-project\nmake install \u0026\u0026 make test\n```\n\n## Project Status\n\n- **Version:** 0.3.8\n- **License:** MIT\n- **Lua Versions:** 5.1, 5.2, 5.3, 5.4, LuaJIT\n- **Platforms:** Linux, macOS, Windows (native)\n- **Tests:** 624 passing tests\n- **Dependencies:** luafilesystem\n\n## Acknowledgments\n\n- Inspired by [Cobra](https://cobra.dev/) CLI framework for Go\n- Follows [POSIX Utility Syntax Guidelines](https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html)\n- Built with care for the Lua community\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n---\n\n\u003cp align=\"center\"\u003e\n    \u003cstrong\u003eLumos\u003c/strong\u003e - \u003cem\u003eBringing light to CLI development in Lua\u003c/em\u003e\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbenoitpetit%2Flumos","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbenoitpetit%2Flumos","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbenoitpetit%2Flumos/lists"}