nannou 0.1.0

A Creative Coding Framework for Rust.
Documentation

### A Quick Note

This project is brand new and there is a lot of work to be done. Feel free to
help out!

# nannou [![Build Status]https://travis-ci.org/MindBuffer/nannou.svg?branch=master]https://travis-ci.org/MindBuffer/nannou [![Crates.io]https://img.shields.io/crates/v/nannou.svg]https://crates.io/crates/nannou [![Crates.io]https://img.shields.io/crates/l/nannou.svg]https://github.com/MindBuffer/nannou/blob/master/LICENSE-MIT [![docs.rs]https://docs.rs/nannou/badge.svg]https://docs.rs/nannou/


An open-source, creative-coding toolkit for Rust.

**nannou** is a collection of code aimed at making it easy for artists to
express themselves with simple, fast, reliable, portable code.  Whether working
on a 12-month laser installation or a 5 minute sketch, this framework aims to
give artists easy access to the tools they need.

The project was started out of a desire for a creative coding framework inspired
by Processing, OpenFrameworks and Cinder, but for Rust. <sup>Named after
[this](https://www.youtube.com/watch?v=A-Pkx37kYf4)</sup>

## Getting Started

- See what the code looks like by checking out [the examples].
- If you're new to Rust, maybe check out [the official
  book](https://doc.rust-lang.org/book/)?
- Start your own project with:
  ```
  cargo new my_project
  cd my_project
  ```
- Add `nannou = "0.1"` under the `[dependencies]` line in your Cargo.toml.
  This is everything you need to use the framework in your own project or
  sketch. Rust's package manager *cargo* will automatically download and install
  everything you need!

## Goals

- Provide easy, cross-platform access to the things that artists need:
    - [ ] Graphics (via [glium]https://crates.io/crates/glium)
    - [ ] Audio (via [CPAL]https://crates.io/crates/cpal)
    - [ ] Video
    - [ ] Windowing (via [winit]https://crates.io/crates/winit and
      [glutin]https://crates.io/crates/glutin)
    - [ ] Geometry
    - [ ] GUI
    - [ ] OSC (via [rosc]https://crates.io/crates/rosc)
    - [ ] Lighting & Lasers (DMX, ILDA)
- Use only pure-rust libraries. New users should require nothing more than
  `cargo add nannou` and `cargo build` to get going.
- No `unsafe` code with the exception of bindings to operating systems or
  hardware APIs.
- Remove the need to decide between lots of different backends that provide
  access to the same hardware. Instead, we want to focus on a specific set of
  backends and make sure that they work well.

## Why Rust?

Rust is a language that is both highly expressive and blazingly fast. Here are
some of the reasons why we choose to use it:

- **Super fast**, as in [C and
  C++ fast](https://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=rust&lang2=gpp).
- [**A standard package manager**]https://crates.io/ that makes it very
  easy to handle dependencies and share your own projects in seconds.
- **Highly portable.** Easily build for MacOS, Linux, Windows, Android, iOS and
  [so many others]https://forge.rust-lang.org/platform-support.html.
- **No header files** (and no weird linking errors).
- **Sum Types and Pattern Matching** (and no `NULL`).
- **Local type inference**. Only write types where it matters, no need to repeat
  yourself.
- A more modern, **Ć’unctional and expressive style**.
- **Memory safe and data-race-free!** Get your ideas down without the fear of
  creating pointer spaghetti or segfault time-sinks.
- **Immutability by default.** Easily distinguish between variables that can
  change and those that can't at a glance.
- **Module system** resulting in very clean and concise name spaces.
- One of the kindest internet communities we've come across (please visit
  mozilla's #rust or /r/rust if you're starting out and need any pointers)