• Stars
    star
    16,074
  • Rank 1,684 (Top 0.04 %)
  • Language
    Nim
  • License
    Other
  • Created over 13 years ago
  • Updated 12 days ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Nim is a statically typed compiled systems programming language. It combines successful concepts from mature languages like Python, Ada and Modula. Its design focuses on efficiency, expressiveness, and elegance (in that order of priority).

Nim

Build Status

This repository contains the Nim compiler, Nim's stdlib, tools, and documentation. For more information about Nim, including downloads and documentation for the latest release, check out Nim's website or bleeding edge docs.

Community

Join the IRC chat Join the Discord server Join the Gitter chat Join the Matrix room Get help View Nim posts on Stack Overflow Follow @nim_lang on Twitter

  • The forum - the best place to ask questions and to discuss Nim.
  • #nim IRC Channel (Libera Chat) - a place to discuss Nim in real-time. Also where most development decisions get made.
  • Discord - an additional place to discuss Nim in real-time. Most channels there are bridged to IRC.
  • Gitter - an additional place to discuss Nim in real-time. There is a bridge between Gitter and the IRC channel.
  • Matrix - the main room to discuss Nim in real-time. Matrix space contains a list of rooms, most of them are bridged to IRC.
  • Telegram - an additional place to discuss Nim in real-time. There is the official Telegram channel. Not bridged to IRC.
  • Stack Overflow - a popular Q/A site for programming related topics that includes posts about Nim.
  • GitHub Wiki - Misc user-contributed content.

Compiling

The compiler currently officially supports the following platform and architecture combinations:

  • Windows (Windows XP or greater) - x86 and x86_64
  • Linux (most, if not all, distributions) - x86, x86_64, ppc64 and armv6l
  • Mac OS X (10.04 or greater) - x86, x86_64, ppc64 and Apple Silicon (based on the ARM64 architecture)

More platforms are supported, however, they are not tested regularly and they may not be as stable as the above-listed platforms.

Compiling the Nim compiler is quite straightforward if you follow these steps:

First, the C source of an older version of the Nim compiler is needed to bootstrap the latest version because the Nim compiler itself is written in the Nim programming language. Those C sources are available within the nim-lang/csources_v2 repository.

Next, to build from source you will need:

  • A C compiler such as gcc 5.x/later or an alternative such as clang, Visual C++ or Intel C++. It is recommended to use gcc 5.x or later.
  • Either git or wget to download the needed source repositories.
  • The build-essential package when using gcc on Ubuntu (and likely other distros as well).
  • On Windows MinGW 4.3.0 (GCC 8.10) is the minimum recommended compiler.
  • Nim hosts a known working MinGW distribution:

Windows Note: Cygwin and similar POSIX runtime environments are not supported.

Then, if you are on a *nix system or Windows, the following steps should compile Nim from source using gcc, git, and the koch build tool.

Note: The following commands are for the development version of the compiler. For most users, installing the latest stable version is enough. Check out the installation instructions on the website to do so: https://nim-lang.org/install.html.

For package maintainers: see packaging guidelines.

First, get Nim from GitHub:

git clone https://github.com/nim-lang/Nim.git
cd Nim

Next, run the appropriate build shell script for your platform:

  • build_all.sh (Linux, Mac)
  • build_all.bat (Windows)

Finally, once you have finished the build steps (on Windows, Mac, or Linux) you should add the bin directory to your PATH.

See also bootstrapping the compiler.

See also reproducible builds.

Koch

koch is the build tool used to build various parts of Nim and to generate documentation and the website, among other things. The koch tool can also be used to run the Nim test suite.

Assuming that you added Nim's bin directory to your PATH, you may execute the tests using ./koch tests. The tests take a while to run, but you can run a subset of tests by specifying a category (for example ./koch tests cat async).

For more information on the koch build tool please see the documentation within the doc/koch.md file.

Nimble

nimble is Nim's package manager. To learn more about it, see the nim-lang/nimble repository.

Contributors

This project exists thanks to all the people who contribute.

Contributing

Backers on Open Collective Sponsors on Open Collective Setup a bounty via Bountysource Donate Bitcoins Open Source Helpers

