{"adoption": {"forks": 417, "observed_at": "2026-08-28T04:04:14.440217+00:00", "stars": 1283}, "canonical_url": "https://ross.abutalabs.com/products/openstar", "card": {"archived": false, "artifact_type": "application", "description": "lua waf,nginx+lua,openresty,luajit,waf+,cdn,nginx", "domain": ["security", "web-development"], "enriched": true, "function": ["security", "rate-limiting", "proxy"], "health_score": 20, "homepage": null, "language": "Lua", "license": null, "license_family": "other", "maturity": "maintenance", "member_repos": ["starjun/openstar"], "name": "starjun/openstar", "platform": ["self-hosted"], "pushed_at": "2021-10-10T12:38:05+00:00", "repo": "starjun/openstar", "stars": 1283, "tags": ["waf", "web-application-firewall", "openresty", "nginx", "luajit", "cdn", "csrf-protection", "ip-whitelist", "reverse-proxy", "redis-cluster", "linux", "web-server"], "topics": [], "urls": [], "use_cases": ["protect an nginx site from sql injection, xss, and scanning", "add a self-hosted waf to openresty", "rate limit requests by ip or by cookie identity", "block external csrf referers while whitelisting static assets", "restrict an admin directory or phpmyadmin to an ip whitelist", "sync waf rules across a cluster of nginx edge servers via redis", "build a cdn-style security layer in front of web apps"], "what_it_is": "OpenStar (WAF+) is a Web Application Firewall written in Lua that runs on nginx/OpenResty (LuaJIT), filtering HTTP traffic through JSON-configured rules for host, URI, args, method, IP, referer, and POST form matching. It adds rate limiting keyed on IP or business attributes, external-CSRF blocking, cookie/redirect actions, and Redis-based master/slave config sync for clusters.", "when_to_avoid": ["you need actively patched security software - the last release was 2021 and there is no license file", "you want a managed dashboard or layer-4 protection - that exists only in the separate closed-source/free-to-use non-open build", "you require license clarity for commercial or enterprise deployment", "you prefer maintained alternatives like ModSecurity, Coraza, or a cloud WAF"], "when_to_choose": ["you already run nginx/OpenResty and want a scriptable Lua WAF with rich rule expressions (regex, aho-corasick parallel matching, start/end/in lists, length checks)", "you need per-business-attribute rate limiting (e.g., by cookie guid) rather than plain IP throttling", "you operate multiple edge/proxy nodes and want config pushed over Redis in master/slave mode", "you are comfortable with Chinese-language docs and editing JSON rule files directly"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/openstar", "repo": "starjun/openstar", "role": "main", "score": 32}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:14.440217+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:57:04.661218+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "36a7a231ae0e06ec62cb8a630701da55bf8c3287b38960a87b3ed53ec389adfd", "fetched_at": "2026-08-28T04:04:14.440217+00:00", "kind": "readme", "missing": false, "url": "https://github.com/starjun/openstar"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:14.440217+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:57:04.661218+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "36a7a231ae0e06ec62cb8a630701da55bf8c3287b38960a87b3ed53ec389adfd", "fetched_at": "2026-08-28T04:04:14.440217+00:00", "kind": "readme", "missing": false, "url": "https://github.com/starjun/openstar"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:57:04.661218+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "36a7a231ae0e06ec62cb8a630701da55bf8c3287b38960a87b3ed53ec389adfd", "fetched_at": "2026-08-28T04:04:14.440217+00:00", "kind": "readme", "missing": false, "url": "https://github.com/starjun/openstar"}], "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:14.440217+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:14.440217+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:14.440217+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:57:04.661218+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "36a7a231ae0e06ec62cb8a630701da55bf8c3287b38960a87b3ed53ec389adfd", "fetched_at": "2026-08-28T04:04:14.440217+00:00", "kind": "readme", "missing": false, "url": "https://github.com/starjun/openstar"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:14.440217+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:14.440217+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:57:04.661218+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "36a7a231ae0e06ec62cb8a630701da55bf8c3287b38960a87b3ed53ec389adfd", "fetched_at": "2026-08-28T04:04:14.440217+00:00", "kind": "readme", "missing": false, "url": "https://github.com/starjun/openstar"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:14.440217+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:14.440217+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:14.440217+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:57:04.661218+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "36a7a231ae0e06ec62cb8a630701da55bf8c3287b38960a87b3ed53ec389adfd", "fetched_at": "2026-08-28T04:04:14.440217+00:00", "kind": "readme", "missing": false, "url": "https://github.com/starjun/openstar"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:14.440217+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:14.440217+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:57:04.661218+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "36a7a231ae0e06ec62cb8a630701da55bf8c3287b38960a87b3ed53ec389adfd", "fetched_at": "2026-08-28T04:04:14.440217+00:00", "kind": "readme", "missing": false, "url": "https://github.com/starjun/openstar"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:57:04.661218+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "36a7a231ae0e06ec62cb8a630701da55bf8c3287b38960a87b3ed53ec389adfd", "fetched_at": "2026-08-28T04:04:14.440217+00:00", "kind": "readme", "missing": false, "url": "https://github.com/starjun/openstar"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:57:04.661218+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "36a7a231ae0e06ec62cb8a630701da55bf8c3287b38960a87b3ed53ec389adfd", "fetched_at": "2026-08-28T04:04:14.440217+00:00", "kind": "readme", "missing": false, "url": "https://github.com/starjun/openstar"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:57:04.661218+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "36a7a231ae0e06ec62cb8a630701da55bf8c3287b38960a87b3ed53ec389adfd", "fetched_at": "2026-08-28T04:04:14.440217+00:00", "kind": "readme", "missing": false, "url": "https://github.com/starjun/openstar"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_releases", "no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3759, "days_push": 1788, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 32, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}