Platform
Everything you need to host code that matters
The git hosting your team already knows, with rules the server always enforces. Here is what the platform offers.
Every day
The git you know, with no surprises
Nothing changes for developers: clone, branch, push and tag just like today. The server is what makes the difference.
-
File browser
Syntax highlighting and README preview.
-
History and blame
Paginated history, line-by-line blame, branch comparison.
-
Compare
Diffs between branches, tags and commits, even on long histories.
-
Search
Across the repositories you can access, and only those.
-
Organizations and projects
Inherited roles and per-user restrictions.
-
HTTPS and SSH
Clone and push over the protocol your team already uses.
Server-side protections
Rules nobody can bypass, not even owners and admins
Protections are checked by the server before any push is accepted. They don't depend on hooks installed on developers' machines, and no role can override them.
-
Branches protected by pattern
main, release/*, develop: for each pattern, choose the minimum role allowed to push. Force-pushes and deletions are blocked.
-
Immutable release tags
A tag like v2.4.0 is created once and can never be moved or deleted: the same version number always points to the same code.
-
Rejections explained in your language
Anyone attempting a blocked operation sees, right in their terminal, which rule stopped them and what to do next, in English or Italian according to their preference.
-
Per-user restrictions
Limit a single user's role on a repository, for example read-only access for a contractor.
~/projects/api $ git push --force origin v2.4.0remote:remote: CodeQuay: push REJECTEDremote: - refs/tags/v2.4.0: tag 'v2.4.0' is immutableremote: (pattern v*) and cannot be moved; to ship aremote: fix, publish a new versionremote: ! [remote rejected] v2.4.0 -> v2.4.0 (pre-receive hook declined) Secrets and push policies
Credentials are stopped before they enter your history
Once a key committed by mistake lands in the history, it has to be treated as compromised. CodeQuay scans the new files in every push and rejects those containing recognizable credentials.
Detected credentials
- PEM private keys (RSA, EC, DSA, OpenSSH, PGP)
- AWS access keys
- Google API keys
- Stripe live keys
- GitHub tokens, including fine-grained
- Slack tokens
- CodeQuay personal tokens
Company content rules
- Commit message format enforced with a regular expression, for example
feat|fix|docs: …. - Maximum file size: heavy binaries stay out of the repository.
- The audit log records the rule that was violated, never the secret itself.
~/projects/api $ git push origin feature/paymentsWriting objects: 100% (7/7), 2.31 KiB | 2.31 MiB/s, done.remote:remote: CodeQuay: push REJECTEDremote: - possible secret in 'config/prod.env' line 12:remote: AWS access key (AKIA7Q2M…(20 characters));remote: remove it from the history (a later commit isremote: not enough) and revoke the credentialremote: ! [remote rejected] feature/payments -> feature/payments (pre-receive hook declined) Modern access
Strong identities, for people and for scripts
Users sign in the way they prefer; scripts use credentials limited in time and scope.
- Passkeys
- Sign in with your fingerprint, face or device PIN, with no password to remember.
- Authenticator apps
- Two-factor authentication set up with a QR code, with recovery codes.
- Single sign-on
- Google, Apple, Microsoft 365 and OIDC-compatible company identity providers.
- Tokens with mandatory expiry
- Separate scopes for API and git, one-year maximum lifetime, instant revocation.
- HTTPS and SSH
- Clone and push over the protocol your team already uses, under the same rules.
- Brute-force protection
- Rate limits and temporary lockout after repeated failed sign-ins.
- New device verification
- Signing in with just a password from a device never used before requires a code sent by email.
- Security emails
- Alerts for sign-ins from unrecognized devices, passkey and 2FA changes, password or email changes, new tokens and SSH keys.
Teams and collaboration
The right people, on the right code
Separate spaces for personal and company work, invitations that expire, and access limited to a single repository when that's what you need.
-
Personal and company spaces
Every account has a personal space for tests and experiments, visible only to you and the people you invite. Work code lives in company organizations, under the administrators' control.
-
Invite by email or username
Owners and maintainers invite a colleague with a role never higher than their own. Invitations last 7 days and can be resent or revoked.
-
Collaborators on a single repository
A contractor can work on one repository without seeing the project's other repositories.
-
Sign-up under control
Administrators decide whether sign-up is open, limited to company domains or closed. An invitation is always enough to join.
-
In English and Italian
Console, emails and git messages in the language each user chooses.
-
Per-repository mirror to GitHub
Maintainers turn on automatic replication of every push to GitHub from the repository settings.
Performance
Fast, even with a long history
Code browsing, history, blame and diffs stay smooth even on very large repositories. Git indexes are maintained every night, with no action needed on your side.
< 2 s
p95 for history, diff and blame
100k
commits in the test repository used for the benchmark
CodeQuay Actions
Built-in CI/CD, with GitHub Actions syntax
Workflows in .github/workflows run on CodeQuay runners, right next to the code and under the same rules. The syntax is the one your team already knows: usually only the registry, secrets and runner labels change.
- Triggers
- Pushes to branches and tags with path filters, manual runs with inputs, scheduled runs and reusable workflows.
- Encrypted secrets and variables
- Per organization, project, repository and environment. Never returned by the API, masked in the logs.
- Environments with approvals
- A production deployment starts only after approval, and only from allowed branches or tags.
- Artifacts and cache
- upload-artifact and cache work as on GitHub; artifacts can be downloaded from the console.
- Actions from an internal mirror
- Public actions are served from a mirror on CodeQuay: runs don't depend on github.com.
- Containers or the runner host
- Jobs run in Docker containers or directly on the runner host, for deployments with ssh, helm or kubectl.
Execution is built on act (nektos/act), which is open source. In the console: per-step logs, re-running failed jobs, cancelling, approving deployments.
on: push: tags: ["v*"]jobs: deploy: runs-on: [self-hosted, linux] environment: production steps: - uses: actions/checkout@v4 - run: ./deploy.sh ${{ github.ref_name }} Migration
From GitHub to CodeQuay, without stopping your CI
The import brings over branches and tags and scans the entire history for secrets. The mirror then replicates every push to GitHub, where your GitHub Actions CI can keep running. The format stays standard git: no lock-in. Or move your workflows to CodeQuay Actions, with the same syntax.
Why CodeQuay
More of what sets CodeQuay apart
Want to see the protections at work on your own repositories?
Create your account and start free. For a dedicated instance or a custom contract, contact us: the people who build CodeQuay will get back to you.