A live reload development server for Motoko smart contracts.
mo-dev is a flexible command-line tool for speeding up your Motoko development workflow.
Get started with a full-stack Vite + React + Motoko project directly in your browser:
Run the following command (requires Node.js ≥ 16):
npm i -g mo-devNote: standalone
mo-devbinaries are also available as GitHub releases.
Once installed, view the available command-line options by passing the --help flag:
mo-dev --helpCheck out the Vite + React + Motoko starter project for an example of how to integrate mo-dev into a modern full-stack webapp.
Regenerate type declarations on Motoko file change (--generate or -g):
mo-dev --generateDeploy canisters on Motoko file change (--deploy or -d):
mo-dev --deployAutomatically respond "yes" to reinstall prompts (--yes or -y; may clear canister state):
mo-dev --deploy -yRun unit tests (*.test.mo) on Motoko file change (--test or -t):
mo-dev --testRun an arbitrary command on Motoko file change (--exec or -x):
mo-dev --exec 'npm run my-reload-script'Specify the working directory (--cwd or -C; should contain a dfx.json file):
mo-dev --cwd path/to/dfx_projectOnly run the dev server for specific canisters (--canister or -c):
mo-dev --canister foo --canister bar --deployPass an installation argument to dfx deploy (--argument or -a):
mo-dev --deploy --argument '()'Show additional debug output in the console (--verbose or -v):
mo-dev -v # more verbose
mo-dev -vv # extra verboseProgrammatically start mo-dev using JavaScript:
import devServer from 'mo-dev';
// Default settings
devServer();
// Custom settings
devServer({
directory: '.',
port: 7700,
verbosity: 0,
// ...
});The mo-dev npm package includes a mo-test command which can be used to run unit tests in CI workflows.
View all available options:
mo-test --helpRun all Motoko unit tests (*.test.mo):
mo-testRun all Motoko unit tests using a WASI runtime by default (faster but requires installing Wasmtime on your system):
mo-test --testmode wasiConfigure the runtime of an individual unit test by including the following comment in a *.test.mo file:
// @testmode wasiRun specific unit tests by passing a file name prefix (-f or --testfile):
mo-test -f Foo -f Bar # (only run tests for files starting with `Foo` or `Bar`)These options may also be passed directly into the mo-dev command (e.g. mo-dev --testmode wasi -f SomeTest).
mo-dev is early in development. Please feel free to report a bug, ask a question, or request a feature on the project's GitHub issues page.
Contributions are welcome! Please check out the contributor guidelines for more information.