{"library":"stix2-patterns","title":"STIX 2 Patterns Validator","type":"library","description":"The `stix2-patterns` library provides a software tool for checking the syntax of Cyber Threat Intelligence (CTI) STIX Pattern expressions, used within STIX Indicators to describe conditions indicating cyber threat activity. It is currently at version 2.1.2 and actively maintained with regular updates addressing bug fixes and improvements.","language":"python","status":"active","last_verified":"Fri May 15","install":{"commands":["pip install stix2-patterns"],"cli":null},"imports":["from stix2patterns.validator import run_validator"],"auth":{"required":false,"env_vars":[]},"links":{"homepage":null,"github":"https://github.com/oasis-open/cti-pattern-validator","docs":null,"changelog":null,"pypi":"https://pypi.org/project/stix2-patterns/","npm":null,"openapi_spec":null,"status_page":null,"smithery":null},"quickstart":{"code":"from stix2patterns.validator import run_validator\n\n# A valid STIX 2.1 pattern\npattern_valid = \"[file-object:hashes.md5 = '79054025255fb1a26e4bc422aef54eb4']\"\nerrors_valid = run_validator(pattern_valid)\nif not errors_valid:\n    print(f\"Pattern '{pattern_valid}' is valid.\")\nelse:\n    print(f\"Pattern '{pattern_valid}' has errors: {errors_valid}\")\n\n# An invalid STIX pattern\npattern_invalid = \"[file-object:hashes.md5 = 'bad_hash']\"\nerrors_invalid = run_validator(pattern_invalid)\nif not errors_invalid:\n    print(f\"Pattern '{pattern_invalid}' is valid.\")\nelse:\n    print(f\"Pattern '{pattern_invalid}' has errors: {errors_invalid}\")\n\n# Example of STIX 2.0 pattern (might be considered invalid under 2.1 strictness, but syntax for this is okay)\npattern_stix20 = \"[file:hashes.'MD5' = 'd41d8cd98f00b204e9800998ecf8427e']\"\nerrors_stix20 = run_validator(pattern_stix20)\nif not errors_stix20:\n    print(f\"Pattern '{pattern_stix20}' is valid.\")\nelse:\n    print(f\"Pattern '{pattern_stix20}' has errors: {errors_stix20}\")","lang":"python","description":"The primary way to use the library programmatically is via the `run_validator` function. It takes a STIX pattern string and returns a list of errors encountered during parsing. An empty list indicates a valid pattern.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-15","installed_version":"2.0.0","pypi_latest":"2.1.2","is_stale":true,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":1.9,"avg_import_s":0.09,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"stix2-patterns","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.1,"mem_mb":3.3,"disk_size":"19.9M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"stix2-patterns","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.7,"import_time_s":0.05,"mem_mb":3.3,"disk_size":"20M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"stix2-patterns","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.1,"mem_mb":3.8,"disk_size":"22.2M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"stix2-patterns","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.9,"import_time_s":0.09,"mem_mb":3.8,"disk_size":"23M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"stix2-patterns","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.1,"mem_mb":3.5,"disk_size":"14.0M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"stix2-patterns","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.7,"import_time_s":0.09,"mem_mb":3.5,"disk_size":"14M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"stix2-patterns","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.08,"mem_mb":3.6,"disk_size":"13.7M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"stix2-patterns","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.7,"import_time_s":0.08,"mem_mb":3.4,"disk_size":"14M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"stix2-patterns","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.11,"mem_mb":4.2,"disk_size":"20.7M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"stix2-patterns","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":2.7,"import_time_s":0.1,"mem_mb":4.2,"disk_size":"21M"}]}}