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. Named after this.
A Quick Note
This project is brand new and there is a lot of work to be done. Feel free to help out!
Contents
Goals
Nannou aims to provide easy, cross-platform access to the things that artists need:
- Windowing & Events via winit.
- Audio via CPAL. Input and output streams. Duplex are not yet supported.
- Video input, playback and processing (would love suggestions and ideas).
- GUI via conrod. May switch to a custom nannou solution in the future.
- Geometry with functions and iterators for producing vertices and indices:
- 1D -
Scalar
,Range
. - 2D -
Rect
,Line
,Ellipse
,Polygon
,Polyline
,Quad
,Tri
. - 3D -
Cuboid
. - 3D TODO -
Ellipsoid
,Cube
, Prisms, Pyramids, *Hedrons, etc. - Vertex & index iterators.
- Graph for composing geometry.
- 1D -
- Graphics currently via glium, will switch to vulkano soon:
- Protocols:
- OSC - Open Sound Control.
- CITP - Controller Interface Transport Protocol (network implementation is in progress).
- Ether-Dream Laser DAC protocol and network implementation.
- DMX via sACN - commonly used for lighting and effects.
- Serial - commonly used for interfacing with LEDs and other hardware.
- MIDI - Musical Instrument Digital Interface.
- UDP via std.
- TCP streams and listeners via std.
- Device & I/O stream APIs:
- Audio.
- Video.
- Lasers.
- Lights.
- LEDs.
- Graphical Node Graph via gantz.
- GUI Editor.
Nannou aims to use only pure-rust libraries. New users should require
nothing more than cargo build
to get going. Falling back to C-bindings will be
considered as a temporary solution in the case that there are no Rust
alternatives yet in development. We prefer to drive forward development of less
mature rust-alternatives than depend on bindings to C code. This should make it
easier for nannou users to become nannou contributors as they do not have to
learn a second language in order to contribute upstream.
Nannou will not contain unsafe
code with the exception of bindings to
operating systems or hardware APIs if necessary.
Nannou wishes to 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.
- A standard package manager 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.
- 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)
Getting Started
Nannou is a library written for the Rust programming language. Thus, the first step step is to install Rust!
Install Rust
To install Rust, open up your terminal, copy the text below, paste it into your terminal and hit enter.
|
Please see this link if you would like more information on the Rust installation process.
IDE Setup
VS Code
For new Rust users we recommend using VS-Code as your editor and IDE for Nannou development. Currently it seems to have the best support for the Rust language including syntax highlighting, auto-complete, code formatting, etc. It also comes with an integrated unix terminal and file navigation system. Below are the steps we recommend for getting started with Nannou development using VS-Code.
- Download VS-Code for your OS.
- Install RLS (the Rust Language Server) plugin for VS-Code.
- Click on the 'view' menu and select 'integrated terminal'.
Other IDEs
Although we recommend VS-Code, it is also possible to configure the following development environments.
- Sublime Text
- Atom
- Intellij IDEA
- Vim
- Emacs
- Visual Studio
- Eclipse (No longer maintained)
Nannou Examples
The easiest way to get familiar with Nannou is to explore the examples. To get the examples we just need to clone this repository.
git clone https://github.com/nannou-org/nannou
Change the current directory to nannou
.
cd nannou
Run the example using cargo.
cargo run --release --example simple_window
The --release
flag means we want to build with optimisations enabled.
To run any of the other examples, replace simple_window
with the name of the
desired example.
More Resources
- Official Rust Book
- Rust by Example
- Porting C++ projects to Rust GitHub Book
- Udemy Rust Course (paid)
- Nannou Website
- Nannou Forum
- #rust-beginners IRC
License
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contributions
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.