# Step By Step Guide

In this tutorial you’ll create and publish a script to the Storefront. The same flow applies to **Libraries** and **Configs**.

### Create the item

Go to **Workshop -> Manage Items** and click **Create new item.**

<figure><img src="/files/19zUMYWVfUi92e9mLh4D" alt=""><figcaption></figcaption></figure>

Fill out:

* **Title**
* **Game** (the supported title your script targets)
* **Item type** (Script / Library / Config)

{% hint style="danger" %}
**Warning:** You cannot change the **item type** later.
{% endhint %}

### Upload a build

Open the **Builds** tab and click **Upload new build**.

<figure><img src="/files/s89VK6vuZtB9SDQw91mq" alt=""><figcaption></figcaption></figure>

Fill out:

* **Version** (use semantic versioning like `1.0.0` if possible)
* **Changelog** (short, factual)
* **File upload** (your `.lua` file or a `.zip`)

{% hint style="info" %}
**Note:** You can upload a **ZIP** to bundle assets alongside the script. See [Bundled Assets](/publishing-tool/bundled-assets.md)
{% endhint %}

Click **Save**. The build is created in the **Draft** state.

<figure><img src="/files/JbPn1pZ5ylHa0GaxTJYg" alt=""><figcaption></figcaption></figure>

Click **Submit for review**. The build state changes to **Under review**.

After moderation approves it, you’ll get a notification and the state changes to **Approved**.

<figure><img src="/files/FB1JMHwoxg3OQkIaavEp" alt=""><figcaption></figcaption></figure>

Click **Set to branch** and choose **Default**.

This makes the approved build the version users receive when they add your script to their library.

{% hint style="info" %}
**Tip:** Use a **Beta** branch to test new builds with a subset of users before moving them to **Default**. See [Branches](/publishing-tool/branches.md)
{% endhint %}

### Configure capabilities

If your script needs restricted APIs (e.g. FFI, filesystem, clipboard), enable the required **Capabilities** so users can grant permission.

In **Builds** -> **Capabilities** (right side), select only what you need and click **Save**.

<figure><img src="/files/Ed7k57puHmwzfNVY9TGW" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Best practice:** Request the minimum capabilities your script actually uses. Users will see and approve these.
{% endhint %}

### Prepare the Storefront listing

Open the **General** tab and complete all fields in the **Release Checklist**.

<figure><img src="/files/lHuCfpVxqV1cTVwMR53O" alt=""><figcaption></figcaption></figure>

When the checklist is complete, click **Submit for review** on the item.\
After moderation approves it, the item is automatically published on the **Storefront** and users can purchase or subscribe.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://lua2.fatality.win/publishing-tool/step-by-step-guide.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
