Detection as Code

The maturity matrix

The matrix is a grid of 14 platforms against 33 capabilities. Twelve of the platforms have profiles here. CardinalOps and SnapAttack are in the dataset but no longer ship under their own names. Every cell holds a status, a one-line note naming the feature as the vendor's page calls it, the page URL and the read date. Pages were read on 2026-11-03. The next full re-read is 2027-02-03.

What it measures

The 33 capabilities sit in six groups: languages (10), source control and CI (6), testing (5), coverage analytics (4), rule health (5) and library (3). The 30 outside the library group make a core view. The grid asks whether a public page names each feature, not whether it works well.

The three statuses

  • Documented. A documentation page, API reference or official repository states the feature and what it does.
  • Partial. The feature is named but incomplete, exists in another form, or rests on a product page, press release or blog. Marketing-only evidence is never documented.
  • Not documented. No page read for that platform names the feature. This does not say the feature is absent. It says a reader following public pages would not find it.

How the score is computed

Documented counts 1, partial counts 0.5 and not documented counts 0, summed across the capabilities. Every capability has equal weight, so the matrix is a count of public evidence. On that count Panther has 18.0 of 33, with 14 documented. Elastic has 16.5, Google SecOps 15.0, Splunk 13.5 and Sentinel 12.5. Mate Security has 3.5, with no documented cells and seven partial. SnapAttack has 0 because nothing readable was found.

The ranking elsewhere on this site weights eight criteria that sum to 100, so Sentinel leads on 7.81 even though Panther documents more cells. The matrix shows breadth. The rubric shows which gaps cost most. Read both.

Why rule health is separate

Rules decay after they ship. A query fails, a source stops sending, a field is renamed, or a rule starts paging everyone. Detection teams meet these failures most often, so rule health is its own group of five capabilities: noisy rule detection, broken or silent rule detection, schema or field drift alerts, rule performance or cost telemetry, and lifecycle states. It is also an 18-point criterion in the weighted rubric. It is the least documented group in the field. No platform documents all five. Counting documented as 1 and partial as 0.5, the best score on the five columns is 3.5 of 5 (Google Security Operations).

Limits

Language rows are platform-specific, so a tool is not weaker for lacking another vendor's language. Sigma and pySigma are open-source tooling, scored on the same grid. Library sizes and noise figures are vendor claims and carry their page.

The full method, including how pages were read and how corrections work, is on the method page. The data is on the data page.

Platforms: 14. Capabilities: 33. Read date 2026-11-03. Scoring: documented 1, partial 0.5, not documented 0.

