Skip to main content

Supported languages and frameworks

On the languages below, Vulkro does full source analysis. It finds your endpoints, builds the route table, reads the access-control model, maps findings to OWASP API Top 10 categories, tracks tainted data with framework awareness, and matches dependencies against a local CVE bundle. Everything runs offline.

Every language is Free

No language is a tier. Every extractor below, Java and Spring included, runs on Free with no account, on one repository at a time. Pro gates features, never languages: see Pricing for what it adds. Salesforce (Apex, Lightning Web Components, Aura, Flow, Visualforce, metadata) is the separate Vulkro for Salesforce product (vulkro-sf), also Free on one project.

Java and Spring are first-class: endpoint extraction, access-control extraction from annotations and the security filter chain, 30 dedicated Java detectors, cross-method taint, and Maven dependency-CVE matching. See the Java and Spring page.

Capability matrix

LanguageEndpoint discoveryAccess modelInterprocedural taintDedicated detectorsSCA ecosystem
PythonYesYesYesYesPyPI
JavaScript / TypeScriptYesYesYesYesnpm
GoYesYesYesYesGo modules
Java / SpringYesYesYes (same-file)Yes (30)Maven
PHPNoNoSingle functionYes(manifest read; no advisory bundle yet)
CNoNoSingle functionYesNo
C++NoNoSingle functionYesNo

For Python, JavaScript, TypeScript, and Go, taint tracking follows the project call graph, including across files (up to a bounded depth). Java taint follows call chains within a single file; it does not yet cross file boundaries. See Taint analysis.

C, C++ and PHP

These three are newer and shallower than the four web languages above, and the table says so. Each gets a fleet of dedicated detectors (the dangerous C library calls, uncontrolled format strings, insecure temporary files and randomness, unchecked privilege drops, allocation-size overflows and use-after-free shapes for C and C++; SQL, command, code and template injection, file inclusion, unsafe unserialize and file upload, SSRF, weak cryptography, type-juggling authentication bypass, header and mail injection, and LDAP/XPath injection for PHP) plus taint tracking inside a single function: input from a request superglobal, a Laravel, Symfony, PSR-7 or CodeIgniter request object, argv, getenv, read or recv reaching a dangerous call in the same function is reported as proven. A value that leaves the function is not followed. There is no route discovery and no access model for these languages, and C and C++ are not checked for memory safety in the general sense: no bounds proofs, no value-range analysis. The C detectors also run on C++ sources.

For any other stack, Vulkro still runs its language-agnostic passes: secrets, infrastructure-as-code, container scanning, and dependency-CVE matching (for the ecosystems listed below). What it cannot do without first-class support is framework-aware endpoint discovery and taint tracking. If your stack is missing, email support@vulkro.com with the framework name and a small example repo. We add coverage based on real demand.

Web frameworks

Python

FastAPI, Flask, Django, Django REST Framework (DRF), Django Ninja, Starlette, aiohttp, Tornado, Litestar.

JavaScript / TypeScript

Express, Fastify, NestJS, Next.js (App Router and Pages Router), Hono, Koa, Hapi, Elysia, AdonisJS, tRPC.

Go

net/http, Gin, Echo, Chi, gorilla/mux, Fiber.

Java / Spring

Spring MVC and Spring WebFlux (@GetMapping / @PostMapping / @PutMapping / @DeleteMapping / @PatchMapping / @RequestMapping, class-level base paths included) and JAX-RS (@Path with @GET / @POST / @PUT / @DELETE / @PATCH / @HEAD / @OPTIONS). See Java and Spring.

Salesforce

Salesforce (Apex, Lightning Web Components, Aura, Flow, Visualforce, and metadata) is covered by the separate Vulkro for Salesforce product (the vulkro-sf binary), not by this scanner. See the Vulkro for Salesforce docs.

Cross-cutting

  • GraphQL (Apollo, graphql-yoga, Strawberry, graphene)
  • gRPC
  • WebSocket (ws, Socket.IO, Starlette WebSockets)
  • React (client-side surface for XSS and DOM-sink analysis)
  • Angular (same)

Package ecosystems for dependency-CVE matching

EcosystemManifests parsedResolved version fromStatus
npmpackage.jsonpackage-lock.jsonParsed
PyPIrequirements*.txt, Pipfile, pyproject.tomlpoetry.lock, Pipfile.lockParsed
Go modulesgo.modgo.mod (MVS)Parsed
crates.ioCargo.tomlCargo.lock (manifest dir or workspace root)Parsed
Mavenpom.xml (<dependencies>)<version> / <properties> (no parent-POM / BOM)Parsed
Gradlebuild.gradle, build.gradle.kts-Not yet
RubyGemsGemfile, Gemfile.lock-Not yet
Packagistcomposer.json, composer.lock-Not yet
NuGet*.csproj, packages.config-Not yet

Maven (pom.xml) is parsed for CVE matching, so a Java / Spring project gets dependency coverage on top of its source analysis. Gradle dependencies are not parsed yet: a Gradle project is still detected as Java and scanned for code, but its build.gradle dependencies do not produce CVE findings. Cargo (Rust) and crates.io are dependency-CVE only: they add supply-chain coverage without adding Rust source analysis.

The live OSV lookup covers every Parsed ecosystem. Fully offline (VULKRO_OFFLINE=1) matching also needs that ecosystem's file in the local CVE bundle. The default bundle ships npm + PyPI; a wider bundle can add Go, Maven, and crates.io. Go, Cargo, and Maven findings are not in the reachability call-shape set, so they come without a [reachable] / [unreachable] tag. Secrets, IaC, and container scanning run on every repo.

Linux distro packages (container scanning)

For vulkro container against Docker images: Alpine, Debian, Ubuntu, Rocky Linux. Distro coverage is opt-in because the per-distro CVE feed is large; enable it with the container ecosystem flag on vulkro update.

Infrastructure-as-code

Vulkro statically checks these formats for misconfiguration:

  • Terraform (*.tf)
  • Kubernetes manifests (*.yaml)
  • Helm charts (values.yaml, templates)
  • Docker Compose (docker-compose.yml, compose.yaml)
  • Dockerfiles
  • nginx, Apache (nginx.conf, *.conf)

Secrets scanning (vulkro scan --scope src) and infrastructure misconfiguration checks work on any text-based file, regardless of language.

What "not yet supported" means in practice

If your stack uses a language or framework not on the lists above:

  • Endpoint discovery will not enumerate your routes automatically.
  • Taint analysis falls back to generic sources / sinks and may miss framework-specific patterns.
  • Reachability gating is less precise: findings tagged reachable are over-reported to be safe, rather than missed.
  • Secrets, dependency-CVE, IaC, and container scans are unaffected and keep working.

The honest read: Vulkro is most accurate on the stacks listed here. We add new frameworks every release based on what paying customers ship.