Based on my exploration of Nimble packages, here are a few statistics on these 
packages.

  * 188 packages have no documentation (18%). Not a single comment in code, I 
don't even talk about documentation comments here, nor a README file. Nothing!
  * The vast majority (47%) has a minimum documentation, either a README file 
where the user can find pointers on how the package works or can generate code 
documentation with `nim doc`.
  * Packages that are wrappers to external C libraries have been counted as 
having a minimum documentation when the wrapped library has documentation, even 
when the Nim package does not...
  * 45 packages (4%) have outstanding documentation, usually with pointers to 
other web sites (for instance WikiPedia) and documented examples. Here is the 
list of these packages:

Packages| Description  
---|---  
arraymancer| A tensor (multidimensional array) library for Nim  
c4| Game framework, modular and extensible  
cello| String algorithms with succinct data structures  
chronicles| A crafty implementation of structured logging for Nim  
coco| Code coverage CLI + library for Nim using LCOV  
compiler| Compiler package providing the compiler sources as a library.  
confutils| Simplified handling of command line options and config files  
csvtools| Manage CSV files  
docopt| Command-line args parser based on Usage message  
elvis| The elvis package implements a 'truthy', 'ternary' and a 'coalesce' 
operator to Nim as syntactic sugar for working with conditional expressions  
emerald| macro-based HTML templating engine  
eth| A collection of Ethereum related libraries  
fancygl| nice way of handling render code  
glob| Pure library for matching file paths against Unix style glob patterns.  
hastyscribe| Self-contained markdown compiler generating self-contained HTML 
documents  
lilt| Parsing language  
litestore| A lightweight, self-contained, RESTful, searchable, multi-format 
NoSQL document store  
msgpack4nim| Another MessagePack implementation written in pure nim  
nake| make-like for Nim. Describe your builds as tasks!  
neo| Linear algebra for Nim  
nifty| A decentralized (pseudo) package manager and script runner.  
nimble| Nimble package manager  
nimgame2| A simple 2D game engine for Nim language.  
nimha| Nim Home Assistant (NimHA) is a hub for combining multiple home 
automation devices and automating jobs  
nimna| Nucleic acid folding and design.  
nimterop| Nimterop makes C/C++ interop within Nim seamless  
nimwc| A website management tool. Run the file and access your webpage.  
nimx| Cross-platform GUI framework  
npeg| PEG (Parsing Expression Grammars) string matching library for Nim  
polypbren| Renormalization of colloidal charges of polydipserse dispersions 
using the Poisson-Boltzmann equation  
protobuf| Protobuf implementation in pure Nim that leverages the power of the 
macro system to not depend on any external tools  
psutil| psutil is a cross-platform library for retrieving information on 
running processes and system utilization (CPU, memory, disks, network). Since 
2018 maintained by Juan Carlos because was abandoned.  
pymod| Auto-generate a Python module that wraps a Nim module.  
rbtree| Red/Black Trees  
react| React.js bindings for Nim  
reactor| Asynchronous networking engine for Nim  
rosencrantz| A web DSL for Nim  
spry| A Smalltalk and Rebol inspired language implemented as an AST interpreter 
 
strfmt| A string formatting library inspired by Python's format.  
tempdir| A Nim library to create and manage temporary directories.  
timezones| Timezone library compatible with the standard library.  
turn_based_game| Game rules engine for simulating or playing turn-based games  
typography| Fonts, Typesetting and Rasterization.  
wNim| Nim's Windows GUI Framework.  
yaml| YAML 1.2 implementation for Nim  
  
  * Nimble does not impose a package structure, but best practices suggest to 
hide private modules and have test directories. 591 packages follow these rules 
(58%).
  * Here are the best 40 organized packages (4% of total).

Packages| Description  
---|---  
BipBuffer| A Nim implementation of Simon Cooke's Bip Buffer. A type of circular 
buffer ensuring contiguous blocks of memory  
BitVector| A high performance Nim implementation of BitVector with base 
SomeUnsignedInt(i.e: uint8-64) with support for slices, and seq supported 
operations  
MiNiM| A tiny concatenative programming language and shell.  
NimData| DataFrame API enabling fast out-of-core data analytics  
RollingHash| A high performance Nim implementation of a Cyclic Polynomial Hash, 
aka BuzHash, and the Rabin-Karp algorithm  
alea| Define and compose random variables  
arraymancer| A tensor (multidimensional array) library for Nim  
asyncmysql| Asynchronous MySQL connector written in pure Nim  
asyncpg| Asynchronous PostgreSQL driver for Nim Language.  
c4| Game framework, modular and extensible  
cligen| Infer & generate command-line interace/option/argument parsers  
compiler| Compiler package providing the compiler sources as a library.  
docopt| Command-line args parser based on Usage message  
emerald| macro-based HTML templating engine  
eth| A collection of Ethereum related libraries  
illwill| A curses inspired simple cross-platform console library for Nim  
nimble| Nimble package manager  
nimbus| An Ethereum 2.0 Sharding Client for Resource-Restricted Devices  
nimgame2| A simple 2D game engine for Nim language.  
nimhdf5| Bindings for the HDF5 data format C library  
nimna| Nucleic acid folding and design.  
nimqml| Qt Qml bindings  
nimwc| A website management tool. Run the file and access your webpage.  
norm| Nim ORM.  
npeg| PEG (Parsing Expression Grammars) string matching library for Nim  
plotly| Nim interface to plotly  
pnm| pnm is library for PNM (Portable AnyMap).  
polypbren| Renormalization of colloidal charges of polydipserse dispersions 
using the Poisson-Boltzmann equation  
protobuf| Protobuf implementation in pure Nim that leverages the power of the 
macro system to not depend on any external tools  
psutil| psutil is a cross-platform library for retrieving information on 
running processes and system utilization (CPU, memory, disks, network). Since 
2018 maintained by Juan Carlos because was abandoned.  
pymod| Auto-generate a Python module that wraps a Nim module.  
rbtree| Red/Black Trees  
spry| A Smalltalk and Rebol inspired language implemented as an AST interpreter 
 
