Sui Move CLI
The Sui CLI move
command provides several commands for working with Move source code. A typical usage of sui move
is to compile and test the Move code, or to generate a new Move project by using sui move new project_name
, which creates the needed directories and the Move.toml
file.
Check Sui CLI installation
Before you can use the Sui CLI, you must install it. To check if the CLI exists on your system, open a terminal or console and type the following command:
$ sui --version
If the terminal or console responds with a version number, you already have the Sui CLI installed.
If the command is not found, follow the instructions in Install Sui to get the Sui CLI on your system.
Commands
$ sui move --help
Tool to build and test Move applications
Usage: sui move [OPTIONS] <COMMAND>
Commands:
build
coverage Inspect test coverage for this package. A previous test run with the
`--coverage` flag must have previously been run
disassemble
manage-package Record addresses (Object IDs) for where this package is published on chain
(this command sets variables in Move.lock)
migrate Migrate to Move 2024 for the package at `path`. If no path is provided
defaults to current directory
new Create a new Move package with name `name` at `path`. If `path` is not
provided the package will be created in the directory `name`
test Run Move unit tests in this package
summary Generate a serialized summary of a Move package (e.g., functions, structs,
annotations, etc.)
help Print this message or the help of the given subcommand(s)
Options:
-p, --path <PACKAGE_PATH>
Path to a package which the command should be run with respect to
--client.config <CONFIG>
Sets the file storing the state of our user accounts (an empty one will be created if
missing)
--client.env <ENV>
The Sui environment to use. This must be present in the current config file
-d, --dev
Compile in 'dev' mode. The 'dev-addresses' and 'dev-dependencies' fields will be used if
this flag is set. This flag is useful for development of packages that expose named
addresses that are not set to a specific value
--test
Compile in 'test' mode. The 'dev-addresses' and 'dev-dependencies' fields will be used
along with any code in the 'tests' directory
--doc
Generate documentation for packages
--disassemble
Save disassembly for generated bytecode along with bytecode maps (source maps for
disassembeld bytecode)
--install-dir <INSTALL_DIR>
Installation directory for compiled artifacts. Defaults to current directory
--force
Force recompilation of all packages
--fetch-deps-only
Only fetch dependency repos to MOVE_HOME
--skip-fetch-latest-git-deps
Skip fetching latest git dependencies
--default-move-flavor <DEFAULT_FLAVOR>
Default flavor for move compilation, if not specified in the package's config
--default-move-edition <DEFAULT_EDITION>
Default edition for move compilation, if not specified in the package's config
--dependencies-are-root
If set, dependency packages are treated as root packages. Notably, this will remove
warning suppression in dependency packages
--silence-warnings
If set, ignore any compiler warnings
--warnings-are-errors
If set, warnings become errors
--json-errors
If set, reports errors at JSON
--no-lint
If `true`, disable linters
--lint
If `true`, enables extra linters
--mode <MODE>
Arbitrary mode -- this will be used to enable or filter user-defined `#[mode(<MODE>)]`
annodations during compiltaion
-h, --help
Print help
-V, --version
Print version
Examples
The following examples demonstrate some of the most often used commands.
Create a new Move project
To create a new Move project that automatically adds the necessary dependencies in a Move.toml
file, run sui move new [<PROJECT-NAME>]
.
$ sui move new smart_contract_test
$ ls -l smart_contract_test
Move.toml
Sources
Display the contents of Move.toml file.
$ cat smart_contract_test/Move.toml
[package]
name = "smart_contract_test"
version = "0.0.1"
[dependencies]
Sui = { git = "https://github.com/MystenLabs/sui.git", subdir = "crates/sui-framework/packages/sui-framework", rev = "framework/testnet" }
[addresses]
smart_contract_test = "0x0"
Build a Move project
Use sui move build
at the root of your Move project to build the package.
$ sui move build
UPDATING GIT DEPENDENCY https://github.com/MystenLabs/sui.git
INCLUDING DEPENDENCY Sui
INCLUDING DEPENDENCY MoveStdlib
BUILDING smart_contract_test
Run tests in a Move project
Use sui move test
to run the tests in a Move package.
$ sui move test
UPDATING GIT DEPENDENCY https://github.com/MystenLabs/sui.git
INCLUDING DEPENDENCY Sui
INCLUDING DEPENDENCY MoveStdlib
BUILDING smart_contract_test
Running Move unit tests
Test result: OK. Total tests: 0; passed: 0; failed: 0
Get test coverage for a module
This command currently only works on debug builds of the CLI. Please build the CLI from source to use it.
This example uses first_package
Move package.
To get a summary of the test coverage, you must first run the sui move test --coverage
command, and then the sui move coverage summary --test
to get a summary of the test coverage in the example project.
$ sui move test --coverage
INCLUDING DEPENDENCY Sui
INCLUDING DEPENDENCY MoveStdlib
BUILDING first_package
Running Move unit tests
[ PASS ] 0x0::example::test_module_init
[ PASS ] 0x0::example::test_sword_transactions
Test result: OK. Total tests: 2; passed: 2; failed: 0
$ sui move coverage summary --test
+-------------------------+
| Move Coverage Summary |
+-------------------------+
Module 0000000000000000000000000000000000000000000000000000000000000000::example
>>> % Module coverage: 92.81
+-------------------------+
| % Move Coverage: 92.81 |
+-------------------------+
Help
Each command has its own help section. For example:
$ sui move build --help
Usage: sui move build [OPTIONS]
Options:
-p, --path <PACKAGE_PATH>
Path to a package which the command should be run with respect to
--with-unpublished-dependencies
Include the contents of packages in dependencies that haven't been published (only
relevant when dumping bytecode as base64)
--dump-bytecode-as-base64
Whether we are printing in base64
--ignore-chain
[Mainly for testing, not recommended for production] Don't specialize the package to the
active chain when dumping bytecode as Base64. This allows building to proceed without a
network connection or active environment, but it will not be able to automatically
determine the addresses of its dependencies
-d, --dev
Compile in 'dev' mode. The 'dev-addresses' and 'dev-dependencies' fields will be used if
this flag is set. This flag is useful for development of packages that expose named
addresses that are not set to a specific value
--generate-struct-layouts
If true, generate struct layout schemas for all struct types passed into `entry` functions
declared by modules in this package These layout schemas can be consumed by clients (e.g.,
the TypeScript SDK) to enable serialization/deserialization of transaction arguments and
events
--test
Compile in 'test' mode. The 'dev-addresses' and 'dev-dependencies' fields will be used
along with any code in the 'tests' directory
--doc
Generate documentation for packages
--disassemble
Save disassembly for generated bytecode along with bytecode maps (source maps for
disassembeld bytecode)
--install-dir <INSTALL_DIR>
Installation directory for compiled artifacts. Defaults to current directory
--force
Force recompilation of all packages
--fetch-deps-only
Only fetch dependency repos to MOVE_HOME
--skip-fetch-latest-git-deps
Skip fetching latest git dependencies
--default-move-flavor <DEFAULT_FLAVOR>
Default flavor for move compilation, if not specified in the package's config
--default-move-edition <DEFAULT_EDITION>
Default edition for move compilation, if not specified in the package's config
--dependencies-are-root
If set, dependency packages are treated as root packages. Notably, this will remove
warning suppression in dependency packages
--silence-warnings
If set, ignore any compiler warnings
--warnings-are-errors
If set, warnings become errors
--json-errors
If set, reports errors at JSON
--no-lint
If `true`, disable linters
--lint
If `true`, enables extra linters
--mode <MODE>
Arbitrary mode -- this will be used to enable or filter user-defined `#[mode(<MODE>)]`
annodations during compiltaion
-h, --help
Print help
-V, --version
Print version