Full maturity matrix: 14 platforms by 33 capabilities.
PlatformLanguagesSource control and CITestingCoverage analyticsRule healthLibraryScore
Sigma nativeSigma conversionYARA-LSPLKQLEQL or ES|QLPythonVisual builderYARALucene or KQL-likeGit syncPR deployCLIRule APICI examplesEnv promotionUnit testsReplaySynthetic eventsBacktest reportsTest coverageATT&CK mapGap viewData sourcesLog source healthNoisy rulesBroken rulesField driftRule costLifecycleLibrary countCommunityCadence
PantherPanther, Sigma native: not documentednot documentedPanther, Sigma conversion: documenteddocumentedPanther, YARA-L: not documentednot documentedPanther, SPL: not documentednot documentedPanther, KQL: not documentednot documentedPanther, EQL or ES|QL: not documentednot documentedPanther, Python: documenteddocumentedPanther, Visual builder: documenteddocumentedPanther, YARA: not documentednot documentedPanther, Lucene or KQL-like: partialpartialPanther, Git sync: documenteddocumentedPanther, PR deploy: documenteddocumentedPanther, CLI: documenteddocumentedPanther, Rule API: documenteddocumentedPanther, CI examples: documenteddocumentedPanther, Env promotion: not documentednot documentedPanther, Unit tests: documenteddocumentedPanther, Replay: documenteddocumentedPanther, Synthetic events: not documentednot documentedPanther, Backtest reports: partialpartialPanther, Test coverage: not documentednot documentedPanther, ATT&CK map: documenteddocumentedPanther, Gap view: documenteddocumentedPanther, Data sources: partialpartialPanther, Log source health: partialpartialPanther, Noisy rules: not documentednot documentedPanther, Broken rules: documenteddocumentedPanther, Field drift: partialpartialPanther, Rule cost: partialpartialPanther, Lifecycle: not documentednot documentedPanther, Library count: partialpartialPanther, Community: documenteddocumentedPanther, Cadence: partialpartial18.0 / 33
Elastic SecurityElastic Security, Sigma native: not documentednot documentedElastic Security, Sigma conversion: not documentednot documentedElastic Security, YARA-L: not documentednot documentedElastic Security, SPL: not documentednot documentedElastic Security, KQL: not documentednot documentedElastic Security, EQL or ES|QL: documenteddocumentedElastic Security, Python: not documentednot documentedElastic Security, Visual builder: not documentednot documentedElastic Security, YARA: not documentednot documentedElastic Security, Lucene or KQL-like: documenteddocumentedElastic Security, Git sync: documenteddocumentedElastic Security, PR deploy: partialpartialElastic Security, CLI: documenteddocumentedElastic Security, Rule API: documenteddocumentedElastic Security, CI examples: partialpartialElastic Security, Env promotion: partialpartialElastic Security, Unit tests: documenteddocumentedElastic Security, Replay: documenteddocumentedElastic Security, Synthetic events: partialpartialElastic Security, Backtest reports: not documentednot documentedElastic Security, Test coverage: not documentednot documentedElastic Security, ATT&CK map: documenteddocumentedElastic Security, Gap view: documenteddocumentedElastic Security, Data sources: partialpartialElastic Security, Log source health: partialpartialElastic Security, Noisy rules: not documentednot documentedElastic Security, Broken rules: documenteddocumentedElastic Security, Field drift: partialpartialElastic Security, Rule cost: documenteddocumentedElastic Security, Lifecycle: partialpartialElastic Security, Library count: partialpartialElastic Security, Community: partialpartialElastic Security, Cadence: partialpartial16.5 / 33
Google Security OperationsGoogle Security Operations, Sigma native: not documentednot documentedGoogle Security Operations, Sigma conversion: not documentednot documentedGoogle Security Operations, YARA-L: documenteddocumentedGoogle Security Operations, SPL: not documentednot documentedGoogle Security Operations, KQL: not documentednot documentedGoogle Security Operations, EQL or ES|QL: not documentednot documentedGoogle Security Operations, Python: not documentednot documentedGoogle Security Operations, Visual builder: not documentednot documentedGoogle Security Operations, YARA: not documentednot documentedGoogle Security Operations, Lucene or KQL-like: not documentednot documentedGoogle Security Operations, Git sync: documenteddocumentedGoogle Security Operations, PR deploy: partialpartialGoogle Security Operations, CLI: documenteddocumentedGoogle Security Operations, Rule API: documenteddocumentedGoogle Security Operations, CI examples: not documentednot documentedGoogle Security Operations, Env promotion: not documentednot documentedGoogle Security Operations, Unit tests: not documentednot documentedGoogle Security Operations, Replay: documenteddocumentedGoogle Security Operations, Synthetic events: partialpartialGoogle Security Operations, Backtest reports: partialpartialGoogle Security Operations, Test coverage: not documentednot documentedGoogle Security Operations, ATT&CK map: documenteddocumentedGoogle Security Operations, Gap view: documenteddocumentedGoogle Security Operations, Data sources: partialpartialGoogle Security Operations, Log source health: partialpartialGoogle Security Operations, Noisy rules: partialpartialGoogle Security Operations, Broken rules: documenteddocumentedGoogle Security Operations, Field drift: not documentednot documentedGoogle Security Operations, Rule cost: documenteddocumentedGoogle Security Operations, Lifecycle: documenteddocumentedGoogle Security Operations, Library count: partialpartialGoogle Security Operations, Community: documenteddocumentedGoogle Security Operations, Cadence: partialpartial15.0 / 33
Splunk Enterprise Security (Cisco)Splunk Enterprise Security (Cisco), Sigma native: not documentednot documentedSplunk Enterprise Security (Cisco), Sigma conversion: not documentednot documentedSplunk Enterprise Security (Cisco), YARA-L: not documentednot documentedSplunk Enterprise Security (Cisco), SPL: documenteddocumentedSplunk Enterprise Security (Cisco), KQL: not documentednot documentedSplunk Enterprise Security (Cisco), EQL or ES|QL: not documentednot documentedSplunk Enterprise Security (Cisco), Python: not documentednot documentedSplunk Enterprise Security (Cisco), Visual builder: not documentednot documentedSplunk Enterprise Security (Cisco), YARA: not documentednot documentedSplunk Enterprise Security (Cisco), Lucene or KQL-like: not documentednot documentedSplunk Enterprise Security (Cisco), Git sync: documenteddocumentedSplunk Enterprise Security (Cisco), PR deploy: partialpartialSplunk Enterprise Security (Cisco), CLI: documenteddocumentedSplunk Enterprise Security (Cisco), Rule API: not documentednot documentedSplunk Enterprise Security (Cisco), CI examples: documenteddocumentedSplunk Enterprise Security (Cisco), Env promotion: not documentednot documentedSplunk Enterprise Security (Cisco), Unit tests: documenteddocumentedSplunk Enterprise Security (Cisco), Replay: partialpartialSplunk Enterprise Security (Cisco), Synthetic events: documenteddocumentedSplunk Enterprise Security (Cisco), Backtest reports: partialpartialSplunk Enterprise Security (Cisco), Test coverage: not documentednot documentedSplunk Enterprise Security (Cisco), ATT&CK map: documenteddocumentedSplunk Enterprise Security (Cisco), Gap view: partialpartialSplunk Enterprise Security (Cisco), Data sources: partialpartialSplunk Enterprise Security (Cisco), Log source health: documenteddocumentedSplunk Enterprise Security (Cisco), Noisy rules: not documentednot documentedSplunk Enterprise Security (Cisco), Broken rules: partialpartialSplunk Enterprise Security (Cisco), Field drift: not documentednot documentedSplunk Enterprise Security (Cisco), Rule cost: not documentednot documentedSplunk Enterprise Security (Cisco), Lifecycle: documenteddocumentedSplunk Enterprise Security (Cisco), Library count: documenteddocumentedSplunk Enterprise Security (Cisco), Community: not documentednot documentedSplunk Enterprise Security (Cisco), Cadence: partialpartial13.5 / 33
Microsoft SentinelMicrosoft Sentinel, Sigma native: not documentednot documentedMicrosoft Sentinel, Sigma conversion: not documentednot documentedMicrosoft Sentinel, YARA-L: not documentednot documentedMicrosoft Sentinel, SPL: not documentednot documentedMicrosoft Sentinel, KQL: documenteddocumentedMicrosoft Sentinel, EQL or ES|QL: not documentednot documentedMicrosoft Sentinel, Python: not documentednot documentedMicrosoft Sentinel, Visual builder: not documentednot documentedMicrosoft Sentinel, YARA: not documentednot documentedMicrosoft Sentinel, Lucene or KQL-like: not documentednot documentedMicrosoft Sentinel, Git sync: documenteddocumentedMicrosoft Sentinel, PR deploy: documenteddocumentedMicrosoft Sentinel, CLI: not documentednot documentedMicrosoft Sentinel, Rule API: documenteddocumentedMicrosoft Sentinel, CI examples: documenteddocumentedMicrosoft Sentinel, Env promotion: partialpartialMicrosoft Sentinel, Unit tests: not documentednot documentedMicrosoft Sentinel, Replay: documenteddocumentedMicrosoft Sentinel, Synthetic events: not documentednot documentedMicrosoft Sentinel, Backtest reports: not documentednot documentedMicrosoft Sentinel, Test coverage: not documentednot documentedMicrosoft Sentinel, ATT&CK map: documenteddocumentedMicrosoft Sentinel, Gap view: documenteddocumentedMicrosoft Sentinel, Data sources: partialpartialMicrosoft Sentinel, Log source health: partialpartialMicrosoft Sentinel, Noisy rules: not documentednot documentedMicrosoft Sentinel, Broken rules: documenteddocumentedMicrosoft Sentinel, Field drift: not documentednot documentedMicrosoft Sentinel, Rule cost: partialpartialMicrosoft Sentinel, Lifecycle: not documentednot documentedMicrosoft Sentinel, Library count: partialpartialMicrosoft Sentinel, Community: documenteddocumentedMicrosoft Sentinel, Cadence: not documentednot documented12.5 / 33
Sigma and pySigmaSigma and pySigma, Sigma native: documenteddocumentedSigma and pySigma, Sigma conversion: documenteddocumentedSigma and pySigma, YARA-L: partialpartialSigma and pySigma, SPL: documenteddocumentedSigma and pySigma, KQL: documenteddocumentedSigma and pySigma, EQL or ES|QL: documenteddocumentedSigma and pySigma, Python: not documentednot documentedSigma and pySigma, Visual builder: not documentednot documentedSigma and pySigma, YARA: not documentednot documentedSigma and pySigma, Lucene or KQL-like: documenteddocumentedSigma and pySigma, Git sync: not documentednot documentedSigma and pySigma, PR deploy: not documentednot documentedSigma and pySigma, CLI: partialpartialSigma and pySigma, Rule API: not documentednot documentedSigma and pySigma, CI examples: partialpartialSigma and pySigma, Env promotion: not documentednot documentedSigma and pySigma, Unit tests: not documentednot documentedSigma and pySigma, Replay: not documentednot documentedSigma and pySigma, Synthetic events: not documentednot documentedSigma and pySigma, Backtest reports: not documentednot documentedSigma and pySigma, Test coverage: not documentednot documentedSigma and pySigma, ATT&CK map: documenteddocumentedSigma and pySigma, Gap view: not documentednot documentedSigma and pySigma, Data sources: not documentednot documentedSigma and pySigma, Log source health: not documentednot documentedSigma and pySigma, Noisy rules: not documentednot documentedSigma and pySigma, Broken rules: not documentednot documentedSigma and pySigma, Field drift: not documentednot documentedSigma and pySigma, Rule cost: not documentednot documentedSigma and pySigma, Lifecycle: documenteddocumentedSigma and pySigma, Library count: documenteddocumentedSigma and pySigma, Community: documenteddocumentedSigma and pySigma, Cadence: partialpartial12.0 / 33
Sekoia.ioSekoia.io, Sigma native: documenteddocumentedSekoia.io, Sigma conversion: not documentednot documentedSekoia.io, YARA-L: not documentednot documentedSekoia.io, SPL: not documentednot documentedSekoia.io, KQL: not documentednot documentedSekoia.io, EQL or ES|QL: not documentednot documentedSekoia.io, Python: not documentednot documentedSekoia.io, Visual builder: not documentednot documentedSekoia.io, YARA: not documentednot documentedSekoia.io, Lucene or KQL-like: partialpartialSekoia.io, Git sync: not documentednot documentedSekoia.io, PR deploy: not documentednot documentedSekoia.io, CLI: not documentednot documentedSekoia.io, Rule API: documenteddocumentedSekoia.io, CI examples: not documentednot documentedSekoia.io, Env promotion: not documentednot documentedSekoia.io, Unit tests: partialpartialSekoia.io, Replay: documenteddocumentedSekoia.io, Synthetic events: not documentednot documentedSekoia.io, Backtest reports: partialpartialSekoia.io, Test coverage: not documentednot documentedSekoia.io, ATT&CK map: documenteddocumentedSekoia.io, Gap view: partialpartialSekoia.io, Data sources: partialpartialSekoia.io, Log source health: partialpartialSekoia.io, Noisy rules: partialpartialSekoia.io, Broken rules: partialpartialSekoia.io, Field drift: not documentednot documentedSekoia.io, Rule cost: partialpartialSekoia.io, Lifecycle: documenteddocumentedSekoia.io, Library count: documenteddocumentedSekoia.io, Community: not documentednot documentedSekoia.io, Cadence: partialpartial11.0 / 33
AnvilogicAnvilogic, Sigma native: not documentednot documentedAnvilogic, Sigma conversion: not documentednot documentedAnvilogic, YARA-L: not documentednot documentedAnvilogic, SPL: not documentednot documentedAnvilogic, KQL: not documentednot documentedAnvilogic, EQL or ES|QL: not documentednot documentedAnvilogic, Python: not documentednot documentedAnvilogic, Visual builder: partialpartialAnvilogic, YARA: not documentednot documentedAnvilogic, Lucene or KQL-like: not documentednot documentedAnvilogic, Git sync: not documentednot documentedAnvilogic, PR deploy: not documentednot documentedAnvilogic, CLI: not documentednot documentedAnvilogic, Rule API: not documentednot documentedAnvilogic, CI examples: not documentednot documentedAnvilogic, Env promotion: partialpartialAnvilogic, Unit tests: partialpartialAnvilogic, Replay: not documentednot documentedAnvilogic, Synthetic events: partialpartialAnvilogic, Backtest reports: not documentednot documentedAnvilogic, Test coverage: partialpartialAnvilogic, ATT&CK map: partialpartialAnvilogic, Gap view: partialpartialAnvilogic, Data sources: not documentednot documentedAnvilogic, Log source health: partialpartialAnvilogic, Noisy rules: partialpartialAnvilogic, Broken rules: partialpartialAnvilogic, Field drift: not documentednot documentedAnvilogic, Rule cost: not documentednot documentedAnvilogic, Lifecycle: partialpartialAnvilogic, Library count: partialpartialAnvilogic, Community: not documentednot documentedAnvilogic, Cadence: partialpartial6.5 / 33
HuntersHunters, Sigma native: not documentednot documentedHunters, Sigma conversion: not documentednot documentedHunters, YARA-L: not documentednot documentedHunters, SPL: not documentednot documentedHunters, KQL: not documentednot documentedHunters, EQL or ES|QL: not documentednot documentedHunters, Python: not documentednot documentedHunters, Visual builder: partialpartialHunters, YARA: not documentednot documentedHunters, Lucene or KQL-like: not documentednot documentedHunters, Git sync: not documentednot documentedHunters, PR deploy: not documentednot documentedHunters, CLI: not documentednot documentedHunters, Rule API: not documentednot documentedHunters, CI examples: not documentednot documentedHunters, Env promotion: not documentednot documentedHunters, Unit tests: not documentednot documentedHunters, Replay: documenteddocumentedHunters, Synthetic events: not documentednot documentedHunters, Backtest reports: not documentednot documentedHunters, Test coverage: not documentednot documentedHunters, ATT&CK map: documenteddocumentedHunters, Gap view: documenteddocumentedHunters, Data sources: partialpartialHunters, Log source health: partialpartialHunters, Noisy rules: partialpartialHunters, Broken rules: not documentednot documentedHunters, Field drift: not documentednot documentedHunters, Rule cost: not documentednot documentedHunters, Lifecycle: partialpartialHunters, Library count: partialpartialHunters, Community: not documentednot documentedHunters, Cadence: partialpartial6.5 / 33
SOC PrimeSOC Prime, Sigma native: partialpartialSOC Prime, Sigma conversion: partialpartialSOC Prime, YARA-L: not documentednot documentedSOC Prime, SPL: not documentednot documentedSOC Prime, KQL: not documentednot documentedSOC Prime, EQL or ES|QL: not documentednot documentedSOC Prime, Python: not documentednot documentedSOC Prime, Visual builder: not documentednot documentedSOC Prime, YARA: not documentednot documentedSOC Prime, Lucene or KQL-like: not documentednot documentedSOC Prime, Git sync: partialpartialSOC Prime, PR deploy: not documentednot documentedSOC Prime, CLI: not documentednot documentedSOC Prime, Rule API: not documentednot documentedSOC Prime, CI examples: partialpartialSOC Prime, Env promotion: not documentednot documentedSOC Prime, Unit tests: not documentednot documentedSOC Prime, Replay: not documentednot documentedSOC Prime, Synthetic events: not documentednot documentedSOC Prime, Backtest reports: not documentednot documentedSOC Prime, Test coverage: not documentednot documentedSOC Prime, ATT&CK map: partialpartialSOC Prime, Gap view: partialpartialSOC Prime, Data sources: partialpartialSOC Prime, Log source health: not documentednot documentedSOC Prime, Noisy rules: not documentednot documentedSOC Prime, Broken rules: not documentednot documentedSOC Prime, Field drift: not documentednot documentedSOC Prime, Rule cost: not documentednot documentedSOC Prime, Lifecycle: not documentednot documentedSOC Prime, Library count: partialpartialSOC Prime, Community: partialpartialSOC Prime, Cadence: partialpartial5.0 / 33
DetecteamDetecteam, Sigma native: not documentednot documentedDetecteam, Sigma conversion: not documentednot documentedDetecteam, YARA-L: not documentednot documentedDetecteam, SPL: not documentednot documentedDetecteam, KQL: not documentednot documentedDetecteam, EQL or ES|QL: not documentednot documentedDetecteam, Python: not documentednot documentedDetecteam, Visual builder: not documentednot documentedDetecteam, YARA: not documentednot documentedDetecteam, Lucene or KQL-like: not documentednot documentedDetecteam, Git sync: not documentednot documentedDetecteam, PR deploy: not documentednot documentedDetecteam, CLI: not documentednot documentedDetecteam, Rule API: not documentednot documentedDetecteam, CI examples: partialpartialDetecteam, Env promotion: not documentednot documentedDetecteam, Unit tests: partialpartialDetecteam, Replay: not documentednot documentedDetecteam, Synthetic events: partialpartialDetecteam, Backtest reports: not documentednot documentedDetecteam, Test coverage: partialpartialDetecteam, ATT&CK map: partialpartialDetecteam, Gap view: partialpartialDetecteam, Data sources: not documentednot documentedDetecteam, Log source health: not documentednot documentedDetecteam, Noisy rules: not documentednot documentedDetecteam, Broken rules: not documentednot documentedDetecteam, Field drift: not documentednot documentedDetecteam, Rule cost: not documentednot documentedDetecteam, Lifecycle: not documentednot documentedDetecteam, Library count: partialpartialDetecteam, Community: not documentednot documentedDetecteam, Cadence: not documentednot documented3.5 / 33
Mate SecurityMate Security, Sigma native: not documentednot documentedMate Security, Sigma conversion: not documentednot documentedMate Security, YARA-L: not documentednot documentedMate Security, SPL: not documentednot documentedMate Security, KQL: not documentednot documentedMate Security, EQL or ES|QL: not documentednot documentedMate Security, Python: not documentednot documentedMate Security, Visual builder: not documentednot documentedMate Security, YARA: not documentednot documentedMate Security, Lucene or KQL-like: not documentednot documentedMate Security, Git sync: not documentednot documentedMate Security, PR deploy: not documentednot documentedMate Security, CLI: not documentednot documentedMate Security, Rule API: not documentednot documentedMate Security, CI examples: not documentednot documentedMate Security, Env promotion: not documentednot documentedMate Security, Unit tests: not documentednot documentedMate Security, Replay: not documentednot documentedMate Security, Synthetic events: not documentednot documentedMate Security, Backtest reports: not documentednot documentedMate Security, Test coverage: not documentednot documentedMate Security, ATT&CK map: partialpartialMate Security, Gap view: partialpartialMate Security, Data sources: not documentednot documentedMate Security, Log source health: partialpartialMate Security, Noisy rules: partialpartialMate Security, Broken rules: partialpartialMate Security, Field drift: not documentednot documentedMate Security, Rule cost: not documentednot documentedMate Security, Lifecycle: partialpartialMate Security, Library count: partialpartialMate Security, Community: not documentednot documentedMate Security, Cadence: not documentednot documented3.5 / 33
CardinalOps (Cribl)no longer ships under this nameCardinalOps (Cribl), Sigma native: not documentednot documentedCardinalOps (Cribl), Sigma conversion: not documentednot documentedCardinalOps (Cribl), YARA-L: not documentednot documentedCardinalOps (Cribl), SPL: not documentednot documentedCardinalOps (Cribl), KQL: not documentednot documentedCardinalOps (Cribl), EQL or ES|QL: not documentednot documentedCardinalOps (Cribl), Python: not documentednot documentedCardinalOps (Cribl), Visual builder: not documentednot documentedCardinalOps (Cribl), YARA: not documentednot documentedCardinalOps (Cribl), Lucene or KQL-like: not documentednot documentedCardinalOps (Cribl), Git sync: not documentednot documentedCardinalOps (Cribl), PR deploy: not documentednot documentedCardinalOps (Cribl), CLI: not documentednot documentedCardinalOps (Cribl), Rule API: not documentednot documentedCardinalOps (Cribl), CI examples: not documentednot documentedCardinalOps (Cribl), Env promotion: not documentednot documentedCardinalOps (Cribl), Unit tests: not documentednot documentedCardinalOps (Cribl), Replay: not documentednot documentedCardinalOps (Cribl), Synthetic events: not documentednot documentedCardinalOps (Cribl), Backtest reports: not documentednot documentedCardinalOps (Cribl), Test coverage: not documentednot documentedCardinalOps (Cribl), ATT&CK map: partialpartialCardinalOps (Cribl), Gap view: partialpartialCardinalOps (Cribl), Data sources: partialpartialCardinalOps (Cribl), Log source health: partialpartialCardinalOps (Cribl), Noisy rules: partialpartialCardinalOps (Cribl), Broken rules: partialpartialCardinalOps (Cribl), Field drift: partialpartialCardinalOps (Cribl), Rule cost: not documentednot documentedCardinalOps (Cribl), Lifecycle: not documentednot documentedCardinalOps (Cribl), Library count: not documentednot documentedCardinalOps (Cribl), Community: not documentednot documentedCardinalOps (Cribl), Cadence: not documentednot documented3.5 / 33
SnapAttack (Cisco)no longer ships under this nameSnapAttack (Cisco), Sigma native: not documentednot documentedSnapAttack (Cisco), Sigma conversion: not documentednot documentedSnapAttack (Cisco), YARA-L: not documentednot documentedSnapAttack (Cisco), SPL: not documentednot documentedSnapAttack (Cisco), KQL: not documentednot documentedSnapAttack (Cisco), EQL or ES|QL: not documentednot documentedSnapAttack (Cisco), Python: not documentednot documentedSnapAttack (Cisco), Visual builder: not documentednot documentedSnapAttack (Cisco), YARA: not documentednot documentedSnapAttack (Cisco), Lucene or KQL-like: not documentednot documentedSnapAttack (Cisco), Git sync: not documentednot documentedSnapAttack (Cisco), PR deploy: not documentednot documentedSnapAttack (Cisco), CLI: not documentednot documentedSnapAttack (Cisco), Rule API: not documentednot documentedSnapAttack (Cisco), CI examples: not documentednot documentedSnapAttack (Cisco), Env promotion: not documentednot documentedSnapAttack (Cisco), Unit tests: not documentednot documentedSnapAttack (Cisco), Replay: not documentednot documentedSnapAttack (Cisco), Synthetic events: not documentednot documentedSnapAttack (Cisco), Backtest reports: not documentednot documentedSnapAttack (Cisco), Test coverage: not documentednot documentedSnapAttack (Cisco), ATT&CK map: not documentednot documentedSnapAttack (Cisco), Gap view: not documentednot documentedSnapAttack (Cisco), Data sources: not documentednot documentedSnapAttack (Cisco), Log source health: not documentednot documentedSnapAttack (Cisco), Noisy rules: not documentednot documentedSnapAttack (Cisco), Broken rules: not documentednot documentedSnapAttack (Cisco), Field drift: not documentednot documentedSnapAttack (Cisco), Rule cost: not documentednot documentedSnapAttack (Cisco), Lifecycle: not documentednot documentedSnapAttack (Cisco), Library count: not documentednot documentedSnapAttack (Cisco), Community: not documentednot documentedSnapAttack (Cisco), Cadence: not documentednot documented0.0 / 33

documenteddocumentedpartialpartialnot documentednot documented

Filter by group

Each group has its own page with the note, source and read date behind every documented or partial cell.

Text table: documented and partial counts by group

Per platform and group: documented / partial. The last column is the matrix score of 33.

PlatformLanguages (10)Source control and CI (6)Testing (5)Coverage analytics (4)Rule health (5)Library (3)Score
Panther3 / 15 / 02 / 12 / 21 / 21 / 218.0
Elastic Security2 / 03 / 32 / 12 / 22 / 20 / 316.5
Google Security Operations1 / 03 / 11 / 22 / 23 / 11 / 215.0
Splunk Enterprise Security (Cisco)1 / 03 / 12 / 22 / 21 / 11 / 113.5
Microsoft Sentinel1 / 04 / 11 / 02 / 21 / 11 / 112.5
Sigma and pySigma6 / 10 / 20 / 01 / 01 / 02 / 112.0
Sekoia.io1 / 11 / 01 / 21 / 31 / 31 / 111.0
Anvilogic0 / 10 / 10 / 30 / 30 / 30 / 26.5
Hunters0 / 10 / 01 / 02 / 20 / 20 / 26.5
SOC Prime0 / 20 / 20 / 00 / 30 / 00 / 35.0
Detecteam0 / 00 / 10 / 30 / 20 / 00 / 13.5
Mate Security0 / 00 / 00 / 00 / 30 / 30 / 13.5
CardinalOps (Cribl)0 / 00 / 00 / 00 / 40 / 30 / 03.5
SnapAttack (Cisco)0 / 00 / 00 / 00 / 00 / 00 / 00.0

