# Installing

Installing from the Registry adds community scripts or modules to your current Unity project. Installation is free, and you only need to sign in if you want to publish.

## Installing a script

An Instruction, Condition, Trigger, or Signal is a single C# file. Press **Install** in the **Registry** section of the [Settings window](../manual/settings/index.md) to add it to your project.

Unity compiles the file, then displays the node in the relevant dropdown beside the built-in nodes. The script requires no separate import or registration step.

Scripts are installed under `Assets/Visual Script`, sorted by kind:

| Kind | Installs to |
| :--- | :--- |
| **Instruction** | `Assets/Visual Script/Instructions` |
| **Condition** | `Assets/Visual Script/Conditions` |
| **Trigger** | `Assets/Visual Script/Triggers` |
| **Signal** | `Assets/Visual Script/Signals` |
| **Module** | `Assets/Visual Script/Modules` |

Each file is named after the package identifier rather than its class. This lets the editor distinguish installed packages from scripts you wrote and detect available updates.

The file name doesn't affect the node because Unity finds the class inside the file.

Because downloaded nodes are C# files in your project, they behave like project code:

- The files are readable and editable.
- Version control includes them with the rest of the project, so teammates receive them on the next pull.
- Visual Script updates don't remove them.

!!! warning "Updates overwrite local edits"
    Editing an installed node is supported, but **Update** replaces the entire file. If you intend to maintain a separate version, rename the class and save the file outside `Assets/Visual Script` before you edit it.

## Installing from the website

Every script package page on [visualscript.dev](https://visualscript.dev) has a **Download** button that gives you the `.cs` file directly. Drop it anywhere in your project's `Assets` folder and Unity compiles it exactly the same way.

Use the website when Unity isn't open or when you want to inspect the entire file first. Use the editor to compare installed versions, apply updates, and uninstall packages.

## Installing a module

Modules are complete packages rather than loose scripts, so Unity installs them through the **Package Manager**:

| Starting point | Action |
| :--- | :--- |
| **Registry in the editor** | Press **Install**. Visual Script sends the module's Git URL to the Package Manager. |
| **Registry website** | Press **Copy Git URL**. In Unity, open `Window` &rarr; `Package Manager` &rarr; `+` &rarr; `Install package from git URL`, then paste the URL. |

Modules use the Package Manager's update process, declare their own dependencies, and add their own sections to the Settings window.

## Installing a list

A [list](lists.md) installs its scripts together. Press **Install** on the list, and Visual Script downloads each member into the folder for its kind, as with individual installations.

A list counts as installed only when *all* of its members are present. If you previously installed some members, installing the list fetches the missing files.

!!! info "Lists install from the editor"
    Browse and curate lists on the website, then install them from the editor. A list page shows every member, and each package page provides its own download.

## Updating

Visual Script compares the installed file's `[Version]` attribute with the version published on the Registry. When the installed version is older, the Registry inspector displays **Update**. Pressing it replaces the old file with the published file.

Visual Script applies the update only when you press **Update**.

!!! warning "Read before updating a node you edited"
    **Update** replaces the entire file and discards local edits. Create a separate class outside `Assets/Visual Script` before you diverge from the published package.

For modules, the Package Manager reports the update in its own interface, and the Registry shows it through the same **Update** button.

## Uninstalling

**Uninstall** moves the script to the operating system's trash, where it remains recoverable until you empty the trash. Uninstalling a list removes every script that came with it.

For modules, **Uninstall** removes the package from the Package Manager.

!!! danger "Uninstalling a used node loses configured values"
    Visual Script stores nodes by type name. Removing a node that's still in a scene or prefab leaves those entries empty, and reinstalling doesn't recover their configured values.

    Check which scenes and prefabs use the node before removing it. [Conventions](../scripting-api/conventions.md#serialization) explains how Visual Script stores these references.

## Where to go next

- **[Lists](lists.md)** — install a related set of nodes together.
- **[Finding what you need](finding.md)** — search and inspect Registry listings.
- **[Contributing](contributing.md)** — prepare your own package for publishing.