See detailed contributing guidelines. We welcome all contributions to Nim regardless of how small or large they are. Everything from spelling fixes to new modules to be included in the standard library are welcomed and appreciated. Before you start contributing, you should familiarize yourself with the following repository structure:

  • bin/, build/ - these directories are empty, but are used when Nim is built.
  • compiler/ - the compiler source code. Also includes plugins within compiler/plugins.
  • nimsuggest - the nimsuggest tool that previously lived in the nim-lang/nimsuggest repository.
  • config/ - the configuration for the compiler and documentation generator.
  • doc/ - the documentation files in reStructuredText format.
  • lib/ - the standard library, including:
    • pure/ - modules in the standard library written in pure Nim.
    • impure/ - modules in the standard library written in pure Nim with dependencies written in other languages.
    • wrappers/ - modules that wrap dependencies written in other languages.
  • tests/ - contains categorized tests for the compiler and standard library.
  • tools/ - the tools including niminst (mostly invoked via koch).
  • koch.nim - the tool used to bootstrap Nim, generate C sources, build the website, and generate the documentation.

If you are not familiar with making a pull request using GitHub and/or git, please read this guide.

Ideally, you should make sure that all tests pass before submitting a pull request. However, if you are short on time, you can just run the tests specific to your changes by only running the corresponding categories of tests. CI verifies that all tests pass before allowing the pull request to be accepted, so only running specific tests should be harmless. Integration tests should go in tests/untestable.

If you're looking for ways to contribute, please look at our issue tracker. There are always plenty of issues labeled Easy; these should be a good starting point for an initial contribution to Nim.

You can also help with the development of Nim by making donations. Donations can be made using:

If you have any questions feel free to submit a question on the Nim forum, or via IRC on the #nim channel.

Backers

Thank you to all our backers! [Become a backer]

Sponsors

Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]

You can also see a list of all our sponsors/backers from various payment services on the sponsors page of our website.

License

The compiler and the standard library are licensed under the MIT license, except for some modules which explicitly state otherwise. As a result, you may use any compatible license (essentially any license) for your own programs developed with Nim. You are explicitly permitted to develop commercial applications using Nim.

Please read the copying.txt file for more details.

Copyright © 2006-2023 Andreas Rumpf, all rights reserved.

More Repositories

1

nimble

Package manager for the Nim programming language.
Nim
1,225
star
2

nimforum

Lightweight alternative to Discourse written in Nim
Nim
744
star
3

c2nim

c2nim is a tool to translate Ansi C code to Nim. The output is human-readable Nim code that is meant to be tweaked by hand before and after the translation process.
Nim
489
star
4

packages

List of packages for Nimble
Nim
439
star
5

ui

Beginnings of what might become Nim's official UI library.
Nim
237
star
6

sdl2

Nim wrapper for SDL 2.x
Nim
222
star
7

langserver

The Nim language server implementation (based on nimsuggest)
Nim
177
star
8

nim-mode

An emacs major mode for the Nim programming language
Emacs Lisp
134
star
9

RFCs

A repository for your Nim proposals.
134
star
10

fusion

Fusion is for now an idea about how to grow Nim's ecosystem without the pain points of more traditional approaches.
Nim
129
star
11

NimLime

Super Nim Plugin for Sublime Text 2/3
Nim
128
star
12

redis

Official redis wrapper for Nim.
Nim
123
star
13

bigints

BigInts for Nim
Nim
117
star
14

needed-libraries

This repository contains a list a needed libraries.
111
star
15

website

Code for the official Nim programming language website
HTML
109
star
16

opengl

An OpenGL wrapper for Nim
Nim
106
star
17

atlas

The Atlas Package cloner. It manages an isolated workspace that contains projects and dependencies.
Nim
91
star
18

nim-zmq

Nim ZMQ wrapper
Nim
62
star
19

threading

New atomics, thread primitives, atomic refcounting for --gc:arc/orc.
Nim
60
star
20

csources

The pre-generated C sources of the Nim compiler which aid in bootstrapping. This repository is archived because it's frozen, HEAD of csources can build Nim version 1 and any later version.
C
51
star
21

zip

zip wrapper for Nim
C
50
star
22

vscode-nim

A VS Code plugin for the Nim language
Nim
50
star
23

x11

x11 wrapper for Nim
Nim
47
star
24

