# Deploying

Deploying Programs&#x20;

<figure><img src="/files/fPqZRGL4iAFuPaJQKrfo" alt=""><figcaption></figcaption></figure>

As shown in the diagram above, a program author creates a program, compiles it to an ELF shared object containing BPF bytecode, and uploads it to the PUT cluster with a special deploy transaction.&#x20;

The cluster makes it available to clients via a program ID.&#x20;

The program ID is an address specified when deploying and is used to reference the program in subsequent transactions.

Upon a successful deployment the account that holds the program is marked executable.&#x20;

If the program is marked "final", its account data become permanently immutable.&#x20;

If any changes are required to the finalized program (features, patches, etc...) the new program must be deployed to a new program ID.

If a program is upgradeable, the account that holds the program is marked executable, but it is possible to redeploy a new shared object to the same program ID, provided that the program's upgrade authority signs the transaction.

The PUT command line interface supports deploying programs, for more information see the deploy command line usage documentation.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.put.com/developers/writing-programs/deploying.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
