# on Starknet

In this tutorial, you'll learn how to initialize a Starknet-based Substreams project using the Substreams CLI (`substreams init` command).

{% hint style="info" %}
The CLI installation is supported only on Linux and macOS. If you're using Windows, consider using the [DevContainer environment](../../reference-material/devcontainer-ref), which launches a Linux-based virtual environment.
{% endhint %}

## Step 1: Initialize Your Starknet Substreams Project

1. [Install the Substreams CLI](../../how-to-guides/installing-the-cli).
2. Running `substreams init` will give you the option to choose between two Starknet project options. Select the one that best fits your requirements:
   * **stellar-hello-world**: Creates a Substreams that outputs all the events of the Starknet token. It teaches how to access the full Starknet Block, how to iterate over transactions and how to filter on specific event addresses.
   * **starknet-events**: Creates a Substreams that extracts and decodes Starknet events and calls using the cached [Starknet Foundational Module](https://substreams.dev/packages/starknet-foundational/v0.1.4), filtered by one or more smart contract addresses. Contract ABIs are retrieved from Starkscan. If an ABI isn’t available, you’ll need to provide it yourself.

{% hint style="info" %}
Note: Starknet ABIs are mutable within blocks, therefore the current ABI of your smart-contract may change in a future block.
{% endhint %}

## Step 2: Visualize the Data

1. Run `substreams auth` to create your [account](https://thegraph.market/) and generate an authentication token (JWT), then pass this token back as input.
2. Run `substreams build` to compile the project.
3. Run `substreams gui` to visualize and iterate on your extracted data.

## Step 2.5: (Optionally) Transform the Data

1. Open the `src/lib.rs` file that has been generated.
2. Modify the transformations made to the data as needed. Every time you modify the code, you will have to recompile the project with `substreams build`.

## Step 3: Load the Data

To make your Substreams queryable (as opposed to [direct streaming](../../how-to-guides/sinks/stream)), you can automatically send the data to a SQL data by using the [SQL sink](../../how-to-guides/sinks/sql) or through [PubSub](../../how-to-guides/sinks/pubsub).

## Additional Resources

You may find these additional resources helpful for developing your first Starknet application.

### Dev Container Reference

The [Dev Container Reference](../../reference-material/devcontainer-ref) helps you navigate the container and its common errors.

### CLI Reference

The [CLI reference](../../reference-material/command-line-interface) lets you explore all the tools available in the Substreams CLI.

### Substreams Components Reference

The [Components Reference](https://github.com/streamingfast/substreams/blob/develop/docs/new/references/substreams-components/README.md) dives deeper into navigating the `substreams.yaml`.
