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

# Install and Upgrade

> Install or upgrade sitectl with Homebrew, native Linux packages, or direct binaries.

Select a tab for the core `sitectl` command or one of its plugins to see install and upgrade instructions.
When you install a current v1 `sitectl` plugin with Homebrew or Linux packages, the package manager also installs the core `sitectl` command.

These docs track this published release set. Generated command references cover
core sitectl and the operator plugins; `sitectl-app-tmpl` is the separately
versioned contributor scaffold:

| Package                 | Version  |
| ----------------------- | -------- |
| `sitectl`               | `v1.0.2` |
| `sitectl-archivesspace` | `v1.0.0` |
| `sitectl-drupal`        | `v1.0.0` |
| `sitectl-isle`          | `v1.0.1` |
| `sitectl-libops`        | `v1.4.0` |
| `sitectl-ojs`           | `v1.0.0` |
| `sitectl-omeka-classic` | `v1.0.0` |
| `sitectl-omeka-s`       | `v1.0.0` |
| `sitectl-wp`            | `v1.0.0` |
| `sitectl-app-tmpl`      | `v1.0.0` |

Core and plugins are separately built executables, but the reviewed versions above share the v1 SDK and RPC schema. The documentation generator records each tag's exact commit in `scripts/snippet-dependencies.json`. Debian, RPM, and APK packages encode each plugin's minimum core dependency; Homebrew installs the current core formula first. If you install release binaries manually, upgrade core and every plugin you use as one tested set:

```bash theme={null}
sitectl --version
sitectl-drupal --version
sitectl-isle --version
sitectl-ojs --version
sitectl create list
```

Installing a new core binary does not change the SDK and lifecycle metadata embedded in an older plugin binary. A protocol error or missing lifecycle behavior after an upgrade is an installation/version problem, not a project migration; update the plugin before changing project files.

<Info>
  The APT repository authenticates signed Release metadata. The RPM repository currently authenticates signed `repomd.xml` metadata with `repo_gpgcheck=1`; package payload hashes come from that signed metadata, while individual RPM signatures are not published, so `gpgcheck=0` is intentional. Do not change it to `gpgcheck=1` until the packages themselves are signed.
</Info>

<Warning>
  The Linux package repository is rebuilt from current release artifacts and does not preserve every older package version. A version pin is a durable rollback only while the artifact remains available. For long-lived production rollback, retain a package-repository snapshot or archive the matching GitHub release packages and `checksums.txt` in controlled storage.
</Warning>

