---
title: Program
description: Create, upgrade, inspect, and manage managed program accounts with thru program
source_url:
  html: https://thru.org/docs/cli-reference/program-commands/
  md: https://thru.org/docs/cli-reference/program-commands.md
---

# Program

Use `thru program` when you are working with managed programs rather than raw uploader buffers.

## Use This When

- you want to create or upgrade a managed program from a binary
- you need to pause, finalize, destroy, or inspect a managed program
- you need address derivation helpers such as `seed-to-hex` or manager account derivation

Choose another family when:

- you want raw upload-buffer lifecycle commands: [Uploader Commands](https://thru.org/docs/cli-reference/uploader-commands.md)
- you want to publish or inspect ABI accounts: [ABI](https://thru.org/docs/cli-reference/abi-commands.md)

## Commands

| Command | Use it for |
| - | - |
| `create` | Upload a binary and create a managed program. |
| `upgrade` | Upload a new binary for an existing managed program. |
| `set-pause` | Pause or unpause a managed program. |
| `destroy` | Destroy a managed program and its meta account. |
| `finalize` | Make a managed program immutable. |
| `set-authority` | Set a new authority candidate. |
| `claim-authority` | Claim authority as the candidate. |
| `derive-address` | Derive a program address from a program ID and seed. |
| `derive-manager-accounts` | Derive both manager metadata and program accounts from a seed. |
| `seed-to-hex` | Convert a UTF-8 seed into a zero-padded 32-byte hex string. |
| `derive-program-account` | Derive the managed program account only. |
| `status` | Inspect program and related manager accounts. |

## High-Signal Flags

| Flag | Why it matters |
| - | - |
| `--manager` | Override the configured manager program ID. |
| `--ephemeral` | Switch derivation and lifecycle to ephemeral program mode. |
| `--authority` | Choose the configured authority key for program creation. |
| `--fee-payer` | Override the signer used for destructive or finalizing actions. |
| `--chunk-size` | Control upload chunk size for `create` and `upgrade`. |

## Minimal Patterns

```bash
thru program seed-to-hex my_program
thru program create my_program ./build/thruvm/bin/my_program_c.bin
thru program status my_program
```

## Notes

- For seed conversion, the correct command is `thru program seed-to-hex`, not a top-level `seed-to-hex`.
- Start with `status` when you need to understand whether a seed already has live manager or program accounts.
- Reach for `uploader` only when you intentionally want the lower-level upload account flow.
