> ## Documentation Index
> Fetch the complete documentation index at: https://gora.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Deploy to Gora

> Package and deploy a local Gora app to a Gora Devnet or network endpoint.

# Deploy to Gora

Use this page when you already have a Gora app folder and a Gora endpoint.

For the full VM-to-local flow, start with [Devnet quickstart](./devnet-js-ts-quickstart).

## Prerequisites

You need:

* the `gora` CLI
* an app folder with `gora.app.json` and `policy.json`
* a Gora endpoint, such as `https://gora-dev.ngrok.app`
* an API token if the endpoint requires one

## Set the endpoint

From your app folder:

```bash theme={null}
gora config set node.url https://gora-dev.ngrok.app
```

If required:

```bash theme={null}
gora config set api.token YOUR_TOKEN
```

Check health:

```bash theme={null}
curl https://gora-dev.ngrok.app/health
```

You can also pass `--node` on individual commands instead of saving config.

## Link contract metadata first, if needed

If your app targets a chain gateway or app contract, link that metadata before deploy:

```bash theme={null}
gora contract doctor --chain <chain> --node https://gora-dev.ngrok.app
gora contract build --chain <chain>
gora contract deploy --chain <chain> --node https://gora-dev.ngrok.app
gora contract link --chain <chain>
```

This writes local metadata under:

```text theme={null}
.gora/contracts/<chain>/latest.json
```

and updates `gora.app.json` with a contract binding.

Skip this step for off-chain-only apps.

## Validate and package

```bash theme={null}
gora build
gora validate
gora package
```

Validation catches missing artifacts, invalid JSON, unknown execution modes, missing policies, and obvious secrets.

Packaging writes:

```text theme={null}
.gora/package/package.json
```

## Deploy

```bash theme={null}
gora deploy
```

Or explicitly:

```bash theme={null}
gora deploy --node https://gora-dev.ngrok.app
```

Deploy uploads:

* app artifact bytes or source
* manifest JSON
* policy JSON
* deterministic package metadata
* optional contract bindings

The receipt is written to:

```text theme={null}
.gora/deployments/dev.json
```

## Invoke after deploy

```bash theme={null}
gora invoke --app my_agent --input fixtures/request.json --wait
```

If you did not save `node.url`:

```bash theme={null}
gora invoke \
  --node https://gora-dev.ngrok.app \
  --app my_agent \
  --input fixtures/request.json \
  --wait
```

## Inspect

```bash theme={null}
gora inspect request <request-id>
gora inspect result <request-id>
gora inspect attestation <request-id>
gora inspect app my_agent
```

Inspect outputs are saved under:

```text theme={null}
.gora/inspect/
```

## What deploy does not do

`gora deploy` does not:

* deploy smart contracts
* submit chain transactions
* sign with user keys
* pay chain gas

It registers the Gora app package. Chain effects happen later through a gateway, wallet, contract, mobile signing flow, or submitter.

Next: [Test with mobile](./test-with-mobile).
