# Guide of Sup Here we'll show the usage of Sup in detail. + Command [config](#customize-your-cargo-metadata) + Command [new](#create-a-node-template) + Command [list](#list-substrate-dependencies-by-tag) + Command [update](#update-substrate-dependencies) ## Create a node-template First of all, download sup with `cargo install sup`, then you will get a binary named sup in your terminal, just like this: ```text $ sup sup 0.2.7 USAGE: sup [FLAGS] FLAGS: -h, --help Prints help information -p, --pull Updates the global registry -V, --version Prints version information SUBCOMMANDS: config Shows or edits the current config help Prints this message or the help of the given subcommand(s) list List registry source or tags new Create a new substrate node template update Update the target substrate project ``` If everything works fine, let's create a `node-template` using sup: ``` $ sup new -h sup-new 0.2.7 Create a new substrate node template USAGE: sup new [FLAGS] [OPTIONS] FLAGS: -h, --help Prints help information -s, --skip Skip rust toolchain check -V, --version Prints version information OPTIONS: -t, --tag Specify a tag to generate [default: v2.0.0] ARGS: Project path $ sup new cydonia Created node-template "cydonia" succeed! $ tree cydonia cydonia ├── Cargo.toml ├── LICENSE ├── README.md ├── node │   ├── Cargo.lock │   ├── Cargo.toml │   ├── build.rs │   └── src │   ├── chain_spec.rs │   ├── cli.rs │   ├── command.rs │   ├── lib.rs │   ├── main.rs │   ├── rpc.rs │   └── service.rs ├── pallets │   └── template │   ├── Cargo.toml │   ├── README.md │   └── src │   ├── lib.rs │   ├── mock.rs │   └── tests.rs ├── runtime │   ├── Cargo.toml │   ├── build.rs │   └── src │   └── lib.rs └── scripts └── init.sh 8 directories, 22 files ``` Deal, our substrate node-template has been created! ## Customize your cargo metadata The config file of sup is located at `~/.sup/config.toml`, by default, it's like: ```toml [metadata] authors = ["clearloop "] version = "0.1.0" license = "MIT" [node] registry = "https://github.com/paritytech/substrate.git" ``` You can modify the registry by the shortcut `sup config set -r`, ``` sup-config 0.2.7 Shows or edits the current config USAGE: sup config FLAGS: -h, --help Prints help information -V, --version Prints version information SUBCOMMANDS: edit Edits the current config help Prints this message or the help of the given subcommand(s) list Lists the current config set Sets config field ``` All info in metadata will invoke or replace into the node-template sup generates, And the `registry` determines where the context of our node-template comes from. ## list substrate dependencies by tag Sometimes, we need to take a quick look at what dependencies the official substrate registry offers, can `sup` help reach this? For example, now we want to find our how many `frame` the substrate registry offers. ``` $ sup list sup-list 0.2.7 List registry source or tags USAGE: sup list FLAGS: -h, --help Prints help information -V, --version Prints version information SUBCOMMANDS: help Prints this message or the help of the given subcommand(s) source List source crates of registry tag List tags of registry $ sup list source | grep frame frame-benchmarking - 2.0.0 frame-benchmarking-cli - 2.0.0 frame-executive - 2.0.0 frame-metadata - 12.0.0 frame-support - 2.0.0 frame-support-procedural - 2.0.0 frame-support-procedural-tools - 2.0.0 frame-support-procedural-tools-derive - 2.0.0 frame-support-test - 2.0.0 frame-system - 2.0.0 frame-system-benchmarking - 2.0.0 frame-system-rpc-runtime-api - 2.0.0 substrate-frame-cli - 2.0.0 substrate-frame-rpc-support - 2.0.0 substrate-frame-rpc-system - 2.0.0 ``` ## Update substrate dependencies Now we're going to switch a tag for our substrate project. ``` $ sup list tag polkadot-0-8-25-dep v2.0.0 v2.0.0-rc6 v2.0.0-rc5+2 v2.0.0-rc5+1 v2.0.0-rc5 v2.0.0-rc4 v2.0.0-rc3 v2.0.0-rc2 v2.0.0-rc2+2 $ sup update -h 𝝺 ./target/debug/sup update -h sup-update 0.2.7 Update the target substrate project USAGE: sup update [OPTIONS] FLAGS: -h, --help Prints help information -V, --version Prints version information OPTIONS: -p, --project Project path [default: .] -t, --tag Registry tag [default: ] $ sup update -t v2.0.0-rc1 Upgrade "cydonia" succeed! ``` It works, we can use `switch` command to upgrade or downgrade our substrate dependencies, don't forget the `-t` tag.