Security
How we handle your code
Last updated: August 28, 2026
You're trusting us with the most sensitive thing your product has: its source code. This page explains — in plain language — exactly what happens to it. No legalese; the legal version of our promises lives in the privacy policy.
The short version
- Your code is analyzed on our own servers and deleted as soon as the analysis finishes — we keep the report, never your codebase.
- No AI model ever sees your code, and it is never used to train one.
- GitHub access is read-only, repo-by-repo, revocable in one click.
- Everything runs in the EU (AWS Stockholm), HTTPS-only.
What happens to your code
When you upload a ZIP or connect a repository, your code lands in an isolated temporary workspace on our server. Open-source analysis tools scan it there, the report is generated — and then the code is erased.
Deletion isn't a cleanup job that might be forgotten: it's built into the analysis itself and runs even when an analysis fails halfway. That applies to every path — uploaded archives, GitHub snapshots, pull-request reviews and every working copy made along the way.
What we keep is your report: scores and findings, which reference file paths and line numbers. Two honest nuances: a few performance findings include a short excerpt of the flagged line (capped at 200 characters) so you can see what was matched, and when we detect a secret we record its type and location — never the secret's value. We also never test whether a detected key is live.
Seven checks before we read a single file
Every uploaded archive goes through a safety gauntlet before analysis starts:
- ZIP-bomb detection — archives that expand more than 100× are rejected.
- Path-traversal protection — entries that try to escape their folder (
../, absolute paths) are rejected. - Symlink rejection — any symbolic link aborts the upload.
- Hard size caps — 1 GB archive, 2 GB extracted, 10,000 files max.
- Executable rejection — Windows executables and script droppers (.exe, .bat, .ps1…) abort the upload.
- A 5-minute timeout on extraction.
- Cleanup on failure — a failed extraction deletes everything it wrote, plus a final path re-check so an archive can never touch the server's own files.
No AI ever sees your code
MergeSafe's analysis is static analysis, run by the same industry-standard open-source scanners professional security teams use — on our own servers. There is no AI-model SDK anywhere in the analysis pipeline: your code is never sent to ChatGPT, Claude, or any other model, for any purpose, and never used to train one.
The AI-ready fix prompts in your report are generated text written for your AI assistant — producing them involves no AI and no transmission of your code.
For full transparency: during an analysis the server may download scanner rule packs (rules come down; code doesn't go up) and check that your dependencies exist on public registries by sending package names only. Your code itself is never transmitted anywhere.
GitHub: we can read, never write
Repository access goes through our GitHub App, which you install repo-by-repo with read-only access. Signing in with GitHub only proves your identity and email — it grants no repository access by itself.
- Our GitHub client is read-only by construction — the code contains no write operation at all.
- We download a one-off snapshot of the branch being analyzed — never a credentialed clone on disk.
- Every request is pinned to
api.github.com— the client refuses any other destination. - You can uninstall the app or revoke access at any time from GitHub, effective immediately.
Infrastructure
- EU hosting — the API, the analysis engine and the database run on AWS in Stockholm, Sweden (eu-north-1).
- HTTPS everywhere — TLS certificates are auto-renewed (Let's Encrypt) and plain HTTP redirects to HTTPS.
- One door — the server firewall accepts inbound traffic on port 443 only; the SSH port is closed.
- The database is not on the internet — PostgreSQL is reachable only from inside the server's private network.
- Bounded logs — server logs rotate with a hard size cap, and the API deliberately avoids logging personal identifiers.
- Locked-down CORS — the API answers only to mergesafe.io origins, not to any website.
Your account and keys
- No passwords, by design — sign-in is exclusively via GitHub or Google. We never see, store, or manage a password for you.
- API keys are unrecoverable secrets — 256 bits of cryptographic randomness, shown to you once, stored only as a SHA-256 hash. Rotating a key kills the old one instantly.
- Hardened session cookies — encrypted, HTTPS-only, inaccessible to JavaScript.
- Rate limiting on sensitive routes — and account deletion has its own dedicated lane, so nothing can lock you out of erasing your data.
- Deleting your account kills every session — the moment the account is gone, every previously issued login cookie stops working.
What we don't claim
We're an early-stage product, and we'd rather under-promise: MergeSafe does not yet hold a SOC 2 or ISO 27001 certification, and we haven't commissioned a third-party penetration test. When that changes, it will be announced here.
Our guarantee is structural instead: your code is deleted after every analysis, so there is simply nothing of yours sitting on our servers to breach.
Found a vulnerability?
If you believe you've found a security issue in MergeSafe, please email contact@mergesafe.io — it reaches the founder directly. Give us a reasonable window to fix the issue before disclosing it publicly, and we'll credit you if you'd like.