{"id":18310933,"url":"https://github.com/jimschubert/kopper","last_synced_at":"2025-04-05T18:31:46.319Z","repository":{"id":57743784,"uuid":"75801742","full_name":"jimschubert/kopper","owner":"jimschubert","description":"A simple Kotlin option parser","archived":false,"fork":false,"pushed_at":"2020-01-09T03:02:41.000Z","size":92,"stargazers_count":39,"open_issues_count":1,"forks_count":3,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-21T08:34:57.995Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Kotlin","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/jimschubert.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null},"funding":{"github":"jimschubert","patreon":"jimschubert"}},"created_at":"2016-12-07T05:15:32.000Z","updated_at":"2023-09-21T01:49:06.000Z","dependencies_parsed_at":"2022-09-11T09:40:28.818Z","dependency_job_id":null,"html_url":"https://github.com/jimschubert/kopper","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jimschubert%2Fkopper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jimschubert%2Fkopper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jimschubert%2Fkopper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jimschubert%2Fkopper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jimschubert","download_url":"https://codeload.github.com/jimschubert/kopper/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247383887,"owners_count":20930365,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2024-11-05T16:15:56.774Z","updated_at":"2025-04-05T18:31:45.811Z","avatar_url":"https://github.com/jimschubert.png","language":"Kotlin","funding_links":["https://github.com/sponsors/jimschubert","https://patreon.com/jimschubert"],"categories":[],"sub_categories":[],"readme":"# Kopper\n\nA simple Kotlin option parser\n\n[![Maven Central](https://img.shields.io/maven-central/v/us.jimschubert/kopper.svg?label=maven:%20kopper)](http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22kopper%22)\n\n[![Maven Central](https://img.shields.io/maven-central/v/us.jimschubert/kopper-typed.svg?label=maven:%20kopper-typed)](http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22kopper-typed%22)\n\n`kopper` is the simple Kotlin option parser library.\n\n`kopper-typed` extends the kopper library to support delegated properties and parsing as simple as constructing an object. It includes the additional dependency of `kotlin-reflect`.\n\n# Examples\n\nManual parsing…\n\n```kotlin\nimport us.jimschubert.kopper.*\n\nfun main(args: Array\u003cString\u003e) {\n    val parser = Parser()\n    parser.setName(\"Kopper CLI\")\n    parser.setApplicationDescription(\"Kopper example application\")\n\n    parser.flag(\"q\", listOf(\"quiet\", \"silent\"), description = \"Run silently\")\n    parser.option(\"f\", listOf(\"file\"), description = \"File name\")\n    parser.flag(\"a\", listOf(\"allowEmpty\"))\n\n    println(parser.printHelp())\n\n    val arguments = parser.parse(arrayOf(\"-f\", \"asdf.txt\", \"--quiet=true\", \"trailing\", \"arguments\" ))\n\n    println(\"q=${arguments.flag(\"q\")}\")\n    println(\"quiet=${arguments.flag(\"quiet\")}\")\n    println(\"silent=${arguments.flag(\"silent\")}\")\n    println(\"f=${arguments.option(\"f\")}\")\n    println(\"file=${arguments.option(\"file\")}\")\n    println(\"allowEmpty=${arguments.flag(\"allowEmpty\")}\")\n    println(\"unparsedArgs=${arguments.unparsedArgs.joinToString()}\")\n}\n```\n\nParser objects…\n\n```kotlin\nfun main(args: Array\u003cString\u003e) {\n    val arguments = ExampleArgs(args)\n\n    if (arguments.help) {\n        println(arguments.printHelp())\n        return\n    }\n\n    println(\"quiet=${arguments.quiet}\")\n    println(\"rate=${arguments.rate}\")\n    println(\"maxCount=${arguments.maxCount}\")\n}\n\nclass ExampleArgs(args: Array\u003cString\u003e) : TypedArgumentParser(args) {\n\n    val quiet by BooleanArgument(self, \"q\",\n            default = true,\n            longOption = listOf(\"quiet\", \"silent\"),\n            description = \"Run quietly\"\n    )\n\n    val rate by NumericArgument(self, \"r\", \n            default = 1.0f, \n            description = \"Rate\"\n    )\n\n    val maxCount by NumericArgument(self, \"m\", \n            longOption = listOf(\"maxCount\"), \n            default = 10, \n            description = \"Max Count\"\n    )\n}\n```\n\nTyped parser objects support `BooleanArgument`, `StringArgument`, and `NumericArgument\u003cT\u003e` property delegates. They \nalso expose any additional args as a list of strings in the `_etc_` property.\n\n# License\n\n[MIT License](./LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjimschubert%2Fkopper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjimschubert%2Fkopper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjimschubert%2Fkopper/lists"}