**nidium**
[![Build Status](https://travis-ci.org/nidium/Nidium.svg?branch=master)](https://travis-ci.org/nidium/Nidium)
nidium is an ongoing effort for a general purpose rendering engine to create apps, games that run on both desktop and on mobile. It also offers a way to create server-side application through nidium-server which shares all the non gfx related code base.
nidium helps you create graphical software with Javascript. It's not a NodeJS, QT, Chromium, or WebKit derivate. It has been designed from scratch and has a small codebase written in C++.
It leverages the combination of Skia Graphics from Google, and Mozilla's JavaScript Engine (SpiderMonkey) together with many more awesome librairies.
It supports various common well known API such as :
- WebGL
- Canvas 2D Context
- WebSocket (client & server)
- Module loading (require())
And some other non standard :
- UDP/TCP Socket (client & server)
- HTTP (client & server)
- File access
- Threading
- Threaded Audio
- Videos
- Fragment shader on 2D canvas
- Local Key/Value database
It can seamlessly run various Javascript libraries like Three.JS, PixiJS, Phaser (and probably a lot more without much modification).
To put it simply, nidium aims to expose something close to the web technology on an easily hackable environment.
We're not trying to copy the Web. We want a sandbox where you can experiment new things and not being dependent to blink/webkit (e.g. like Electron does). This allow us to add various optimization and non standard things. Moreover, nidium is small (nidium statically linked with all of its dependencies is about 20 MB).
Also, nidium aim to target a large spectre of device and our short term goal is to run it on low power devices (mobile, rpi, ...)
BTW, it uses SpiderMonkey as its JavaScript engine, and we believe that Mozilla needs some love too!
nidium is still work in progress and misses several key features :
- App distribution (create actual app out of nidium)
- Microsoft Windows support
- A good documentation
nidium ships with its own layout engine. That is, every element has its own memory buffer (retained mode), pretty similar to HTML elements.
The layout engine allows several "layout" operations to be made on each element (relative position, opacity, drag'n'drop, margin, scrolling, overflow, and so on).
It also implements a simple HTML DOM compatility layer and is mature enough to run a MVVM framework like Vue.js and probably React with little to no effort.
nidium uses its own high-performance library (libapenetwork) which handles all the networking operations in a non-blocking, async way.
You can download nidium binaries for Linux and OSX from the download page.
To build nidium you need at least 5.7GB of disk space. A build from scratch could take 30 to 90 minutes, depending of the speed of your computer.
On a debian based system, a few commands will get you started.
$ apt-get install libpci-dev python2.7 git make patch clang pkg-config libgtk2.0-dev libgtk-3-dev mesa-common-dev libglu1-mesa-dev libosmesa6-dev yasm libasound2 libasound2-dev libbz2-1.0
$ git clone https://github.com/nidium/NidiumTools.git
$ git clone --recursive https://github.com/nidium/Nidium.git
$ export PYTHONPATH=$(pwd)/NidiumTools/src
$ cd Nidium
$ ./configure_frontend
$ ./bin/nidium
We strive to have an exellent documentation, both for our getting started guide and for the API Reference.
Feel free to report any bug or issue to us.
If you feel that something is not clear, that could be a issue worth reporting and solving.
Copyright 2016 Nidium Inc. All rights reserved. Use of this source code is governed by a MIT license that can be found in the LICENSE file.