Swift Argument Parser alternatives and similar libraries
Based on the "Command Line" category.
Alternatively, view Swift Argument Parser alternatives based on common mentions on social networks and blogs.
-
Commander
Compose beautiful command line interfaces in Swift -
CommandLine
A pure Swift library for creating command-line interfaces. -
Swiftline
Swiftline is a set of tools to help you create command line applications. -
guaka
The smartest and most beautiful (POSIX compliant) Command line framework for Swift 🤖 -
SwiftCLI
A powerful framework for developing CLIs in Swift -
Progress.swift
:hourglass: Add beautiful progress bars to your loops. -
SwiftyTextTable
A lightweight library for generating text tables. -
Overlook
The Judge, Jury and Executioner for the file system -
TextTable
Swift package for easily rendering text tables. Inspired by the Python tabulate library. -
Ashen
A framework for writing terminal applications in Swift. -
🌳 Environment
Type-safe environment variables in Swift. -
Phiole
Allow to write or read from standards stream or files for script or CLI application -
SwiftArgs
A minimal, pure Swift library for making command-line tools / interfaces.
Appwrite - The Open Source Firebase alternative introduces iOS support
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of Swift Argument Parser or a related project?
README
Swift Argument Parser
Usage
Begin by declaring a type that defines the information
that you need to collect from the command line.
Decorate each stored property with one of ArgumentParser
's property wrappers,
and then declare conformance to ParsableCommand
and add the @main
attribute.
Finally, implement your command's logic in the run()
method.
import ArgumentParser
@main
struct Repeat: ParsableCommand {
@Flag(help: "Include a counter with each repetition.")
var includeCounter = false
@Option(name: .shortAndLong, help: "The number of times to repeat 'phrase'.")
var count: Int? = nil
@Argument(help: "The phrase to repeat.")
var phrase: String
mutating func run() throws {
let repeatCount = count ?? 2
for i in 1...repeatCount {
if includeCounter {
print("\(i): \(phrase)")
} else {
print(phrase)
}
}
}
}
The ArgumentParser
library parses the command-line arguments,
instantiates your command type, and then either executes your run()
method
or exits with a useful message.
ArgumentParser
uses your properties' names and type information,
along with the details you provide using property wrappers,
to supply useful error messages and detailed help:
$ repeat hello --count 3
hello
hello
hello
$ repeat --count 3
Error: Missing expected argument 'phrase'.
Help: <phrase> The phrase to repeat.
Usage: repeat [--count <count>] [--include-counter] <phrase>
See 'repeat --help' for more information.
$ repeat --help
USAGE: repeat [--count <count>] [--include-counter] <phrase>
ARGUMENTS:
<phrase> The phrase to repeat.
OPTIONS:
--include-counter Include a counter with each repetition.
-c, --count <count> The number of times to repeat 'phrase'.
-h, --help Show help for this command.
Documentation
For guides, articles, and API documentation see the library's documentation on the Web or in Xcode.
Examples
This repository includes a few examples of using the library:
- [
repeat
](Examples/repeat/Repeat.swift) is the example shown above. - [
roll
](Examples/roll/main.swift) is a simple utility implemented as a straight-line script. - [
math
](Examples/math/Math.swift) is an annotated example of using nested commands and subcommands. - [
count-lines
](Examples/count-lines/CountLines.swift) usesasync
/await
code in its implementation.
You can also see examples of ArgumentParser
adoption among Swift project tools:
swift-format
uses some advanced features, like custom option values and hidden flags.swift-package-manager
includes a deep command hierarchy and extensive use of option groups.
Project Status
The Swift Argument Parser package is source stable; version numbers follow semantic versioning. Source breaking changes to public API can only land in a new major version.
The public API of version 1.0 of the swift-argument-parser
package
consists of non-underscored declarations that are marked public in the ArgumentParser
module.
Interfaces that aren't part of the public API may continue to change in any release,
including the exact wording and formatting of the autogenerated help and error messages,
as well as the package’s examples, tests, utilities, and documentation.
Future minor versions of the package may introduce changes to these rules as needed.
We'd like this package to quickly embrace Swift language and toolchain improvements that are relevant to its mandate. Accordingly, from time to time, we expect that new versions of this package will require clients to upgrade to a more recent Swift toolchain release. Requiring a new Swift release will only require a minor version bump.
Adding ArgumentParser
as a Dependency
To use the ArgumentParser
library in a SwiftPM project,
add it to the dependencies for your package and your command-line executable target:
let package = Package(
// name, platforms, products, etc.
dependencies: [
// other dependencies
.package(url: "https://github.com/apple/swift-argument-parser", from: "1.0.0"),
],
targets: [
.executableTarget(name: "<command-line-tool>", dependencies: [
// other dependencies
.product(name: "ArgumentParser", package: "swift-argument-parser"),
]),
// other targets
]
)