This is a note where I write what I have learned so far in Internet Computer Protocol.


What I did is just cloning the repository

git clone --branch=0.20.1 --depth=1 dfinity-sdk

and just compile the sdk away.

pushd dfinity-sdk
cargo build --release -j2

I don’t need all that much cores.

What are those git flags?

To explain a bit why there is --branch and --depth, I added --depth=1 so I have a shallow-copy of the repository at depth 1. I also added --branch=0.20.1 to point to a branch or tag. Here, I chose tag 0.20.1. This avoids unnecessary fetching of data of about possibly 1k+ commits.

This also avoids me wasting huge amounts of space when I only want one specific history of the repository.

Following over the tutorial

Since I use Rust, I guess I should use the Rust SDK. Although, I am kind of interested of using Motoko but for now, let’s put it aside.

The documentation is informative — Okay, I will begin with a simple Hello World.

But I have waited a bit for this to compile.

And yes, I made a mistake okay? Because I copied an untagged branch or commit, hence, the copy.

Now that it was compiled, I can run dfx new hello-icp.


  • Rust
  • No frontend canister
  • No additional features

Oh that’s a cute logo right there.

Checking the newly created directory

So it seems like I found some things here in the hello-icp directory.

├── Cargo.lock
├── Cargo.toml
├── dfx.json
└── src
   └── hello-icp-backend
      ├── Cargo.toml
      ├── hello-icp-backend.did
      └── src

It seems it is a newly created Rust project that follows a workspace configuration as shown from the TOML file

members = [
resolver = "2"

I am going to check what’s the contents of the members. Specifically, I am just going to check the Cargo.toml file.

name = "hello-icp-backend"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at
crate-type = ["cdylib"]
candid = "0.10"
ic-cdk = "0.13"
ic-cdk-timers = "0.7" # Feel free to remove this dependency if you don't need timers

Aha! I guess dfx is a good tool to setup a new project after all. But maybe in the future I don’t need it but it’s still a good idea that this tool exists.

Seems it only has a hello world because the library crate only has

fn greet(name: String) -> String {
    format!("Hello, {}!", name)

But I haven’t tested that yet. I will check tomorrow, it seems the documentation made a mistake or something because dfx deploy does not work because the setting up a new project is missing the part that it does need an identity created before deployment.

I will sleep for now and update this the next day.