Skip to content
This repository was archived by the owner on Apr 28, 2026. It is now read-only.
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .github/release-please/release-please-config.main.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@
{
"type": "generic",
"path": "pkg/config/config.go"
},
{
"type": "generic",
"path": "INSTALL.md"
}
]
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@
{
"type": "generic",
"path": "pkg/config/config.go"
},
{
"type": "generic",
"path": "INSTALL.md"
}
]
}
254 changes: 254 additions & 0 deletions INSTALL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,254 @@
# Installing otdfctl

This guide will help you install **otdfctl** on your computer. Follow the steps for your operating system.

## What is otdfctl?

`otdfctl` is a command-line tool for working with OpenTDF. Once installed, you'll be able to run it from any folder on your computer.

---

## 📥 Installation Instructions

<details>
<summary><h3>For macOS Users</h3></summary>

#### Step 1: Download the Right Version

First, you need to know which type of Mac you have:
- **Apple Silicon (M1, M2, M3, etc.)**: Download the `arm64` version
- **Intel Mac**: Download the `amd64` version

**Don't know which one you have?** Open Terminal and type:
```bash
uname -m
```
- If it says `arm64`, you have Apple Silicon
- If it says `x86_64`, you have an Intel Mac

#### Step 2: Download and Install

**For Apple Silicon Macs (M1/M2/M3):**
```bash
# Download the latest version
curl -LO https://github.com/opentdf/otdfctl/releases/download/v0.28.0/otdfctl-0.28.0-darwin-arm64.tar.gz
Copy link

Copilot AI Dec 19, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The version number 0.28.0 is hardcoded throughout the installation instructions (appearing in lines 33, 36, 42, 48, 54, 57, 63, 69, 94, 97, 103, 109, 115, 118, 124, 130, 136, 139, 145, 151, 165, 166, 194). This creates a maintenance burden when updating versions. Consider adding a note at the beginning of the document instructing users to replace 0.28.0 with the latest version number, or create a variable placeholder that can be easily updated in one place.

Copilot uses AI. Check for mistakes.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The version v0.28.0 is hardcoded in this URL. This version is hardcoded throughout the file in other URLs, filenames, and example outputs. This creates a significant maintenance burden, as the file will need to be manually updated in multiple places for every new release.

To improve maintainability, consider using a variable for the version number at the beginning of each script block. This would allow for a single point of update per script and reduce the chance of errors.

Example:

VERSION="0.28.0"
curl -LO https://github.com/opentdf/otdfctl/releases/download/v${VERSION}/otdfctl-${VERSION}-darwin-arm64.tar.gz
# ... and use ${VERSION} in subsequent commands

Copy link

Copilot AI Dec 19, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The version number 0.28.0 is hardcoded throughout the installation guide. This creates maintenance burden as every version bump will require updating multiple locations. Consider adding a note at the top of the document instructing users to replace version numbers with the latest release, or use a variable/placeholder pattern like VERSION=0.28.0 that users can set once.

Copilot uses AI. Check for mistakes.

# Extract the file
tar -xzf otdfctl-0.28.0-darwin-arm64.tar.gz

# Create the directory if it doesn't exist
sudo mkdir -p /usr/local/bin

# Move it to a folder in your PATH
sudo mv target/otdfctl-0.28.0-darwin-arm64 /usr/local/bin/otdfctl
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The path target/otdfctl-0.28.0-darwin-arm64 in the mv command is likely incorrect and will cause the installation to fail. The tar command typically extracts files to the current directory, and it's unlikely to create a target/ subdirectory. Furthermore, the executable file inside the archive is probably named otdfctl, not the full archive name.

This same issue exists on lines 63, 103, 124, and 145.

Suggested change
sudo mv target/otdfctl-0.28.0-darwin-arm64 /usr/local/bin/otdfctl
sudo mv otdfctl /usr/local/bin/otdfctl

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The path target/ in this command is likely incorrect. Release archives typically don't contain the target directory from the build environment, so this command will probably fail. Please verify the contents of the .tar.gz file and adjust the path. Assuming the executable is at the root of the archive, the command should be as suggested.

Suggested change
sudo mv target/otdfctl-0.28.0-darwin-arm64 /usr/local/bin/otdfctl
sudo mv otdfctl-0.28.0-darwin-arm64 /usr/local/bin/otdfctl


# Make it executable
sudo chmod +x /usr/local/bin/otdfctl

# Clean up the downloaded file
rm otdfctl-0.28.0-darwin-arm64.tar.gz
Comment on lines +33 to +49
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

This installation script has two issues:

  1. Critical Bug: The mv command on line 42 will likely fail because it assumes the binary is in a target/ subdirectory. Release archives usually don't contain build-time directory structures. This will break the installation.
  2. Maintainability: The version 0.28.0 is hardcoded. This makes updating the documentation for new releases tedious and error-prone.

The suggested change below fixes both issues by removing target/ and using a VERSION variable. This makes the script more robust and easier to maintain. Similar changes should be applied to all other script blocks for macOS and Linux.

# Set the version you want to install
VERSION="0.28.0"
TARBALL="otdfctl-${VERSION}-darwin-arm64.tar.gz"
BINARY="otdfctl-${VERSION}-darwin-arm64"

# Download the release archive
curl -LO "https://github.com/opentdf/otdfctl/releases/download/v${VERSION}/${TARBALL}"

# Extract the file
tar -xzf "${TARBALL}"

# Create the directory if it doesn't exist
sudo mkdir -p /usr/local/bin

# Move it to a folder in your PATH
sudo mv "${BINARY}" /usr/local/bin/otdfctl

# Make it executable
sudo chmod +x /usr/local/bin/otdfctl

# Clean up the downloaded file
rm "${TARBALL}"

Comment on lines +33 to +49
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

The installation script has two issues:

  1. Incorrect Path: The mv command on line 42 uses an incorrect path target/otdfctl-0.28.0-darwin-arm64. The tar.gz archive contains a single executable named otdfctl at the root, and tar does not create a target directory. This will cause the installation to fail.
  2. Hardcoded Values: The version number and architecture are hardcoded in multiple places. This makes the script difficult to maintain and prone to errors when updating.

I suggest refactoring the script to use variables. This makes it more readable, easier to update, and fixes the incorrect path.

# Download the latest version
VERSION="0.28.0"
OS="darwin"
ARCH="arm64"
FILENAME="otdfctl-${VERSION}-${OS}-${ARCH}"
curl -LO "https://github.com/opentdf/otdfctl/releases/download/v${VERSION}/${FILENAME}.tar.gz"

# Extract the file
tar -xzf "${FILENAME}.tar.gz"

# Create the directory if it doesn't exist
sudo mkdir -p /usr/local/bin

# Move it to a folder in your PATH
sudo mv otdfctl /usr/local/bin/otdfctl

# Make it executable
sudo chmod +x /usr/local/bin/otdfctl

# Clean up the downloaded file
rm "${FILENAME}.tar.gz"

```

