GitHub - adambajguz/Typin: Declarative framework for interactive CLI applications (original) (raw)

Build Coverage Version Downloads of Typin Downloads of Typin.Core

See TypinExamples website for interective examples.

Table of contents Typin Typin roots in CliFx Features Installing Typin Getting started and documentation Screenshots Benchmarks

Typin is a simple to use, ASP.NET Core inspired framework for building both interactive command line applications and command line tools (direct mode). However, it is not limited to direct and interactive modes, because you can create your own modes.

Etymology: Typin is made out of "Typ" for "Type" and "in" for "interactively". It's pronounced as "Ty pin".

Typin is not just a parser but a complete application framework. Its main goal is to provide an enjoyable, similar to ASP.NET Core, development experience when building command line applications. Its primary goal is to completely take over the user input layer, letting you forget about the infrastructure and instead focus on writing your application.

Typin roots in CliFx

Typin is build based on the source code of CliFx, but it wants to be a ASP.NET Core for CLI like Cocona but faster. It has many additional features compared to CliFx:

Overall, Typin is a framework that is much more flexible and rich with both features and metadata about defined commands etc.

See CHANGELOG.md for a complete list of changes.

Also see WIKI: Roadmap and support for more info about future and support.

Features

Installing Typin

You should install Typin with NuGet:

Or via the .NET Core command line interface:

Both commands will download and install Typin with all required dependencies.

Typin.Core

If you need only API interfaces, you can install TypinCore with NuGet.

Install-Package Typin.Core

Or via the .NET Core command line interface:

dotnet add package Typin.Core

Both commands will download and install Typin.Core with all required dependencies.

Getting started and Documentation

public static class Program { public static async Task Main() => await new CliApplicationBuilder() .AddCommandsFromThisAssembly() .Build() .RunAsync(); }

[Command] public class HelloWorldCommand : ICommand { public async ValueTask ExecuteAsync(IConsole console) { await console.Output.WriteLineAsync("Hello world!"); } }

See wiki for detailed instructions and documentation.

Screenshots

help screen

Benchmarks

Here's how Typin's execution overhead compares to that of other libraries (single command comparison) and with increasing number of commands.

Typin 3.1

BenchmarkDotNet=v0.13.1, OS=Windows 10.0.19044.1415 (21H2) Intel Core i7-4790 CPU 3.60GHz (Haswell), 1 CPU, 8 logical and 4 physical cores .NET SDK=6.0.101 [Host] : .NET 6.0.1 (6.0.121.56705), X64 RyuJIT DefaultJob : .NET 6.0.1 (6.0.121.56705), X64 RyuJIT

Method Mean Error StdDev Ratio Rank
CommandLineParser 1.810 us 0.0283 us 0.0265 us 0.009 1
CliFx 70.937 us 0.8013 us 0.7103 us 0.373 2
Clipr 81.382 us 1.3975 us 1.3725 us 0.428 3
McMaster.Extensions.CommandLineUtils 88.881 us 1.0713 us 1.0021 us 0.468 4
Typin 190.249 us 0.3856 us 0.3220 us 1.000 5
System.CommandLine 278.502 us 5.5451 us 5.9332 us 1.462 6
PowerArgs 300.629 us 1.3090 us 1.1604 us 1.579 7
Cocona 1,283.562 us 88.6368 us 244.1316 us 6.492 8
Method Mean Error StdDev Ratio Rank
'CliFx - 1 command' 68.67 us 0.207 us 0.173 us 0.36 1
'CliFx - 2 commands' 77.32 us 0.577 us 0.512 us 0.40 2
'CliFx - 5 commands' 98.64 us 0.260 us 0.230 us 0.51 3
'CliFx - 10 commands' 135.11 us 0.317 us 0.297 us 0.70 4
'Typin - 1 command' 192.11 us 0.662 us 0.553 us 1.00 5
'Typin - 2 commands' 202.54 us 0.851 us 0.754 us 1.05 6
'CliFx - 20 commands' 231.62 us 0.502 us 0.445 us 1.21 7
'Typin - 5 commands' 237.19 us 0.388 us 0.363 us 1.23 8
'Typin - 10 commands' 298.32 us 2.848 us 2.378 us 1.55 9
'Typin - 20 commands' 440.23 us 0.773 us 0.646 us 2.29 10

Typin <= 2.1.1

BenchmarkDotNet=v0.12.0, OS=Windows 10.0.19041 Intel Core i7-4790 CPU 3.60GHz (Haswell), 1 CPU, 8 logical and 4 physical cores .NET Core SDK=3.1.402 [Host] : .NET Core 3.1.8 (CoreCLR 4.700.20.41105, CoreFX 4.700.20.41903), X64 RyuJIT DefaultJob : .NET Core 3.1.8 (CoreCLR 4.700.20.41105, CoreFX 4.700.20.41903), X64 RyuJIT

Method Mean Error StdDev Ratio Rank
CommandLineParser 2.489 us 0.0481 us 0.0573 us 0.03 1
CliFx 51.513 us 0.3411 us 0.3024 us 0.57 2
Typin 90.748 us 0.4652 us 0.4351 us 1.00 3
McMaster.Extensions.CommandLineUtils 129.112 us 1.5520 us 1.3758 us 1.42 4
Clipr 131.652 us 2.8059 us 4.1129 us 1.47 4
System.CommandLine 198.114 us 3.7021 us 3.4630 us 2.18 5
PowerArgs 257.859 us 1.4766 us 1.3812 us 2.84 6
Cocona 1166 us 7.3347 us 6.1248 us 12.86 7
Method Mean Error StdDev Ratio Rank
'CliFx - 1 command' 51.15 us 0.843 us 0.788 us 0.54 1
'CliFx - 2 commands' 71.39 us 1.375 us 1.972 us 0.76 2
'Typin - 1 command' 94.46 us 1.974 us 2.027 us 1.00 3
'Typin - 2 commands' 118.90 us 2.668 us 4.811 us 1.29 4
'CliFx - 5 commands' 126.71 us 1.908 us 1.692 us 1.34 5
'Typin - 5 commands' 180.16 us 3.459 us 3.701 us 1.91 6
'CliFx - 10 commands' 222.28 us 3.079 us 2.880 us 2.35 7
'Typin - 10 commands' 281.79 us 4.679 us 4.148 us 2.99 8
'CliFx - 20 commands' 454.07 us 8.708 us 8.942 us 4.81 9
'Typin - 20 commands' 519.70 us 6.735 us 6.300 us 5.50 10

Legends: