All Articles
Security

Why I Didn't Add Trivy to a Small Server That Already Has Dependabot

Shahid MalikBy Shahid MalikSeptember 4, 20265 min read

Trivy is a genuinely good scanner. It's also solving problems a small, non-containerized server on Dependabot mostly doesn't have. Here's the actual overlap, the actual gap, and why adding it to Tabeer.ai right now would be tooling for its own sake.

Setting up Dependabot on Tabeer.ai's repo led to the obvious next question: what about Trivy? It's a well-regarded, genuinely capable open-source scanner, and it comes up constantly in "security tooling for your CI pipeline" lists. I didn't add it. Not because it's bad — because almost everything it's actually good at doesn't apply to this specific server, and the part that does overlaps with what Dependabot already covers for free.

What Each Tool Actually Does

Dependabot is GitHub-native, zero infrastructure: a config file (dependabot.yml) telling it which package ecosystems to watch, and it opens pull requests when a dependency has a known vulnerability or a new version available. No CI step, no scanning job, no container, nothing to maintain beyond reviewing the PRs it opens.

Trivy is a scanner you run — typically as a CI step — that checks for vulnerabilities across several different surfaces: container images, filesystem dependencies, Infrastructure-as-Code misconfigurations (Terraform, CloudFormation, Kubernetes manifests), and secrets accidentally committed to a repo. It's broader in scope than Dependabot, and it's the right call for a lot of setups.

Where They Actually Overlap

Filesystem/dependency scanning — Trivy can scan a requirements.txt or package.json for known-vulnerable versions, which is the exact same job Dependabot is already doing, continuously, without a CI step. Running Trivy for this specific capability on a repo that already has Dependabot configured is duplicate coverage of the one thing they're both actually built to catch, at the cost of a CI job that has to run, has to be maintained, and can fail a build if a threshold is set wrong.

Where Trivy's Real Value Lives — and Doesn't Apply Here

Trivy's strongest, most differentiated use case is container image scanning: checking a Docker image for OS-package and application-layer vulnerabilities baked into the image itself, not just what's declared in a manifest file. That's genuinely valuable — and genuinely irrelevant to a project with zero Dockerfiles, deploying straight to an EC2 instance via rsync and systemd units. There's no image to scan. Half of Trivy's actual differentiated value has nothing to attach to on this kind of setup.

Its second strongest use case is IaC misconfiguration scanning — catching an S3 bucket set to public, an overly permissive security group, that kind of thing, in Terraform or CloudFormation before it's ever applied. Tabeer.ai's infrastructure is one manually-configured EC2 instance with an nginx config and a handful of systemd units — no IaC layer exists for Trivy to scan, because there's no IaC at all yet.

Its third use case, secret scanning, is already covered natively — GitHub's own secret scanning does this without adding a separate tool, and the actual practice on this project (every credential in a chmod 600 env file referenced via EnvironmentFile=, never committed) is the thing that actually prevents secret leaks, not a scanner that catches them after the fact.

The Actual Decision Rule

Add a security scanner when it covers a surface you actually have, not because it's a good tool in the abstract. Concretely:

  • Just dependency vulnerabilities, no containers, no IaC → Dependabot alone is the right amount of tooling. This is where Tabeer.ai is right now.
  • You've containerized (even one service) → Trivy's image scanning becomes genuinely additive, not duplicate, coverage — add it then.
  • You've adopted Terraform/CloudFormation/K8s manifests → same logic, add Trivy's IaC scanning at that point, not before.

Running a scanner that duplicates existing coverage isn't neutral — it's a CI job someone has to maintain, a build step that can flake or slow the pipeline, and one more tool's config to keep current, for a category of finding you're already catching. On a small project, that cost is more real than the marginal security benefit. Match the tooling to the actual attack surface, not to what a "recommended security stack" checklist says you should be running.

If you're deciding what security tooling actually earns its place in your CI pipeline versus what's there out of habit, get in touch.

Related Articles

Security

Rate Limiting, Token Blacklisting, and Admin MFA — Auth Hardening for Tabeer.ai

Part two of the production-readiness checklist: authentication and account security. Five of fifteen items were genuinely missing — rate limiting, real logout, admin MFA, consent records, and self-service data export/deletion — and here's exactly how each got fixed without a new dependency for most of them.

10 min read
Shahid Malik - AI-First Odoo Consultant

Shahid Malik

AI-First Odoo ERP Specialist

Shahid Malik is an AI-first Odoo consultant helping businesses solve complex ERP and business process challenges. His work combines Odoo consulting, process optimization, automation, integrations, migrations, and practical AI solutions to build scalable and reliable business systems.

Book a consultation for your Odoo project
Discuss Your Odoo Project