**For Intel Macs:**
```bash
# Download the latest version
curl -LO https://github.com/opentdf/otdfctl/releases/download/v0.28.0/otdfctl-0.28.0-darwin-amd64.tar.gz

# Extract the file
tar -xzf otdfctl-0.28.0-darwin-amd64.tar.gz

# Create the directory if it doesn't exist
sudo mkdir -p /usr/local/bin

# Move it to a folder in your PATH
sudo mv target/otdfctl-0.28.0-darwin-amd64 /usr/local/bin/otdfctl
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

As with the arm64 instruction, the target/ path here is likely incorrect and will cause the installation to fail. Please verify the archive contents and update the path.

Suggested change
sudo mv target/otdfctl-0.28.0-darwin-amd64 /usr/local/bin/otdfctl
sudo mv otdfctl-0.28.0-darwin-amd64 /usr/local/bin/otdfctl


# Make it executable
sudo chmod +x /usr/local/bin/otdfctl

# Clean up the downloaded file
rm otdfctl-0.28.0-darwin-amd64.tar.gz
Comment on lines +54 to +70
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

Similar to the Apple Silicon script, this script has an incorrect mv path and hardcoded values. The mv command on line 63 will fail because the path target/otdfctl-0.28.0-darwin-amd64 is incorrect. I recommend refactoring to use variables for maintainability and correctness.

# Download the latest version
VERSION="0.28.0"
OS="darwin"
ARCH="amd64"
FILENAME="otdfctl-${VERSION}-${OS}-${ARCH}"
curl -LO "https://github.com/opentdf/otdfctl/releases/download/v${VERSION}/${FILENAME}.tar.gz"

# Extract the file
tar -xzf "${FILENAME}.tar.gz"

# Create the directory if it doesn't exist
sudo mkdir -p /usr/local/bin

# Move it to a folder in your PATH
sudo mv otdfctl /usr/local/bin/otdfctl

# Make it executable
sudo chmod +x /usr/local/bin/otdfctl

# Clean up the downloaded file
rm "${FILENAME}.tar.gz"

```

