# Set up !ink environment.

Ink! is a Rust library developed by Parity, that explicitly targets smart contract development for Substrate’s `pallet-contracts`.&#x20;

There are multiple reasons Rust are the best programming language for smart contracts; that's why ink! chooses not to invent a new programming language, but rather adapt a subset of Rust.&#x20;

Complete detail of ink! is [here](https://use.ink/why-rust-for-smart-contracts)

### ink! CLI

The first tool we will be installing is [`cargo-contract`](https://github.com/paritytech/cargo-contract), a CLI tool for helping setting up and managing WebAssembly smart contracts written with ink!.

You can find source code [here on GitHub](https://github.com/paritytech/cargo-contract) and [here on crates.io](https://crates.io/crates/cargo-contract).

Step 1: `rustup component add rust-src`

Step 2: `cargo install cargo-contract --force --locked --version 3.0.1`

Please note, our pallet-contracts support version <= 3.0.1
