# Ignite CLI
In this section, you will:
- Install the Ignite CLI.
- Scaffold a blockchain.
- Use the CLI.
- Start the Ignite UI server.
- Send your first message.
You can follow a hands-on exercise for Ignite CLI in the sections that follow this introduction.
The Cosmos SDK provides the building blocks for a complete CometBFT blockchain, which implements the Inter-Blockchain Communication Protocol (IBC). The BaseApp of the Cosmos SDK assembles these building blocks and provides a fully-running blockchain. All there is left to do for the specific blockchain application is to create specific modules and integrate them with BaseApp to make the application your own.
Ignite CLI assists with scaffolding modules and integrating them with BaseApp. Ignite CLI is a command-line tool that writes code files and updates them when instructed to do so. If you come from an on Rails world, the concept will look familiar to you.
Ignite CLI also handles some compilation, runs a local blockchain node, and helps you with other tasks.
Want to dedicate some time to dive deeper into installing Ignite CLI? Learn how to install Ignite CLI in the Ignite CLI Developer Guide (opens new window).
If you do not want to install Go and Ignite on your computer, look at the section about Docker below to facilitate your handling of specific versions and platforms.
This entire exercise was built using the Ignite CLI version 0.22.1. To install it at the command line:
Or if you install it in a Linux VM:
You can verify the version of Ignite CLI you have once it is installed:
This prints its version:
This entire exercise was built using the Ignite CLI version noted above. Using a newer version could work, but you might run into compatibility issues if you clone any code made with this version of Ignite CLI and then try to continue the project with your version of Ignite CLI.
If you need to install the latest version of Ignite CLI, use:
When you then run
ignite version, it prints its version:
If you'd like to upgrade an existing project to the latest version of Ignite CLI, you can follow the Ignite CLI migration documentation (opens new window).
You can also just type
ignite to see the offered commands:
# Prepare Docker
First, you need to create a
Dockerfile that details the same preparation steps. Save this as
Note that the linked code contains more lines than shown above. Because you do not yet have a
go.mod file, stick to the lines in the quoted code above for now.
Next you need to create the Docker image:
You can confirm the installed version of Ignite:
It should return, among other things:
That is the bare minimum required to be able to run the commands that come on this page. If at a later stage you want to create a persistent container named
checkers, you can do:
# Your chain
Start by scaffolding a basic chain called
checkers that you will place under the GitHub path
github.com/alice/checkers is the name of the Golang module by which this project will be known. If you own the
github.com/alice path, you can even eventually host it there and have other people use your project as a module.
Your choice of module name (
github.com/alice/checkers, or any other name) deserves careful consideration. You will create a Cosmos SDK module, Protobuf messages, and CosmJS files which all reference this choice in their own ways. In particular:
- Your module name should be unique, meaning unique in the world, to avoid confusion.
- Your Protobuf messages will be identified by their packages, such as
- If you start your project with
alice/checkersbut later use the linked solutions, which use
b9lab/checkers(opens new window), you will encounter unexpected (though fixable) surprises.
For the sake of good support, the versions of all software used are communicated as encountered throughout this course. It is natural that after the writing of the course material some version changes will appear, and it may occur that something breaks. Instead of using different versions of the software from the ones in the course, please look at the following list, which might fix problems you are running into. Otherwise, use Docker as explained on this page.
If all else fails, please post the issue you face on Discord.
If you work with a machine using M1 architecture, the Docker image should allow you to run with your specific CPU architecture. However, if you encounter too many problems you can try the following:
If you are on Mac M1 with an aggressive anti-virus, it may prevent you from running Ignite, perhaps even within Docker. To circumvent this, you can recreate your Docker image for it to run within Docker with the Intel CPU emulation, like so:
Because of the emulation, your performance would be affected, but at least the anti-virus would not kill your process.
Building Errors during
If you work with Go 1.18, you may need to install the following:
The scaffolding takes some time as it generates the source code for a fully functional, ready-to-use blockchain. Ignite CLI creates a folder named
checkers and scaffolds the chain inside it.
checkers folder contains several generated files and directories that make up the structure of a Cosmos SDK blockchain. It contains the following folders:
app(opens new window): a folder for the application.
cmd(opens new window): a folder for the command-line interface commands.
proto(opens new window): a folder for the Protobuf objects definitions.
vue(opens new window): a folder for the auto-generated UI.
x(opens new window): a folder for all your modules, in particular
If you look at the code that Ignite CLI generates, for instance in
./x/checkers/module.go, you will often see comments like the following:
Do not remove or replace any lines like these in your code as they provide markers for Ignite CLI on where to add further code when instructed to do so. For the same reason, do not rename or move any file that contains such a line.
Go to the
checkers folder and run:
ignite chain serve command downloads (a lot of) dependencies and compiles the source code into a binary called
checkersd. This command:
- Installs all dependencies.
- Builds Protobuf files.
- Compiles the application.
- Initializes the node with a single validator.
- Adds accounts.
If you use Docker with throwaway containers (
run --rm) you will notice that it downloads the Go dependencies every time. To increase your productivity, you can have the dependencies be downloaded in the Docker image itself:
Dockerfile-ubuntufile into your checkers project, next to the
Add the following lines to
Recreate the image:
chain serve command completes, you have a local testnet with a running node. What about the added accounts? Take a look:
In this file you can set the accounts, the accounts' starting balances, and the validator. You can also let Ignite CLI generate a client and a faucet. The faucet gives away five
token and 100,000
stake tokens belonging to Bob each time it is called.
You can observe the endpoints of the blockchain in the output of the
ignite chain serve command:
Ignite CLI can detect any change to the source code. When it does, it immediately rebuilds the binaries before restarting the blockchain and keeping the state.
# Interact via the CLI
You can already interact with your running chain. With the chain running in its shell, open another shell and try:
In there you can see a hint of liveness:
"latest_block_height":"13". You can use this one-liner to better see the information:
You can learn a lot by going through the possibilities with:
And so on.
# Your GUI
Ignite CLI also scaffolded a frontend. Boot it up by using the commands provided in the
README.md file of the
vue folder. Let the chain run in its own process and open a new terminal window in your
checkers folder. In this terminal, execute:
--host flag, which is forwarded to the underlying
vite command thanks to the
-- separator. This is necessary if you run the frontend within Docker.
Navigate to localhost:3000 (opens new window), or to whichever address was listed when running
dev. The first load may take a few seconds. On the client-side, from the top right you can connect to the page via Keplr if you are on the Chrome browser. You should see something like this:
If you want Keplr to separate your mainnet keys and tokens from those you use for tests, have a look at Google Chrome's profiles (opens new window).
Your account is connected but has no balance. This is a good opportunity to use the faucet:
- Head to http://localhost:4500 (opens new window)
- Expand the POST / Send tokens to receiver account box.
- Click the Try it out button.
- Paste your address in the JSON at
- Click the big blue Execute button.
When you return to the main page, you should see your new assets:
From here, you can send tokens around. You can also ask for
"10stake" from the faucet, if you recall the name of the tokens from
There is not much else to do. After all, this is the Cosmos BaseApp. Ignite will continue scaffolding this GUI as your checkers project advances.
Keplr is also able to import Alice and Bob (i.e. the accounts that Ignite created). Use Keplr's +Add account feature. This is a convenient way to bypass having to use the faucet. You will need to use Alice's mnemonic, which you can find in the output of the
ignite chain serve command.
If you do not see the mnemonic, that is because the mnemonic was shown to you the first time you ran the command and you did not copy it. If so, reset with
ignite chain serve --reset-once.
Now you should see the balance of Alice's account and can act on her behalf.
Make a Git commit before you create a new
message. In fact, it is generally recommended to make a Git commit before running any
ignite scaffold command. A Git commit protects the work you have done so far and makes it easier to see what the
scaffold command added. It also makes it easy to just revert all changes if you are unsatisfied and want to run a different
# Your first message
After your Git commit, and having stopped running Ignite, create a simple
ignite scaffold message command accepts a message name (here
createPost) as the first argument, and a list of fields for the message (here
body), which are
string fields unless mentioned otherwise.
A message is scaffolded in a module with a name that matches the name of the project by default. It is named
checkers in this case. Alternatively you could have used
--module checkers. Learn more about your options with:
You can see a list of files that were created or modified by the
scaffold message command in the Terminal output:
modify was made possible thanks to the lines like
// this line is used by starport scaffolding # 1 that you did not remove.
So where is everything? You can find the root definition of your new message in:
Ignite CLI also wired a new command into your chain's CLI in:
Ignite CLI scaffolded GUI elements relating to your message with a Vue.js frontend framework. You can, for instance, start with this function in:
When you are done with this exercise you can stop Ignite's
Want another demonstration? In the following video Denis Fadeev, creator of and core contributor to Ignite CLI, explains how to create and interact with a Cosmos SDK blockchain using just a few basic commands, then provides a real-time demonstration of Ignite CLI in action.
To summarize, this section has explored:
- How to install Ignite CLI, a command-line tool that writes code files and updates them when instructed, handles some compilation, runs a local blockchain node, and assists with other tasks.
- How to scaffold a basic blockchain, with the suggested best practice not to replace lines with code markers indicating where to add further code on later instruction, nor to rename or move any file containing such a line.
- How to interact via the CLI to demonstrate that your chain is live when running in its shell.
- How to boot up the frontend that Ignite CLI has created by using a terminal window and navigating to the localhost on your browser.
- How to test the base functionality of your chain by creating a simple message.
You can remove the
MsgCreatePost message as it is not part of the guided exercise in the next sections. You can clean it all by running: