# WebSensor — package-registry sensor class (added 2026-09-08, `package` connector): the version streams of the # software supply chain, attached to the project/organization entities of the founding file and of # 10-open-source.yaml. One sensor per (registry, package); `latest` moves and new versions become # software_release events. Tier C (30 min–6 h) — registries are CDN-served; Docker Hub tier D (anonymous quota). # High-volume canary streams: `maxItems` capped, `llm: false` set on the source in 10-open-source.yaml. sources: # ── JavaScript / TypeScript (npm) ── - id: react extend: true categories: [packages] sensors: - { name: npm react, url: "https://www.npmjs.com/package/react", type: REST_API, connector: package, tier: C, config: { registry: npm, name: react, maxItems: 30 } } - { name: npm react-dom, url: "https://www.npmjs.com/package/react-dom", type: REST_API, connector: package, tier: C, config: { registry: npm, name: react-dom, maxItems: 30 } } - id: nextjs extend: true categories: [packages] sensors: - { name: npm next, url: "https://www.npmjs.com/package/next", type: REST_API, connector: package, tier: C, config: { registry: npm, name: next, maxItems: 30 } } - id: vue extend: true categories: [packages] sensors: - { name: npm vue, url: "https://www.npmjs.com/package/vue", type: REST_API, connector: package, tier: C, config: { registry: npm, name: vue, maxItems: 30 } } - { name: npm nuxt, url: "https://www.npmjs.com/package/nuxt", type: REST_API, connector: package, tier: C, config: { registry: npm, name: nuxt, maxItems: 30 } } - id: angular extend: true categories: [packages] sensors: - { name: npm @angular/core, url: "https://www.npmjs.com/package/@angular/core", type: REST_API, connector: package, tier: C, config: { registry: npm, name: "@angular/core", maxItems: 30 } } - id: svelte extend: true categories: [packages] sensors: - { name: npm svelte, url: "https://www.npmjs.com/package/svelte", type: REST_API, connector: package, tier: C, config: { registry: npm, name: svelte, maxItems: 30 } } - id: astro extend: true categories: [packages] sensors: - { name: npm astro, url: "https://www.npmjs.com/package/astro", type: REST_API, connector: package, tier: C, config: { registry: npm, name: astro, maxItems: 30 } } - id: typescript extend: true categories: [packages] sensors: - { name: npm typescript, url: "https://www.npmjs.com/package/typescript", type: REST_API, connector: package, tier: C, config: { registry: npm, name: typescript, maxItems: 30 } } - id: nodejs extend: true categories: [packages] sensors: - { name: docker hub node, url: "https://hub.docker.com/_/node", type: REST_API, connector: package, tier: D, config: { registry: dockerhub, name: library/node, maxItems: 30 } } - { name: homebrew node, url: "https://formulae.brew.sh/formula/node", type: REST_API, connector: package, tier: C, config: { registry: homebrew, name: node } } - id: vite extend: true categories: [packages] sensors: - { name: npm vite, url: "https://www.npmjs.com/package/vite", type: REST_API, connector: package, tier: C, config: { registry: npm, name: vite, maxItems: 30 } } - id: webpack extend: true categories: [packages] sensors: - { name: npm webpack, url: "https://www.npmjs.com/package/webpack", type: REST_API, connector: package, tier: C, config: { registry: npm, name: webpack, maxItems: 30 } } - id: esbuild extend: true categories: [packages] sensors: - { name: npm esbuild, url: "https://www.npmjs.com/package/esbuild", type: REST_API, connector: package, tier: C, config: { registry: npm, name: esbuild, maxItems: 30 } } - id: eslint extend: true categories: [packages] sensors: - { name: npm eslint, url: "https://www.npmjs.com/package/eslint", type: REST_API, connector: package, tier: C, config: { registry: npm, name: eslint, maxItems: 30 } } - id: prettier extend: true categories: [packages] sensors: - { name: npm prettier, url: "https://www.npmjs.com/package/prettier", type: REST_API, connector: package, tier: C, config: { registry: npm, name: prettier, maxItems: 30 } } - id: tailwind extend: true categories: [packages] sensors: - { name: npm tailwindcss, url: "https://www.npmjs.com/package/tailwindcss", type: REST_API, connector: package, tier: C, config: { registry: npm, name: tailwindcss, maxItems: 30 } } - id: pnpm extend: true categories: [packages] sensors: - { name: npm pnpm, url: "https://www.npmjs.com/package/pnpm", type: REST_API, connector: package, tier: C, config: { registry: npm, name: pnpm, maxItems: 30 } } - id: electron extend: true categories: [packages] sensors: - { name: npm electron, url: "https://www.npmjs.com/package/electron", type: REST_API, connector: package, tier: C, config: { registry: npm, name: electron, maxItems: 30 } } - id: react-native extend: true categories: [packages] sensors: - { name: npm react-native, url: "https://www.npmjs.com/package/react-native", type: REST_API, connector: package, tier: C, config: { registry: npm, name: react-native, maxItems: 30 } } - id: expo extend: true categories: [packages] sensors: - { name: npm expo, url: "https://www.npmjs.com/package/expo", type: REST_API, connector: package, tier: C, config: { registry: npm, name: expo, maxItems: 30 } } - id: openai extend: true categories: [packages] sensors: - { name: npm openai, url: "https://www.npmjs.com/package/openai", type: REST_API, connector: package, tier: C, config: { registry: npm, name: openai, maxItems: 30 } } - { name: pypi openai, url: "https://pypi.org/project/openai/", type: REST_API, connector: package, tier: C, config: { registry: pypi, name: openai, maxItems: 30 } } - id: anthropic extend: true categories: [packages] sensors: - { name: npm @anthropic-ai/sdk, url: "https://www.npmjs.com/package/@anthropic-ai/sdk", type: REST_API, connector: package, tier: C, config: { registry: npm, name: "@anthropic-ai/sdk", maxItems: 30 } } - { name: npm @anthropic-ai/claude-code, url: "https://www.npmjs.com/package/@anthropic-ai/claude-code", type: REST_API, connector: package, tier: B, config: { registry: npm, name: "@anthropic-ai/claude-code", maxItems: 30 } } - { name: pypi anthropic, url: "https://pypi.org/project/anthropic/", type: REST_API, connector: package, tier: C, config: { registry: pypi, name: anthropic, maxItems: 30 } } - id: google-developers-ai extend: true categories: [packages] sensors: - { name: npm @google/genai, url: "https://www.npmjs.com/package/@google/genai", type: REST_API, connector: package, tier: C, config: { registry: npm, name: "@google/genai", maxItems: 30 } } - { name: pypi google-genai, url: "https://pypi.org/project/google-genai/", type: REST_API, connector: package, tier: C, config: { registry: pypi, name: google-genai, maxItems: 30 } } - id: mistral extend: true categories: [packages] sensors: - { name: pypi mistralai, url: "https://pypi.org/project/mistralai/", type: REST_API, connector: package, tier: C, config: { registry: pypi, name: mistralai, maxItems: 30 } } - id: cohere extend: true categories: [packages] sensors: - { name: pypi cohere, url: "https://pypi.org/project/cohere/", type: REST_API, connector: package, tier: C, config: { registry: pypi, name: cohere, maxItems: 30 } } - id: huggingface extend: true categories: [packages] sensors: - { name: pypi transformers, url: "https://pypi.org/project/transformers/", type: REST_API, connector: package, tier: C, config: { registry: pypi, name: transformers, maxItems: 30 } } - { name: pypi huggingface-hub, url: "https://pypi.org/project/huggingface-hub/", type: REST_API, connector: package, tier: C, config: { registry: pypi, name: huggingface-hub, maxItems: 30 } } - { name: pypi datasets, url: "https://pypi.org/project/datasets/", type: REST_API, connector: package, tier: C, config: { registry: pypi, name: datasets, maxItems: 30 } } - id: langchain extend: true categories: [packages] sensors: - { name: pypi langchain, url: "https://pypi.org/project/langchain/", type: REST_API, connector: package, tier: C, config: { registry: pypi, name: langchain, maxItems: 30 } } - { name: pypi langgraph, url: "https://pypi.org/project/langgraph/", type: REST_API, connector: package, tier: C, config: { registry: pypi, name: langgraph, maxItems: 30 } } - { name: npm langchain, url: "https://www.npmjs.com/package/langchain", type: REST_API, connector: package, tier: C, config: { registry: npm, name: langchain, maxItems: 30 } } - id: vllm extend: true categories: [packages] sensors: - { name: pypi vllm, url: "https://pypi.org/project/vllm/", type: REST_API, connector: package, tier: C, config: { registry: pypi, name: vllm, maxItems: 30 } } - id: ollama extend: true categories: [packages] sensors: - { name: docker hub ollama, url: "https://hub.docker.com/r/ollama/ollama", type: REST_API, connector: package, tier: D, config: { registry: dockerhub, name: ollama/ollama, maxItems: 30 } } - { name: homebrew ollama, url: "https://formulae.brew.sh/formula/ollama", type: REST_API, connector: package, tier: C, config: { registry: homebrew, name: ollama } } # ── Python (PyPI) ── - id: python extend: true categories: [packages] sensors: - { name: pypi pip, url: "https://pypi.org/project/pip/", type: REST_API, connector: package, tier: C, config: { registry: pypi, name: pip, maxItems: 30 } } - { name: pypi uv, url: "https://pypi.org/project/uv/", type: REST_API, connector: package, tier: C, config: { registry: pypi, name: uv, maxItems: 30 } } - { name: docker hub python, url: "https://hub.docker.com/_/python", type: REST_API, connector: package, tier: D, config: { registry: dockerhub, name: library/python, maxItems: 30 } } - id: django extend: true categories: [packages] sensors: - { name: pypi django, url: "https://pypi.org/project/Django/", type: REST_API, connector: package, tier: C, config: { registry: pypi, name: Django, maxItems: 30 } } - id: flask extend: true categories: [packages] sensors: - { name: pypi flask, url: "https://pypi.org/project/Flask/", type: REST_API, connector: package, tier: C, config: { registry: pypi, name: Flask, maxItems: 30 } } - id: fastapi extend: true categories: [packages] sensors: - { name: pypi fastapi, url: "https://pypi.org/project/fastapi/", type: REST_API, connector: package, tier: C, config: { registry: pypi, name: fastapi, maxItems: 30 } } - { name: pypi pydantic, url: "https://pypi.org/project/pydantic/", type: REST_API, connector: package, tier: C, config: { registry: pypi, name: pydantic, maxItems: 30 } } - id: pytorch extend: true categories: [packages] sensors: - { name: pypi torch, url: "https://pypi.org/project/torch/", type: REST_API, connector: package, tier: C, config: { registry: pypi, name: torch, maxItems: 30 } } - id: tensorflow extend: true categories: [packages] sensors: - { name: pypi tensorflow, url: "https://pypi.org/project/tensorflow/", type: REST_API, connector: package, tier: C, config: { registry: pypi, name: tensorflow, maxItems: 30 } } - { name: pypi keras, url: "https://pypi.org/project/keras/", type: REST_API, connector: package, tier: C, config: { registry: pypi, name: keras, maxItems: 30 } } - id: jax extend: true categories: [packages] sensors: - { name: pypi jax, url: "https://pypi.org/project/jax/", type: REST_API, connector: package, tier: C, config: { registry: pypi, name: jax, maxItems: 30 } } - id: jupyter extend: true categories: [packages] sensors: - { name: pypi jupyterlab, url: "https://pypi.org/project/jupyterlab/", type: REST_API, connector: package, tier: C, config: { registry: pypi, name: jupyterlab, maxItems: 30 } } - id: airflow extend: true categories: [packages] sensors: - { name: pypi apache-airflow, url: "https://pypi.org/project/apache-airflow/", type: REST_API, connector: package, tier: C, config: { registry: pypi, name: apache-airflow, maxItems: 30 } } - id: dbt extend: true categories: [packages] sensors: - { name: pypi dbt-core, url: "https://pypi.org/project/dbt-core/", type: REST_API, connector: package, tier: C, config: { registry: pypi, name: dbt-core, maxItems: 30 } } - id: ansible extend: true categories: [packages] sensors: - { name: pypi ansible-core, url: "https://pypi.org/project/ansible-core/", type: REST_API, connector: package, tier: C, config: { registry: pypi, name: ansible-core, maxItems: 30 } } - id: aws extend: true categories: [packages] sensors: - { name: pypi boto3, url: "https://pypi.org/project/boto3/", type: REST_API, connector: package, tier: C, config: { registry: pypi, name: boto3, maxItems: 30 } } - { name: npm aws-cdk, url: "https://www.npmjs.com/package/aws-cdk", type: REST_API, connector: package, tier: C, config: { registry: npm, name: aws-cdk, maxItems: 30 } } - { name: npm @aws-sdk/client-s3, url: "https://www.npmjs.com/package/@aws-sdk/client-s3", type: REST_API, connector: package, tier: C, config: { registry: npm, name: "@aws-sdk/client-s3", maxItems: 30 } } - id: stripe extend: true categories: [packages] sensors: - { name: npm stripe, url: "https://www.npmjs.com/package/stripe", type: REST_API, connector: package, tier: C, config: { registry: npm, name: stripe, maxItems: 30 } } - { name: pypi stripe, url: "https://pypi.org/project/stripe/", type: REST_API, connector: package, tier: C, config: { registry: pypi, name: stripe, maxItems: 30 } } - id: supabase extend: true categories: [packages] sensors: - { name: npm @supabase/supabase-js, url: "https://www.npmjs.com/package/@supabase/supabase-js", type: REST_API, connector: package, tier: C, config: { registry: npm, name: "@supabase/supabase-js", maxItems: 30 } } - id: firebase extend: true categories: [packages] sensors: - { name: npm firebase, url: "https://www.npmjs.com/package/firebase", type: REST_API, connector: package, tier: C, config: { registry: npm, name: firebase, maxItems: 30 } } - id: vercel extend: true categories: [packages] sensors: - { name: npm vercel, url: "https://www.npmjs.com/package/vercel", type: REST_API, connector: package, tier: C, config: { registry: npm, name: vercel, maxItems: 30 } } - { name: npm ai (AI SDK), url: "https://www.npmjs.com/package/ai", type: REST_API, connector: package, tier: C, config: { registry: npm, name: ai, maxItems: 30 } } - id: mongodb extend: true categories: [packages] sensors: - { name: npm mongodb, url: "https://www.npmjs.com/package/mongodb", type: REST_API, connector: package, tier: C, config: { registry: npm, name: mongodb, maxItems: 30 } } - { name: docker hub mongo, url: "https://hub.docker.com/_/mongo", type: REST_API, connector: package, tier: D, config: { registry: dockerhub, name: library/mongo, maxItems: 30 } } - id: postgresql extend: true categories: [packages] sensors: - { name: docker hub postgres, url: "https://hub.docker.com/_/postgres", type: REST_API, connector: package, tier: D, config: { registry: dockerhub, name: library/postgres, maxItems: 30 } } - { name: homebrew postgresql@17, url: "https://formulae.brew.sh/formula/postgresql@17", type: REST_API, connector: package, tier: C, config: { registry: homebrew, name: "postgresql@17" } } - id: redis extend: true categories: [packages] sensors: - { name: docker hub redis, url: "https://hub.docker.com/_/redis", type: REST_API, connector: package, tier: D, config: { registry: dockerhub, name: library/redis, maxItems: 30 } } - { name: npm ioredis, url: "https://www.npmjs.com/package/ioredis", type: REST_API, connector: package, tier: C, config: { registry: npm, name: ioredis, maxItems: 30 } } - id: nginx extend: true categories: [packages] sensors: - { name: docker hub nginx, url: "https://hub.docker.com/_/nginx", type: REST_API, connector: package, tier: D, config: { registry: dockerhub, name: library/nginx, maxItems: 30 } } - id: docker extend: true categories: [packages] sensors: - { name: docker hub alpine, url: "https://hub.docker.com/_/alpine", type: REST_API, connector: package, tier: D, config: { registry: dockerhub, name: library/alpine, maxItems: 30 } } - { name: docker hub ubuntu, url: "https://hub.docker.com/_/ubuntu", type: REST_API, connector: package, tier: D, config: { registry: dockerhub, name: library/ubuntu, maxItems: 30 } } - id: kubernetes extend: true categories: [packages] sensors: - { name: homebrew kubernetes-cli, url: "https://formulae.brew.sh/formula/kubernetes-cli", type: REST_API, connector: package, tier: C, config: { registry: homebrew, name: kubernetes-cli } } - { name: go k8s.io/client-go, url: "https://pkg.go.dev/k8s.io/client-go", type: REST_API, connector: package, tier: C, config: { registry: goproxy, name: k8s.io/client-go, maxItems: 30 } } - id: helm extend: true categories: [packages] sensors: - { name: homebrew helm, url: "https://formulae.brew.sh/formula/helm", type: REST_API, connector: package, tier: C, config: { registry: homebrew, name: helm } } # ── Rust (crates.io) ── - id: rust extend: true categories: [packages] sensors: - { name: crates serde, url: "https://crates.io/crates/serde", type: REST_API, connector: package, tier: C, config: { registry: crates, name: serde, maxItems: 30 } } - { name: crates tokio, url: "https://crates.io/crates/tokio", type: REST_API, connector: package, tier: C, config: { registry: crates, name: tokio, maxItems: 30 } } - { name: crates clap, url: "https://crates.io/crates/clap", type: REST_API, connector: package, tier: C, config: { registry: crates, name: clap, maxItems: 30 } } - { name: homebrew rust, url: "https://formulae.brew.sh/formula/rust", type: REST_API, connector: package, tier: C, config: { registry: homebrew, name: rust } } # ── Go (module proxy) ── - id: go extend: true categories: [packages] sensors: - { name: go golang.org/x/net, url: "https://pkg.go.dev/golang.org/x/net", type: REST_API, connector: package, tier: C, config: { registry: goproxy, name: golang.org/x/net, maxItems: 30 } } - { name: go golang.org/x/crypto, url: "https://pkg.go.dev/golang.org/x/crypto", type: REST_API, connector: package, tier: C, config: { registry: goproxy, name: golang.org/x/crypto, maxItems: 30 } } - { name: homebrew go, url: "https://formulae.brew.sh/formula/go", type: REST_API, connector: package, tier: C, config: { registry: homebrew, name: go } } - id: hashicorp extend: true categories: [packages] sensors: - { name: go terraform, url: "https://pkg.go.dev/github.com/hashicorp/terraform", type: REST_API, connector: package, tier: C, config: { registry: goproxy, name: github.com/hashicorp/terraform, maxItems: 30 } } - id: opentofu extend: true categories: [packages] sensors: - { name: homebrew opentofu, url: "https://formulae.brew.sh/formula/opentofu", type: REST_API, connector: package, tier: C, config: { registry: homebrew, name: opentofu } } - id: grafana extend: true categories: [packages] sensors: - { name: docker hub grafana, url: "https://hub.docker.com/r/grafana/grafana", type: REST_API, connector: package, tier: D, config: { registry: dockerhub, name: grafana/grafana, maxItems: 30 } } - id: prometheus extend: true categories: [packages] sensors: - { name: docker hub prometheus, url: "https://hub.docker.com/r/prom/prometheus", type: REST_API, connector: package, tier: D, config: { registry: dockerhub, name: prom/prometheus, maxItems: 30 } } # ── Ruby / PHP / .NET / Elixir ── - id: rails extend: true categories: [packages] sensors: - { name: rubygems rails, url: "https://rubygems.org/gems/rails", type: REST_API, connector: package, tier: C, config: { registry: rubygems, name: rails, maxItems: 30 } } - id: ruby extend: true categories: [packages] sensors: - { name: rubygems bundler, url: "https://rubygems.org/gems/bundler", type: REST_API, connector: package, tier: C, config: { registry: rubygems, name: bundler, maxItems: 30 } } - { name: homebrew ruby, url: "https://formulae.brew.sh/formula/ruby", type: REST_API, connector: package, tier: C, config: { registry: homebrew, name: ruby } } - id: laravel extend: true categories: [packages] sensors: - { name: packagist laravel/framework, url: "https://packagist.org/packages/laravel/framework", type: REST_API, connector: package, tier: C, config: { registry: packagist, name: laravel/framework, maxItems: 30 } } - id: php extend: true categories: [packages] sensors: - { name: packagist symfony/symfony, url: "https://packagist.org/packages/symfony/symfony", type: REST_API, connector: package, tier: C, config: { registry: packagist, name: symfony/symfony, maxItems: 30 } } - { name: homebrew php, url: "https://formulae.brew.sh/formula/php", type: REST_API, connector: package, tier: C, config: { registry: homebrew, name: php } } - id: wordpress extend: true categories: [packages] sensors: - { name: docker hub wordpress, url: "https://hub.docker.com/_/wordpress", type: REST_API, connector: package, tier: D, config: { registry: dockerhub, name: library/wordpress, maxItems: 30 } } - id: dotnet extend: true categories: [packages] sensors: - { name: nuget Microsoft.AspNetCore.App.Ref, url: "https://www.nuget.org/packages/Microsoft.AspNetCore.App.Ref", type: REST_API, connector: package, tier: C, config: { registry: nuget, name: Microsoft.AspNetCore.App.Ref, maxItems: 30 } } - { name: nuget Newtonsoft.Json, url: "https://www.nuget.org/packages/Newtonsoft.Json", type: REST_API, connector: package, tier: C, config: { registry: nuget, name: Newtonsoft.Json, maxItems: 30 } } - { name: nuget Microsoft.Extensions.AI, url: "https://www.nuget.org/packages/Microsoft.Extensions.AI", type: REST_API, connector: package, tier: C, config: { registry: nuget, name: Microsoft.Extensions.AI, maxItems: 30 } } # ── Tooling / system ── - id: git extend: true categories: [packages] sensors: - { name: homebrew git, url: "https://formulae.brew.sh/formula/git", type: REST_API, connector: package, tier: C, config: { registry: homebrew, name: git } } - id: curl extend: true categories: [packages] sensors: - { name: homebrew curl, url: "https://formulae.brew.sh/formula/curl", type: REST_API, connector: package, tier: C, config: { registry: homebrew, name: curl } } - id: openssl extend: true categories: [packages] sensors: - { name: homebrew openssl@3, url: "https://formulae.brew.sh/formula/openssl@3", type: REST_API, connector: package, tier: C, config: { registry: homebrew, name: "openssl@3" } } - id: deno extend: true categories: [packages] sensors: - { name: homebrew deno, url: "https://formulae.brew.sh/formula/deno", type: REST_API, connector: package, tier: C, config: { registry: homebrew, name: deno } } - id: bun extend: true categories: [packages] sensors: - { name: npm bun, url: "https://www.npmjs.com/package/bun", type: REST_API, connector: package, tier: C, config: { registry: npm, name: bun, maxItems: 30 } } - id: homebrew extend: true categories: [packages] sensors: - { name: homebrew ffmpeg, url: "https://formulae.brew.sh/formula/ffmpeg", type: REST_API, connector: package, tier: C, config: { registry: homebrew, name: ffmpeg } } - { name: homebrew sqlite, url: "https://formulae.brew.sh/formula/sqlite", type: REST_API, connector: package, tier: C, config: { registry: homebrew, name: sqlite } } - { name: homebrew tmux, url: "https://formulae.brew.sh/formula/tmux", type: REST_API, connector: package, tier: C, config: { registry: homebrew, name: tmux } } - id: ghost extend: true categories: [packages] sensors: - { name: npm ghost, url: "https://www.npmjs.com/package/ghost", type: REST_API, connector: package, tier: C, config: { registry: npm, name: ghost, maxItems: 30 } }