iup

iup wrapper for Nim. Used to be part of the stdlib, now a Nimble package.
Nim
46
star
25

nightlies

Separate repository to trigger installer builds.
Shell
41
star
26

nimsuggest

idetools for the nim language
39
star
27

lua

Nim Wrapper to interface with the Lua interpreter
Nim
37
star
28

python

Nim wrapper for the Python 2 programming language
Nim
32
star
29

cairo

Nim Cairo wrapper.
Nim
31
star
30

gtk2

gtk2 wrapper for Nim
Nim
30
star
31

opencl

Low-level OpenCL wrapper for Nim
Nim
23
star
32

virus_checker

A virus checker for nim binaries
Nim
21
star
33

db_connector

Unified db connector in Nim
Nim
17
star
34

tcl

Nim Wrapper for the TCL programming language
Nim
16
star
35

csources_v1

CSources compiled from Nim version 1. Supports more CPU/OS combinations than the older csources repository.
C
15
star
36

niminst

EDIT: now archived, see https://github.com/nim-lang/Nim/issues/15946. niminst is a tool to generate an installer for a Nim program. Currently it can create an installer for Windows as well as installation/deinstallation scripts for UNIX. Some support for Linux' package management systems is also included.
Nim
15
star
37

assets

14
star
38

graphics

Graphics module for Nim. Currently based on SDL v1.2.
Nim
13
star
39

compilerdev

This repository contains a collection of documents about how to change/refactor the Nim compiler in order to make it faster, easier to maintain and have fewer bugs by a superior architecture and design. However, no every idea here will work out.
Nim
12
star
40

sat

A SAT solver written in Nim
Nim
12
star
41

punycode

Implements a representation of Unicode with the limited ASCII character subset in Nim.
Nim
12
star
42

wiki

11
star
43

checksums

Hash algorithms in Nim
Nim
11
star
44

standardjs

Wrappers for standardized JS modules.
Nim
10
star
45

ci_bench

A simple performance dashboard for the Nim language
Nim
10
star
46

smtp

SMTP client implementation, adapted from the Nim standard library
Nim
10
star
47

nimbot

The friendly, slightly sentient, Nim IRC bot.
Nim
10
star
48

pas2nim

pas2nim is a tool to translate Delphi/Pascal wrappers to Nim code.
Nim
10
star
49

mongo

MongoDB wrapper for Nim
Nim
9
star
50

dlls

Prebuilt DLLs and lib*.so files for Nim. Every DLL added here will also have at least a description about how we built it.
9
star
51

cgi

Helper procs for CGI applications in Nim.
Nim
8
star
52

dialogs

This module implements portable dialogs for Nim; the implementation builds on the GTK interface. On Windows, native dialogs are shown instead.
Nim
8
star
53

sdl1

SDL v1.2 wrapper for Nim.
Nim
7
star
54

oldwinapi

Old Win API wrapper for Nim.
Nim
7
star
55

csources_v2

CSources compiled from Nim version 2.
C
7
star
56

edutainment

Tasks related to making Nim more widely known such as video creation.
7
star
57

community_map

6
star
58

htmlparser

Parse a HTML document in Nim
Nim
6
star
59

graveyard

non-deprecated modules that have been removed from the Nim stdlib
Nim
5
star
60

security

Embargoed security issues that will be made public after a fix is made available. Use https://github.com/nim-lang/security/security
5
star
61

testspec

in progress
Nim
5
star
62

basic2d

Deprecated package from stdlib.
Nim
4
star
63

asyncftpclient

FTP client implementation, adapted from the Nim standard library
Nim
4
star
64

backport

backport requests
4
star
65

kickstart

Automated bootstrapping scripts for the Nim programming language compiler.
Shell
4
star
66

aporia-bin

Holds binaries for Aporia (mostly DLLs)
Shell
4
star
67

expat

Expat wrapper for Nim.
Nim
3
star
68

basic3d

Nim
3
star
69

joyent_http_parser

Nim
2
star
70

nim-buildbot

Buildbot Configuration and Script Files for Nim
Python
2
star
71

forum.nim-lang.org

Styles for forum.nim-lang.org. Powered by nimforum.
SCSS
2
star
72

libsvm_legacy

Nim
1
star