Skip to main content

zkApp programmability is not yet available on the Mina Mainnet, but zkApps can now be deployed on Berkeley Testnet.

How to Deploy a zkApp

Before deploying, you must first define a few settings, such as which network you are deploying to.

Add a deploy alias to config.json

Create a deploy alias in the config.json file in your smart contract project.

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

zk config

When prompted, specify a name (can be anything), the target network (testnet or mainnet), the 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, go to on and search for the address that you used.

Next Steps

More local development and testing! Use Lightnet to test your zkApp locally on an accurate representation of the Mina blockchain. See Testing zkApps with Lightnet.

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