Taking inspiration from multiple languages, the Nim syntax is
easily understood and results in code that can be modified very
Indentation significant syntax
Multiple constructs inspired by Python
Oberon-inspired visibility markers
Pascal-inspired type sections for leaner definitions
Support for multiple operating systems
Nim supports every mainstream operating system and platform as
well as multiple niche platforms. We take pride in supporting all
three major operating systems fully.
Many garbage collector options
Choose from a deferred RC'ing garbage collector that is fast,
incremental and pauseless; or a soft real-time garbage collector that
is deterministic allowing you to specify its max pause time; and
Native performance with state-of-the-art optimisations
By compiling to C, Nim is able to take advantage of many
features offered by modern C compilers. The primary benefits
gained by this compilation model include incredible portability and
optimisations, which have been implemented over more than 40 years
by various individuals and influential companies.
The binaries produced by Nim have zero dependencies and are
typically very small. This makes their distribution easy
and keeps your users happy.
client and server effortlessly at the same time.
New Game: NPlay/Pause: PControls: ← → ↑ ↓
backend and drawn using the canvas API.
Nim implements a small core language with a powerful
set of metaprogramming features.
The metaprogramming features in Nim include support for generics,
templates, and macros. This allows Nim to be extended with support
for various programming paradigms and allows developers to avoid
boilerplate. The standard library
implements async await using these metaprogramming features and
the Nim community has developed various packages implementing
different programming paradigms.
Decentralised package management
The Nim package manager is called Nimble. Packages
are distributed via Git and Mercurial repositories, and tags are
queried remotely to determine version information.
A mapping between package names and repository URLs is defined in a
packages.json file that is stored on
Packages are defined using a
specially formatted .nimble file that is evaluated by the
Nim compiler. This means that it supports a large subset of the
Nim programming language, allowing various powerful features including
the ability to determine the OS and specify external dependencies.
When a Nim application crashes with an exception,
it will output a stack trace before terminating. The format of this
stack trace is very easy to grasp and contains all the required
information to debug the exception.