> **Note:** You'll be asked for your password when using `sudo`. This is normal and required to install the tool.

</details>

---

<details>
<summary><h3>For Linux Users</h3></summary>

#### Step 1: Download the Right Version

Choose based on your system:
- **Most modern PCs**: `amd64`
- **Raspberry Pi or ARM devices**: `arm64` or `arm`

**Not sure?** Run this command:
```bash
uname -m
```

#### Step 2: Download and Install

**For amd64 (most common):**
```bash
# Download the latest version
curl -LO https://github.com/opentdf/otdfctl/releases/download/v0.28.0/otdfctl-0.28.0-linux-amd64.tar.gz

# Extract the file
tar -xzf otdfctl-0.28.0-linux-amd64.tar.gz

# Create the directory if it doesn't exist
sudo mkdir -p /usr/local/bin

# Move it to a folder in your PATH
sudo mv target/otdfctl-0.28.0-linux-amd64 /usr/local/bin/otdfctl
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The target/ path here is likely incorrect, as release archives usually don't include build directories. This will cause the installation to fail. Please verify the archive contents and update the path.

Suggested change
sudo mv target/otdfctl-0.28.0-linux-amd64 /usr/local/bin/otdfctl
sudo mv otdfctl-0.28.0-linux-amd64 /usr/local/bin/otdfctl


# Make it executable
sudo chmod +x /usr/local/bin/otdfctl

# Clean up the downloaded file
rm otdfctl-0.28.0-linux-amd64.tar.gz
Comment on lines +97 to +113
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

This script also contains an incorrect mv path (line 103) and hardcoded values. The path target/otdfctl-0.28.0-linux-amd64 is incorrect and will cause the installation to fail. Please refactor it for correctness and easier maintenance.

# Download the latest version
VERSION="0.28.0"
OS="linux"
ARCH="amd64"
FILENAME="otdfctl-${VERSION}-${OS}-${ARCH}"
curl -LO "https://github.com/opentdf/otdfctl/releases/download/v${VERSION}/${FILENAME}.tar.gz"

# Extract the file
tar -xzf "${FILENAME}.tar.gz"

# Create the directory if it doesn't exist
sudo mkdir -p /usr/local/bin

# Move it to a folder in your PATH
sudo mv otdfctl /usr/local/bin/otdfctl

# Make it executable
sudo chmod +x /usr/local/bin/otdfctl

# Clean up the downloaded file
rm "${FILENAME}.tar.gz"

```

