# Installing and using scripts

Open the Lynx menu and go to **Play → Lua**. The tab has three panels: **Scripts**, **Console** and **Marketplace**.

## Scripts

Lists every `.lua` file in the scripts folder shown at the top of the tab, under the app's documents directory in `Lynx/Scripts`. Drop a file there, press **Refresh**, and it appears. The file name is the script name.

Row | What it does
--- | -----------
**Load** | Compiles the file and runs its top level once. The row shows `loaded`, or `error:` and the message.
**Unload** | Closes the script's Lua state, after delivering the `shutdown` event.
**Reload** | Unload then Load, in order.

A script's widgets appear wherever it put them; a script that draws does so once it is loaded.

## Console

The line ring at the bottom of the tab. `client.log`, `client.color_log` and `client.error_log` append here, each line prefixed with the script name. It holds the last lines across every loaded script.

## Marketplace

Bundles you have installed from the Lynx marketplace. A bundle is a signed zip with a `manifest.json`; it installs into the same list as a local file and runs the same way. See [Writing scripts](/developers/) for the manifest.

## Common problems

- The file must end in `.lua` and sit directly in the folder shown at the top of the tab.
- If a row shows `error:`, read the message; it is the Lua error from the top level.
- A gated capability the script needs but was not granted shows up as a `nil` global; see [Common issues](/using/common-issues/).