The 33 capabilities

Languages (10)

Sigma native
Sigma native. Rules written in Sigma YAML are stored and run by the platform without a conversion step. Proof needed: A docs page stating that Sigma rules are authored, imported or executed natively. 2 of 14 documented.
Sigma conversion
Sigma via conversion. Sigma rules can be converted to the platform's query language by a documented tool or backend. Proof needed: A docs or repo page naming a converter, backend or translation feature that outputs this platform's language. 2 of 14 documented.
YARA-L
YARA-L. Detections can be written in YARA-L 2.0. Proof needed: A docs page describing YARA-L rule authoring on the platform. 1 of 14 documented.
SPL
SPL. Detections can be written as Splunk SPL searches. Proof needed: A docs page describing SPL-based detections or correlation searches. 2 of 14 documented.
KQL
KQL (Kusto). Detections can be written in Kusto Query Language. Proof needed: A docs page describing KQL-based analytics rules or detection rules. 2 of 14 documented.
EQL or ES|QL
EQL or ES|QL. Detections can be written in Elastic EQL or ES|QL. Proof needed: A docs page describing EQL or ES|QL rule types. 2 of 14 documented.
Python
Python detections. Detection logic can be written as Python functions or scripts that the platform runs. Proof needed: A docs page describing Python detection authoring. 1 of 14 documented.
Visual builder
Vendor visual builder. A no-code or form-based builder produces the detection logic without hand-writing a query. Proof needed: A docs page naming a builder, detection wizard or no-code editor that generates logic. 1 of 14 documented.
YARA
YARA. File or memory signatures can be authored as YARA rules inside the detection workflow. Proof needed: A docs page describing YARA rule support as detections. 0 of 14 documented.
Lucene or KQL-like
Lucene or KQL-like query. Detections can use Lucene syntax, Kibana KQL, or a platform pipe or filter query language similar to KQL. Proof needed: A docs page naming the query syntax used for detection rules. 2 of 14 documented.

