# Spec for config/sources.d/47-open-source-long-tail.yaml (executed in order by scripts/gen-open-source-long-tail.py; parts 2–6 reuse the src()/ext() helpers defined here). # Entry keys: id, extend, name, domain, categories, tier, weight, aliases, products, country, llm, notes, # repos: "owner/repo" | ("owner/repo", kind|None, label|None, tier|None) kind defaults to releases # feeds: (name, url[, type[, tier]]) # A bare string in SPEC is a section comment. HEADER = """# config/sources.d/47-open-source-long-tail.yaml — the long tail of open-source projects and developer tooling # (2026-09-11): GitHub release / tag Atom feeds for ~400 widely used repositories not covered by 10–46, grouped # under their organization or foundation (existing ids are extended), plus the official blog / news feed of each # organization when one exists. Every sensor was fetched and parsed by `apps/engine/src/validate.ts` before being # written; repos without GitHub releases use `tags.atom` (`kind: tags`). Generated by # `scripts/gen-open-source-long-tail.py` from `scripts/gen-open-source-long-tail-spec*.py`.""" OSD = ["open-source", "developer"] OSINF = ["open-source", "developer", "infrastructure"] OSSEC = ["open-source", "developer", "cyber"] OSAPP = ["open-source", "consumer-tech"] OSML = ["open-source", "developer", "ai"] OSOS = ["open-source", "technology"] T = "tags" def src(id, name, domain, aliases=(), repos=(), feeds=(), tier="C", categories=OSD, country=None, products=(), llm=True, notes=None, weight=None): d = {"id": id, "name": name, "domain": domain, "categories": list(categories), "tier": tier, "aliases": list(aliases), "repos": list(repos), "feeds": list(feeds), "products": [(p, "software") if isinstance(p, str) else p for p in products], "llm": llm} if country: d["country"] = country if notes: d["notes"] = notes if weight: d["weight"] = weight return d def ext(id, repos=(), feeds=(), products=(), aliases=(), country=None): d = {"id": id, "extend": True, "repos": list(repos), "feeds": list(feeds), "products": [(p, "software") if isinstance(p, str) else p for p in products], "aliases": list(aliases)} if country: d["country"] = country return d SPEC = [ "Foundations", ext("linux-foundation", feeds=[("newsroom feed", "https://www.linuxfoundation.org/press/rss.xml")], country="US"), src("numfocus", "NumFOCUS", "numfocus.org", ["numfocus foundation"], categories=["open-source", "science", "ngo"], country="US", feeds=[("news feed", "https://numfocus.org/feed")]), src("sfconservancy", "Software Freedom Conservancy", "sfconservancy.org", ["software freedom conservancy"], categories=["open-source", "ngo", "legal"], country="US", feeds=[("news feed", "https://sfconservancy.org/feeds/news/"), ("blog feed", "https://sfconservancy.org/feeds/blog/")]), src("fsfe", "Free Software Foundation Europe", "fsfe.org", ["fsfe", "free software foundation europe"], categories=["open-source", "ngo", "legal"], country="DE", feeds=[("news feed", "https://fsfe.org/news/news.en.rss")]), src("cd-foundation", "Continuous Delivery Foundation", "cd.foundation", ["cdf", "continuous delivery foundation"], country="US", feeds=[("news feed", "https://cd.foundation/feed/")]), src("lf-ai-data", "LF AI & Data Foundation", "lfaidata.foundation", ["lf ai & data", "lf ai and data"], categories=["open-source", "ai"], country="US", feeds=[("news feed", "https://lfaidata.foundation/feed/")]), src("openinfra", "OpenInfra Foundation (OpenStack)", "openinfra.org", ["openinfra foundation", "openstack", "openstack foundation", "kata containers"], categories=["open-source", "cloud"], country="US", products=["OpenStack", "Kata Containers"], repos=["kata-containers/kata-containers", ("openstack/nova", T), ("openstack/neutron", T), ("openstack/keystone", T)], feeds=[("superuser blog", "https://superuser.openinfra.org/feed/")]), src("bytecode-alliance", "Bytecode Alliance", "bytecodealliance.org", ["bytecode alliance", "wasmtime"], country="US", products=["Wasmtime", "wasm-tools"], repos=["bytecodealliance/wasmtime", "bytecodealliance/wasm-tools", "bytecodealliance/wasm-micro-runtime", "bytecodealliance/jco"]), src("webassembly", "WebAssembly", "webassembly.org", ["wasm", "wasi", "wasmer", "wasmedge", "wasmcloud"], categories=["open-source", "developer", "standards"], products=["WASI", "Binaryen", "wabt", "Wasmer", "WasmEdge", "wasmCloud"], repos=[("WebAssembly/spec", T), ("WebAssembly/WASI", T), "WebAssembly/binaryen", "WebAssembly/wabt", "wasmerio/wasmer", "WasmEdge/WasmEdge", "wasmCloud/wasmCloud"]), ext("openjs", products=["jQuery", "Mocha", "Appium", "WebdriverIO", "Node-RED", "Jest", "nvm", "undici"], repos=["nodejs/undici", "nvm-sh/nvm", "jquery/jquery", ("lodash/lodash", T), "mochajs/mocha", "appium/appium", "webdriverio/webdriverio", "node-red/node-red", "jestjs/jest"]), ext("eclipse", products=["Eclipse Theia", "Eclipse Vert.x", "Eclipse Mosquitto", "Eclipse Jetty", "Jakarta EE", "Eclipse Temurin", "OpenJ9", "GlassFish", "Eclipse Che"], repos=["eclipse-theia/theia", "eclipse-vertx/vert.x", "eclipse-mosquitto/mosquitto", "jetty/jetty.project", "eclipse-platform/eclipse.platform", "eclipse-che/che", "jakartaee/platform", "eclipse-paho/paho.mqtt.java", "eclipse-openj9/openj9", "adoptium/temurin21-binaries", "eclipse-ee4j/glassfish", "eclipse-ee4j/jersey"]), ext("apache", products=[("Apache Spark", "software", ["spark"]), ("Apache Flink", "software", ["flink"]), "Apache Beam", ("Apache Arrow", "software", ["arrow", "pyarrow"]), ("Apache Iceberg", "software", ["iceberg"]), "Apache Hudi", "Apache Druid", "Apache Pinot", ("Apache Superset", "software", ["superset"]), ("Apache NiFi", "software", ["nifi"]), ("Apache Pulsar", "software", ["pulsar"]), ("Apache ZooKeeper", "software", ["zookeeper"]), ("Apache Tomcat", "software", ["tomcat"]), ("Apache Lucene", "software", ["lucene"]), ("Apache Solr", "software", ["solr"]), ("Apache Hadoop", "software", ["hadoop"]), "Apache Hive", "Apache HBase", ("Apache CouchDB", "software", ["couchdb"]), "Apache Camel", ("Apache ActiveMQ", "software", ["activemq"]), ("Apache Groovy", "software", ["groovy"]), ("Apache NetBeans", "software", ["netbeans"]), ("Apache APISIX", "software", ["apisix"]), "Apache SkyWalking", "Apache Dubbo", "Apache ShardingSphere", "Apache Doris", "Apache Paimon", "Apache SeaTunnel", "Apache DolphinScheduler", ("Apache ECharts", "software", ["echarts"]), ("Apache RocketMQ", "software", ["rocketmq"]), "Apache DataFusion", "Apache OpenDAL", ("Apache Log4j", "software", ["log4j", "log4j2"]), "Apache TVM", "Apache Kyuubi", "Apache Ozone", "Apache NuttX", "Apache AGE", ("Apache Cordova", "software", ["cordova"]), "Apache Thrift", "Apache Avro", "Apache Calcite", ("Apache JMeter", "software", ["jmeter"]), ("Apache Struts", "software", ["struts"]), ("Apache CloudStack", "software", ["cloudstack"]), "Apache Traffic Server", "Apache Ignite", "Apache Tika", "Apache PDFBox", "Apache POI", ("Apache Guacamole", "software", ["guacamole"]), "Apache Gravitino", "Apache Polaris", "Apache Celeborn", "Apache Answer", "Apache Shiro", "Apache Karaf", "Apache TinkerPop", "Apache Jena", "Apache Storm", "Apache Pekko", "Apache TomEE"], repos=[("apache/spark", T), ("apache/flink", T), "apache/beam", "apache/arrow", "apache/iceberg", "apache/hudi", "apache/druid", "apache/pinot", "apache/superset", ("apache/nifi", T), "apache/pulsar", ("apache/zookeeper", T), ("apache/tomcat", T), ("apache/lucene", T), ("apache/solr", T), ("apache/hadoop", T), ("apache/hive", T), ("apache/hbase", T), ("apache/couchdb", T), ("apache/camel", T), ("apache/activemq", T), ("apache/groovy", T), "apache/netbeans", "apache/apisix", "apache/skywalking", "apache/dubbo", "apache/shardingsphere", "apache/doris", "apache/paimon", "apache/seatunnel", "apache/dolphinscheduler", "apache/echarts", "apache/rocketmq", "apache/datafusion", "apache/opendal", "apache/logging-log4j2", "apache/tvm", "apache/kyuubi", "apache/ozone", "apache/nuttx", "apache/age", "apache/cordova-android", ("apache/thrift", T), "apache/avro", ("apache/calcite", T), ("apache/jmeter", T), ("apache/struts", T), ("apache/cloudstack", T), ("apache/trafficserver", T), ("apache/ignite", T), ("apache/tika", T), ("apache/pdfbox", T), ("apache/poi", T), ("apache/guacamole-server", T), "apache/gravitino", "apache/polaris", "apache/celeborn", "apache/answer", "apache/shiro", "apache/karaf", "apache/tinkerpop", "apache/jena", ("apache/storm", T), "apache/pekko", "apache/tomee", ("apache/httpcomponents-client", T), ("apache/commons-lang", T)], feeds=[("foundation blog", "https://blogs.apache.org/foundation/feed/entries/atom", "ATOM")]), ext("cncf", products=["Cortex", "Contour", "Operator SDK", "KubeEdge", "Antrea", "CloudEvents", "in-toto", "Notation", "Kubescape", "Emissary-ingress", "KubeVela", "Artifact Hub", "OpenFeature", "Flatcar", "Cluster API", "kind", "Gateway API", "Kustomize", "CRI-O", "Rook", "Longhorn", "Buildpacks", "TiKV", "Cloud Custodian", "Kuma", "MetalLB", "Litmus", "Chaos Mesh", "Karmada", "Volcano", "SPIRE", "Open Policy Agent", "Gatekeeper", "Kyverno", "KEDA", "Knative", "Dapr", "Backstage", "Harbor", "Thanos", "KubeVirt", "Fluent Bit", "Fluentd", "OpenFGA", "CloudNativePG", "Strimzi", "OpenCost", "Jaeger", "Vitess", "NATS", "gRPC", "CubeFS", "KubeArmor", "Meshery", "Headlamp", "Kubeflow", "OpenEBS", "Argo Workflows", "Argo Rollouts", "Tekton", "Temporal", ("OpenTelemetry", "software", ["otel"]), "Prometheus Operator", "Keptn", "Dragonfly", "Kueue", "Karpenter", "Kubebuilder", "minikube", "kOps"], repos=["cortexproject/cortex", "projectcontour/contour", "operator-framework/operator-sdk", "kubeedge/kubeedge", "antrea-io/antrea", ("cloudevents/spec", T), "in-toto/in-toto", "notaryproject/notation", "kubescape/kubescape", "emissary-ingress/emissary", "kubevela/kubevela", "artifacthub/hub", "open-feature/spec", "flatcar/Flatcar", "dragonflyoss/dragonfly", "kubernetes-sigs/cluster-api", "kubernetes-sigs/kind", "kubernetes-sigs/gateway-api", "kubernetes-sigs/kustomize", "kubernetes-sigs/metrics-server", "kubernetes-sigs/external-dns", "kubernetes-sigs/descheduler", "kubernetes-sigs/aws-load-balancer-controller", "kubernetes-sigs/kueue", "kubernetes-sigs/karpenter", "kubernetes-sigs/kubebuilder", "kubernetes-sigs/controller-runtime", "cri-o/cri-o", "rook/rook", "longhorn/longhorn", "buildpacks/pack", "tikv/tikv", "cloud-custodian/cloud-custodian", "kumahq/kuma", "metallb/metallb", "litmuschaos/litmus", "chaos-mesh/chaos-mesh", "karmada-io/karmada", "volcano-sh/volcano", "spiffe/spire", "open-policy-agent/opa", "open-policy-agent/gatekeeper", "kyverno/kyverno", "kedacore/keda", "knative/serving", "knative/eventing", "dapr/dapr", "backstage/backstage", "goharbor/harbor", "thanos-io/thanos", "kubevirt/kubevirt", "fluent/fluent-bit", "fluent/fluentd", "openfga/openfga", "cloudnative-pg/cloudnative-pg", "strimzi/strimzi-kafka-operator", "opencost/opencost", "jaegertracing/jaeger", "ko-build/ko", "kubernetes/minikube", "kubernetes/kops", "kubernetes/dashboard", "kubernetes/kube-state-metrics", ("kubernetes/kubectl", T), "istio/ztunnel", "vitessio/vitess", "nats-io/nats-server", "nats-io/nats.go", "grpc/grpc", "grpc/grpc-go", "grpc/grpc-java", "grpc/grpc-node", "cubefs/cubefs", "kubearmor/KubeArmor", "meshery/meshery", "headlamp-k8s/headlamp", "kubeflow/kubeflow", "kubeflow/pipelines", "kubeflow/trainer", "openebs/openebs", "argoproj/argo-workflows", "argoproj/argo-rollouts", "argoproj/argo-events", "tektoncd/pipeline", "tektoncd/cli", "temporalio/temporal", "temporalio/sdk-go", "temporalio/sdk-typescript", "open-telemetry/opentelemetry-collector-contrib", "open-telemetry/opentelemetry-js", "open-telemetry/opentelemetry-python", "open-telemetry/opentelemetry-java", "open-telemetry/opentelemetry-go", "open-telemetry/opentelemetry-dotnet", "open-telemetry/opentelemetry-operator", ("open-telemetry/opentelemetry-specification", None, "otel specification releases"), "open-telemetry/opentelemetry-demo", "prometheus/node_exporter", "prometheus/blackbox_exporter", "prometheus-operator/prometheus-operator", "prometheus/client_golang", "prometheus/pushgateway", "keptn/lifecycle-toolkit"], feeds=[("opentelemetry blog", "https://opentelemetry.io/blog/index.xml"), ("cncf blog", "https://www.cncf.io/blog/feed/")]), ext("openssf", products=["OpenBao", "Sigstore", "Rekor", "Fulcio", "SLSA", "Allstar"], repos=["ossf/allstar", "ossf/package-analysis", "openbao/openbao", "sigstore/sigstore", "sigstore/rekor", "sigstore/fulcio", "sigstore/gitsign", "slsa-framework/slsa"]), "Languages and runtimes", ext("rust-foundation", products=["rustup", "rust-analyzer", "Cargo", "mdBook", "rustfmt", "Clippy", "Miri", "crates.io"], repos=["rust-lang/rustup", "rust-lang/rust-analyzer", ("rust-lang/cargo", T), "rust-lang/mdBook", "rust-lang/rustfmt", "rust-lang/rust-clippy", "rust-lang/crates.io", "rust-lang/miri"]), ext("rust", products=["Tokio", "Axum", "Serde", "Hyper", "clap", "Actix Web", "reqwest", "SQLx", "Diesel", "SeaORM", "Leptos", "Dioxus", "Yew", "Bevy", "rustls", "tracing", "Rayon", "ripgrep", "bat", "Nushell", "maturin", "kube-rs"], repos=["tokio-rs/tokio", "tokio-rs/axum", "serde-rs/serde", "hyperium/hyper", "clap-rs/clap", "actix/actix-web", "seanmonstar/reqwest", "launchbadge/sqlx", "diesel-rs/diesel", "SeaQL/sea-orm", "leptos-rs/leptos", "DioxusLabs/dioxus", "yewstack/yew", "bevyengine/bevy", "rustls/rustls", "tokio-rs/tracing", "rayon-rs/rayon", "BurntSushi/ripgrep", "sharkdp/bat", "nushell/nushell", "PyO3/maturin", "kube-rs/kube"]), ext("python", products=["mypy", "pip", "setuptools", "Poetry", "Pydantic", "Black", "Requests", "PyO3", "Cython", "pipx", "Werkzeug", "Jinja", "Click", "pylint", "pytest", "HTTPX", "Starlette", "Uvicorn", "Django REST framework", "Gunicorn", "uWSGI", "Celery", "SQLAlchemy", "Alembic", "aiohttp", "Typer", "Wagtail", "Textual", "Rich", "pyenv", "IPython", "conda", "pixi", "Sphinx", "MkDocs", "Litestar", "Streamlit", "Gradio", "Dash", "marimo", "JupyterHub", "Scrapy", "Pyright"], repos=["python/mypy", "pypa/pip", "pypa/setuptools", "pypa/packaging", "pypa/hatch", "python-poetry/poetry", "pydantic/pydantic", "psf/black", "psf/requests", "PyO3/pyo3", "cython/cython", "pypa/pipx", "pypa/cibuildwheel", "pallets/werkzeug", "pallets/jinja", "pallets/click", "pylint-dev/pylint", "pytest-dev/pytest", "encode/httpx", "encode/starlette", "encode/uvicorn", "encode/django-rest-framework", "benoitc/gunicorn", ("unbit/uwsgi", T), "celery/celery", "sqlalchemy/sqlalchemy", "sqlalchemy/alembic", "aio-libs/aiohttp", "fastapi/typer", "wagtail/wagtail", "Textualize/textual", "Textualize/rich", "pyenv/pyenv", "ipython/ipython", "conda/conda", "prefix-dev/pixi", "sphinx-doc/sphinx", "mkdocs/mkdocs", "squidfunk/mkdocs-material", "litestar-org/litestar", "streamlit/streamlit", "gradio-app/gradio", "plotly/dash", "marimo-team/marimo", "jupyterhub/jupyterhub", "scrapy/scrapy", "microsoft/pyright", "python/peps"]), src("astral", "Astral", "astral.sh", ["astral sh", "uv python", "ruff linter"], tier="B", country="US", products=["uv", ("Ruff", "software", ["ruff"]), "ty"], repos=["astral-sh/uv", "astral-sh/ruff", "astral-sh/ty", "astral-sh/python-build-standalone"], feeds=[("blog feed", "https://astral.sh/blog/rss.xml")]), ext("nodejs", products=["Node.js", "Corepack", "PM2", "nodemon", "tsx", "libuv", "Volta", "fnm", "axios", "Zod", "Socket.IO", "ws", "Sequelize", "TypeORM", "Knex", "Mongoose", "BullMQ", "Puppeteer", "Vitest", "Husky", "semantic-release", "Changesets", "typescript-eslint"], repos=["nodejs/node", "nodejs/corepack", "Unitech/pm2", "remy/nodemon", "privatenumber/tsx", "libuv/libuv", "volta-cli/volta", "Schniz/fnm", "axios/axios", "colinhacks/zod", "socketio/socket.io", "websockets/ws", "sequelize/sequelize", "typeorm/typeorm", "knex/knex", "Automattic/mongoose", "taskforcesh/bullmq", "puppeteer/puppeteer", "vitest-dev/vitest", "typicode/husky", "semantic-release/semantic-release", "changesets/changesets", "typescript-eslint/typescript-eslint"]), ext("go", products=["gopls", "golangci-lint", "Delve", "GoReleaser", "Gin", "Echo", "Fiber", "chi", "Cobra", "Viper", "zap", "GORM", "sqlc", "pgx", "testify", "Wire", "grpc-gateway", "Connect", "Bubble Tea", "Buf", "Task", "gqlgen", "ent", "golang-migrate", "go-redis", "Kratos", "go-zero", "Kitex", "govulncheck"], repos=[("golang/tools", T), "golangci/golangci-lint", "go-delve/delve", "goreleaser/goreleaser", "gin-gonic/gin", "labstack/echo", "gofiber/fiber", "go-chi/chi", "spf13/cobra", "spf13/viper", "uber-go/zap", "go-gorm/gorm", "sqlc-dev/sqlc", "jackc/pgx", "stretchr/testify", "google/wire", "grpc-ecosystem/grpc-gateway", "connectrpc/connect-go", "charmbracelet/bubbletea", "bufbuild/buf", "go-task/task", "99designs/gqlgen", "ent/ent", "golang-migrate/migrate", "redis/go-redis", "go-kratos/kratos", "zeromicro/go-zero", "cloudwego/kitex", "golang/vuln"]), ext("ruby", products=["RubyGems", "RuboCop", "Puma", "Sidekiq", "RSpec", "Rack", "Sinatra", "Hanami", "Ruby LSP", "RBS", "Jekyll", "fastlane", "Chef", "Puppet", "Passenger"], repos=[("ruby/ruby", T), "rubygems/rubygems", "rubocop/rubocop", "puma/puma", "sidekiq/sidekiq", "rspec/rspec-core", "rack/rack", "sinatra/sinatra", "hanami/hanami", "Shopify/ruby-lsp", "ruby/rbs", "jekyll/jekyll", "fastlane/fastlane", "chef/chef", "puppetlabs/puppet", "phusion/passenger"]), ext("rails", products=["Kamal", "Turbo", "Stimulus", "Propshaft", "Solid Queue", "Devise"], repos=["basecamp/kamal", "hotwired/turbo", "hotwired/stimulus", "rails/propshaft", "rails/solid_queue", "heartcombo/devise"]), ext("php", products=["Composer", "PHPUnit", "PHPStan", "Psalm", "PHP CS Fixer", "FrankenPHP", "RoadRunner", "Swoole", "Guzzle", "Doctrine ORM", "Twig", "Monolog", "phpMyAdmin", "CakePHP", "Yii", "CodeIgniter", "Slim", "Rector", "PhpSpreadsheet", "Carbon"], repos=["php/php-src", "composer/composer", "sebastianbergmann/phpunit", "phpstan/phpstan", "vimeo/psalm", "PHP-CS-Fixer/PHP-CS-Fixer", "php/frankenphp", "roadrunner-server/roadrunner", "swoole/swoole-src", "guzzle/guzzle", "doctrine/orm", "twigphp/Twig", "Seldaek/monolog", "phpmyadmin/phpmyadmin", "cakephp/cakephp", "yiisoft/yii2", "codeigniter4/CodeIgniter4", "slimphp/Slim", "rectorphp/rector", "PHPOffice/PhpSpreadsheet", "briannesbitt/Carbon"]), src("symfony", "Symfony", "symfony.com", ["symfony framework", "sensiolabs"], tier="B", country="FR", products=["Symfony", "API Platform", "Symfony CLI", "Symfony UX"], repos=["symfony/symfony", "api-platform/core", "symfony/cli", "symfony/ux", "symfony/webpack-encore", "symfony/maker-bundle"], feeds=[("blog feed", "https://feeds.feedburner.com/symfony/blog")]), ext("laravel", products=["Livewire", "Inertia.js", "Filament", "Laravel Octane", "Laravel Sail", "Laravel Horizon", "Laravel Pint", "Pest"], repos=["laravel/laravel", "livewire/livewire", "inertiajs/inertia", "filamentphp/filament", "laravel/octane", "laravel/sail", "laravel/horizon", "laravel/pint", "laravel/passport", "pestphp/pest"]), ext("spring", products=["Spring Framework", "Spring Security", "Spring Data JPA", "Spring Cloud Gateway", "Spring AI", "Spring Batch", "Spring Kafka", "Spring Authorization Server", "Spring GraphQL"], repos=["spring-projects/spring-framework", "spring-projects/spring-security", "spring-projects/spring-data-jpa", "spring-cloud/spring-cloud-gateway", "spring-projects/spring-ai", "spring-projects/spring-batch", "spring-projects/spring-kafka", "spring-projects/spring-authorization-server", "spring-projects/spring-graphql", "spring-io/initializr"]), src("quarkus", "Quarkus", "quarkus.io", ["quarkus framework", "red hat quarkus"], repos=["quarkusio/quarkus", "quarkusio/quarkus-quickstarts"], feeds=[("blog feed", "https://quarkus.io/feed.xml")]), src("micronaut", "Micronaut", "micronaut.io", ["micronaut framework"], repos=["micronaut-projects/micronaut-core", "micronaut-projects/micronaut-starter"]), src("openjdk", "OpenJDK", "openjdk.org", ["openjdk", "java development kit", "jdk"], tier="B", products=[("JDK", "software", ["java se"]), "JDK Mission Control", "jextract"], repos=[("openjdk/jdk", T), ("openjdk/jdk21u", T), ("openjdk/jdk17u", T), "openjdk/jmc", "openjdk/jextract"], feeds=[("inside.java feed", "https://inside.java/feed.xml")]), src("graalvm", "GraalVM", "graalvm.org", ["graal", "graalvm native image", "graaljs", "graalpy"], country="US", products=["GraalVM", "GraalJS", "GraalPy", "Native Build Tools", "Mandrel"], repos=["oracle/graal", "oracle/graaljs", "oracle/graalpython", "graalvm/native-build-tools", "graalvm/mandrel"], feeds=[("blog feed", "https://medium.com/feed/graalvm")]), src("java-libraries", "Java ecosystem — major libraries", "java.net", ["java libraries", "jvm libraries"], products=["Hibernate", "Jackson", "JUnit", "Mockito", "Netty", "Guava", "Lombok", "Micrometer", "Resilience4j", "Helidon", "Dropwizard", "Play Framework", "Vaadin", "Javalin", "Logback", "MapStruct", "jOOQ", "Testcontainers", "OkHttp", "Retrofit", "Gson", "Dagger", "Reactor", "RxJava", "Flyway", "Liquibase", "WildFly", "Open Liberty", "Hazelcast", "Infinispan"], repos=["hibernate/hibernate-orm", "FasterXML/jackson-databind", "junit-team/junit-framework", "mockito/mockito", "netty/netty", "google/guava", "projectlombok/lombok", "micrometer-metrics/micrometer", "resilience4j/resilience4j", "helidon-io/helidon", "dropwizard/dropwizard", "playframework/playframework", "vaadin/flow", "javalin/javalin", "qos-ch/logback", "mapstruct/mapstruct", "jOOQ/jOOQ", "testcontainers/testcontainers-java", "square/okhttp", "square/retrofit", "google/gson", "google/dagger", "reactor/reactor-core", "ReactiveX/RxJava", "flyway/flyway", "liquibase/liquibase", "wildfly/wildfly", "OpenLiberty/open-liberty", "hazelcast/hazelcast", "infinispan/infinispan"]), ext("kotlin", products=["kotlinx.coroutines", "kotlinx.serialization", "Ktor", "Compose Multiplatform", "Exposed", "ktlint", "detekt", "SQLDelight", "Koin", "KSP", "Arrow"], repos=["JetBrains/kotlin", "Kotlin/kotlinx.coroutines", "Kotlin/kotlinx.serialization", "ktorio/ktor", "JetBrains/compose-multiplatform", "JetBrains/Exposed", "pinterest/ktlint", "detekt/detekt", "sqldelight/sqldelight", "InsertKoinIO/koin", "google/ksp", "arrow-kt/arrow"]), ext("swift", products=["Swift Package Manager", "SwiftNIO", "Vapor", "SourceKit-LSP", "swift-syntax", "swift-format", "Hummingbird", "SwiftLint", "SwiftFormat", "Alamofire", "The Composable Architecture", "CocoaPods", "Tuist", "XcodeGen", "Swift Testing", "swift-openapi-generator"], repos=["swiftlang/swift", "swiftlang/swift-package-manager", "apple/swift-nio", "vapor/vapor", "swiftlang/sourcekit-lsp", "swiftlang/swift-syntax", "swiftlang/swift-format", "hummingbird-project/hummingbird", "realm/SwiftLint", "nicklockwood/SwiftFormat", "Alamofire/Alamofire", "pointfreeco/swift-composable-architecture", "CocoaPods/CocoaPods", "tuist/tuist", "yonaskolb/XcodeGen", "swiftlang/swift-testing", "apple/swift-openapi-generator", "apple/swift-collections", "apple/swift-argument-parser", "grpc/grpc-swift"]), src("elixir", "Elixir", "elixir-lang.org", ["elixir language", "elixir lang", "phoenix framework"], products=[("Phoenix Framework", "software", ["phoenix"]), "Ecto", "LiveView", "Nx", "Livebook", "Oban", "Absinthe", "Hex"], repos=["elixir-lang/elixir", "phoenixframework/phoenix", "phoenixframework/phoenix_live_view", "elixir-ecto/ecto", "elixir-nx/nx", "livebook-dev/livebook", "elixir-lang/ex_doc", "oban-bg/oban", "absinthe-graphql/absinthe", "hexpm/hex", "elixir-lsp/elixir-ls", "elixir-nx/bumblebee"], feeds=[("blog feed", "https://elixir-lang.org/atom.xml", "ATOM")]), src("erlang", "Erlang/OTP", "erlang.org", ["erlang", "otp", "erlang otp", "beam vm", "rebar3"], products=["Erlang/OTP", "rebar3"], repos=["erlang/otp", "erlang/rebar3", "erlang-ls/erlang_ls"], feeds=[("blog feed", "https://www.erlang.org/blog.xml")]), src("gleam", "Gleam", "gleam.run", ["gleam language"], repos=["gleam-lang/gleam", "gleam-lang/stdlib"], feeds=[("news feed", "https://gleam.run/feed.xml")]), src("scala", "Scala", "scala-lang.org", ["scala language", "scala center", "scala 3", "dotty"], country="CH", products=["Scala 3", "sbt", "Metals", "Akka", "ZIO", "Cats", "Cats Effect", "http4s", "scalafmt", "Mill", "Scala CLI", "Tapir"], repos=["scala/scala3", "scala/scala", "sbt/sbt", "scalameta/metals", "akka/akka", "zio/zio", "typelevel/cats", "typelevel/cats-effect", "http4s/http4s", "scalameta/scalafmt", "com-lihaoyi/mill", "VirtusLab/scala-cli", "softwaremill/tapir", "scalatest/scalatest"], feeds=[("blog feed", "https://www.scala-lang.org/feed.xml")]), src("haskell", "Haskell", "haskell.org", ["haskell language", "ghc", "glasgow haskell compiler", "haskell foundation"], products=["GHC", "Cabal", "Stack", ("Haskell Language Server", "software", ["hls"]), "GHCup"], repos=["haskell/cabal", "commercialhaskell/stack", "haskell/haskell-language-server", "haskell/ghcup-hs"], feeds=[("ghc tags (gitlab)", "https://gitlab.haskell.org/ghc/ghc/-/tags?format=atom", "ATOM"), ("discourse announcements", "https://discourse.haskell.org/c/announcements/10.rss")]), src("ocaml", "OCaml", "ocaml.org", ["ocaml language", "opam", "dune build", "reasonml", "rescript"], country="FR", products=["opam", "Dune", "Merlin", "OCaml LSP", "Reason", "ReScript", "MirageOS"], repos=["ocaml/ocaml", "ocaml/opam", "ocaml/dune", "ocaml/merlin", "ocaml/ocaml-lsp", "ocsigen/lwt", "janestreet/base", "mirage/mirage", "reasonml/reason", "rescript-lang/rescript"], feeds=[("blog feed", "https://ocaml.org/feed.xml", "ATOM")]), src("dart", "Dart", "dart.dev", ["dart language", "dart sdk", "pub.dev"], country="US", products=["Dart SDK", "pub"], repos=[("dart-lang/sdk", T), "dart-lang/pub", "dart-lang/language", "dart-lang/native", "dart-lang/shelf", "dart-lang/build"], feeds=[("blog feed", "https://medium.com/feed/dartlang")]), ext("flutter", products=["bloc", "Riverpod", "GetX", "FlutterFire", "Flame", "Isar", "Drift", "FVM"], repos=["flutter/packages", "flutter/devtools", "felangel/bloc", "rrousselGit/riverpod", "jonataslaw/getx", "firebase/flutterfire", "flame-engine/flame", "isar/isar", "simolus3/drift", "leoafarias/fvm"]), src("lua", "Lua", "lua.org", ["lua language", "luajit", "luarocks", "luau"], country="BR", products=["LuaJIT", "LuaRocks", "Luau", "Lua Language Server"], repos=[("lua/lua", T), ("LuaJIT/LuaJIT", T), "luarocks/luarocks", "luau-lang/luau", "LuaLS/lua-language-server", "openresty/lua-nginx-module", "teal-language/tl"]), src("nim", "Nim", "nim-lang.org", ["nim language", "nim lang", "nimble"], repos=["nim-lang/Nim", "nim-lang/nimble", "nim-lang/langserver"], feeds=[("blog feed", "https://nim-lang.org/feed.xml")]), src("crystal", "Crystal", "crystal-lang.org", ["crystal language", "crystal lang", "shards"], repos=["crystal-lang/crystal", "crystal-lang/shards", "luckyframework/lucky", "kemalcr/kemal"], feeds=[("blog feed", "https://crystal-lang.org/feed.xml", "ATOM")]), src("vlang", "V language", "vlang.io", ["vlang", "v programming language"], repos=["vlang/v", "vlang/ui"]), src("odin-lang", "Odin", "odin-lang.org", ["odin language", "odin programming language"], repos=["odin-lang/Odin"]), src("mojo", "Modular / Mojo", "modular.com", ["mojo language", "modular ai", "max engine"], categories=OSML, country="US", repos=["modular/modular"], feeds=[("blog feed", "https://www.modular.com/blog/rss.xml")]), src("perl", "Perl", "perl.org", ["perl language", "perl 5", "cpan", "raku", "rakudo"], products=["Perl 5", ("Raku", "software", ["perl 6"]), "Rakudo", "Mojolicious", "cpanminus", "Dancer2", "perltidy", "Perl::Critic"], repos=[("Perl/perl5", T), "rakudo/rakudo", "mojolicious/mojo", "miyagawa/cpanminus", "MoarVM/MoarVM", "PerlDancer/Dancer2", "perltidy/perltidy", "Perl-Critic/Perl-Critic"], feeds=[("perl.com feed", "https://www.perl.com/article/index.xml"), ("perl weekly", "https://perlweekly.com/perlweekly.rss")]), src("clojure", "Clojure", "clojure.org", ["clojure language", "clojurescript", "leiningen", "babashka"], products=["Clojure", "ClojureScript", "Leiningen", "Babashka", "shadow-cljs", "clj-kondo", "clojure-lsp", "CIDER", "Ring", "reitit", "re-frame", "Reagent"], repos=[("clojure/clojure", T), ("clojure/clojurescript", T), "technomancy/leiningen", "babashka/babashka", "thheller/shadow-cljs", "clj-kondo/clj-kondo", "clojure-lsp/clojure-lsp", "clojure-emacs/cider", "ring-clojure/ring", "metosin/reitit", "day8/re-frame", "reagent-project/reagent", "clojure/tools.deps"], feeds=[("clojure news", "https://clojure.org/feed.xml", "ATOM")]), src("racket", "Racket", "racket-lang.org", ["racket language", "plt scheme"], repos=["racket/racket", "racket/typed-racket"], feeds=[("blog feed", "https://blog.racket-lang.org/feeds/all.atom.xml", "ATOM")]), ext("julia", products=["Pkg.jl", "IJulia", "DifferentialEquations.jl", "Flux.jl", "Plots.jl", "DataFrames.jl", "Pluto.jl", "CUDA.jl", "JuMP", "juliaup", "Makie", "Turing.jl", "Genie", "Documenter"], repos=["JuliaLang/Pkg.jl", "JuliaLang/IJulia.jl", "julia-vscode/julia-vscode", "SciML/DifferentialEquations.jl", "FluxML/Flux.jl", "JuliaPlots/Plots.jl", "JuliaData/DataFrames.jl", "fonsp/Pluto.jl", "JuliaGPU/CUDA.jl", "jump-dev/JuMP.jl", "JuliaLang/juliaup", "MakieOrg/Makie.jl", "TuringLang/Turing.jl", "GenieFramework/Genie.jl", "JuliaDocs/Documenter.jl"]), ext("r-project", products=["ggplot2", "dplyr", "tidyr", "purrr", "devtools", "testthat", "roxygen2", "data.table", "Shiny", "R Markdown", "knitr", "rlang", "pak", "renv", "reticulate", "tidymodels", "sf", "plumber", "httr2", "targets", "bslib"], repos=[("wch/r-source", T), "tidyverse/ggplot2", "tidyverse/dplyr", "tidyverse/tidyr", "tidyverse/purrr", "r-lib/devtools", "r-lib/testthat", "r-lib/roxygen2", "Rdatatable/data.table", "rstudio/shiny", "rstudio/rmarkdown", "yihui/knitr", "r-lib/rlang", "r-lib/pak", "rstudio/renv", "rstudio/reticulate", "tidymodels/tidymodels", "r-spatial/sf", "rstudio/plumber", "r-lib/httr2", "ropensci/targets", "rstudio/bslib"]), src("posit", "Posit (RStudio)", "posit.co", ["posit pbc", "rstudio pbc", "rstudio", "quarto"], categories=["open-source", "developer", "science"], country="US", products=["RStudio", "Positron", "Quarto", "Shiny for Python", "Great Tables", "Ark"], repos=[("rstudio/rstudio", T), "posit-dev/positron", "quarto-dev/quarto-cli", "posit-dev/py-shiny", "posit-dev/great-tables", "posit-dev/publisher", "posit-dev/ark", "posit-dev/pointblank"], feeds=[("blog feed", "https://posit.co/feed/")]), ext("dotnet", aliases=["asp.net core", "aspnetcore", ".net maui", "entity framework", "blazor", "powershell"], products=["ASP.NET Core", ".NET SDK", ".NET MAUI", "Entity Framework Core", "Roslyn", "F#", "PowerShell", "NuGet", "Orleans", "Aspire", "MSBuild", "Avalonia", "Uno Platform", "Polly", "MediatR", "Serilog", "xUnit", "NUnit", "Dapper", "MassTransit", "Hangfire", "Npgsql"], repos=["dotnet/aspnetcore", "dotnet/sdk", "dotnet/maui", "dotnet/efcore", "dotnet/roslyn", "dotnet/fsharp", "PowerShell/PowerShell", "NuGet/NuGet.Client", "dotnet/orleans", "dotnet/aspire", "dotnet/msbuild", "AvaloniaUI/Avalonia", "unoplatform/uno", "App-vNext/Polly", "jbogard/MediatR", "serilog/serilog", "xunit/xunit", "nunit/nunit", "DapperLib/Dapper", "MassTransit/MassTransit", "HangfireIO/Hangfire", "npgsql/npgsql", "microsoft/garnet", "OmniSharp/omnisharp-roslyn"]), ext("deno", products=["Fresh", "Deno Standard Library"], repos=["denoland/fresh", "denoland/std"]), ext("microsoft", products=["Windows Terminal", "WSL", "winget", "vcpkg", "Playwright", "PowerToys", "Fluent UI", "LightGBM", "TypeSpec", "windows-rs", "Monaco Editor", "mimalloc", "MsQuic", "Windows App SDK", "typescript-go"], repos=["microsoft/terminal", "microsoft/WSL", "microsoft/winget-cli", "microsoft/vcpkg", "microsoft/playwright", "microsoft/PowerToys", "microsoft/fluentui", "microsoft/LightGBM", "microsoft/typespec", "microsoft/windows-rs", "microsoft/monaco-editor", "microsoft/mimalloc", "microsoft/msquic", "microsoft/WindowsAppSDK", "microsoft/typescript-go", "microsoft/vscode-python", "microsoft/vscode-cpptools", "microsoft/vscode-jupyter", "microsoft/pylance-release", "microsoft/rushstack"]), ext("typescript", products=["typedoc", "type-fest", "typescript-language-server", "DefinitelyTyped"], repos=["typescript-language-server/typescript-language-server", "TypeStrong/typedoc", "sindresorhus/type-fest", "TypeStrong/ts-loader"]), "Web frameworks, front-end and build tooling", src("expressjs", "Express", "expressjs.com", ["express js", "expressjs", "express framework"], tier="B", repos=["expressjs/express", "expressjs/body-parser", "expressjs/multer", "expressjs/cors"]), src("fastify", "Fastify", "fastify.dev", ["fastify framework"], tier="B", repos=["fastify/fastify", "fastify/fastify-cli", "fastify/fastify-swagger", "fastify/fastify-jwt", "pinojs/pino"]), src("nestjs", "NestJS", "nestjs.com", ["nest js", "nestjs framework", "nest framework"], tier="B", repos=["nestjs/nest", "nestjs/nest-cli", "nestjs/graphql", "nestjs/swagger", "nestjs/typeorm"]), src("hono", "Hono", "hono.dev", ["honojs", "hono framework"], country="JP", repos=["honojs/hono", "honojs/middleware", "honojs/node-server", "honojs/honox"]), src("koa", "Koa", "koajs.com", ["koajs", "koa framework"], repos=["koajs/koa", "koajs/router"]), src("adonisjs", "AdonisJS", "adonisjs.com", ["adonis js", "adonisjs framework"], repos=["adonisjs/core", "adonisjs/lucid"]), src("remix", "Remix / React Router", "remix.run", ["remix run", "react router", "react-router"], tier="B", country="US", products=["React Router", "Remix"], repos=["remix-run/react-router", "remix-run/remix"], feeds=[("blog feed", "https://remix.run/blog/rss.xml")]), src("nuxt", "Nuxt", "nuxt.com", ["nuxt js", "nuxtjs", "nuxt framework", "unjs", "nitro"], tier="B", country="FR", products=["Nuxt", "Nitro", "UnJS", "Nuxt UI", "Nuxt Content", "h3"], repos=["nuxt/nuxt", "nitrojs/nitro", "h3js/h3", "nuxt/ui", "nuxt/content", "nuxt/image", "nuxt/devtools", "unjs/unstorage", "unjs/ofetch", "nuxt-modules/i18n"], feeds=[("blog feed", "https://nuxt.com/blog/rss.xml")]), ext("svelte", products=["SvelteKit", "vite-plugin-svelte", "Svelte language tools", "shadcn-svelte", "Skeleton", "Bits UI", "Threlte"], repos=["sveltejs/kit", "sveltejs/vite-plugin-svelte", "sveltejs/language-tools", "sveltejs/cli", "huntabyte/shadcn-svelte", "huntabyte/bits-ui", "skeletonlabs/skeleton", "threlte/threlte"]), src("solidjs", "SolidJS", "solidjs.com", ["solid js", "solidjs framework", "solidstart"], products=["Solid", "SolidStart", "Solid Router", "Kobalte"], repos=["solidjs/solid", "solidjs/solid-start", "solidjs/solid-router", "solidjs-community/solid-primitives", "kobaltedev/kobalte"]), src("qwik", "Qwik", "qwik.dev", ["qwik framework", "qwikcity", "builder.io qwik", "partytown"], products=["Qwik", "Partytown", "Mitosis"], repos=["QwikDev/qwik", "QwikDev/partytown", "BuilderIO/mitosis"]), src("htmx", "htmx", "htmx.org", ["htmx library", "hypermedia systems", "big sky software", "hyperscript"], products=["htmx", "_hyperscript", "idiomorph"], repos=["bigskysoftware/htmx", "bigskysoftware/htmx-extensions", "bigskysoftware/_hyperscript", "bigskysoftware/idiomorph"], feeds=[("essays feed", "https://htmx.org/atom.xml", "ATOM")]), src("alpinejs", "Alpine.js", "alpinejs.dev", ["alpine js", "alpinejs"], repos=["alpinejs/alpine"]), src("preact", "Preact", "preactjs.com", ["preactjs", "preact signals"], repos=["preactjs/preact", "preactjs/signals", "preactjs/preact-render-to-string", "preactjs/preset-vite"]), src("lit", "Lit", "lit.dev", ["lit element", "lit-element", "polymer", "web components"], country="US", products=["Lit", "Shoelace", "Stencil", "Open Web Components"], repos=["lit/lit", "shoelace-style/shoelace", "stenciljs/core", "open-wc/open-wc", "modernweb-dev/web"]), src("emberjs", "Ember.js", "emberjs.com", ["ember js", "emberjs", "ember cli", "ember data"], products=["Ember CLI", "Ember Data", "Embroider", "Glimmer"], repos=["emberjs/ember.js", "ember-cli/ember-cli", "emberjs/data", "embroider-build/embroider", "glimmerjs/glimmer-vm"], feeds=[("blog feed", "https://blog.emberjs.com/feed.xml")]), src("tanstack", "TanStack", "tanstack.com", ["tanstack query", "react query", "tanstack router", "tanstack table", "tanstack start"], tier="B", country="US", products=[("TanStack Query", "software", ["react query"]), "TanStack Router", "TanStack Table", "TanStack Start", "TanStack Form", "TanStack Virtual", "TanStack DB"], repos=["TanStack/query", "TanStack/router", "TanStack/table", "TanStack/form", "TanStack/virtual", "TanStack/db"]), ext("vue", products=["Vue Router", "Pinia", "VitePress", "Vue language tools (Volar)", "Vue DevTools", "VueUse", "Vuetify", "Element Plus", "PrimeVue", "Quasar", "Ant Design Vue", "Naive UI"], repos=["vuejs/router", "vuejs/pinia", "vuejs/vitepress", "vuejs/language-tools", "vuejs/devtools", "vuejs/test-utils", "vuejs/create-vue", "vuejs/eslint-plugin-vue", "vueuse/vueuse", "vuetifyjs/vuetify", "element-plus/element-plus", "primefaces/primevue", "quasarframework/quasar", "vueComponent/ant-design-vue", "tusen-ai/naive-ui", "unplugin/unplugin-vue-components", "vitejs/vite-plugin-vue"]), ext("react", products=["Relay", "Lexical", "Hermes", "Redux", "Redux Toolkit", "Zustand", "Jotai", "React Three Fiber", "react-spring", "React Hook Form", "Motion (Framer Motion)", "dnd kit", "SWR", "Recharts", "styled-components", "Emotion", "React Testing Library", "Metro", "Flow", "StyleX", "Docusaurus", "Yoga"], repos=["facebook/react", "facebook/relay", "facebook/lexical", "facebook/hermes", "reduxjs/redux", "reduxjs/redux-toolkit", "pmndrs/zustand", "pmndrs/jotai", "pmndrs/react-three-fiber", "pmndrs/react-spring", "react-hook-form/react-hook-form", "motiondivision/motion", "clauderic/dnd-kit", "vercel/swr", "recharts/recharts", "styled-components/styled-components", "emotion-js/emotion", "testing-library/react-testing-library", "facebook/metro", "facebook/flow", "facebook/yoga", "facebook/stylex", "facebook/docusaurus"]), ext("react-native", products=["React Navigation", "Reanimated", "Gesture Handler", "react-native-screens", "React Native Paper", "FlashList", "React Native Skia", "VisionCamera", "MMKV", "react-native-maps", "Async Storage", "Bottom Sheet", "React Native CLI"], repos=["react-navigation/react-navigation", "software-mansion/react-native-reanimated", "software-mansion/react-native-gesture-handler", "software-mansion/react-native-screens", "callstack/react-native-paper", "Shopify/flash-list", "Shopify/react-native-skia", "react-native-community/cli", "mrousavy/react-native-vision-camera", "mrousavy/react-native-mmkv", "react-native-maps/react-native-maps", "react-native-async-storage/async-storage", "gorhom/react-native-bottom-sheet", "callstack/react-native-testing-library"]), ext("angular", products=["Angular CLI", "Angular Material / CDK", "AngularFire", "NgRx", "ng-bootstrap", "PrimeNG", "ng-packagr", "angular-eslint", "Analog", "NGXS", "Transloco", "ngx-translate", "Taiga UI", "NG-ZORRO"], repos=["angular/angular-cli", "angular/components", "angular/angularfire", "ngrx/platform", "ng-bootstrap/ng-bootstrap", "primefaces/primeng", "ng-packagr/ng-packagr", "angular-eslint/angular-eslint", "analogjs/analog", "ngxs/store", "jsverse/transloco", "ngx-translate/core", "taiga-family/taiga-ui", "NG-ZORRO/ng-zorro-antd", "angular/vscode-ng-language-service"]), ext("tailwind", products=["Headless UI", "Heroicons", "tailwindcss-typography", "tailwindcss-forms", "prettier-plugin-tailwindcss", "Tailwind CSS IntelliSense", "daisyUI", "Flowbite", "tailwind-merge", "cva", "UnoCSS", "PostCSS", "Autoprefixer", "Sass", "Less", "Lightning CSS", "Bootstrap", "Bulma", "Pico CSS", "Open Props", "stylelint", "Browserslist", "cssnano"], repos=["tailwindlabs/headlessui", "tailwindlabs/heroicons", "tailwindlabs/tailwindcss-typography", "tailwindlabs/tailwindcss-forms", "tailwindlabs/prettier-plugin-tailwindcss", "tailwindlabs/tailwindcss-intellisense", "saadeghi/daisyui", "themesberg/flowbite", "dcastil/tailwind-merge", "joe-bell/cva", "unocss/unocss", "postcss/postcss", "postcss/autoprefixer", "sass/dart-sass", "less/less.js", "parcel-bundler/lightningcss", "twbs/bootstrap", "twbs/icons", "jgthms/bulma", "picocss/pico", "argyleink/open-props", "stylelint/stylelint", "browserslist/browserslist", "cssnano/cssnano"]), src("shadcn-ui", "shadcn/ui", "ui.shadcn.com", ["shadcn", "shadcn ui", "shadcn/ui"], tier="B", country="US", repos=["shadcn-ui/ui"]), src("radix-ui", "Radix UI", "radix-ui.com", ["radix ui", "radix primitives", "radix themes", "workos radix"], country="US", products=["Radix Primitives", "Radix Themes", "Radix Colors", "Radix Icons"], repos=["radix-ui/primitives", "radix-ui/themes", "radix-ui/colors", "radix-ui/icons"]), src("mui", "MUI (Material UI)", "mui.com", ["material ui", "material-ui", "mui x", "base ui", "pigment css", "toolpad"], tier="B", products=["Material UI", "MUI X", "Base UI", "Pigment CSS", "Toolpad"], repos=["mui/material-ui", "mui/mui-x", "mui/base-ui", "mui/pigment-css", "mui/toolpad"]), src("chakra-ui", "Chakra UI", "chakra-ui.com", ["chakra", "chakra ui", "zag js", "ark ui", "panda css"], products=["Chakra UI", "Zag", "Ark UI", "Panda CSS"], repos=["chakra-ui/chakra-ui", "chakra-ui/zag", "chakra-ui/ark", "chakra-ui/panda"]), src("ant-design", "Ant Design", "ant.design", ["antd", "ant design", "ant design pro", "ant design x"], country="CN", products=["Ant Design", "Ant Design Pro Components", "Ant Design Mobile", "Ant Design X"], repos=["ant-design/ant-design", "ant-design/pro-components", "ant-design/ant-design-mobile", "ant-design/x"]), src("mantine", "Mantine", "mantine.dev", ["mantine ui", "mantine dev"], repos=["mantinedev/mantine"]), src("storybook", "Storybook", "storybook.js.org", ["storybookjs", "storybook js", "chromatic"], tier="B", products=["Storybook", "Storybook test-runner", "Chromatic CLI"], repos=["storybookjs/storybook", "storybookjs/test-runner", "chromaui/chromatic-cli"]), src("primer", "GitHub Primer design system", "primer.style", ["primer design system", "primer react", "octicons"], country="US", products=["Primer React", "Primer CSS", "Primer Primitives", "Octicons"], repos=["primer/react", "primer/css", "primer/primitives", "primer/octicons"]), src("carbon-design-system", "Carbon Design System (IBM)", "carbondesignsystem.com", ["carbon design system", "ibm carbon", "carbon components"], country="US", products=["Carbon", "Carbon Charts"], repos=["carbon-design-system/carbon", "carbon-design-system/carbon-charts"]), src("adobe-spectrum", "Adobe Spectrum / React Aria", "react-spectrum.adobe.com", ["react spectrum", "react aria", "spectrum design system", "spectrum css", "spectrum web components"], country="US", products=["React Aria", "React Spectrum", "Spectrum CSS", "Spectrum Web Components"], repos=["adobe/react-spectrum", "adobe/spectrum-css", "adobe/spectrum-web-components"]), src("nx", "Nx", "nx.dev", ["nx monorepo", "nrwl", "nx dev", "lerna"], tier="B", country="US", products=["Nx", "Nx Console", "Lerna"], repos=["nrwl/nx", "nrwl/nx-console", "lerna/lerna"]), src("biome", "Biome", "biomejs.dev", ["biomejs", "biome toolchain", "rome tools"], tier="B", repos=["biomejs/biome", "biomejs/biome-vscode"]), src("oxc", "Oxc / VoidZero", "oxc.rs", ["oxc project", "oxlint", "void zero", "voidzero", "rolldown"], tier="B", products=["oxlint", "oxfmt", "Rolldown", "Vite+"], repos=["oxc-project/oxc", "oxc-project/oxc-resolver", "rolldown/rolldown", "voidzero-dev/vite-plus"]), src("swc", "SWC", "swc.rs", ["swc project", "speedy web compiler"], tier="B", repos=["swc-project/swc", "swc-project/swc-node", "swc-project/plugins"]), src("rspack", "Rspack / Rstack (ByteDance web-infra)", "rspack.dev", ["rspack", "rsbuild", "rspress", "rslib", "modern.js", "web-infra-dev"], tier="B", country="CN", products=["Rspack", "Rsbuild", "Rspress", "Rslib", "Rsdoctor", "Modern.js"], repos=["web-infra-dev/rspack", "web-infra-dev/rsbuild", "web-infra-dev/rspress", "web-infra-dev/rslib", "web-infra-dev/rsdoctor", "web-infra-dev/modern.js"]), src("parcel", "Parcel", "parceljs.org", ["parcel bundler", "parceljs"], repos=["parcel-bundler/parcel", "parcel-bundler/watcher"]), ext("vite", products=["vite-plugin-react", "vite-plugin-pwa", "Vike", "vitest VS Code", "eslint-plugin-vitest"], repos=["vitejs/vite-plugin-react", "vite-pwa/vite-plugin-pwa", "vikejs/vike", "vitest-dev/vscode", "vitest-dev/eslint-plugin-vitest"]), ext("webpack", products=["webpack-cli", "webpack-dev-server", "Module Federation", "webpack-bundle-analyzer"], repos=["webpack/webpack-cli", "webpack/webpack-dev-server", "module-federation/core", "webpack-contrib/webpack-bundle-analyzer", "webpack-contrib/css-loader", "webpack-contrib/mini-css-extract-plugin"]), ext("esbuild", products=["tsup"], repos=["egoist/tsup"]), ext("rollup", products=["Rollup plugins"], repos=["rollup/plugins"]), ext("babel", products=["babel-loader", "babel-plugin-macros"], repos=["babel/babel-loader", "babel/minify", "kentcdodds/babel-plugin-macros"]), ext("eslint", products=["ESLint Stylistic", "eslint-plugin-import", "eslint-plugin-react", "eslint-plugin-jsx-a11y", "eslint-plugin-unicorn", "eslint-plugin-n", "@eslint/css", "@eslint/markdown", "@eslint/json"], repos=["eslint-stylistic/eslint-stylistic", "import-js/eslint-plugin-import", "jsx-eslint/eslint-plugin-react", "jsx-eslint/eslint-plugin-jsx-a11y", "sindresorhus/eslint-plugin-unicorn", "eslint-community/eslint-plugin-n", "eslint/css", "eslint/markdown", "eslint/json", "eslint/rewrite", "eslint/config-inspector"]), ext("prettier", products=["prettier-vscode", "eslint-config-prettier", "eslint-plugin-prettier", "@prettier/plugin-php", "@prettier/plugin-ruby", "@prettier/plugin-xml", "pretty-quick"], repos=["prettier/prettier-vscode", "prettier/eslint-config-prettier", "prettier/eslint-plugin-prettier", "prettier/plugin-php", "prettier/plugin-ruby", "prettier/plugin-xml", "prettier/pretty-quick"]), src("graphql", "GraphQL Foundation", "graphql.org", ["graphql", "graphql foundation", "graphql spec", "graphql-js"], categories=["open-source", "developer", "standards"], country="US", products=["GraphQL specification", "GraphQL.js", "GraphiQL", "GraphQL Code Generator", "GraphQL Yoga", "GraphQL Mesh", "graphql-ws", "DataLoader"], repos=["graphql/graphql-js", ("graphql/graphql-spec", T), "graphql/graphiql", "dotansimha/graphql-code-generator", "graphql-hive/graphql-yoga", "graphql-hive/graphql-mesh", "enisdenjo/graphql-ws", "graphql/dataloader"], feeds=[("blog feed", "https://graphql.org/blog/rss.xml")]), src("apollo-graphql", "Apollo GraphQL", "apollographql.com", ["apollo graphql", "apollo server", "apollo client", "apollo router", "apollo federation"], tier="B", country="US", products=["Apollo Server", "Apollo Client", "Apollo Router", "Apollo Federation", "Rover"], repos=["apollographql/apollo-server", "apollographql/apollo-client", "apollographql/router", "apollographql/federation", "apollographql/rover"]), src("hasura", "Hasura", "hasura.io", ["hasura graphql engine", "hasura ddn", "promptql"], tier="B", country="US", products=["Hasura GraphQL Engine", "Hasura DDN", "PromptQL"], repos=["hasura/graphql-engine", "hasura/ndc-postgres", "hasura/ndc-hub"]), src("prisma", "Prisma", "prisma.io", ["prisma orm", "prisma client", "prisma postgres", "prisma accelerate"], tier="B", country="DE", products=["Prisma ORM", "Prisma Postgres", "Prisma Accelerate"], repos=["prisma/prisma", "prisma/prisma-engines", "prisma/language-tools", "prisma/studio"], feeds=[("blog feed", "https://www.prisma.io/blog/rss.xml")]), src("drizzle", "Drizzle ORM", "orm.drizzle.team", ["drizzle orm", "drizzle kit", "drizzle team"], tier="B", repos=["drizzle-team/drizzle-orm", "drizzle-team/drizzle-kit-mirror"]), src("trpc", "tRPC", "trpc.io", ["trpc", "typescript rpc"], repos=["trpc/trpc"]), src("keycloak", "Keycloak", "keycloak.org", ["keycloak", "red hat sso", "keycloak identity"], tier="B", categories=OSSEC, repos=["keycloak/keycloak", "keycloak/keycloak-quickstarts"], feeds=[("blog feed", "https://www.keycloak.org/rss.xml")]), src("ory", "Ory", "ory.sh", ["ory kratos", "ory hydra", "ory keto", "ory oathkeeper", "ory network"], categories=OSSEC, country="DE", products=["Kratos", "Hydra", "Keto", "Oathkeeper"], repos=["ory/kratos", "ory/hydra", "ory/keto", "ory/oathkeeper", "ory/fosite"]), src("authentik", "authentik", "goauthentik.io", ["authentik", "goauthentik", "authentik security"], categories=OSSEC, country="US", repos=["goauthentik/authentik"]), src("authelia", "Authelia", "authelia.com", ["authelia"], categories=OSSEC, repos=["authelia/authelia"]), src("zitadel", "ZITADEL", "zitadel.com", ["zitadel", "zitadel identity"], categories=OSSEC, country="CH", repos=["zitadel/zitadel", "zitadel/oidc"]), src("authjs", "Auth.js (NextAuth.js)", "authjs.dev", ["auth.js", "authjs", "next-auth", "nextauth", "nextauth.js"], repos=["nextauthjs/next-auth"]), src("better-auth", "Better Auth", "better-auth.com", ["better auth", "better-auth"], repos=["better-auth/better-auth"]), src("supertokens", "SuperTokens", "supertokens.com", ["supertokens"], categories=OSSEC, repos=["supertokens/supertokens-core", "supertokens/supertokens-node"]), src("casbin", "Casbin / Casdoor", "casbin.org", ["casbin", "casdoor"], categories=OSSEC, repos=["casbin/casbin", "casdoor/casdoor", "casbin/jcasbin", "casbin/pycasbin"]), src("hanko", "Hanko", "hanko.io", ["hanko", "hanko passkeys"], categories=OSSEC, country="DE", repos=["teamhanko/hanko"]), src("logto", "Logto", "logto.io", ["logto"], categories=OSSEC, repos=["logto-io/logto"]), src("cypress", "Cypress", "cypress.io", ["cypress testing", "cypress.io"], tier="B", country="US", repos=["cypress-io/cypress", "cypress-io/github-action"]), src("testing-library", "Testing Library", "testing-library.com", ["testing library", "dom testing library", "user-event", "jest-dom"], products=["DOM Testing Library", "user-event", "jest-dom", "Vue Testing Library", "Svelte Testing Library", "Angular Testing Library"], repos=["testing-library/dom-testing-library", "testing-library/user-event", "testing-library/jest-dom", "testing-library/vue-testing-library", "testing-library/svelte-testing-library", "testing-library/angular-testing-library"]), src("mock-service-worker", "Mock Service Worker", "mswjs.io", ["msw", "mock service worker", "mswjs"], repos=["mswjs/msw", "mswjs/data", "mswjs/interceptors"]), src("faker", "Faker", "fakerjs.dev", ["faker js", "fakerjs", "faker.js", "faker python", "datafaker"], products=["Faker (JS)", "Faker (Python)", "Faker (Ruby)", "FakerPHP", "Datafaker", "gofakeit"], repos=["faker-js/faker", "joke2k/faker", "faker-ruby/faker", "FakerPHP/Faker", "datafaker-net/datafaker", "brianvoe/gofakeit"]), src("d3", "D3 / Observable", "d3js.org", ["d3 js", "d3js", "d3.js", "observable plot", "observablehq"], country="US", products=["D3", "Observable Plot", "Observable Framework", "Observable Runtime"], repos=["d3/d3", "observablehq/plot", "observablehq/framework", "observablehq/runtime"]), src("chartjs", "Chart.js", "chartjs.org", ["chart js", "chartjs", "chart.js"], products=["Chart.js", "chartjs-plugin-datalabels", "chartjs-plugin-annotation", "chartjs-plugin-zoom", "react-chartjs-2"], repos=["chartjs/Chart.js", "chartjs/chartjs-plugin-datalabels", "chartjs/chartjs-plugin-annotation", "chartjs/chartjs-plugin-zoom", "reactchartjs/react-chartjs-2"]), src("apexcharts", "ApexCharts", "apexcharts.com", ["apexcharts", "apex charts"], repos=["apexcharts/apexcharts.js", "apexcharts/react-apexcharts", "apexcharts/vue-apexcharts", "apexcharts/ng-apexcharts"]), src("plotly", "Plotly", "plotly.com", ["plotly", "plotly.js", "plotly python", "plotly dash", "plotly express"], tier="B", country="CA", products=["plotly.js", "plotly.py", "Dash", "Dash AG Grid", "Kaleido", "Dash Mantine Components", "dash-bootstrap-components"], repos=["plotly/plotly.js", "plotly/plotly.py", "plotly/dash-ag-grid", "plotly/Kaleido", "snehilvj/dash-mantine-components", "facultyai/dash-bootstrap-components", "plotly/plotly.rs"]), src("vega", "Vega / Vega-Lite / Altair", "vega.github.io", ["vega", "vega-lite", "altair", "vega-altair", "vega embed"], country="US", products=["Vega", "Vega-Lite", "Vega-Altair", "vega-embed", "vl-convert"], repos=["vega/vega", "vega/vega-lite", "vega/altair", "vega/vega-embed", "vega/vl-convert"]), src("holoviz", "Bokeh / HoloViz", "holoviz.org", ["bokeh", "holoviz", "holoviews", "hvplot", "datashader", "param"], categories=["open-source", "developer", "science"], products=["Bokeh", "Panel", "HoloViews", "hvPlot", "Datashader", "Param"], repos=["bokeh/bokeh", "holoviz/panel", "holoviz/holoviews", "holoviz/hvplot", "holoviz/datashader", "holoviz/param"]), src("threejs", "three.js", "threejs.org", ["three js", "threejs", "three.js", "mrdoob"], tier="B", products=["three.js", "drei", "Theatre.js"], repos=["mrdoob/three.js", "pmndrs/drei", "pmndrs/postprocessing"]), src("babylonjs", "Babylon.js", "babylonjs.com", ["babylon js", "babylonjs", "babylon.js"], country="US", repos=["BabylonJS/Babylon.js", "BabylonJS/Editor"]), src("pixijs", "PixiJS", "pixijs.com", ["pixi js", "pixijs", "pixi.js"], repos=["pixijs/pixijs", "pixijs/pixi-react", "pixijs/layout"]), src("phaser", "Phaser", "phaser.io", ["phaser game framework", "phaserjs", "phaser editor"], country="GB", repos=["phaserjs/phaser", "phaserjs/editor"]), src("playcanvas", "PlayCanvas", "playcanvas.com", ["playcanvas engine", "supersplat"], country="GB", repos=["playcanvas/engine", "playcanvas/supersplat", "playcanvas/editor"]), src("maplibre", "MapLibre", "maplibre.org", ["maplibre gl", "maplibre native", "martin tiles", "maputnik"], categories=["open-source", "developer", "technology"], products=["MapLibre GL JS", "MapLibre Native", "Martin", "Maputnik", "MapLibre Style Spec"], repos=["maplibre/maplibre-gl-js", "maplibre/maplibre-native", "maplibre/martin", "maplibre/maputnik", "maplibre/maplibre-style-spec"]), src("leaflet", "Leaflet", "leafletjs.com", ["leaflet js", "leafletjs", "leaflet.js"], repos=["Leaflet/Leaflet", "Leaflet/Leaflet.markercluster", "PaulLeCam/react-leaflet"]), src("openlayers", "OpenLayers", "openlayers.org", ["openlayers", "ol"], repos=["openlayers/openlayers", "openlayers/ol-ext"]), src("deckgl", "deck.gl / vis.gl", "deck.gl", ["deck.gl", "deckgl", "vis.gl", "visgl", "luma.gl", "loaders.gl", "react-map-gl", "kepler.gl"], categories=["open-source", "developer", "technology"], country="US", products=["deck.gl", "luma.gl", "loaders.gl", "react-map-gl", "kepler.gl"], repos=["visgl/deck.gl", "visgl/luma.gl", "visgl/loaders.gl", "visgl/react-map-gl", "keplergl/kepler.gl"]), src("cesium", "CesiumJS", "cesium.com", ["cesium", "cesiumjs", "3d tiles", "cesium ion"], categories=["open-source", "developer", "technology"], country="US", products=["CesiumJS", "3D Tiles", "Cesium for Unreal", "Cesium for Unity"], repos=["CesiumGS/cesium", ("CesiumGS/3d-tiles", T), "CesiumGS/cesium-unreal", "CesiumGS/cesium-unity", "CesiumGS/cesium-native"]), ]