spryvm| Homoiconic dynamic language interpreter in Nim  
stew| stew is collection of utilities, std library extensions and budding 
libraries that are frequently used at Status, but are too small to deserve 
their own git repository.  
stint| Stack-based arbitrary-precision integers - Fast and portable with 
natural syntax for resource-restricted devices  
stomp| A pure-nim implementation of the STOMP protocol for machine messaging.  
telebot| Async Telegram Bot API Client  
turn_based_game| Game rules engine for simulating or playing turn-based games  
unicodedb| Unicode Character Database (UCD) access for Nim  
  
  * 10 packages should be aliased in Nimble as their authors renamed them in 
Github but did not do it in Nimble: nim_cexc, nim_cjson, nim_curry, nim_tiled, 
nimarchive, nimassets, nimbass, nimbigwig, nimblegui, std_shims.
  * I was impressed by the number of packages for hash functions or colour 
management in console. Perhaps authors of packages on similar themes should 
combine efforts. For instance, having a super-package covering variants of 
hashing algorithms, with good documentation presenting the benefits of each 
algorithm would prevent using the wrong algorithm.
  * There's even a Go project listed in Nimble! pudge
  * One of the biggest strength of Nim is interfacing with C library. Not 
surprisingly, many packages (28%) consist only in wrappers to external 
libraries or web services.
  * What are the best Nim packages? In case you need models to get inspiration 
for your project, look at these packages. Some are complex like the Nim 
compiler, other are simpler.

Packages| Description  
---|---  
compiler| Compiler package providing the compiler sources as a library.  
nimble| Nimble package manager  
arraymancer| A tensor (multidimensional array) library for Nim  
docopt| Command-line args parser based on Usage message  
eth| A collection of Ethereum related libraries  
psutil| psutil is a cross-platform library for retrieving information on 
running processes and system utilization (CPU, memory, disks, network). Since 
2018 maintained by Juan Carlos because was abandoned.  
MiNiM| A tiny concatenative programming language and shell.  
NimData| DataFrame API enabling fast out-of-core data analytics  
c4| Game framework, modular and extensible  
chronicles| A crafty implementation of structured logging for Nim  
confutils| Simplified handling of command line options and config files  
emerald| macro-based HTML templating engine  
hastyscribe| Self-contained markdown compiler generating self-contained HTML 
documents  
nimbus| An Ethereum 2.0 Sharding Client for Resource-Restricted Devices  
nimgame2| A simple 2D game engine for Nim language.  
nimna| Nucleic acid folding and design.  
nimwc| A website management tool. Run the file and access your webpage.  
nimx| Cross-platform GUI framework  
norm| Nim ORM.  
npeg| PEG (Parsing Expression Grammars) string matching library for Nim  
plotly| Nim interface to plotly  
polypbren| Renormalization of colloidal charges of polydipserse dispersions 
using the Poisson-Boltzmann equation  
protobuf| Protobuf implementation in pure Nim that leverages the power of the 
macro system to not depend on any external tools  
pymod| Auto-generate a Python module that wraps a Nim module.  
rbtree| Red/Black Trees  
spry| A Smalltalk and Rebol inspired language implemented as an AST interpreter 
 
turn_based_game| Game rules engine for simulating or playing turn-based games  
yaml| YAML 1.2 implementation for Nim  
  
  * Most popular licenses. Permissive licenses are the most popular with 
package authors.

Licence| Number of packages  
---|---  
MIT| 785  
Apache License 2.0| 64  
BSD| 20  
LGPLv3| 20  
BSD3| 13  
CC0| 12  
GPLv3| 11  
Apache2| 8  
LGPL| 6  
LGPLv2.1| 6  
  
It could be interesting to see which type of license is mostly used by package 
category/domain.

  * Most prolific developers

Author| Number of packages  
---|---  
juancarlospaco| 45  
genotrance| 42  
achesak| 39  
nim-lang| 39  
status-im| 35  
FedericoCeratto| 23  
nimious| 18  
yglukhov| 18  
ba0f3| 16  
PMunch| 16  
dom96| 15  
fowlmouth| 13  
jangko| 13  
OpenSystemsLab| 12  
Araq| 12  
treeform| 12  
unicredit| 10  
xmonader| 10  
euantorano| 10  
def-| 9

Reply via email to