**For ARM64:**
```bash
# Download the latest version
curl -LO https://github.com/opentdf/otdfctl/releases/download/v0.28.0/otdfctl-0.28.0-linux-arm64.tar.gz

# Extract the file
tar -xzf otdfctl-0.28.0-linux-arm64.tar.gz

# Create the directory if it doesn't exist
sudo mkdir -p /usr/local/bin

# Move it to a folder in your PATH
sudo mv target/otdfctl-0.28.0-linux-arm64 /usr/local/bin/otdfctl
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

As with the other installation commands, the target/ path here is likely incorrect and will cause the installation to fail. Please verify the archive contents and update the path.

Suggested change
sudo mv target/otdfctl-0.28.0-linux-arm64 /usr/local/bin/otdfctl
sudo mv otdfctl-0.28.0-linux-arm64 /usr/local/bin/otdfctl


# Make it executable
sudo chmod +x /usr/local/bin/otdfctl

# Clean up the downloaded file
rm otdfctl-0.28.0-linux-arm64.tar.gz
Comment on lines +118 to +134
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

The mv command on line 124 has an incorrect path, and the script uses hardcoded values. The path target/otdfctl-0.28.0-linux-arm64 does not exist after extraction, which will break the installation. I recommend refactoring to use variables for correctness and maintainability.

# Download the latest version
VERSION="0.28.0"
OS="linux"
ARCH="arm64"
FILENAME="otdfctl-${VERSION}-${OS}-${ARCH}"
curl -LO "https://github.com/opentdf/otdfctl/releases/download/v${VERSION}/${FILENAME}.tar.gz"

# Extract the file
tar -xzf "${FILENAME}.tar.gz"

# Create the directory if it doesn't exist
sudo mkdir -p /usr/local/bin

# Move it to a folder in your PATH
sudo mv otdfctl /usr/local/bin/otdfctl

# Make it executable
sudo chmod +x /usr/local/bin/otdfctl

# Clean up the downloaded file
rm "${FILENAME}.tar.gz"

```

**For ARM (32-bit):**
```bash
# Download the latest version
curl -LO https://github.com/opentdf/otdfctl/releases/download/v0.28.0/otdfctl-0.28.0-linux-arm.tar.gz

# Extract the file
tar -xzf otdfctl-0.28.0-linux-arm.tar.gz

# Create the directory if it doesn't exist
sudo mkdir -p /usr/local/bin

# Move it to a folder in your PATH
sudo mv target/otdfctl-0.28.0-linux-arm /usr/local/bin/otdfctl
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

As with the other installation commands, the target/ path here is likely incorrect and will cause the installation to fail. Please verify the archive contents and update the path.

Suggested change
sudo mv target/otdfctl-0.28.0-linux-arm /usr/local/bin/otdfctl
sudo mv otdfctl-0.28.0-linux-arm /usr/local/bin/otdfctl


# Make it executable
sudo chmod +x /usr/local/bin/otdfctl

# Clean up the downloaded file
rm otdfctl-0.28.0-linux-arm.tar.gz
Comment on lines +139 to +155
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

The mv command on line 145 is incorrect as the path target/otdfctl-0.28.0-linux-arm does not exist after extraction. Additionally, the script uses hardcoded values, making it faulty and hard to maintain. Please refactor it for correctness.

# Download the latest version
VERSION="0.28.0"
OS="linux"
ARCH="arm"
FILENAME="otdfctl-${VERSION}-${OS}-${ARCH}"
curl -LO "https://github.com/opentdf/otdfctl/releases/download/v${VERSION}/${FILENAME}.tar.gz"

# Extract the file
tar -xzf "${FILENAME}.tar.gz"

# Create the directory if it doesn't exist
sudo mkdir -p /usr/local/bin

# Move it to a folder in your PATH
sudo mv otdfctl /usr/local/bin/otdfctl

# Make it executable
sudo chmod +x /usr/local/bin/otdfctl

# Clean up the downloaded file
rm "${FILENAME}.tar.gz"

```

</details>

---

<details>
<summary><h3>For Windows Users</h3></summary>

#### Step 1: Download the Right Version

Most Windows computers use `amd64`. ARM versions are for Surface Pro X or other ARM-based Windows devices.

#### Step 2: Download and Install

