Language Support
USM's scanner detects services, routes, and data models across 12 languages and 30+ frameworks.
Supported Languages
| Language | Manifest | Runtime | Frameworks |
|---|---|---|---|
| TypeScript/JavaScript | package.json | node | Next.js, Express, Hono, NestJS |
| Python | pyproject.toml / requirements.txt | python | FastAPI, Flask, Django |
| Go | go.mod | go | chi, gin, echo, net/http |
| Rust | Cargo.toml | rust | Axum, Actix, Rocket |
| Java/Kotlin | pom.xml / build.gradle | jvm | Spring Boot, Javalin, Quarkus |
| C#/.NET | .csproj / .sln | dotnet | ASP.NET Core, Minimal APIs |
| Ruby | Gemfile | ruby | Rails, Sinatra |
| PHP | composer.json | php | Laravel, Symfony, Slim |
| Elixir | mix.exs | elixir | Phoenix |
| Swift | Package.swift | swift | Vapor |
| Scala | build.sbt | jvm | Akka HTTP, Play, Tapir |
| C/C++ | CMakeLists.txt / Makefile | native | Crow, Drogon, Pistache |
Route Detection Patterns
| Language | Framework | Example | Regex Pattern |
|---|---|---|---|
| TypeScript/JavaScript | Next.js | app.get('/users', handler) | `app.(get |
| TypeScript/JavaScript | Express | app.get('/users', handler) | `app.(get |
| TypeScript/JavaScript | Hono | app.get('/users', handler) | `app.(get |
| TypeScript/JavaScript | NestJS | app.get('/users', handler) | `app.(get |
| Python | FastAPI | @app.get('/users') | `@(app |
| Python | Flask | @app.get('/users') | `@(app |
| Python | Django | @app.get('/users') | `@(app |
| Go | chi | r.GET('/users', handler) | `.(GET |
| Go | gin | r.GET('/users', handler) | `.(GET |
| Go | echo | r.GET('/users', handler) | `.(GET |
| Go | net/http | r.GET('/users', handler) | `.(GET |
| Rust | Axum | .route('/users', get(handler)) | `.route('".*?(get |
| Rust | Actix | .route('/users', get(handler)) | `.route('".*?(get |
| Rust | Rocket | .route('/users', get(handler)) | `.route('".*?(get |
| Java/Kotlin | Spring Boot | @GetMapping('/users') | `@(Get |
| Java/Kotlin | Javalin | @GetMapping('/users') | `@(Get |
| Java/Kotlin | Quarkus | @GetMapping('/users') | `@(Get |
| C#/.NET | ASP.NET Core | [HttpGet('users')] | `[(Get |
| C#/.NET | Minimal APIs | [HttpGet('users')] | `[(Get |
| Ruby | Rails | get '/users' do | `(get |
| Ruby | Sinatra | get '/users' do | `(get |
| PHP | Laravel | Route::get('/users', ...) | `Route::(get |
| PHP | Symfony | Route::get('/users', ...) | `Route::(get |
| PHP | Slim | Route::get('/users', ...) | `Route::(get |
| Elixir | Phoenix | get '/users', UserController, :index | `(get |
| Swift | Vapor | routes.get('users') { req in } | `routes?.(get |
| Scala | Akka HTTP | path('users') { get { ... } } | path\(['"]?([^'"]+) |
| Scala | Play | path('users') { get { ... } } | path\(['"]?([^'"]+) |
| Scala | Tapir | path('users') { get { ... } } | path\(['"]?([^'"]+) |
| C/C++ | Crow | CROW_ROUTE(app, "/users") | CROW_ROUTE\([^,]+,\s*['"]([^'"]+) |
| C/C++ | Drogon | CROW_ROUTE(app, "/users") | CROW_ROUTE\([^,]+,\s*['"]([^'"]+) |
| C/C++ | Pistache | CROW_ROUTE(app, "/users") | CROW_ROUTE\([^,]+,\s*['"]([^'"]+) |
Data Model Detection
| ORM | Language | Detection |
|---|---|---|
| Prisma | TypeScript | schema.prisma file |
| SQLAlchemy | Python | Class definitions in models.py |
| Django ORM | Python | Class definitions in models.py |
| GORM | Go | Struct definitions with gorm tags |
| Diesel | Rust | table! macros in schema.rs |
| Hibernate | Java | @Entity annotations in .java |
| Entity Framework | C# | DbSet properties in DbContext |
| ActiveRecord | Ruby | Classes inheriting ApplicationRecord |
| Eloquent | PHP | Classes extending Model |
| Ecto | Elixir | schema definitions in .ex files |
Custom Detection Rules
Add custom manifest and route patterns in usmconfig.json:
json
{
"detection": {
"manifests": [
{ "pattern": "**/my-framework.config", "language": "custom", "frameworks": ["my-framework"] }
],
"routes": [
{ "framework": "my-framework", "pattern": "route\\.(get|post)\\(['"]([^'"]+)", "method_group": 1, "path_group": 2 }
]
}
}