Reference
Operations
Create a new codebase
-
Using the latest snapshot release:
pnpm create mud@main <directory>
-
Using the latest pre-release:
pnpm create mud@next <directory>
Modify the codebase version
-
Switch to the latest snapshot release:
pnpm mud set-version --tag main && pnpm install
-
Switch to the latest pre-release:
pnpm mud set-version --tag next && pnpm install
-
Switch to a specific commit (opens in a new tab):
pnpm mud set-version --commit <hash> && pnpm install
Debugging
Onchain components
Foundry debugging
The MUD onchain components typically use the Foundry development stack (opens in a new tab), meaning any of Foundry's debugging tools are available.
Use this prodecure to view the output from anvil
(opens in a new tab):
-
Add
console.log
to your systems, edit their Solidity files.-
Import console.log.
import { console } from "forge-std/console.sol";
-
Add
console.log
statements inside your Solidity functions.console.log("newValue:", newValue);
-
-
Run
anvil
manually.anvil -b 1 --base-fee 0 | uniq | tee anvil.log
Note that due to a bug, there might be multiple copies of the same
console.log
message. Piping throughuniq
(opens in a new tab) helps reduce this issue.You do not have to use
tee anvil.log
, butanvil
logs so much that it is often useful to be able to look for information in the log file after it has scrolled off the screen. -
Edit
packages/contracts/package.json
to change thescripts.dev
definition."dev": "pnpm mud dev-contracts --rpc http://127.0.0.1:8545",
Use
127.0.0.1
, there is a weird bug that makes it a problem to uselocalhost
is some circumstances. -
Run
pnpm dev
normally.
MUD dev tools
You can also see what is happening from your application by enabling to MUD dev tools. To do so, add this code to the client side of your application:
import { mount as mountDevTools } from "@latticexyz/dev-tools";
// https://vitejs.dev/guide/env-and-mode.html
if (import.meta.env.DEV) {
const { mount: mountDevTools } = await import("@latticexyz/dev-tools");
mountDevTools({
config: mudConfig,
publicClient: network.publicClient,
walletClient: network.walletClient,
latestBlock$: network.latestBlock$,
blockStorageOperations$: network.blockStorageOperations$,
worldAddress: network.worldContract.address,
worldAbi: network.worldContract.abi,
write$: network.write$,
recsWorld: network.world,
});
}
In the minimal application you get from pnpm create mud@<version> <app>
, the MUD dev tools are already included.