Skip to main content
Studio feature

Self-Hosted Docker

The full CanIShip audit engine — running entirely on your own machine or server. Same interface. Same ShipScore. Zero data leaving your infrastructure.

Why we built this

The cloud version of CanIShip is great for public URLs. But a lot of real work happens before anything is public — staging environments behind VPNs, local dev builds, internal tools that should never send URLs to a third-party server.

The Docker image is CanIShip repackaged so that everything runs on your hardware. Your URL never leaves your network. Your audit data lives in a volume you control. The only outbound call is a license check back to us once every 24 hours — after that, it works fully offline.

We also built this for CI/CD. If you want a quality gate that fails a GitHub Actions build when the ShipScore drops below 75, this is the way to do it.

Who it's for

🔒

Privacy-first teams

Your URLs, reports, and audit data never touch our servers. Stays entirely within your own infrastructure.

🏗️

CI/CD pipelines

Wire it into GitHub Actions, GitLab CI, or any pipeline. Set MIN_SCORE=75 and your build fails if quality drops.

🖥️

Local & VPN apps

Audit localhost, staging environments behind a VPN, or any URL your cloud scanner can't reach.

Before you start

DockerVersion 20+ recommended
RAM4 GB minimum — Chromium + Claude analysis needs headroom
Studio license keyFrom Settings → Docker License (below)
Anthropic API keyFrom console.anthropic.com — you pay for your own Claude usage
Internet (first run)Required to validate your license — then works offline for 24h

Quick start

Step 1 — Get your license key

Go to Settings → Docker License and click Generate license key. Keep it private — it authorises your container to run audits.

Step 2 — Pull the image

docker pull hanimebar/caniship:latest

Step 3 — Run it

docker run -p 3000:3000 \
  -e LICENSE_KEY=your-license-key \
  -e ANTHROPIC_API_KEY=sk-ant-... \
  -v caniship-data:/data \
  hanimebar/caniship:latest

Open http://localhost:3000 — same interface, fully local.

Auditing local or VPN apps

By default, private IP addresses are blocked to prevent SSRF. To audit an app on your local network, add two flags:

docker run -p 3000:3000 \
  -e LICENSE_KEY=... \
  -e ANTHROPIC_API_KEY=... \
  -e ALLOW_PRIVATE_IPS=true \
  --network host \
  -v caniship-data:/data \
  hanimebar/caniship:latest

--network host lets the container reach your machine's ports. Audit http://localhost:3001 or http://192.168.x.x directly.

GitHub Actions integration

Add your secrets under Settings → Secrets and Variables → Actions in your GitHub repo, then drop this workflow in:

# .github/workflows/quality-gate.yml
name: Quality Gate

on:
  push:
    branches: [main]
  pull_request:

jobs:
  audit:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Run CanIShip Audit
        uses: ./.github/actions/caniship
        with:
          url: https://staging.myapp.com
          description: >
            A project management SaaS. Users sign up, create workspaces,
            add tasks, and collaborate with their team.
          license_key: ${{ secrets.CANISHIP_LICENSE_KEY }}
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          depth: quick
          min_score: 75
          flows: "sign up, create workspace, add task"

The action pulls the image, starts the container, submits the audit, polls until complete, and uploads the JSON + HTML report as a build artifact.

If the score falls below min_score, the build exits with code 1 — your PR is blocked.

All environment variables

VariableDescription
LICENSE_KEYrequiredYour Studio license key from Settings
ANTHROPIC_API_KEYrequiredYour Anthropic API key from console.anthropic.com
SQLITE_PATHPath to the SQLite database inside the container
DATABASE_URLUse Postgres instead of SQLite: postgresql://user:pass@host:5432/db
OUTPUT_DIRWrite JSON + HTML report files here after each audit
REPORT_FORMATjson, html, or both
MIN_SCOREExit with code 1 if audit score falls below this — useful for CI/CD
ALLOW_PRIVATE_IPSSet to true to audit apps on your local network (192.168.x.x, localhost)
PORTPort the server listens on
HEADLESSSet to true to disable the web UI and run API-only
WEBHOOK_SECRETSigns webhook payloads with X-CanIShip-Signature

License & offline use

  • Your license is validated against caniship.actvli.com on startup
  • After a successful validation, the container works offline for up to 24 hours
  • Audits in progress are never interrupted by a validation check
  • Check last validation time: cat /data/.license_state
  • Your ANTHROPIC_API_KEY is used locally — it is never sent to Äctvli servers

Ready to set up?

Get your license key →