Source control and CI (6)

Git sync
Git repository sync documented. Detection content can be kept in a git repository that stays in sync with the platform. Proof needed: A docs or official repo page describing repository connection, sync or a repo layout used as source of truth. 5 of 14 documented.
PR deploy
Pull-request based deployment. A merged or opened pull request triggers validation or deployment of detections. Proof needed: A docs page or shipped workflow where pull request events run tests or deploy rules. 2 of 14 documented.
CLI
CLI for validate and deploy. A command-line tool validates rule files and pushes them to the platform. Proof needed: A docs page listing CLI commands for validation and upload or deploy. 4 of 14 documented.
Rule API
API for rule CRUD. Rules can be created, read, updated and deleted through a documented API. Proof needed: An API reference or docs page listing rule create, update, get and delete operations. 5 of 14 documented.
CI examples
Pre-built CI examples. The vendor publishes ready CI pipeline definitions (GitHub Actions, GitLab CI or similar) for detection content. Proof needed: A docs page or repo containing workflow YAML for detection content. 3 of 14 documented.
Env promotion
Environment promotion. Detections move between dev, staging and prod environments through a documented flow. Proof needed: A docs page describing multiple environments or staged promotion of rules. 0 of 14 documented.

Testing (5)

Unit tests
Unit tests with sample events. Each detection can carry test events and expected outcomes that run automatically. Proof needed: A docs page describing test cases or unit tests with sample or recorded events. 3 of 14 documented.
Replay
Replay against historical data. A rule can be run over past data to preview results before or after enabling it. Proof needed: A docs page describing historical test runs, retrohunts or data replay. 6 of 14 documented.
Synthetic events
Synthetic event generation. The platform or its tooling generates attack-like events to exercise detections. Proof needed: A docs or product page describing event simulation or attack data generation. 1 of 14 documented.
Backtest reports
Backtest reports. A test run produces a saved report (hit counts, false positives, volume) that can be reviewed. Proof needed: A docs page describing a persisted result or report from testing a rule. 0 of 14 documented.
Test coverage
Test coverage reporting. The platform reports which detections have tests or have been validated. Proof needed: A docs page describing validation or test coverage status across the rule set. 0 of 14 documented.

