KingpinNet 1.0.216-alpha

This is a prerelease version of KingpinNet.
There is a newer version of this package available.
See the version list below for details.
dotnet add package KingpinNet --version 1.0.216-alpha                
NuGet\Install-Package KingpinNet -Version 1.0.216-alpha                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="KingpinNet" Version="1.0.216-alpha" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add KingpinNet --version 1.0.216-alpha                
#r "nuget: KingpinNet, 1.0.216-alpha"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install KingpinNet as a Cake Addin
#addin nuget:?package=KingpinNet&version=1.0.216-alpha&prerelease

// Install KingpinNet as a Cake Tool
#tool nuget:?package=KingpinNet&version=1.0.216-alpha&prerelease                

CircleCI Latest version License GPLv3 Quality Gate Status

Kingpin.Net style command line arguments parser and command line UI goodies for .NET

Overview

Kingpin.Net is a free interpretation of the glorious Kingpin golang project, found here.

Using coding fluent style, you can easily build a consistent commandline interface for your tool. Kingpin.Net supports type safety on arguments and flags, and supports nested commands.

Install the Kingpin.Net nuget package using the following command in the package manager console window

PM> Install-Package KingpinNet

The Nuget package can be found here

Features

  • Fluent style API
  • Rich support for commmands, sub-commands, arguments and flags
  • Deep integration into Microsoft.Extensions.Configuration
  • Type safe arguments and flags
  • Beautiful console help
  • POSIX Style short flags
  • Customizable console help using the awesome Liquid syntax
  • Context sensitive help output
  • TAB Auto-completion on ZSH, Bash and Powershell

Usage

Here is the two major ways to add rich support for command line aruments into your application

Bare-bone example

In order just to get the simplest command line parsing up and running

class Program
{
    static void Main(string[] args)
    {
        Kingpin.Version("0.0.1");
        Kingpin.Author("Joe Malone");
        Kingpin.ExitOnHelp();
        Kingpin.ShowHelpOnParsingErrors();

        FlagItem debug = Kingpin.Flag("debug", "Enable debug mode.").IsBool();
        FlagItem timeout = Kingpin.Flag("timeout", "Timeout waiting for ping.")
            .IsRequired().Short('t').IsDuration();
        ArgumentItem ip = Kingpin.Argument("ip", "IP address to ping.").IsRequired().IsIp();
        ArgumentItem count = Kingpin.Argument("count", "Number of packets to send").IsInt();

        var result = Kingpin.Parse(args);
        Console.WriteLine($"Would ping: {ip} with timeout {timeout} and count {count} with debug = {debug}");
        Console.ReadLine();
    }
}

Example integrating into Microsoft.Extensions.Configuration

Integrating with the configuration system build into .NET Core is equally easy. Just add .AddKingpinNetCommandLine(args) to your configuration builder

class Program
{
    static void Main(string[] args)
    {
        Kingpin.Version("1.0").Author("Peter Andersen").ApplicationName("curl")
            .ApplicationHelp("An example implementation of curl.");
        Kingpin.ShowHelpOnParsingErrors();
        var get = Kingpin.Command("get", "GET a resource.").IsDefault();
        get.Argument("url", "Retrieve a URL.").IsDefault();
        var post = Kingpin.Command("post", "POST a resource.");
        post.Argument("url", "URL to POST to.").IsRequired().IsUrl();


        var configuration = new ConfigurationBuilder().AddEnvironmentVariables()
            .AddKingpinNetCommandLine(args).Build();

        switch (configuration["command"])
        {
            case "get:url":
                Console.WriteLine($"Getting URL {configuration["get:url"]}");
                break;

            case "post":
                Console.WriteLine($"Posting to URL {configuration["post:url"]}");
                break;
        }

        Console.ReadLine();
    }
}

Auto-completion in Powershell, Bash and ZSH

KingpinNet supports auto completion on all the three major terminals. Just run the following commands with your tool:

For ZSH:

eval "$({Your-tool-executable} --suggestion-script-zsh)"

