Skip to main content

Please note that zkApp programmability is not yet available on Mina Mainnet, but zkApps can now be deployed to Berkeley Testnet.

How to Deploy a zkApp

Add a deploy alias to config.json

Before deploying, you must first define a few settings, such as which network you are deploying to. Create a "deploy alias" in the config.json file in your smart contract project. .

First, change into the directory containing your smart contract and then run the following command:

zk config

When prompted, specify a name (can be anything), URL to deploy to, fee (in MINA) to be used when sending your deploy transaction, and the fee payer account.

For more details, see Deploy alias in Tutorial 3: Deploy to a Live Network.


If your project contains multiple smart contracts (for example, Foo and Bar) that you intend to deploy to the same network, a best practice is to follow a naming convention such as berkeley-foo and berkeley-bar when naming your deploy aliases. You can change these alias names at any time in config.json.

You see the following output:

$ zk config

Add a new network:
✔ Choose a name (can be anything): · berkeley
✔ Set URL to deploy to: ·
✔ Set transaction fee to use when deploying (in MINA): · 0.1
✔ Create key pair at keys/berkeley.json
✔ Add network to config.json


Next steps:

- If this is a testnet, request tMINA at:<YOUR-ADDRESS>
- To deploy, run: `zk deploy berkeley`

Request funds from the faucet

To deploy your zkApp, you must have funds to pay for transaction fees.

To get funds on the Berkeley Testnet, use the URL that was shown from the zkApp CLI output. Visit<YOUR-ADDRESS> and click Request.

Before proceeding to the next step, wait a few minutes for the next block to include your transaction, so tMINA is available.

Deploy your smart contract

To deploy your smart contract to the network, run the following command:

zk deploy berkeley

When running the deploy command, the zkApp CLI computes a verification key for your zkApp CLI. Computing the verification key can take 1-2 minutes, so please be patient. The zkApp CLI shows the details of the transaction, such as the network name, the URL, and the smart contract to deploy.

Finally, enter yes or y when prompted to confirm and send the transaction.

You see the following output:

$ zk deploy berkeley
✔ Build project
✔ Generate build.json
✔ Choose smart contract
Only one smart contract exists in the project: Add
Your config.json was updated to always use this
smart contract when deploying to this network.
✔ Generate verification key (takes 1-2 min)
✔ Build transaction
✔ Confirm to send transaction
Are you sure you want to send (yes/no)? · y
✔ Send to network

Success! Deploy transaction sent.

Next step:
Your smart contract will be live (or updated)
as soon as the transaction is included in a block:<txn-hash>

After a few minutes, the transaction is included in the next block. To see your changes, search for the address that you used on

Next Steps

Now that you've learned how to deploy a smart contract, you can now learn how to write a UI for your zkApp.