Stable v1.2.6 Nightly 08.07

{. efficient, expressive, elegant .}

Nim is a statically typed compiled systems programming language. It combines successful concepts from mature languages like Python, Ada and Modula.
Examples
import strformat

type
  Person = object
    name: string
    age: Natural # Ensures the age is positive

let people = [
  Person(name: "John", age: 45),
  Person(name: "Kate", age: 30)
]

for person in people:
  # Type-safe string interpolation,
  # evaluated at compile time.
  echo(fmt"{person.name} is {person.age} years old")
# Thanks to Nim's 'iterator' and 'yield' constructs,
# iterators are as easy to write as ordinary
# functions. They are compiled to inline loops.
iterator oddNumbers[Idx, T](a: array[Idx, T]): T =
  for x in a:
    if x mod 2 == 1:
      yield x

for odd in oddNumbers([3, 6, 9, 12, 15, 18]):
  echo odd
# Use Nim's macro system to transform a dense
# data-centric description of x86 instructions
# into lookup tables that are used by
# assemblers and JITs.
import macros, strutils

macro toLookupTable(data: static[string]): untyped =
  result = newTree(nnkBracket)
  for w in data.split(';'):
    result.add newLit(w)

const
  data = "mov;btc;cli;xor"
  opcodes = toLookupTable(data)

for o in opcodes:
  echo o
More examples at Rosetta Code
Try online

{. efficient .}

Nim generates native dependency-free executables, not dependent on a virtual machine, which are small and allow easy redistribution.
The Nim compiler and the generated executables support all major platforms like Windows, Linux, BSD and macOS.
Nim's memory management is deterministic and customizable with destructors and move semantics, inspired by C++ and Rust.
It is well-suited for embedded, hard-realtime systems. Modern concepts like zero-overhead iterators and compile-time evaluation of user-defined functions, in combination with the preference of value-based datatypes allocated on the stack, lead to extremely performant code.
Support for various backends: it compiles to C, C++ or JavaScript so that Nim can be used for all backend and frontend needs.

{. expressive .}

Nim is self-contained: the compiler and the standard library are implemented in Nim.
Nim has a powerful macro system which allows direct manipulation of the AST, offering nearly unlimited opportunities.

{. elegant .}

Macros cannot change Nim's syntax because there is no need for it — the syntax is flexible enough.
Modern type system with local type inference, tuples, generics and sum types.
Statements are grouped by indentation but can span multiple lines.
to some other page.