<Tabs>
  <Tab title="sitectl">
    ## Homebrew

    You can install `sitectl` using Homebrew:

    ```bash theme={null}
    brew tap libops/homebrew https://github.com/libops/homebrew
    brew install libops/homebrew/sitectl
    ```

    To upgrade later:

    ```bash theme={null}
    brew update
    brew upgrade libops/homebrew/sitectl
    ```

    ## Linux Packages

    Releases publish native Linux packages through the libops package repository.

    <CodeGroup>
      ```bash Debian / Ubuntu theme={null}
      curl -fsSL https://packages.libops.io/sitectl/sitectl-archive-keyring.asc | sudo gpg --dearmor -o /usr/share/keyrings/sitectl-archive-keyring.gpg
      echo "deb [signed-by=/usr/share/keyrings/sitectl-archive-keyring.gpg] https://packages.libops.io/sitectl ./" | sudo tee /etc/apt/sources.list.d/sitectl.list >/dev/null
      sudo apt update
      sudo apt install sitectl
      ```

      ```bash Fedora / Rocky / RHEL theme={null}
      sudo tee /etc/yum.repos.d/sitectl.repo >/dev/null <<'EOF'
      [sitectl]
      name=sitectl
      baseurl=https://packages.libops.io/sitectl/rpm
      enabled=1
      gpgcheck=0
      repo_gpgcheck=1
      gpgkey=https://packages.libops.io/sitectl/sitectl-archive-keyring.asc
      EOF

      sudo dnf makecache
      sudo dnf install sitectl
      ```
    </CodeGroup>

    To upgrade later:

    <CodeGroup>
      ```bash Debian / Ubuntu theme={null}
      sudo apt update
      sudo apt install --only-upgrade sitectl
      ```

      ```bash Fedora / Rocky / RHEL theme={null}
      sudo dnf upgrade sitectl
      ```
    </CodeGroup>

    ## Binary Install

    You can install `sitectl` by either downloading or building the `sitectl` binary.

    <AccordionGroup>
      <Accordion title="Download" icon="download">
        Select an explicit tag from the [sitectl releases](https://github.com/libops/sitectl/releases), then follow [Verify a manual binary install](/manual-binary-install) to download that version's archive and `checksums.txt` and verify the archive before extraction.
      </Accordion>

      <Accordion title="Build" icon="screwdriver-wrench">
        Requires `go` and `make`

        ```bash theme={null}
        git clone https://github.com/libops/sitectl
        cd sitectl
        git checkout v1.0.0
        make build
        ./sitectl --help
        ```
      </Accordion>
    </AccordionGroup>

    To upgrade a binary install, select an explicit target release and verify its archive, or rebuild from an explicit reviewed tag or full commit. Keep the previous binary until the complete core/plugin set passes the checks below.

    Once `sitectl` is on your system, put the binary in a directory that is in your `$PATH`.
  </Tab>

  <Tab title="sitectl-drupal">
    ## Homebrew

    You can install `sitectl-drupal` using Homebrew:

    ```bash theme={null}
    brew tap libops/homebrew https://github.com/libops/homebrew
    brew install libops/homebrew/sitectl-drupal
    ```

    Homebrew will also install `sitectl` as a dependency.

    To upgrade later:

    ```bash theme={null}
    brew update
    brew upgrade libops/homebrew/sitectl-drupal
    ```

    ## Linux Packages

    Releases publish native Linux packages through the libops package repository.

    <CodeGroup>
      ```bash Debian / Ubuntu theme={null}
      curl -fsSL https://packages.libops.io/sitectl/sitectl-archive-keyring.asc | sudo gpg --dearmor -o /usr/share/keyrings/sitectl-archive-keyring.gpg
      echo "deb [signed-by=/usr/share/keyrings/sitectl-archive-keyring.gpg] https://packages.libops.io/sitectl ./" | sudo tee /etc/apt/sources.list.d/sitectl.list >/dev/null
      sudo apt update
      sudo apt install sitectl-drupal
      ```

      ```bash Fedora / Rocky / RHEL theme={null}
      sudo tee /etc/yum.repos.d/sitectl.repo >/dev/null <<'EOF'
      [sitectl]
      name=sitectl
      baseurl=https://packages.libops.io/sitectl/rpm
      enabled=1
      gpgcheck=0
      repo_gpgcheck=1
      gpgkey=https://packages.libops.io/sitectl/sitectl-archive-keyring.asc
      EOF

      sudo dnf makecache
      sudo dnf install sitectl-drupal
      ```
    </CodeGroup>

    The package manager will also install `sitectl` as a dependency.

    To upgrade later:

    <CodeGroup>
      ```bash Debian / Ubuntu theme={null}
      sudo apt update
      sudo apt install --only-upgrade sitectl-drupal
      ```

      ```bash Fedora / Rocky / RHEL theme={null}
      sudo dnf upgrade sitectl-drupal
      ```
    </CodeGroup>

    ## Binary Install

    You can install `sitectl-drupal` by either downloading or building the `sitectl-drupal` binary.

    Use core `sitectl v1.0.2` with the reviewed Drupal `v1.0.0` release. A manual binary install does not resolve that dependency for you.

    <AccordionGroup>
      <Accordion title="Download" icon="download">
        Select explicit tags from the [sitectl releases](https://github.com/libops/sitectl/releases) and [sitectl-drupal releases](https://github.com/libops/sitectl-drupal/releases). Follow [Verify a manual binary install](/manual-binary-install) separately for both repositories; each release has its own archive and `checksums.txt`.
      </Accordion>

      <Accordion title="Build" icon="screwdriver-wrench">
        Requires `go` and `make`

        ```bash theme={null}
        git clone https://github.com/libops/sitectl-drupal
        cd sitectl-drupal
        git checkout v1.0.0
        make build
        ./sitectl-drupal --help
        ```
      </Accordion>
    </AccordionGroup>

    To upgrade a binary install, select and verify an explicit core/plugin release set or rebuild from reviewed tags or full commits. Replace both binaries before validation and keep the previous set available for rollback.

    Once `sitectl-drupal` is on your system, put the binary in a directory that is in your `$PATH`.
  </Tab>

  <Tab title="sitectl-isle">
    <Info>
      `sitectl-isle` v1.0.0 publication is complete: GitHub release assets, the Homebrew formula, and the public APT and RPM repositories are available. The public APT `Packages` indexes include both `amd64` and `arm64` packages and declare minimum dependencies on `sitectl` 1.0.0 and `sitectl-drupal` 1.0.0.
    </Info>

    ## Homebrew

    You can install `sitectl-isle` using Homebrew:

    ```bash theme={null}
    brew tap libops/homebrew https://github.com/libops/homebrew
    brew install libops/homebrew/sitectl-isle
    ```

    Homebrew will also install `sitectl` and `sitectl-drupal` as dependencies.

    The current ISLE release line requires core `sitectl` 1.0.0 or newer and `sitectl-drupal` 1.0.0 or newer. Homebrew formulas are published in dependency order: core, Drupal, then ISLE.

    To upgrade later:

    ```bash theme={null}
    brew update
    brew upgrade libops/homebrew/sitectl-isle
    ```

    ## Linux Packages

    Releases publish native Linux packages through the libops package repository.

    <CodeGroup>
      ```bash Debian / Ubuntu theme={null}
      curl -fsSL https://packages.libops.io/sitectl/sitectl-archive-keyring.asc | sudo gpg --dearmor -o /usr/share/keyrings/sitectl-archive-keyring.gpg
      echo "deb [signed-by=/usr/share/keyrings/sitectl-archive-keyring.gpg] https://packages.libops.io/sitectl ./" | sudo tee /etc/apt/sources.list.d/sitectl.list >/dev/null
      sudo apt update
      sudo apt install sitectl-isle
      ```

      ```bash Fedora / Rocky / RHEL theme={null}
      sudo tee /etc/yum.repos.d/sitectl.repo >/dev/null <<'EOF'
      [sitectl]
      name=sitectl
      baseurl=https://packages.libops.io/sitectl/rpm
      enabled=1
      gpgcheck=0
      repo_gpgcheck=1
      gpgkey=https://packages.libops.io/sitectl/sitectl-archive-keyring.asc
      EOF

      sudo dnf makecache
      sudo dnf install sitectl-isle
      ```
    </CodeGroup>

    The package manager will also install `sitectl` 1.0.0 or newer and `sitectl-drupal` 1.0.0 or newer as dependencies. Repository publication follows the same core, Drupal, then ISLE order so every dependency is available before the dependent package.

    To upgrade later:

    <CodeGroup>
      ```bash Debian / Ubuntu theme={null}
      sudo apt update
      sudo apt install --only-upgrade sitectl-isle
      ```

      ```bash Fedora / Rocky / RHEL theme={null}
      sudo dnf upgrade sitectl-isle
      ```
    </CodeGroup>

    ## Binary Install

    You can install `sitectl-isle` by either downloading or building the `sitectl-isle` binary.

    You also need core `sitectl` 1.0.0 or newer and `sitectl-drupal` 1.0.0 or newer on your system. A manual binary install does not resolve those dependencies for you.

    <AccordionGroup>
      <Accordion title="Download" icon="download">
        Select explicit tags from the release lists for [sitectl](https://github.com/libops/sitectl/releases), [sitectl-drupal](https://github.com/libops/sitectl-drupal/releases), and [sitectl-isle](https://github.com/libops/sitectl-isle/releases). Follow [Verify a manual binary install](/manual-binary-install) for each repository, then put all three verified binaries on the same `$PATH`.
      </Accordion>

      <Accordion title="Build" icon="screwdriver-wrench">
        Requires `go` and `make`

        ```bash theme={null}
        git clone https://github.com/libops/sitectl-isle
        cd sitectl-isle
        git checkout v1.0.0
        make build
        ./sitectl-isle --help
        ```
      </Accordion>
    </AccordionGroup>

    To upgrade a binary install, update core first, then Drupal, then ISLE. Replace all three binaries in your `$PATH` before running `sitectl create list`; do not leave a partially upgraded set active.

    Verify the complete set after installation:

    ```bash theme={null}
    sitectl --version
    sitectl-drupal --version
    sitectl-isle --version
    sitectl create list
    ```
  </Tab>

  <Tab title="Application plugins">
    Install the plugin for each application template you operate. Package names and release repositories are:

    | Application   | Package                 | Reviewed release | Releases                                                                    |
    | ------------- | ----------------------- | ---------------- | --------------------------------------------------------------------------- |
    | ArchivesSpace | `sitectl-archivesspace` | `v1.0.0`         | [GitHub releases](https://github.com/libops/sitectl-archivesspace/releases) |
    | OJS           | `sitectl-ojs`           | `v1.0.0`         | [GitHub releases](https://github.com/libops/sitectl-ojs/releases)           |
    | Omeka Classic | `sitectl-omeka-classic` | `v1.0.0`         | [GitHub releases](https://github.com/libops/sitectl-omeka-classic/releases) |
    | Omeka S       | `sitectl-omeka-s`       | `v1.0.0`         | [GitHub releases](https://github.com/libops/sitectl-omeka-s/releases)       |
    | WordPress     | `sitectl-wp`            | `v1.0.0`         | [GitHub releases](https://github.com/libops/sitectl-wp/releases)            |

    ## Homebrew

    ```bash theme={null}
    brew tap libops/homebrew https://github.com/libops/homebrew
    brew install libops/homebrew/sitectl-ojs
    ```

    Replace `sitectl-ojs` with the package from the table. Homebrew installs core `sitectl` as a dependency. Upgrade with `brew update` and `brew upgrade libops/homebrew/PACKAGE`.

    ## Linux Packages

    After configuring the LibOps package repository from the `sitectl` tab, install the selected plugin by package name:

    <CodeGroup>
      ```bash Debian / Ubuntu theme={null}
      sudo apt update
      sudo apt install sitectl-ojs
      ```

      ```bash Fedora / Rocky / RHEL theme={null}
      sudo dnf install sitectl-ojs
      ```
    </CodeGroup>

    The package manager installs core `sitectl` as a dependency. Use the same package name with `apt install --only-upgrade` or `dnf upgrade` later.

    ## Binary Install

    Select an explicit plugin tag from its release link, then follow [Verify a manual binary install](/manual-binary-install) for the plugin repository. Place the verified `sitectl-<app>` binary in the same `$PATH` as a compatible, independently verified core `sitectl`, and verify discovery:

    ```bash theme={null}
    sitectl create list
    ```

    Core discovers plugin binaries by name from `$PATH`; there is no separate registration file.

    For a manual binary installation, run both `sitectl --version` and `sitectl-PACKAGE --version` after every upgrade. Keep the previous binaries available until `sitectl create list`, `sitectl validate`, and the relevant plugin help command work with the new set.
  </Tab>
</Tabs>