1. **Download the file** for your system:
- For most PCs: [otdfctl-0.28.0-windows-amd64.zip](https://github.com/opentdf/otdfctl/releases/download/v0.28.0/otdfctl-0.28.0-windows-amd64.zip)
- For ARM devices: [otdfctl-0.28.0-windows-arm64.zip](https://github.com/opentdf/otdfctl/releases/download/v0.28.0/otdfctl-0.28.0-windows-arm64.zip)

2. **Extract the ZIP file:**
- Right-click the downloaded file
- Select "Extract All..."
- Choose a location and create a folder: `%USERPROFILE%\otdfctl`
- The executable will be in this folder (you may need to navigate into a subfolder)
Comment on lines +178 to +179
Copy link

Copilot AI Dec 19, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The instruction to 'create a folder' during extraction is unclear. Users should extract the ZIP file first, then move the executable to %USERPROFILE%\otdfctl. The current wording suggests creating the folder before extraction, which may confuse users about where to extract the files initially.

Suggested change
- Choose a location and create a folder: `%USERPROFILE%\otdfctl`
- The executable will be in this folder (you may need to navigate into a subfolder)
- Choose any temporary location (for example, your `Downloads` folder) and complete the extraction
- After extraction, create the folder `%USERPROFILE%\otdfctl` if it doesn't already exist
- Move `otdfctl.exe` from the extracted folder into `%USERPROFILE%\otdfctl`

Copilot uses AI. Check for mistakes.
Comment on lines +171 to +179
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

There are a couple of areas for improvement in the Windows installation instructions:

  1. Hardcoded Links: The download links on lines 165-166 point to a specific version (v0.28.0). These will become outdated with the next release. It's better to direct users to the "Latest Release" page where they can find the correct assets.
  2. Incorrect Extraction Path: The note on line 172 mentions that the user might need to navigate into a subfolder. However, the .zip archives for Windows contain the otdfctl.exe executable at the root, so this note is misleading and should be removed.
Suggested change
1. **Download the file** for your system:
- For most PCs: [otdfctl-0.28.0-windows-amd64.zip](https://github.com/opentdf/otdfctl/releases/download/v0.28.0/otdfctl-0.28.0-windows-amd64.zip)
- For ARM devices: [otdfctl-0.28.0-windows-arm64.zip](https://github.com/opentdf/otdfctl/releases/download/v0.28.0/otdfctl-0.28.0-windows-arm64.zip)
2. **Extract the ZIP file:**
- Right-click the downloaded file
- Select "Extract All..."
- Choose a location and create a folder: `%USERPROFILE%\otdfctl`
- The executable will be in this folder (you may need to navigate into a subfolder)
1. **Download the file** for your system from the [latest release page](https://github.com/opentdf/otdfctl/releases/latest). Look for the `.zip` file that matches your system architecture (e.g., `otdfctl-x.y.z-windows-amd64.zip`).
2. **Extract the ZIP file:**
- Right-click the downloaded file
- Select "Extract All..."
- Choose a location and create a folder: `%USERPROFILE%\otdfctl`
- The executable will be in this folder.


3. **Add to PATH:**
- Press `Windows key` and search for "Environment Variables"
- Click "Edit environment variables for your account"
- In the "User variables" section at the top, find and select "Path", then click "Edit...". (If "Path" doesn't exist, click "New..." to create it).
- Click "New" and add the folder path where you extracted `otdfctl.exe` (e.g., `%USERPROFILE%\otdfctl`)
Copy link

Copilot AI Dec 19, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The example path %USERPROFILE%\otdfctl does not match the suggested extraction location from step 2 (C:\Program Files\otdfctl). This inconsistency may confuse users. Either use the same path in both places or clarify that users should use whichever path they chose during extraction.

Suggested change
- Click "New" and add the folder path where you extracted `otdfctl.exe` (e.g., `%USERPROFILE%\otdfctl`)
- Click "New" and add the folder path where you extracted `otdfctl.exe` (e.g., `C:\Program Files\otdfctl`)

Copilot uses AI. Check for mistakes.
- Click "OK" on all windows

4. **Restart your command prompt or PowerShell** for the changes to take effect.

</details>
Comment on lines +162 to +190
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The manual installation steps for Windows are a good start. As you asked for feedback on this, here are a couple of suggestions to improve the user experience:

  1. Clarify Extraction Step: The instruction on line 179, "The executable will be in this folder (you may need to navigate into a subfolder)", is a bit vague. It would be more helpful to be specific about the structure of the ZIP file. For example: "After extraction, you will find otdfctl.exe inside a folder like otdfctl-0.28.0-windows-amd64. Move otdfctl.exe to the %USERPROFILE%\otdfctl folder you created."

  2. Automate with a Script: For a much smoother experience, you could provide a PowerShell script to automate the download, extraction, and PATH update. Users could run it with a single command. Here's an example:

    # Set variables
    $version = "0.28.0" # This would be updated with releases
    $arch = "amd64" # or "arm64"
    $url = "https://github.com/opentdf/otdfctl/releases/download/v$version/otdfctl-$version-windows-$arch.zip"
    $installDir = "$env:USERPROFILE\otdfctl"
    $zipFile = "$env:TEMP\otdfctl.zip"
    
    # Create installation directory if it doesn't exist
    if (-not (Test-Path -Path $installDir)) {
        New-Item -ItemType Directory -Path $installDir | Out-Null
    }
    
    # Download and extract
    Write-Host "Downloading otdfctl v$version..."
    Invoke-WebRequest -Uri $url -OutFile $zipFile
    Write-Host "Extracting to $installDir..."
    Expand-Archive -Path $zipFile -DestinationPath $installDir -Force
    
    # Add to user's PATH if not already present
    $currentUserPath = [System.Environment]::GetEnvironmentVariable('Path', 'User')
    if ($currentUserPath -notlike "*$installDir*") {
        $newPath = "$currentUserPath;$installDir"
        [System.Environment]::SetEnvironmentVariable('Path', $newPath, 'User')
        Write-Host "Added '$installDir' to your PATH. Please restart your terminal for the changes to take effect."
    } else {
        Write-Host "'$installDir' is already in your PATH."
    }
    
    # Clean up
    Remove-Item $zipFile
    
    Write-Host "Installation complete."
  3. Package Managers: Long-term, submitting otdfctl to a package manager like Winget or Scoop would be ideal for simplifying installation and updates.


---

## ✅ Verify Installation

After installation, open a **new** terminal window and run:

```bash
otdfctl --version
```

You should see output like:
```
otdfctl version 0.28.0
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Similar to other parts of the file, the version number here is hardcoded. This might confuse users if they install a different version than the one mentioned. It would be better to show a generic output to avoid confusion and make the documentation more version-agnostic.

Suggested change
otdfctl version 0.28.0
otdfctl version <VERSION>

```

If you see this, congratulations! 🎉 You've successfully installed otdfctl.

---

## 🔧 Troubleshooting

### "command not found" or "otdfctl is not recognized"

**On macOS/Linux:**
- Make sure you opened a **new** terminal window after installation
- Verify the file is in `/usr/local/bin/` by running: `ls -l /usr/local/bin/otdfctl`
- Check if `/usr/local/bin` is in your PATH: `echo $PATH`

**On Windows:**
- Make sure you opened a **new** Command Prompt or PowerShell window
- Verify the PATH was added correctly in Environment Variables
- Try searching for `otdfctl.exe` in File Explorer to confirm where it's located

### "Permission denied" on macOS/Linux

If you get a permission error, make sure the file is executable:
```bash
sudo chmod +x /usr/local/bin/otdfctl
```

### macOS: "otdfctl cannot be opened because the developer cannot be verified"

This is a security feature on macOS. To allow it:
```bash
sudo xattr -d com.apple.quarantine /usr/local/bin/otdfctl
```

---

## 📚 Next Steps

Now that otdfctl is installed, you can:
- Run `otdfctl --help` to see available commands
- Visit the [documentation](https://github.com/opentdf/otdfctl) for usage examples
Comment thread
b-long marked this conversation as resolved.
- Configure your first profile with `otdfctl profile create <name> <endpoint>`

---

## 🔄 Updating otdfctl

To update to a newer version, simply repeat the installation steps with the new version number. The new version will replace the old one.

To check for new releases, visit: https://github.com/opentdf/otdfctl/releases
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ The main goals are to:

## Usage

See [INSTALL.md](INSTALL.md) for installation instructions.

The CLI is configured via profiles. Use `otdfctl profile create <name> <endpoint>` (and optionally `--set-default`) to define how the CLI should connect to your platform instance.

Load up the platform (see its [README](https://github.com/opentdf/platform?tab=readme-ov-file#run) for instructions).
Expand Down
Loading