For Bash:

eval "$({Your-tool-executable} --suggestion-script-bash)"

For Powershell:

iex "$({Your-tool-executable} --suggestion-script-pwsh)"

After you run the script, you are able to have TAB auto complete on your tool.

Changelog

  • 1.0
    • Removed TT templates help generation
    • Added default DotLiquid help template
    • Cleaned up IConsole usage
  • 0.9
    • Added auto completion scripts for ZSH, Bash and Powershell
  • 0.8
    • Added first attempt on auto completions for PowerShell, BASH and ZSH
  • 0.7
    • Added KingpinNet.UI
    • Added ProgressBar and Spinner widgets
    • Removed all references to Microsofts static Console object and used the mockable IConsole interface instead
    • Updated tests
  • 0.6
    • Bug fixes
  • 0.5
    • Bug fixes
  • 0.4
    • Added parse method to the KingpinApplication class
  • 0.2
    • Added support for Linux newlines
    • Added documentation
    • Refactored the help flag code
  • 0.1
    • Initial project structure setup
    • Help on nested commands
    • Added example applications
    • Added template help using T4 templates

Reference documentation (WIP)

General configuration

Commands

Flags

Arguments

Custom help

Integration into .NET Core Options and Configuration

Mentions

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.1 is compatible. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.1.16 291 9/14/2024
1.1.15 177 8/27/2024
1.1.14 84 8/27/2024
1.1.13 147 8/24/2024
1.1.12 122 8/18/2024
1.1.11 112 8/18/2024
1.1.9 1,135 5/2/2024
1.1.8 82 5/2/2024
1.1.7 97 5/1/2024
1.1.6 100 5/1/2024
1.1.5-alpha 92 5/1/2024
1.0.230-alpha 5,710 2/19/2022
1.0.227-alpha 183 2/9/2022
1.0.224-alpha 187 12/30/2021
1.0.222-alpha 178 12/29/2021
1.0.218-alpha 849 11/4/2021
1.0.216-alpha 618 11/4/2021
1.0.214-alpha 253 11/4/2021
1.0.212-alpha 261 11/4/2021
0.9.203 1,617 7/1/2020
0.9.201 431 7/1/2020
0.9.199 592 6/6/2020
0.9.197 453 6/5/2020
0.9.195 462 6/5/2020
0.8.192 503 6/1/2020
0.8.190 502 5/31/2020
0.7.187 565 5/30/2020
0.7.177 549 5/29/2020
0.7.175 540 5/29/2020
0.7.173 464 5/29/2020
0.7.171 461 5/29/2020
0.7.169 450 5/29/2020
0.6.166 689 4/6/2020
0.6.164 563 4/5/2020
0.6.162 561 2/5/2020
0.5.154 609 11/16/2019
0.5.152 499 11/16/2019
0.4.150 493 11/16/2019
0.4.147 521 9/8/2019
0.4.145 525 9/8/2019
0.3.143 521 9/8/2019
0.3.140 535 9/8/2019
0.2.130 596 8/4/2019
0.2.125 589 6/11/2019
0.2.119 639 5/16/2019
0.2.117 593 5/16/2019
0.2.115 593 5/16/2019
0.2.109 589 5/16/2019
0.2.107 578 5/16/2019
0.2.105 612 5/16/2019
0.2.103 582 5/15/2019
0.2.99 594 5/15/2019
0.2.95 617 5/12/2019
0.2.91 603 5/11/2019
0.2.88 595 5/8/2019
0.1.85 616 5/8/2019
0.1.83 588 5/8/2019
0.1.76 629 4/27/2019
0.1.71 635 4/25/2019
0.1.69 632 4/25/2019
0.1.66 662 4/7/2019
0.1.61 608 4/5/2019
0.1.59 602 4/5/2019
0.1.34 631 4/5/2019
0.1.33 623 4/5/2019
0.1.32 581 4/5/2019
0.1.31 594 4/5/2019
0.1.30 634 4/5/2019