Analyze
What Brunel detects
The complete list of frameworks, datastores, queues, integrations and platforms Brunel recognizes, per ecosystem, generated from the detection rules themselves.
Brunel runs 16 detectors on every analysis: languages, Node.js, Python, Go, JVM (Java and Kotlin), PHP, Ruby, Rust, Dockerfiles, Compose files, environment variables, ORMs and migrations, workloads, CI, existing infrastructure and integrations.
Manifests read
| Ecosystem | Files |
|---|---|
| Node.js and Bun | package.json (every workspace), package-lock.json, pnpm-lock.yaml, yarn.lock, bun.lockb |
| Python | pyproject.toml, requirements*.txt, Pipfile, setup.py, manage.py |
| Go | go.mod |
| JVM | pom.xml, build.gradle, build.gradle.kts |
| PHP | composer.json |
| Ruby | Gemfile |
| Rust | Cargo.toml |
| Containers | Dockerfile*, docker-compose*.yml, compose*.yml |
| Data | prisma/schema.prisma, drizzle.config.*, alembic.ini, config/database.yml, migrations/ |
| Workloads | Procfile, Compose commands, sidekiq.yml, schedule.rb, Laravel console kernel, vercel.json crons |
| CI | GitHub Actions, GitLab CI, CircleCI, Jenkins, Azure Pipelines, Bitbucket Pipelines |
| Current platform | Terraform, Kubernetes, Helm, Serverless Framework, Vercel, Netlify, Heroku, Fly, Render, Railway, Platform.sh, AWS Amplify, App Runner, Elastic Beanstalk, Google App Engine, Cloudflare Workers |
Services from Compose files
Images in Compose files are recognized as PostgreSQL, MySQL, MongoDB, Redis, Memcached, Elasticsearch, Meilisearch, ClickHouse, RabbitMQ, Kafka, NATS, object storage (MinIO-style) and reverse proxies.
Packages recognized
Every rule below is the exact table the detectors use. A string matches the package name exactly (case-insensitive); a pattern matches the whole name.
framework
| Detected | From these packages |
|---|---|
nextjs | npm: next |
nuxt | npm: nuxt |
remix | npm: @remix-run\/(node|serve|react) |
react-router | npm: @react-router/node, @react-router/serve |
sveltekit | npm: @sveltejs/kit |
astro | npm: astro |
express | npm: express |
fastify | npm: fastify |
nestjs | npm: @nestjs/core |
koa | npm: koa |
hono | npm: hono |
vite | npm: vite |
react | npm: react |
vue | npm: vue |
angular | npm: @angular/core |
django | pypi: django |
flask | pypi: flask |
fastapi | pypi: fastapi |
gin | go: github.com/gin-gonic/gin |
echo | go: github\.com\/labstack\/echo(\/v\d+)? |
fiber | go: github\.com\/gofiber\/fiber(\/v\d+)? |
chi | go: github\.com\/go-chi\/chi(\/v\d+)? |
spring-boot | maven: org\.springframework\.boot:spring-boot-starter(-web|-webflux)?, org\.springframework\.boot |
quarkus | maven: io\.quarkus:quarkus-(core|resteasy.*) |
micronaut | maven: io\.micronaut:micronaut-(http-server.*|runtime) |
laravel | composer: laravel/framework |
symfony | composer: symfony/framework-bundle |
rails | gem: rails |
sinatra | gem: sinatra |
axum | cargo: axum |
actix-web | cargo: actix-web |
rocket | cargo: rocket |
datastore
| Detected | From these packages |
|---|---|
postgres | npm: pg, postgres, @neondatabase/serverless, pg-promise, @vercel/postgres · pypi: psycopg, psycopg2, psycopg2-binary, asyncpg, psycopg-binary · go: github\.com\/jackc\/pgx(\/v\d+)?, github.com/lib/pq · maven: org.postgresql:postgresql · gem: pg · cargo: tokio-postgres, postgres |
mysql | npm: mysql, mysql2 · pypi: mysqlclient, pymysql, aiomysql, mysql-connector-python · go: github.com/go-sql-driver/mysql · maven: mysql:mysql-connector-java, com.mysql:mysql-connector-j, org.mariadb.jdbc:mariadb-java-client · gem: mysql2, trilogy · cargo: mysql_async |
mongodb | npm: mongodb, mongoose · pypi: pymongo, motor, mongoengine · go: go.mongodb.org/mongo-driver, go.mongodb.org/mongo-driver/v2 · maven: org.mongodb:mongodb-driver-sync, org.springframework.boot:spring-boot-starter-data-mongodb · gem: mongoid, mongo · cargo: mongodb |
redis | npm: redis, ioredis, @upstash/redis · pypi: redis, django-redis, aioredis · go: github\.com\/(go-redis|redis)\/(redis|go-redis)(\/v\d+)? · maven: org.springframework.boot:spring-boot-starter-data-redis, redis.clients:jedis, io.lettuce:lettuce-core · composer: predis/predis · gem: redis · cargo: redis |
elasticsearch | npm: @elastic/elasticsearch, @opensearch-project/opensearch · pypi: elasticsearch, opensearch-py, django-elasticsearch-dsl · go: github\.com\/elastic\/go-elasticsearch(\/v\d+)? · maven: org\.springframework\.boot:spring-boot-starter-data-elasticsearch · gem: elasticsearch, searchkick |
sqlite | npm: better-sqlite3, sqlite3, @libsql/client · pypi: aiosqlite · go: modernc.org/sqlite, github.com/mattn/go-sqlite3, gorm.io/driver/sqlite, github.com/glebarez/sqlite · gem: sqlite3 · cargo: rusqlite |
dynamodb | npm: @aws-sdk/client-dynamodb, dynamoose · pypi: pynamodb |
meilisearch | npm: meilisearch · pypi: meilisearch |
clickhouse | npm: @clickhouse/client · pypi: clickhouse-connect, clickhouse-driver |
object-storage | npm: @aws-sdk/client-s3, aws-sdk, minio, @google-cloud/storage, multer-s3 · pypi: boto3, django-storages, minio, google-cloud-storage · go: github.com/aws/aws-sdk-go-v2/service/s3, github.com/minio/minio-go/v7 · maven: software.amazon.awssdk:s3, com.amazonaws:aws-java-sdk-s3 · composer: league/flysystem-aws-s3-v3 · gem: aws-sdk-s3, shrine, activestorage · cargo: aws-sdk-s3, rust-s3 |
middleware
| Detected | From these packages |
|---|---|
bullmq | npm: bullmq, bull, bee-queue |
agenda | npm: agenda |
celery | pypi: celery |
rq | pypi: rq, django-rq |
dramatiq | pypi: dramatiq |
sidekiq | gem: sidekiq |
good-job | gem: good_job, solid_queue |
laravel-horizon | composer: laravel/horizon |
rabbitmq | npm: amqplib, amqp-connection-manager · pypi: pika, aio-pika, kombu · go: github.com/rabbitmq/amqp091-go, github.com/streadway/amqp · maven: org.springframework.boot:spring-boot-starter-amqp, com.rabbitmq:amqp-client · gem: bunny · cargo: lapin |
kafka | npm: kafkajs, node-rdkafka · pypi: kafka-python, confluent-kafka, aiokafka · go: github.com/segmentio/kafka-go, github.com/IBM/sarama, github.com/confluentinc/confluent-kafka-go · maven: org.springframework.kafka:spring-kafka, org.apache.kafka:kafka-clients · gem: ruby-kafka, karafka · cargo: rdkafka |
nats | npm: nats · go: github.com/nats-io/nats.go · pypi: nats-py |
sqs | npm: @aws-sdk/client-sqs · go: github.com/aws/aws-sdk-go-v2/service/sqs |
workload
| Detected | From these packages |
|---|---|
cron | npm: node-cron, cron, croner, node-schedule · pypi: apscheduler, django-celery-beat, schedule · gem: whenever, clockwork, sidekiq-cron · go: github.com/robfig/cron/v3, github.com/go-co-op/gocron · cargo: tokio-cron-scheduler |
websocket | npm: ws, socket.io, @socket.io/redis-adapter, uWebSockets.js · pypi: channels, websockets, python-socketio · go: github.com/gorilla/websocket, nhooyr.io/websocket · gem: actioncable · composer: beyondcode/laravel-websockets, laravel/reverb · cargo: tokio-tungstenite |
integration
| Detected | From these packages |
|---|---|
stripe | npm: stripe, @stripe/stripe-js · pypi: stripe, dj-stripe · go: github\.com\/stripe\/stripe-go(\/v\d+)? · composer: stripe/stripe-php, laravel/cashier · gem: stripe · cargo: async-stripe |
email | npm: nodemailer, @sendgrid/mail, resend, postmark, mailgun.js, @react-email/components · pypi: sendgrid, django-anymail, postmarker · gem: postmark-rails, sendgrid-ruby · composer: symfony/mailer · go: github.com/sendgrid/sendgrid-go |
sms | npm: twilio · pypi: twilio · gem: twilio-ruby · composer: twilio/sdk |
ai-llm | npm: openai, @anthropic-ai/sdk, ai, langchain, @langchain/core, @google/generative-ai · pypi: openai, anthropic, langchain, llama-index, transformers, google-generativeai · go: github.com/sashabaranov/go-openai · gem: ruby-openai · composer: openai-php/client |
auth | npm: next-auth, @auth\/.+, passport, @clerk/nextjs, @auth0/nextjs-auth0, lucia, better-auth, @supabase/auth-helpers-nextjs · pypi: django-allauth, authlib, python-jose, djangorestframework-simplejwt · gem: devise, omniauth · composer: laravel/sanctum, laravel/passport, laravel/socialite |
monitoring | npm: @sentry/node, @sentry/nextjs, dd-trace, newrelic, @opentelemetry/api, prom-client · pypi: sentry-sdk, ddtrace, opentelemetry-api, prometheus-client · go: github.com/getsentry/sentry-go, github.com/prometheus/client_golang, go.opentelemetry.io/otel · gem: sentry-ruby, sentry-rails, ddtrace · composer: sentry/sentry-laravel · cargo: sentry, opentelemetry, prometheus |
analytics | npm: posthog-js, posthog-node, @segment/analytics-node, mixpanel · pypi: posthog, mixpanel |
image-processing | npm: sharp, jimp · pypi: pillow · gem: image_processing, mini_magick · composer: intervention/image |
video-processing | npm: fluent-ffmpeg, @ffmpeg/ffmpeg · pypi: ffmpeg-python, moviepy · gem: streamio-ffmpeg |
headless-browser | npm: puppeteer, playwright, playwright-core · pypi: playwright, selenium |
file-uploads | npm: multer, formidable, busboy, @uploadthing/react, uploadthing · pypi: django-storages · gem: carrierwave, shrine |