{"adoption": {"forks": 266, "observed_at": "2026-08-28T04:04:01.655557+00:00", "stars": 1219}, "canonical_url": "https://ross.abutalabs.com/products/jxwaf", "card": {"archived": false, "artifact_type": "application", "description": "JXWAF是一款基于AI大模型的Web应用防火墙", "domain": ["security", "web-development", "large-language-models", "self-hosted", "apis"], "enriched": true, "function": ["security", "http-server", "monitoring", "machine-learning", "llm-inference", "rate-limiting"], "health_score": 92, "homepage": "https://www.jxwaf.com/", "language": "Vue", "license": "GPL-2.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["jx-sec/jxwaf"], "name": "jx-sec/jxwaf", "platform": ["self-hosted", "python"], "pushed_at": "2026-08-25T04:59:57+00:00", "repo": "jx-sec/jxwaf", "stars": 1219, "tags": ["waf", "web-application-firewall", "nginx-lua", "openresty", "sql-injection", "xss", "cc-attack-protection", "bot-detection", "semantic-analysis", "reverse-proxy", "docker-compose", "linux", "docker", "web-server"], "topics": ["waf", "openresty", "jxwaf", "nginx-lua", "ai"], "urls": [], "use_cases": ["protect my website from sql injection and xss attacks", "deploy a self-hosted web application firewall", "block cc attacks and bot traffic", "detect 0day web exploits without writing rules", "filter malicious http traffic before it reaches my app", "reduce waf false positives with ai-based detection", "set up a reverse proxy waf with docker compose"], "what_it_is": "JXWAF is an open-source web application firewall powered by an AI large language model, combining an AI security model, a semantic analysis engine, and SSL behavior analysis to detect and block web attacks in real time. It is deployed as a reverse proxy built on OpenResty/nginx-lua, with a Vue-based management console and one-command Docker Compose deployment.", "when_to_avoid": ["you need a cloud-managed WAF with no infrastructure to maintain", "you require multi-tenant or CNAME-based cloud WAF features on the free standard edition", "your environment cannot run Docker or meet the 4-core/8GB hardware requirement", "you depend on a vendor with long-term commercial support commitments"], "when_to_choose": ["you want a free, self-hosted WAF with AI/semantic detection rather than pure regex rules", "you need protection against SQL injection, XSS, RCE, and nday/0day exploits with low false positives", "you want CC attack and crawler detection via SSL fingerprinting", "you can run a Linux server with Docker and prefer one-command deployment"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/jxwaf", "repo": "jx-sec/jxwaf", "role": "main", "score": 67}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.655557+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:16:13.631647+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "773a9a3e892db5642bef20f2abe7b03e709ff9db31b9b4770d143318021ba7bc", "fetched_at": "2026-08-28T04:04:01.655557+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jx-sec/jxwaf"}, {"content_hash": "3a59e1a208b3ae5e09d83c774bffebfaa757c22782cc3fa2a62f2b771235e633", "fetched_at": "2026-08-29T12:24:30.131329+00:00", "kind": "homepage", "missing": false, "url": "https://www.jxwaf.com/"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.655557+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:16:13.631647+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "773a9a3e892db5642bef20f2abe7b03e709ff9db31b9b4770d143318021ba7bc", "fetched_at": "2026-08-28T04:04:01.655557+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jx-sec/jxwaf"}, {"content_hash": "3a59e1a208b3ae5e09d83c774bffebfaa757c22782cc3fa2a62f2b771235e633", "fetched_at": "2026-08-29T12:24:30.131329+00:00", "kind": "homepage", "missing": false, "url": "https://www.jxwaf.com/"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:16:13.631647+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "773a9a3e892db5642bef20f2abe7b03e709ff9db31b9b4770d143318021ba7bc", "fetched_at": "2026-08-28T04:04:01.655557+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jx-sec/jxwaf"}, {"content_hash": "3a59e1a208b3ae5e09d83c774bffebfaa757c22782cc3fa2a62f2b771235e633", "fetched_at": "2026-08-29T12:24:30.131329+00:00", "kind": "homepage", "missing": false, "url": "https://www.jxwaf.com/"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.655557+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.655557+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.655557+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:16:13.631647+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "773a9a3e892db5642bef20f2abe7b03e709ff9db31b9b4770d143318021ba7bc", "fetched_at": "2026-08-28T04:04:01.655557+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jx-sec/jxwaf"}, {"content_hash": "3a59e1a208b3ae5e09d83c774bffebfaa757c22782cc3fa2a62f2b771235e633", "fetched_at": "2026-08-29T12:24:30.131329+00:00", "kind": "homepage", "missing": false, "url": "https://www.jxwaf.com/"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.655557+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.655557+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:16:13.631647+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "773a9a3e892db5642bef20f2abe7b03e709ff9db31b9b4770d143318021ba7bc", "fetched_at": "2026-08-28T04:04:01.655557+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jx-sec/jxwaf"}, {"content_hash": "3a59e1a208b3ae5e09d83c774bffebfaa757c22782cc3fa2a62f2b771235e633", "fetched_at": "2026-08-29T12:24:30.131329+00:00", "kind": "homepage", "missing": false, "url": "https://www.jxwaf.com/"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.655557+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.655557+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.655557+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:16:13.631647+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "773a9a3e892db5642bef20f2abe7b03e709ff9db31b9b4770d143318021ba7bc", "fetched_at": "2026-08-28T04:04:01.655557+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jx-sec/jxwaf"}, {"content_hash": "3a59e1a208b3ae5e09d83c774bffebfaa757c22782cc3fa2a62f2b771235e633", "fetched_at": "2026-08-29T12:24:30.131329+00:00", "kind": "homepage", "missing": false, "url": "https://www.jxwaf.com/"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.655557+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.655557+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:16:13.631647+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "773a9a3e892db5642bef20f2abe7b03e709ff9db31b9b4770d143318021ba7bc", "fetched_at": "2026-08-28T04:04:01.655557+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jx-sec/jxwaf"}, {"content_hash": "3a59e1a208b3ae5e09d83c774bffebfaa757c22782cc3fa2a62f2b771235e633", "fetched_at": "2026-08-29T12:24:30.131329+00:00", "kind": "homepage", "missing": false, "url": "https://www.jxwaf.com/"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:16:13.631647+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "773a9a3e892db5642bef20f2abe7b03e709ff9db31b9b4770d143318021ba7bc", "fetched_at": "2026-08-28T04:04:01.655557+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jx-sec/jxwaf"}, {"content_hash": "3a59e1a208b3ae5e09d83c774bffebfaa757c22782cc3fa2a62f2b771235e633", "fetched_at": "2026-08-29T12:24:30.131329+00:00", "kind": "homepage", "missing": false, "url": "https://www.jxwaf.com/"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:16:13.631647+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "773a9a3e892db5642bef20f2abe7b03e709ff9db31b9b4770d143318021ba7bc", "fetched_at": "2026-08-28T04:04:01.655557+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jx-sec/jxwaf"}, {"content_hash": "3a59e1a208b3ae5e09d83c774bffebfaa757c22782cc3fa2a62f2b771235e633", "fetched_at": "2026-08-29T12:24:30.131329+00:00", "kind": "homepage", "missing": false, "url": "https://www.jxwaf.com/"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:16:13.631647+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "773a9a3e892db5642bef20f2abe7b03e709ff9db31b9b4770d143318021ba7bc", "fetched_at": "2026-08-28T04:04:01.655557+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jx-sec/jxwaf"}, {"content_hash": "3a59e1a208b3ae5e09d83c774bffebfaa757c22782cc3fa2a62f2b771235e633", "fetched_at": "2026-08-29T12:24:30.131329+00:00", "kind": "homepage", "missing": false, "url": "https://www.jxwaf.com/"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3185, "days_push": 8, "days_rel": 523, "gap_med": null, "n_releases_24m": 1}, "score": 67, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}