-
Notifications
You must be signed in to change notification settings - Fork 39
/
index.html
681 lines (640 loc) · 38.7 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
<!DOCTYPE HTML>
<html lang="en" class="sidebar-visible no-js light">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Awesome CLI Framework - Awesome CLI Framework</title>
<!-- Custom HTML head -->
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff" />
<link rel="icon" href="favicon.svg">
<link rel="shortcut icon" href="favicon.png">
<link rel="stylesheet" href="css/variables.css">
<link rel="stylesheet" href="css/general.css">
<link rel="stylesheet" href="css/chrome.css">
<link rel="stylesheet" href="css/print.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="FontAwesome/css/font-awesome.css">
<link rel="stylesheet" href="fonts/fonts.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" href="highlight.css">
<link rel="stylesheet" href="tomorrow-night.css">
<link rel="stylesheet" href="ayu-highlight.css">
<!-- Custom theme stylesheets -->
</head>
<body>
<!-- Provide site root to javascript -->
<script type="text/javascript">
var path_to_root = "";
var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "navy" : "light";
</script>
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script type="text/javascript">
try {
var theme = localStorage.getItem('mdbook-theme');
var sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script type="text/javascript">
var theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch (e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
var html = document.querySelector('html');
html.classList.remove('no-js')
html.classList.remove('light')
html.classList.add(theme);
html.classList.add('js');
</script>
<!-- Hide / unhide sidebar before it is displayed -->
<script type="text/javascript">
var html = document.querySelector('html');
var sidebar = 'hidden';
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch (e) { }
sidebar = sidebar || 'visible';
}
html.classList.remove('sidebar-visible');
html.classList.add("sidebar-" + sidebar);
</script>
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
<div class="sidebar-scrollbox">
<ol class="chapter"><li class="chapter-item expanded affix "><a href="../index.html" class="active">Awesome CLI Framework</a></li></ol>
</div>
<div id="sidebar-resize-handle" class="sidebar-resize-handle"></div>
</nav>
<div id="page-wrapper" class="page-wrapper">
<div class="page">
<div id="menu-bar-hover-placeholder"></div>
<div id="menu-bar" class="menu-bar sticky bordered">
<div class="left-buttons">
<button id="sidebar-toggle" class="icon-button" type="button" title="Toggle Table of Contents"
aria-label="Toggle Table of Contents" aria-controls="sidebar">
<i class="fa fa-bars"></i>
</button>
<button id="theme-toggle" class="icon-button" type="button" title="Change theme"
aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
<i class="fa fa-paint-brush"></i>
</button>
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="light">Light (default)</button></li>
<li role="none"><button role="menuitem" class="theme" id="rusty">Rusty</button></li>
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button>
</li>
</ul>
<button id="search-toggle" class="icon-button" type="button" title="Search. (Shortkey: s)"
aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="S"
aria-controls="searchbar">
<i class="fa fa-search"></i>
</button>
</div>
<h1 class="menu-title">Awesome CLI Framework</h1>
<div class="right-buttons">
<a href="print.html" title="Print this book" aria-label="Print this book">
<i id="print-button" class="fa fa-print"></i>
</a>
<a href="https://github.com/shadawck/awesome-cli-frameworks" title="Git repository" aria-label="Git repository">
<i id="git-repository-button" class="fa fa-github"></i>
</a>
</div>
</div>
<div id="search-wrapper" class="hidden">
<form id="searchbar-outer" class="searchbar-outer">
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..."
aria-controls="searchresults-outer" aria-describedby="searchresults-header">
</form>
<div id="searchresults-outer" class="searchresults-outer hidden">
<div id="searchresults-header" class="searchresults-header"></div>
<ul id="searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script type="text/javascript">
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#sidebar a')).forEach(function (link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="content" class="content">
<main>
<!-- Page table of contents -->
<div class="sidetoc">
<nav class="pagetoc"></nav>
</div>
<h1 id="awesome-cli-framework"><a class="header" href="#awesome-cli-framework">Awesome-cli-framework</a></h1>
<p><strong>Collection of framework to build beautiful command line interface in different languages</strong></p>
<p><a href="https://github.com/sindresorhus/awesome"><img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome" /></a>
<a href="http://makeapullrequest.com"><img src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg" alt="PRs Welcome" /></a>
<a href="https://creativecommons.org/licenses/by/4.0/"><img src="https://img.shields.io/badge/LICENSE-CC_BY_4.0-00a2ff" alt="License" /></a></p>
<h2 id="contents"><a class="header" href="#contents">Contents</a></h2>
<!-- TOC -->
<ul>
<li><a href="#awesome-cli-framework">Awesome-cli-framework</a>
<ul>
<li><a href="#contents">Contents</a></li>
<li><a href="#bashshell">Bash/Shell</a></li>
<li><a href="#crystal">Crystal</a></li>
<li><a href="#c">C++</a></li>
<li><a href="#dart">Dart</a></li>
<li><a href="#deno">Deno</a></li>
<li><a href="#dotnet">Dotnet</a>
<ul>
<li><a href="#useful-awesome-list-for-dotnet-cli">Useful awesome list for Dotnet cli</a></li>
</ul>
</li>
<li><a href="#elixir">Elixir</a></li>
<li><a href="#fortran">Fortran</a></li>
<li><a href="#go">Go</a>
<ul>
<li><a href="#useful-awesome-list-for-go-cli">Useful awesome list for Go cli</a></li>
</ul>
</li>
<li><a href="#haskell">Haskell</a></li>
<li><a href="#java">Java</a></li>
<li><a href="#javascript">JavaScript</a></li>
<li><a href="#julia">Julia</a></li>
<li><a href="#kotlin">Kotlin</a></li>
<li><a href="#nim">Nim</a></li>
<li><a href="#ocaml">Ocaml</a></li>
<li><a href="#php">PHP</a></li>
<li><a href="#purescript">Purescript</a></li>
<li><a href="#python">Python</a></li>
<li><a href="#ruby">Ruby</a>
<ul>
<li><a href="#useful-awesome-list-for-ruby-cli">Useful awesome list for Ruby cli</a></li>
</ul>
</li>
<li><a href="#r">R</a></li>
<li><a href="#rust">Rust</a></li>
<li><a href="#scala">Scala</a></li>
<li><a href="#swift">Swift</a></li>
<li><a href="#v">V</a></li>
<li><a href="#zig">Zig</a></li>
<li><a href="#contributing"><strong>Contributing</strong></a></li>
<li><a href="#license">License</a></li>
</ul>
</li>
</ul>
<!-- /TOC -->
<h2 id="bashshell"><a class="header" href="#bashshell">Bash/Shell</a></h2>
<ul>
<li>
<p><a href="https://github.com/sigoden/argc">argc</a> : A bash cli framework, also a task management & automation tool (written in rust).</p>
</li>
<li>
<p><a href="https://github.com/matejak/argbash">argbash</a> : Bash argument parsing code generator.</p>
</li>
<li>
<p><a href="https://github.com/DannyBen/bashly">Bashly</a> : A command line application (written in Ruby) that lets you generate feature-rich bash command line tools. Bashly lets you focus on your specific code, without worrying about command line argument parsing, usage texts, error messages and other functions that are usually handled by a framework in any other programming language.</p>
</li>
<li>
<p><a href="https://github.com/charmbracelet/gum">gum</a> : A tool for glamorous shell scripts 🎀 (written in go).</p>
</li>
</ul>
<h2 id="crystal"><a class="header" href="#crystal"><a href="https://crystal-lang.org/">Crystal</a></a></h2>
<ul>
<li>
<p><a href="https://github.com/athena-framework/console">Athena Console</a> : Allows for the creation of CLI based commands.</p>
</li>
<li>
<p><a href="https://crystal-lang.org/api/1.7.2/OptionParser.html">OptionParser</a> : Builtin class for command-line options processing.</p>
</li>
</ul>
<h2 id="c"><a class="header" href="#c"><a href="https://www.cpp-lang.net/">C++</a></a></h2>
<ul>
<li>
<p><a href="https://github.com/adishavit/argh">argh!</a> : Argh! A minimalist argument handler.</p>
</li>
<li>
<p><a href="https://github.com/Taywee/args">args</a> : A simple header-only C++ argument parser library. Supposed to be flexible and powerful, and attempts to be compatible with the functionality of the Python standard argparse library (though not necessarily the API).</p>
</li>
<li>
<p><a href="https://github.com/CLIUtils/CLI11">CLI11</a> : A command line parser for C++11 and beyond that provides a rich feature set with a simple and intuitive interface.</p>
</li>
<li>
<p><a href="https://github.com/jarro2783/cxxopts">cxxopt</a> : Lightweight C++ command line option parser.</p>
</li>
<li>
<p><a href="https://github.com/docopt/docopt.cpp">docopt.cpp</a> : C++11 port of docopt.</p>
</li>
<li>
<p><a href="https://github.com/gflags/gflags">gflags</a> : The gflags package contains a C++ library that implements commandline flags processing. It includes built-in support for standard types such as string and the ability to define flags in the source file in which they are used. Online documentation available at:</p>
</li>
<li>
<p><a href="https://github.com/bfgroup/Lyra">Lyra</a> : A simple to use, composable, command line parser for C++ 11 and beyond.</p>
</li>
</ul>
<h2 id="dart"><a class="header" href="#dart"><a href="https://dart.dev/">Dart</a></a></h2>
<ul>
<li>
<p><a href="https://github.com/dart-lang/args">args</a> : Parses raw command-line arguments into a set of options and values.</p>
</li>
<li>
<p><a href="https://github.com/onepub-dev/dcli">dcli</a> : An API and tooling for building cross platform command line (CLI) applications and scripts using the Dart programming language.</p>
</li>
</ul>
<h2 id="deno"><a class="header" href="#deno"><a href="https://deno.land/">Deno</a></a></h2>
<ul>
<li><a href="https://github.com/c4spar/deno-cliffy">deno-cliffy</a> : Command line framework for deno sauropod Including Commandline-Interfaces, Prompts, CLI-Table, Arguments Parser and more...</li>
</ul>
<h2 id="dotnet"><a class="header" href="#dotnet"><a href="https://dotnet.microsoft.com/">Dotnet</a></a></h2>
<ul>
<li>
<p><a href="https://github.com/Tyrrrz/CliFx">CliFX</a> : A simple to use, yet powerful framework for building command line applications. Its primary goal is to completely take over the user input layer, allowing you to forget about infrastructural concerns and instead focus on writing your application.</p>
</li>
<li>
<p><a href="https://github.com/Tyrrrz/CliWrap">CliWrap</a> : CliWrap is a library for interacting with external command line interfaces. It provides a convenient model for launching processes, redirecting input and output streams, awaiting completion, handling cancellation, and more.</p>
</li>
<li>
<p><a href="https://github.com/bilal-fazlani/commanddotnet">CommandDotnet</a> : Makes it easy to build console apps as simply as you would like and as feature rich as you need.</p>
</li>
<li>
<p><a href="https://github.com/commandlineparser/commandline">CommandLine</a> : The Command Line Parser Library offers CLR applications a clean and concise API for manipulating command line arguments and related tasks, such as defining switches, options and verb commands.</p>
</li>
<li>
<p><a href="https://github.com/dotnet/command-line-api">command-line-api</a> : Command line parsing, invocation, and rendering of terminal output.</p>
</li>
<li>
<p><a href="https://github.com/natemcmaster/CommandLineUtils">CommandLineUtils</a> : This project helps you create command line applications using .NET. It simplifies parsing arguments provided on the command line, validating user inputs, and generating help text.</p>
</li>
<li>
<p><a href="https://github.com/migueldeicaza/gui.cs">gui.cs</a> : Console-based user interface toolkit for .NET applications.</p>
</li>
<li>
<p><a href="https://github.com/spectreconsole/spectre.console">spectre.console</a> : A .NET 5/.NET Standard 2.0 library that makes it easier to create beautiful, cross platform, console applications.</p>
</li>
</ul>
<h3 id="useful-awesome-list-for-dotnet-cli"><a class="header" href="#useful-awesome-list-for-dotnet-cli">Useful awesome list for Dotnet cli</a></h3>
<ul>
<li><a href="https://github.com/quozd/awesome-dotnet/blob/master/README.md#cli">awesome-dotnet</a> by @quozd : A collection of awesome .NET libraries, tools, frameworks, and software.</li>
</ul>
<h2 id="elixir"><a class="header" href="#elixir"><a href="https://elixir-lang.org/">Elixir</a></a></h2>
<ul>
<li><a href="https://github.com/fuelen/owl">Owl</a> : Owl is a toolkit for writing command-line user interfaces in Elixir.</li>
</ul>
<h2 id="fortran"><a class="header" href="#fortran"><a href="https://fortran-lang.org/">Fortran</a></a></h2>
<ul>
<li><a href="https://github.com/szaghi/FLAP">FLAP</a> : A KISS pure Fortran Library for building powerful, easy-to-use, elegant command line interfaces.</li>
</ul>
<h2 id="go"><a class="header" href="#go"><a href="https://go.dev/">Go</a></a></h2>
<ul>
<li>
<p><a href="https://github.com/urfave/cli">cli</a> : A simple, fast, and fun package for building command line apps in Go.</p>
</li>
<li>
<p><a href="https://github.com/avamsi/climate">climate</a> : Autogenerates CLIs from structs / functions (nested subcommands, global / local flags, help generation, typo suggestions, shell completion etc.)</p>
</li>
<li>
<p><a href="https://github.com/spf13/cobra">Cobra</a> : Many of the most widely used Go projects are built using Cobra, such as: <a href="http://kubernetes.io/">Kubernetes</a>, <a href="http://gohugo.io">Hugo</a>, <a href="https://github.com/coreos/rkt">rkt</a>, <a href="https://github.com/coreos/etcd">etcd</a>, <a href="https://github.com/moby/moby">Moby (former Docker)</a>, <a href="https://github.com/docker/distribution">Docker (distribution)</a>, <a href="https://www.openshift.com/">OpenShift</a>, <a href="https://github.com/derekparker/delve">Delve</a>, <a href="http://www.gopherjs.org/">GopherJS</a>, <a href="http://www.cockroachlabs.com/">CockroachDB</a>, <a href="http://www.blevesearch.com/">Bleve</a>, <a href="http://www.projectatomic.io/">ProjectAtomic (enterprise)</a>, <a href="https://github.com/giantswarm/gsctl">Giant Swarm's gsctl</a>, <a href="https://github.com/nanobox-io/nanobox">Nanobox</a>/<a href="https://github.com/nanopack">Nanopack</a>, <a href="http://rclone.org/">rclone</a>, <a href="https://github.com/bogem/nehm">nehm</a>, <a href="https://github.com/alibaba/pouch">Pouch</a>, <a href="https://istio.io">Istio</a>, <a href="https://github.com/uber/prototool">Prototool</a>, <a href="https://github.com/mattermost/mattermost-server">mattermost-server</a>, <a href="https://github.com/gardener/gardenctl">Gardener</a>, <a href="https://linkerd.io/">Linkerd</a>,
etc.</p>
</li>
<li>
<p><a href="https://github.com/akamensky/argparse">Golang Agrparse</a> : The goal of this project is to bring ease of use and flexibility of argparse (Python) to Go.</p>
</li>
<li>
<p><a href="https://github.com/alexflint/go-arg">go-arg</a> : Struct-based argument parsing in Go.</p>
</li>
<li>
<p><a href="https://github.com/docopt/docopt.go">Docopt Go</a> : docopt parses command-line arguments based on a help message. Don't write parser code: a good help message already has all the necessary information in it.</p>
</li>
<li>
<p><a href="https://github.com/jawher/mow.cli">Mow.cli</a> : A versatile library for building CLI applications in Go</p>
</li>
<li>
<p><a href="https://github.com/ukautz/clif">Clif</a> : Go framework for rapid command line application development.</p>
</li>
<li>
<p><a href="https://github.com/alecthomas/kong">Kong</a> : Kong aims to support arbitrarily complex command-line structures with as little developer effort as possible.</p>
</li>
<li>
<p><a href="https://github.com/spf13/viper">Viper</a> : Viper is a complete configuration solution for Go applications including 12-Factor apps. It is designed to work within an application, and can handle all types of configuration needs and formats.</p>
</li>
</ul>
<h3 id="useful-awesome-list-for-go-cli"><a class="header" href="#useful-awesome-list-for-go-cli">Useful awesome list for Go cli</a></h3>
<ul>
<li><a href="https://github.com/avelino/awesome-go">Awesome-go</a> by @avelino : A curated list of awesome Go frameworks, libraries and software. Look at <a href="https://github.com/avelino/awesome-go#command-line">Command Line</a></li>
</ul>
<h2 id="haskell"><a class="header" href="#haskell"><a href="https://www.haskell.org/">Haskell</a></a></h2>
<ul>
<li>
<p><a href="https://github.com/ndmitchell/cmdargs">CmdArgs</a> : CmdArgs is a Haskell library for defining command line parsers.</p>
</li>
<li>
<p><a href="https://github.com/docopt/docopt.hs">Docopt.hs</a> : A Haskell port of python's docopt.</p>
</li>
<li>
<p><a href="https://github.com/pcapriotti/optparse-applicative">optparse-applicative</a> : A haskell library for parsing options on the command line, and providing a powerful applicative interface for composing them. It takes care of reading and validating the arguments passed to the command line, handling and reporting errors, generating a usage line, a comprehensive help screen, and enabling context-sensitive bash, zsh, and fish completions.</p>
</li>
</ul>
<h2 id="java"><a class="header" href="#java"><a href="https://dev.java/">Java</a></a></h2>
<ul>
<li>
<p><a href="https://github.com/kohsuke/args4j">args4j</a> : A small Java class library that makes it easy to parse command line options/arguments in your CLI application.</p>
</li>
<li>
<p><a href="https://github.com/apache/commons-cli">Apache Commons CLI</a> : Apache Commons CLI provides a simple API for presenting, processing and validating a Command Line Interface.</p>
</li>
<li>
<p><a href="https://github.com/cbeust/jcommander">Jcommander</a> : An annotation based parameter parsing framework for Java 8.</p>
</li>
<li>
<p><a href="https://github.com/jline/jline3">Jline3</a> : A Java library for handling console input. People familiar with the readline/editline capabilities for modern shells (such as bash and tcsh) will find most of the command editing features of JLine to be familiar.</p>
</li>
<li>
<p><a href="https://github.com/remkop/picocli">Picocli</a> : A modern framework for building powerful, user-friendly, GraalVM-enabled command line apps with ease.</p>
</li>
</ul>
<h2 id="javascript"><a class="header" href="#javascript"><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript">JavaScript</a></a></h2>
<ul>
<li>
<p><a href="https://github.com/arcanis/clipanion">Clipanion</a> : Official CLI framework powering both the Yarn CLI - one of the most complex command-line tool in the ecosystem - and small internal scripts. Clipanion is designed with type safety in mind, and leverages a syntax as idiomatic as possible to avoid cluttering your code with boilerplate.</p>
</li>
<li>
<p><a href="https://github.com/oclif/oclif">Oclif</a> : Oclif is a framework for building CLIs in Node.js. This framework was built out of the Heroku CLI but generalized to build any custom CLI. It's designed both for single-file CLIs with a few flag options, or for very complex CLIs that have subcommands (like git or heroku).</p>
</li>
<li>
<p><a href="https://github.com/tj/commander.js/">Commander.js</a> : The complete solution for node.js command-line interfaces.</p>
</li>
<li>
<p><a href="https://github.com/infinitered/gluegun">Gluegun</a> : A delightful toolkit for building TypeScript-powered command-line apps.</p>
</li>
<li>
<p><a href="https://github.com/vadimdemedes/ink">Ink</a> : React for interactive command-line apps. (See also <a href="https://github.com/vadimdemedes/pastel">Pastel</a>)</p>
</li>
<li>
<p><a href="https://github.com/esatterwhite/node-seeli">node-seeli</a> : Object orientated, event driven , Interactive CLI module. Seeli aims to give you the tools to compose A command line interface the way you want it, and otherwise, stays out of your way.</p>
</li>
<li>
<p><a href="https://github.com/mattallty/Caporal.js">Caporal.js</a> : A full-featured framework for building command line applications (cli) with node.js, including help generation, colored output, verbosity control, custom logger, coercion and casting, typos suggestions, and auto-complete for bash/zsh/fish.</p>
</li>
<li>
<p><a href="https://github.com/leo/args">args</a> : Toolkit for building command line interfaces.</p>
</li>
<li>
<p><a href="https://github.com/SBoudrias/Inquirer.js">Inquirer.js</a> : Inquirer.js strives to be an easily embeddable and beautiful command line interface for Node.js.</p>
</li>
<li>
<p><a href="https://github.com/dthree/vorpal">Vorpal</a> : Vorpal is Node's first framework for building interactive CLI applications. With a simple and powerful API, Vorpal opens the door to a new breed of rich, immersive CLI environments. <strong>[NOT MAINTAINED]</strong></p>
</li>
<li>
<p><a href="https://github.com/yargs/yargs">Yargs</a> : Yargs helps you build interactive command line tools, by parsing arguments and generating an elegant user interface.</p>
</li>
<li>
<p><a href="https://github.com/clercjs/clerc">Clerc</a> : Clerc is a full-featured library for building CLI Apps in Node.js, Deno or Bun. It's strongly-typed, easy-to-use and flexible.</p>
</li>
<li>
<p><a href="https://github.com/adbayb/termost">Termost</a>: A full-featured framework to build your next command line interfaces (CLI) in a minute. Thanks to its fluent and type-safe API, you can easily express and manage your program metadata (including version and help), sub-commands, user prompts, tasks, options and flags, ...</p>
</li>
</ul>
<h2 id="julia"><a class="header" href="#julia"><a href="https://julialang.org/">Julia</a></a></h2>
<ul>
<li><a href="https://github.com/comonicon/Comonicon.jl">Comonicon.jl</a> : Your best CLI generator in JuliaLang.</li>
</ul>
<h2 id="kotlin"><a class="header" href="#kotlin"><a href="https://kotlinlang.org/">Kotlin</a></a></h2>
<ul>
<li>
<p><a href="https://github.com/ajalt/clikt">clikt</a> : Multiplatform command line interface parsing for Kotlin.</p>
</li>
<li>
<p><a href="https://github.com/Kotlin/kotlinx-cli">kotlinx-cli</a> : Pure Kotlin implementation of a generic CLI parser.</p>
</li>
</ul>
<h2 id="nim"><a class="header" href="#nim"><a href="https://nim-lang.org/">Nim</a></a></h2>
<ul>
<li>
<p><a href="https://github.com/oliverdelancey/clapfn">clapfn</a> : A fast and simple command line argument parser for Nim.</p>
</li>
<li>
<p><a href="https://github.com/juancarlospaco/cliche">cliche</a> : AutoMagic CLI argument parsing is cliche.</p>
</li>
<li>
<p><a href="https://github.com/c-blake/cligen">cligen</a> : Nim library to infer/generate command-line-interfaces / option / argument parsing.</p>
</li>
<li>
<p><a href="https://github.com/docopt/docopt.nim">docopt.nim</a> : Command line arguments parser that will make you smile (port of docopt to Nim).</p>
</li>
<li>
<p><a href="https://github.com/beshrkayali/loki">loki</a> : A small library for writing line-oriented command interpreters in Nim.</p>
</li>
<li>
<p><a href="https://github.com/iffy/nim-argparse">nim-argparse</a> : Command line argument parsing library.</p>
</li>
<li>
<p><a href="https://github.com/status-im/nim-confutils">nim-confutils</a> : Simplified handling of command line options and config files.</p>
</li>
</ul>
<h2 id="ocaml"><a class="header" href="#ocaml"><a href="https://ocaml.org/">Ocaml</a></a></h2>
<ul>
<li>
<p><a href="https://github.com/dbuenzli/cmdliner">cmdliner</a> : Declarative definition of command line interfaces for OCaml.</p>
</li>
<li>
<p><a href="https://github.com/rbardou/clap">clap</a> : Command-Line Argument Parsing, imperative style with a consumption mechanism.</p>
</li>
<li>
<p><a href="https://github.com/UnixJunkie/minicli">minicli</a> : Minimalist OCaml library for command line parsing.</p>
</li>
</ul>
<h2 id="php"><a class="header" href="#php"><a href="https://www.php.net/">PHP</a></a></h2>
<ul>
<li>
<p><a href="https://github.com/c9s/CLIFramework">CliFramework</a> : CLIFramework is a command-line application framework, for building flexiable, simple command-line applications.</p>
</li>
<li>
<p><a href="https://github.com/laravel-zero/laravel-zero">laravel-zero</a> : A micro-framework that provides an elegant starting point for your console application. It is an unofficial and customized version of Laravel optimized for building command-line applications.</p>
</li>
<li>
<p><a href="https://github.com/minicli/minicli">minicli</a> : A minimalist framework for command-line applications in PHP.</p>
</li>
<li>
<p><a href="https://github.com/adhocore/php-cli">php-cli</a> : PHP Console Application made easy- build great console apps with ease. Comes with Zero Dependency and Autocompletion support.</p>
</li>
<li>
<p><a href="https://github.com/wp-cli/php-cli-tools">php-cli-tools</a> : A collection of tools to help with PHP command line utilities.</p>
</li>
<li>
<p><a href="https://github.com/mnapoli/silly">Silly</a> : Silly CLI micro-framework based on Symfony Console.</p>
</li>
<li>
<p><a href="https://github.com/symfony/Console">Symfony/Console</a> : The Console component of symfony eases the creation of beautiful and testable command line interfaces.</p>
</li>
</ul>
<h2 id="purescript"><a class="header" href="#purescript"><a href="https://www.purescript.org/">Purescript</a></a></h2>
<ul>
<li><a href="https://github.com/f-o-a-m/purescript-optparse">Optparse</a> : Applicative option parser.</li>
</ul>
<h2 id="python"><a class="header" href="#python"><a href="https://www.python.org/">Python</a></a></h2>
<ul>
<li>
<p><a href="https://docs.python.org/3/library/argparse.html">Argparse</a> : Argparse is the default python module for creating command lines programs. It provides all the features you need to build a simple CLI.</p>
</li>
<li>
<p><a href="https://github.com/pallets/click">Click</a> : Click is a Python package for creating beautiful command line interfaces in a composable way with as little code as necessary. It's the "Command Line Interface Creation Kit". It's highly configurable but comes with sensible defaults out of the box.</p>
</li>
<li>
<p><a href="https://github.com/openstack/cliff">Cliff</a> : cliff is a framework for building command line programs. It uses setuptools entry points to provide subcommands, output formatters, and other extensions.</p>
</li>
<li>
<p><a href="https://github.com/datafolklabs/cement">Cement</a> : Cement is an advanced Application Framework for Python, with a primary focus on Command Line Interfaces (CLI). Its goal is to introduce a standard, and feature-full platform for both simple and complex command line applications as well as support rapid development needs without sacrificing quality.</p>
</li>
<li>
<p><a href="https://github.com/python-poetry/cleo">Cleo</a> : Cleo allows you to create beautiful and testable command-line interfaces.</p>
</li>
<li>
<p><a href="https://github.com/epsy/clize">Clize</a> : An argument parser for Python. You can use Clize as an alternative to argparse if you want an even easier way to create command-line interfaces.</p>
</li>
<li>
<p><a href="https://github.com/BrianPugh/cyclopts">Cyclopts</a> : Intuitive, easy CLIs based on python type hints.</p>
</li>
<li>
<p><a href="https://github.com/docopt/docopt">Docopt</a> / <a href="https://github.com/jazzband/docopt-ng">Docopt-NG</a> : Pythonic command line arguments parser, that will make you smile. docopt parses command-line arguments based on a help message. Don't write parser code: a good help message already has all the necessary information in it.</p>
</li>
<li>
<p><a href="https://jsonargparse.readthedocs.io/">jsonargparse</a> : Implement minimal boilerplate CLIs derived from type hints and parse from command line, config files and environment variables.</p>
</li>
<li>
<p><a href="https://github.com/ialbert/plac">Plac</a> : Generate command line parameters from function signatures.</p>
</li>
<li>
<p><a href="https://github.com/google/python-fire">Python-Fire</a> : Python Fire is a library for automatically generating command line interfaces (CLIs) from absolutely any Python object.</p>
</li>
<li>
<p><a href="https://pythonhosted.org/pyCLI/">PyCli</a> : The cli package is a framework for making simple, correct command line applications in Python. With cli, you can quickly add standard command line parsing; logging; unit and functional testing; and profiling to your CLI apps.</p>
</li>
<li>
<p><a href="https://github.com/CITGuru/PyInquirer">PyInquirer</a> : PyInquirer strives to be an easily embeddable and beautiful command line interface for Python. PyInquirer wants to make it easy for existing Inquirer.js users to write immersive command line applications in Python.</p>
</li>
<li>
<p><a href="https://github.com/pwaller/pyfiglet">PyFiglet</a> : Pyfiglet is a full port of FIGlet (<a href="http://www.figlet.org/">http://www.figlet.org/</a>) into pure python. It takes ASCII text and renders it in ASCII art fonts.</p>
</li>
<li>
<p><a href="https://github.com/prompt-toolkit/python-prompt-toolkit">python-prompt-toolkit</a> : Library for building powerful interactive command line applications in Python.</p>
</li>
<li>
<p><a href="https://github.com/lebrice/SimpleParsing">SimpleParsing</a> : Allows you to transform your ugly argparse scripts into beautifully structured, strongly typed little works of art. This isn't a fancy, complicated new command-line tool either, this simply adds new features to plain-old argparse !</p>
</li>
<li>
<p><a href="https://github.com/swansonk14/typed-argument-parser">Tap</a> : Tap is a typed modernization of Python's argparse library.</p>
</li>
<li>
<p><a href="https://github.com/brentyi/tyro">Tyro</a> : Tool for generating command-line interfaces and configuration objects in Python.</p>
</li>
<li>
<p><a href="https://typer.tiangolo.com/">Typer</a> : Library for building CLI applications that users will love using and developers will love creating. It's intended to be the FastAPI of CLIs.</p>
</li>
</ul>
<h2 id="ruby"><a class="header" href="#ruby"><a href="https://www.ruby-lang.org/">Ruby</a></a></h2>
<ul>
<li>
<p><a href="https://github.com/dry-rb/dry-cli">dry-ruby</a> : General purpose Command Line Interface (CLI) framework for Ruby.</p>
</li>
<li>
<p><a href="https://github.com/piotrmurach/tty">TTY</a> : TTY is a toolbox for developing beautiful command line clients in Ruby with a fluid interface for gathering input, querying terminal properties and displaying information.</p>
</li>
<li>
<p><a href="https://github.com/rails/thor">Thor</a> : Thor is a simple and efficient tool for building self-documenting command line utilities. It removes the pain of parsing command line options, writing "USAGE:" banners, and can also be used as an alternative to the Rake build tool. The syntax is Rake-like, so it should be familiar to most Rake users.</p>
</li>
<li>
<p><a href="https://github.com/commander-rb/commander">Commander</a> : The complete solution for Ruby command-line executables. Commander bridges the gap between other terminal related libraries you know and love (OptionParser, HighLine), while providing many new features, and an elegant API.</p>
</li>
<li>
<p><a href="https://github.com/mdub/clamp">Clamp</a> : "Clamp" is a minimal framework for command-line utilities. It handles boring stuff like parsing the command-line, and generating help, so you can get on with making your command actually do stuff.</p>
</li>
<li>
<p><a href="https://github.com/davetron5000/gli">Gli</a> : GLI allows you to create command-line app in Ruby that behaves like <code>git</code> in that it takes subcommands to perform a series of complex action.</p>
</li>
</ul>
<h3 id="useful-awesome-list-for-ruby-cli"><a class="header" href="#useful-awesome-list-for-ruby-cli">Useful awesome list for Ruby cli</a></h3>
<ul>
<li><a href="https://github.com/markets/awesome-ruby">Awesome-ruby</a> by @markets : A curated list of awesome Ruby frameworks, libraries and software. Look at <a href="ttps://github.com/markets/awesome-ruby#cli-builder">#Cli builder</a> and <a href="https://github.com/markets/awesome-ruby#cli-builder">#Cli-utilities</a></li>
</ul>
<h2 id="r"><a class="header" href="#r"><a href="https://www.r-project.org/">R</a></a></h2>
<ul>
<li><a href="https://cli.r-lib.org/">cli</a> : A suite of tools to build attractive command line interfaces (CLIs), from semantic elements: headers, lists, alerts, paragraphs, etc.</li>
</ul>
<h2 id="rust"><a class="header" href="#rust"><a href="https://www.rust-lang.org/">Rust</a></a></h2>
<ul>
<li>
<p><a href="https://github.com/clap-rs/clap">Clap</a> : A full featured, fast Command Line Argument Parser for Rust.</p>
</li>
<li>
<p><a href="https://github.com/ratatui-org/ratatui">Ratatui</a> : Rust library that's all about cooking up terminal user interfaces (TUIs).</p>
</li>
<li>
<p><a href="https://github.com/TeXitoi/structopt">StructOpt</a> : Parse command line arguments by defining a struct.</p>
</li>
<li>
<p><a href="https://github.com/tailhook/rust-argparse">rust-argparse</a> : The command-line argument parser library for rust.</p>
</li>
<li>
<p><a href="https://github.com/ksk001100/seahorse">Seahorse</a> : A minimal CLI framework written in Rust.</p>
</li>
<li>
<p><a href="https://lib.rs/crates/termion">Termion</a> : Pure Rust, bindless library for low-level handling, manipulating and reading information about terminals.</p>
</li>
<li>
<p><a href="https://github.com/moonrepo/starbase#components">Starbase</a> : Framework for building performant command line applications and developer tools.</p>
</li>
</ul>
<h2 id="scala"><a class="header" href="#scala"><a href="https://www.scala-lang.org/">Scala</a></a></h2>
<ul>
<li><a href="https://github.com/scopt/scopt">scopt</a> : Command line options parsing for Scala.</li>
</ul>
<h2 id="swift"><a class="header" href="#swift"><a href="https://www.swift.org/">Swift</a></a></h2>
<ul>
<li>
<p><a href="https://github.com/kylef/Commander">Commander</a> : Compose beautiful command line interfaces in Swift.</p>
</li>
<li>
<p><a href="https://github.com/apple/swift-argument-parser">swift-argument-parser</a> : Straightforward, type-safe argument parsing for Swift</p>
</li>
</ul>
<h2 id="v"><a class="header" href="#v"><a href="https://vlang.io/">V</a></a></h2>
<ul>
<li><a href="https://modules.vlang.io/cli.html">cli</a> : Builtin command line option parser, that supports declarative subcommands, each having separate set of options.</li>
<li><a href="https://modules.vlang.io/flag.html">flag</a>: Builtin command line option parser.</li>
</ul>
<h2 id="zig"><a class="header" href="#zig"><a href="https://ziglang.org/">Zig</a></a></h2>
<ul>
<li><a href="https://github.com/00JCIV00/cova">cova</a>: Commands, Options, Values, Arguments. A simple yet robust cross-platform command line argument parsing library for Zig.</li>
<li><a href="https://github.com/sam701/zig-cli">zig-cli</a>: A simple package for building command line apps in Zig.</li>
</ul>
<h2 id="contributing"><a class="header" href="#contributing"><strong>Contributing</strong></a></h2>
<p>Thanks for visiting! If you have suggestions, then open an issue, or submit a PR, see: CONTRIBUTING.md. Contributions are welcome, and much appreciated !</p>
<h2 id="license"><a class="header" href="#license">License</a></h2>
<p><a href="https://creativecommons.org/licenses/by/4.0/"><img src="https://img.shields.io/badge/LICENSE-CC_BY_4.0-00a2ff" alt="License" /></a>
Licensed under Creative Commons, CC BY 4.0, © <a href="https://github.com/shadawck">Shadawck</a>.</p>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
</nav>
</div>
<script type="text/javascript">
window.playground_copyable = true;
</script>
<script src="elasticlunr.min.js" type="text/javascript" charset="utf-8"></script>
<script src="mark.min.js" type="text/javascript" charset="utf-8"></script>
<script src="searcher.js" type="text/javascript" charset="utf-8"></script>
<script src="clipboard.min.js" type="text/javascript" charset="utf-8"></script>
<script src="highlight.js" type="text/javascript" charset="utf-8"></script>
<script src="book.js" type="text/javascript" charset="utf-8"></script>
<!-- Custom JS scripts -->
</body>
</html>