# Contributing

The Registry accepts focused nodes and curated lists that other Visual Script projects can reuse. Publishing a tested contribution turns project-specific work into a package that other developers can inspect and install.

## Requirements

Publishing has no review queue, approval requirement, or fee. You need a free account and a Unity Access Token on the machine that uploads the package.

A contribution doesn't need broad scope. Operations such as *set a random layer*, *check whether a key was held for a duration*, or *log a variable with a label* can serve several projects without depending on a particular game.

!!! tip "Lists require no C#"
    Gather related packages into a public [list](lists.md) when you want to share a repeatable setup without writing a node.

## What you can publish

| Kind | Publishes |
| :--- | :--- |
| **Instruction** | One class, one C# file. |
| **Condition** | One class, one C# file. |
| **Trigger** | One class, one C# file. |
| **Signal** | Any `IType` implementation — one C# file. |
| **List** | A bundle of the above. Built on the website, no upload needed. See [Lists](lists.md). |

Scripts are published as **one file per package**. Consolidate a node that spans several files, or distribute it as a module instead of a Registry script.

The Visual Script team publishes and maintains **Modules**, so contributors don't upload them through the Registry.

## Publish a contribution

Publish in three steps:

1. **[Create your Unity Access Token](access-token.md)** on [visualscript.dev](https://visualscript.dev/settings/api), then sign in from the Unity editor. Repeat this once per machine.
2. **[Publish](publishing.md)** — right-click your `.cs` file and choose `Visual Script` &rarr; `Upload to Registry`.
3. **[Keep it updated](updating.md)** — increment `[Version]` and upload again whenever you improve it.

There is no separate packaging step, manifest, or listing form. The [attributes](../scripting-api/conventions.md) on the class become the Registry listing.

## Review before publishing

Use this checklist before uploading:

- **Publish tested code.** Verify the node in a real project before distributing it.
- **Describe the task.** People search by the behavior they need. *Rotates an object toward another over time* is more specific than *Custom rotation helper*.
- **Fill in `[Parameter]` and `[Keywords]`.** These attributes make fields understandable and help search match the package.
- **Keep one job per node.** Split a mode dropdown into separate packages when it changes the node's fundamental behavior.
- **Declare every `[Dependency]`.** A missing dependency can leave the project with compile errors after installation.
- **Declare `[MadeWithAI]` when it applies.** The badge gives developers relevant context before they inspect the source.
- **Prefix the class name.** A name such as `InstructionAcmeSpawnWave` reduces collisions because class names must be unique within a project.
- **State the maintenance status.** Add a note if you don't plan to update the package.

!!! warning "Published means public"
    Read the file before uploading. Check for machine-specific paths, project-only types, API keys, private endpoints, and leftover debug logging.

Test the published node in an empty project that contains only Visual Script and the node's declared dependencies. Confirm that it compiles and performs the documented behavior.

## Getting the Trusted badge

The Visual Script team assigns a 🛡️ **Trusted** badge to consistent contributors. The badge appears beside the contributor's name across the site, and there is no application process.

## Your profile

Your public profile at `visualscript.dev/user/<your id>` groups published packages by kind and includes your lists. Link it from a portfolio, community profile, or Unity Asset Store page when you want one index of your Registry work.

The editor's Registry inspector also has an **Author** button on every listing. It opens your profile so developers can find your other packages.

## Where to go next

- **[Unity Access Token](access-token.md)** — authenticate the Unity editor for publishing.
- **[Publishing](publishing.md)** — upload a script step by step.
- **[Updating](updating.md)** — version and maintain a published package.
- **[Conventions](../scripting-api/conventions.md)** — define the attributes that become the listing.
