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

EcosystemFiles
Node.js and Bunpackage.json (every workspace), package-lock.json, pnpm-lock.yaml, yarn.lock, bun.lockb
Pythonpyproject.toml, requirements*.txt, Pipfile, setup.py, manage.py
Gogo.mod
JVMpom.xml, build.gradle, build.gradle.kts
PHPcomposer.json
RubyGemfile
RustCargo.toml
ContainersDockerfile*, docker-compose*.yml, compose*.yml
Dataprisma/schema.prisma, drizzle.config.*, alembic.ini, config/database.yml, migrations/
WorkloadsProcfile, Compose commands, sidekiq.yml, schedule.rb, Laravel console kernel, vercel.json crons
CIGitHub Actions, GitLab CI, CircleCI, Jenkins, Azure Pipelines, Bitbucket Pipelines
Current platformTerraform, 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

DetectedFrom these packages
nextjsnpm: next
nuxtnpm: nuxt
remixnpm: @remix-run\/(node|serve|react)
react-routernpm: @react-router/node, @react-router/serve
sveltekitnpm: @sveltejs/kit
astronpm: astro
expressnpm: express
fastifynpm: fastify
nestjsnpm: @nestjs/core
koanpm: koa
hononpm: hono
vitenpm: vite
reactnpm: react
vuenpm: vue
angularnpm: @angular/core
djangopypi: django
flaskpypi: flask
fastapipypi: fastapi
gingo: github.com/gin-gonic/gin
echogo: github\.com\/labstack\/echo(\/v\d+)?
fibergo: github\.com\/gofiber\/fiber(\/v\d+)?
chigo: github\.com\/go-chi\/chi(\/v\d+)?
spring-bootmaven: org\.springframework\.boot:spring-boot-starter(-web|-webflux)?, org\.springframework\.boot
quarkusmaven: io\.quarkus:quarkus-(core|resteasy.*)
micronautmaven: io\.micronaut:micronaut-(http-server.*|runtime)
laravelcomposer: laravel/framework
symfonycomposer: symfony/framework-bundle
railsgem: rails
sinatragem: sinatra
axumcargo: axum
actix-webcargo: actix-web
rocketcargo: rocket

datastore

DetectedFrom these packages
postgresnpm: 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
mysqlnpm: 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
mongodbnpm: 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
redisnpm: 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
elasticsearchnpm: @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
sqlitenpm: 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
dynamodbnpm: @aws-sdk/client-dynamodb, dynamoose · pypi: pynamodb
meilisearchnpm: meilisearch · pypi: meilisearch
clickhousenpm: @clickhouse/client · pypi: clickhouse-connect, clickhouse-driver
object-storagenpm: @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

DetectedFrom these packages
bullmqnpm: bullmq, bull, bee-queue
agendanpm: agenda
celerypypi: celery
rqpypi: rq, django-rq
dramatiqpypi: dramatiq
sidekiqgem: sidekiq
good-jobgem: good_job, solid_queue
laravel-horizoncomposer: laravel/horizon
rabbitmqnpm: 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
kafkanpm: 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
natsnpm: nats · go: github.com/nats-io/nats.go · pypi: nats-py
sqsnpm: @aws-sdk/client-sqs · go: github.com/aws/aws-sdk-go-v2/service/sqs

workload

DetectedFrom these packages
cronnpm: 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
websocketnpm: 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

DetectedFrom these packages
stripenpm: 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
emailnpm: 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
smsnpm: twilio · pypi: twilio · gem: twilio-ruby · composer: twilio/sdk
ai-llmnpm: 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
authnpm: 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
monitoringnpm: @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
analyticsnpm: posthog-js, posthog-node, @segment/analytics-node, mixpanel · pypi: posthog, mixpanel
image-processingnpm: sharp, jimp · pypi: pillow · gem: image_processing, mini_magick · composer: intervention/image
video-processingnpm: fluent-ffmpeg, @ffmpeg/ffmpeg · pypi: ffmpeg-python, moviepy · gem: streamio-ffmpeg
headless-browsernpm: puppeteer, playwright, playwright-core · pypi: playwright, selenium
file-uploadsnpm: multer, formidable, busboy, @uploadthing/react, uploadthing · pypi: django-storages · gem: carrierwave, shrine
What Brunel detects · Brunel Docs