Installing ATCR Credential Helper#
The ATCR credential helper enables Docker to authenticate with ATCR registries using ATProto device authorization.
Quick Install (Recommended)#
Using install script#
Linux/macOS:
curl -fsSL https://atcr.io/install.sh | bash
Or download and run manually:
curl -fsSLO https://atcr.io/install.sh
chmod +x install.sh
./install.sh
Custom installation directory:
INSTALL_DIR=$HOME/.local/bin curl -fsSL https://atcr.io/install.sh | bash
Windows (PowerShell as Administrator):
iwr -useb https://atcr.io/install.ps1 | iex
Or download and run manually:
Invoke-WebRequest -Uri https://atcr.io/install.ps1 -OutFile install.ps1
.\install.ps1
Using Homebrew (macOS and Linux)#
# Add the ATCR tap
brew tap atcr-io/tap
# Install the credential helper
brew install docker-credential-atcr
The Homebrew formula supports:
- macOS: Intel (x86_64) and Apple Silicon (arm64)
- Linux: x86_64 and arm64
Homebrew will automatically download the correct binary for your platform.
Manual Installation#
-
Download the binary for your platform from GitHub Releases
- Linux amd64:
docker-credential-atcr_VERSION_Linux_x86_64.tar.gz - Linux arm64:
docker-credential-atcr_VERSION_Linux_arm64.tar.gz - macOS amd64:
docker-credential-atcr_VERSION_Darwin_x86_64.tar.gz - macOS arm64:
docker-credential-atcr_VERSION_Darwin_arm64.tar.gz - Windows amd64:
docker-credential-atcr_VERSION_Windows_x86_64.zip - Windows arm64:
docker-credential-atcr_VERSION_Windows_arm64.zip
- Linux amd64:
-
Extract and install:
Linux/macOS:
tar -xzf docker-credential-atcr_VERSION_OS_ARCH.tar.gz sudo install -m 755 docker-credential-atcr /usr/local/bin/Windows (PowerShell as Administrator):
Expand-Archive docker-credential-atcr_VERSION_Windows_x86_64.zip Move-Item docker-credential-atcr.exe C:\Windows\System32\ -
Verify installation:
docker-credential-atcr version
From Source (requires Go 1.23+)#
go install atcr.io/cmd/credential-helper@latest
sudo mv $(go env GOPATH)/bin/credential-helper /usr/local/bin/docker-credential-atcr
Configuration#
1. Configure Docker#
Add the credential helper to Docker's config:
# Create or edit ~/.docker/config.json
cat > ~/.docker/config.json << 'EOF'
{
"credHelpers": {
"atcr.io": "atcr"
}
}
EOF
Or add to existing config:
{
"credHelpers": {
"atcr.io": "atcr",
"docker.io": "desktop"
}
}
2. Authenticate#
The credential helper will automatically trigger authentication when you first push/pull:
docker push atcr.io/yourhandle/myapp:latest
This will:
- Open your browser for device authorization
- Display a code to confirm
- Store credentials in
~/.atcr/device.json - Exchange for registry JWT and proceed with push
3. Manual Authentication (optional)#
If you prefer to authenticate before pushing:
# This triggers the device flow manually
echo "atcr.io" | ATCR_AUTO_AUTH=1 docker-credential-atcr get > /dev/null
Usage#
Once configured, Docker commands work normally:
# Push image
docker push atcr.io/alice.bsky.social/myapp:latest
# Pull image
docker pull atcr.io/bob.bsky.social/coolapp:v1.2.3
# Build and push
docker build -t atcr.io/alice.bsky.social/web:latest .
docker push atcr.io/alice.bsky.social/web:latest
Multiple Registries#
The credential helper supports multiple ATCR instances (e.g., production + self-hosted):
{
"credHelpers": {
"atcr.io": "atcr",
"registry.mycompany.com": "atcr"
}
}
Credentials are stored per AppView URL in ~/.atcr/device.json.
Troubleshooting#
"credential helper not found"#
Ensure docker-credential-atcr is in your PATH:
which docker-credential-atcr
If not found, add the installation directory to PATH:
export PATH="/usr/local/bin:$PATH"
"No valid credentials found"#
Enable auto-auth and retry:
docker push atcr.io/yourhandle/myapp:latest
"authorization failed"#
Check that you can access the AppView:
curl -v https://atcr.io/v2/
For local development (HTTP):
{
"insecure-registries": ["localhost:5000"]
}
Add to /etc/docker/daemon.json and restart Docker:
sudo systemctl restart docker
Logout#
To remove stored credentials:
echo "atcr.io" | docker-credential-atcr erase
Or delete the credentials file:
rm ~/.atcr/device.json
Uninstall#
# Remove binary
sudo rm /usr/local/bin/docker-credential-atcr
# Remove credentials
rm -rf ~/.atcr
# Remove from Docker config
# Edit ~/.docker/config.json and remove "atcr" from credHelpers
Platform Support#
| Platform | Arch | Status |
|---|---|---|
| Linux | amd64 | ✅ Supported |
| Linux | arm64 | ✅ Supported |
| macOS | amd64 (Intel) | ✅ Supported |
| macOS | arm64 (Apple Silicon) | ✅ Supported |
| Windows | amd64 | ✅ Supported |
| Windows | arm64 | ✅ Supported |
Security#
- Credentials are stored in
~/.atcr/device.jsonwith0600permissions (owner read/write only) - Device secrets are issued per-device and can be revoked via the AppView web UI
- Authentication uses ATProto OAuth with device authorization flow
- No passwords are stored locally
Development#
See CLAUDE.md for development docs.