Cargo and Dependencies

To initialize a new project, run cargo new:

$ cargo new rusty_snake

Cargo generates a new folder called rusty_snake. cd into the directory to see what cargo generated.

Open the file cargo.toml in the editor of your choice. This is called a manifest, and it contains all of the metadata that Cargo needs to compile your project.

It should look like this:


fn main() {
name = "rusty-snake"
version = "0.1.0"
authors = ["Your Name"]
edition = "2018"

See more keys and their definitions at



To use SDL2 in rust, we need to add the sdl2 crate as a dependency.

Add the following line in the [dependencies] section: sdl2 = "0.30.0"

open src/

Substitute the content of the file with the following code:

// Dependencies go here

// this function initializes the canvas
fn init(width: u32, height: u32) -> (Canvas<Window>, EventPump) {
    let sdl_context = sdl2::init().unwrap();
    let video_subsystem =;

    let window = video_subsystem
        .window("Game", width + 1, height + 1)

    let mut canvas = window.into_canvas().present_vsync().build().unwrap();

    canvas.set_draw_color(Color::RGB(0, 0, 0));

    let event_pump = sdl_context.event_pump().unwrap();
    (canvas, event_pump)

// this is main
fn main() {
    println!("Hello, world!");

Right in the beginning of the file, in the section // Dependencies go here, add the following lines:

fn main() {
use sdl2::video::Window;
use sdl2::pixels::Color;
use sdl2::render::Canvas;
use sdl2::EventPump;

In your terminal, go into the folder /rusty-snake, and run the command cargo run. What do you see? To get rid of this warning, we need to call fn init in main().