Coverage analytics (4)

ATT&CK map
ATT&CK mapping per rule. Each rule carries MITRE ATT&CK tactic and technique tags. Proof needed: A docs page stating rules are mapped or tagged to ATT&CK. 8 of 14 documented.
Gap view
Gap view against ATT&CK. A view shows which ATT&CK techniques have no active detection. Proof needed: A docs page describing a coverage matrix or gap report. 5 of 14 documented.
Data sources
Data source coverage view. A view shows which data sources feed detections or which are missing for coverage. Proof needed: A docs page describing data source or log source coverage against detections. 0 of 14 documented.
Log source health
Log source health tied to rules. Log source health problems are linked to the rules that depend on them. Proof needed: A docs page connecting ingestion or source health to detection rules. 1 of 14 documented.

Rule health (5)

Noisy rules
Noisy rule detection. The platform identifies rules that produce excess or low-value alerts. Proof needed: A docs page describing noisy or high-volume rule identification or tuning guidance. 0 of 14 documented.
Broken rules
Broken or silent rule detection. The platform flags rules that fail, error, or stop producing results. Proof needed: A docs page describing rule errors, failed runs or silent rule detection. 4 of 14 documented.
Field drift
Schema or field drift alerts. The platform alerts when fields a rule relies on change or disappear. Proof needed: A docs page describing field drift, mapping change or schema change alerts tied to rules. 0 of 14 documented.
Rule cost
Rule performance or cost telemetry. The platform reports runtime, resource use or cost per rule. Proof needed: A docs page describing per-rule execution time, latency or resource metrics. 2 of 14 documented.
Lifecycle
Deprecation and lifecycle states. Rules carry states such as active, test, deprecated, with documented handling. Proof needed: A docs page describing rule status values or deprecation handling. 4 of 14 documented.

Library (3)

Library count
Vendor-maintained library with published count. The vendor maintains a rule library and states how many rules it holds. Proof needed: A vendor page stating a count of library rules. 3 of 14 documented.
Community
Community library. A public library accepts or contains community-contributed rules. Proof needed: A repo or docs page with a contribution guide or community rule folder. 4 of 14 documented.
Cadence
Update cadence published. The vendor states how often library content is updated. Proof needed: A docs or product page stating a release cadence or recent version history. 0 of 14 documented.

Method and download

How the cells were read, what the statuses mean and what the matrix does not measure are on the matrix method page. The data is on the dataset page.