# Source: https://docs.near.org/tutorials/nfts.md

---
id: nfts
title: NFT Zero to Hero
sidebar_label: Build a NFT Contract from Scratch
description: "Learn how to mint NFTs and build a full NFT contract step by step."
---

In this _Zero to Hero_ series, you'll find a set of tutorials that will cover every aspect of a non-fungible token (NFT) smart contract.
You'll start by minting an NFT using a pre-deployed contract and by the end you'll end up building a fully-fledged NFT smart contract that supports every extension.

---

## Prerequisites

To complete these tutorials successfully, you'll need:

- [Rust](https://www.rust-lang.org/tools/install)
- [A Testnet wallet](https://testnet.mynearwallet.com/create)
- [NEAR-CLI](/tools/near-cli#installation)
- [cargo-near](https://github.com/near/cargo-near)

:::info New to Rust?
If you are new to Rust and want to dive into smart contract development, our [Quick-start guide](../smart-contracts/quickstart.md) is a great place to start
:::

---

## Overview

These are the steps that will bring you from **_Zero_** to **_Hero_** in no time! 💪

| Step | Name                                                          | Description                                                                                                            |
|------|---------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------|
| 1    | [Pre-deployed contract](https://near-examples.github.io/nft-tutorial/predeployed-contract) | Mint an NFT without the need to code, create, or deploy a smart contract.                                              |
| 2    | [Contract architecture](https://near-examples.github.io/nft-tutorial/skeleton)             | Learn the basic architecture of the NFT smart contract and compile code.                                               |
| 3    | [Minting](https://near-examples.github.io/nft-tutorial/minting)                            | Flesh out the skeleton so the smart contract can mint a non-fungible token.                                            |
| 4    | [Upgrade a contract](https://near-examples.github.io/nft-tutorial/upgrade-contract)        | Discover the process to upgrade an existing smart contract.                                                            |
| 5    | [Enumeration](https://near-examples.github.io/nft-tutorial/enumeration)                    | Explore enumeration methods that can be used to return the smart contract's states.                                    |
| 6    | [Core](https://near-examples.github.io/nft-tutorial/core)                                  | Extend the NFT contract using the core standard which allows token transfer.                                        |
| 7    | [Events](https://near-examples.github.io/nft-tutorial/events)                              | The events extension, allowing the contract to react on certain events.                                              |
| 8    | [Approvals](https://near-examples.github.io/nft-tutorial/approvals)                        | Expand the contract allowing other accounts to transfer NFTs on your behalf.                                           |
| 9    | [Royalty](https://near-examples.github.io/nft-tutorial/royalty)                            | Add NFT royalties allowing for a set percentage to be paid out to the token creator.                                   |
| 10   | [Marketplace](https://near-examples.github.io/nft-tutorial/marketplace)                    | Learn about how common marketplaces operate on NEAR and dive into some of the code that allows buying and selling NFTs. |

---

## Next steps

Ready to start? Jump to the [Pre-deployed Contract](https://near-examples.github.io/nft-tutorial/predeployed-contract) tutorial and begin your learning journey!

If you already know about non-fungible tokens and smart contracts, feel free to skip and jump directly to the tutorial of your interest. The tutorials have been designed so you can start at any given point!