# zkApps Overview

> zkApps (zero knowledge apps) are Mina Protocol smart contracts powered by zero knowledge proofs, specifically using zk-SNARKs. Use this quickstart guide to deploy zkApps and resources for learning TypeScript.

Canonical URL: https://docs.minaprotocol.com/zkapps/writing-a-zkapp/

<br />

<figure>
  <img
    src="/img/zk-cli.png"
    alt="Terminal screenshot of zkApp CLI command line interface."
    width="70%"
  />
</figure>

<br />

:::info

To protect end users and ensure your zkApps are secure, consider the information at [Security and zkApps](/zkapps/writing-a-zkapp/introduction-to-zkapps/secure-zkapps) while architecting your solution and consider a third-party security audit before deploying to Mina mainnet.

:::

:::info

The maximum number of zkApp transactions per block is currently capped at **24**. This restriction will be gradually lifted after the Mainnet upgrade.

:::

### What are zkApps?

zkApps (zero knowledge apps) are Mina Protocol smart contracts powered by zero knowledge proofs, specifically using zk-SNARKs.

zkApps use an **off-chain execution** and mostly **off-chain state** model. This architecture allows for private computation and state that can be either private or public.

zkApps can perform arbitrarily-complex computations off-chain while incurring only a flat fee to send the resulting zero knowledge proof to the chain for verification of this computation. This cost saving benefit is in contrast to other blockchains that run computations on-chain and use a variable gas-fee based model.

<figure>
  <img
    src="/img/1_zkApps_Off-Chain_Performance.jpg"
    width="95%"
    alt="Mina zkApp zero knowledge app architecture diagram"
  />
</figure>

<br />

To learn more, see [How zkApps Work](https://docs.o1labs.org/o1js/zkapps/intro).

### TypeScript

zkApps are written in [TypeScript](https://www.typescriptlang.org/).

TypeScript provides an easy, familiar language (JavaScript), but with type safety, making it easy to get started writing zkApps. If you're new to using TypeScript, check out this helpful 12-min introductory video [TypeScript - The Basics](https://www.youtube.com/watch?v=ahCwqrYpIuM).

<!---
### Examples of zkApps

Play around with a few example zkApps to see what's possible:

<figure>
  <img
    src="/img/2_zkApps_Examples.jpg"
    alt="Example zkApp zero knowledge applications."
    width="85%"
  />
  <figcaption>
    zkApps are a great fit for applications that require proof that you have a
    secret without revealing it to anyone.
  </figcaption>
</figure>
--->

### Learn more

To learn more about developing zkApps, see [how zkApps work](https://docs.o1labs.org/o1js/zkapps/intro), [how to write a zkApp](/zkapps/writing-a-zkapp/introduction-to-zkapps/how-to-write-a-zkapp) and [zkApps for Ethereum Developers](/zkapps/advanced/zkapps-for-ethereum-developers).

Try the [zkApps tutorials](/zkapps/tutorials/hello-world) to learn by doing!

### Get help and join the community

Join the [#zkapps-developers](https://discord.com/channels/484437221055922177/915745847692636181) channel on Mina Protocol Discord.
