{"adoption": {"forks": 144, "observed_at": "2026-08-28T04:04:57.718157+00:00", "stars": 1521}, "canonical_url": "https://ross.abutalabs.com/products/rebuff", "card": {"archived": true, "artifact_type": "library", "description": "LLM Prompt Injection Detector", "domain": ["security", "large-language-models", "developer-tools"], "enriched": true, "function": ["security", "llm-inference", "prompt-engineering", "sdk"], "health_score": 10, "homepage": "https://playground.rebuff.ai", "language": "TypeScript", "license": "Apache-2.0", "license_family": "permissive", "maturity": "experimental", "member_repos": ["protectai/rebuff"], "name": "protectai/rebuff", "platform": ["python", "browser", "cross-platform"], "pushed_at": "2024-08-07T23:35:48+00:00", "repo": "protectai/rebuff", "stars": 1521, "tags": ["prompt-injection", "llm-security", "canary-tokens", "vector-database", "self-hardening", "ai-agents", "nodejs"], "topics": ["llm", "llmops", "prompt-engineering", "prompts", "security", "prompt-injection"], "urls": [], "use_cases": ["detect prompt injection attacks in user input before sending it to an LLM", "protect my AI chatbot from jailbreak and injection attempts", "detect when an LLM leaks its system prompt instructions", "store embeddings of past attacks to block similar future attacks", "add canary tokens to prompts to detect instruction leakage", "add a security layer to my LLM application pipeline"], "what_it_is": "Rebuff is a self-hardening prompt injection detector that protects LLM-powered applications through multi-layered defenses: heuristics, a dedicated LLM-based detector, vector database attack signatures, and canary token leak detection. It ships as a Python SDK (pip install rebuff) and a JavaScript/TypeScript SDK for Node and the browser, with a self-hostable server.", "when_to_avoid": ["you need guaranteed protection - the project itself warns it is a prototype that cannot block all attacks", "you need a fully local/offline solution - local-only mode is not yet implemented", "you need Python/TypeScript feature parity - the Python SDK still lacks full parity with the TS SDK"], "when_to_choose": ["you are building an LLM application that accepts untrusted user input and need layered prompt injection defense", "you want canary-token-based detection of system prompt leakage", "you want a detector that learns from previously seen attacks via a vector database"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/rebuff", "repo": "protectai/rebuff", "role": "main", "score": 10}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:57.718157+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:31:52.983210+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a66f2d1dc2f5cc2c915544f7ccaaf95d414474686ab5fef6e14f84daf00554fe", "fetched_at": "2026-08-28T04:04:57.718157+00:00", "kind": "readme", "missing": false, "url": "https://github.com/protectai/rebuff"}, {"content_hash": "870b6069e790a5c21d909b1ef66c555f55b270eeaf29f8ac76684cee6274c9aa", "fetched_at": "2026-08-29T11:35:40.038132+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/rebuff"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:57.718157+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:31:52.983210+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a66f2d1dc2f5cc2c915544f7ccaaf95d414474686ab5fef6e14f84daf00554fe", "fetched_at": "2026-08-28T04:04:57.718157+00:00", "kind": "readme", "missing": false, "url": "https://github.com/protectai/rebuff"}, {"content_hash": "870b6069e790a5c21d909b1ef66c555f55b270eeaf29f8ac76684cee6274c9aa", "fetched_at": "2026-08-29T11:35:40.038132+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/rebuff"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:31:52.983210+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a66f2d1dc2f5cc2c915544f7ccaaf95d414474686ab5fef6e14f84daf00554fe", "fetched_at": "2026-08-28T04:04:57.718157+00:00", "kind": "readme", "missing": false, "url": "https://github.com/protectai/rebuff"}, {"content_hash": "870b6069e790a5c21d909b1ef66c555f55b270eeaf29f8ac76684cee6274c9aa", "fetched_at": "2026-08-29T11:35:40.038132+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/rebuff"}], "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:57.718157+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:57.718157+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:57.718157+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:31:52.983210+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a66f2d1dc2f5cc2c915544f7ccaaf95d414474686ab5fef6e14f84daf00554fe", "fetched_at": "2026-08-28T04:04:57.718157+00:00", "kind": "readme", "missing": false, "url": "https://github.com/protectai/rebuff"}, {"content_hash": "870b6069e790a5c21d909b1ef66c555f55b270eeaf29f8ac76684cee6274c9aa", "fetched_at": "2026-08-29T11:35:40.038132+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/rebuff"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:57.718157+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:57.718157+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:31:52.983210+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a66f2d1dc2f5cc2c915544f7ccaaf95d414474686ab5fef6e14f84daf00554fe", "fetched_at": "2026-08-28T04:04:57.718157+00:00", "kind": "readme", "missing": false, "url": "https://github.com/protectai/rebuff"}, {"content_hash": "870b6069e790a5c21d909b1ef66c555f55b270eeaf29f8ac76684cee6274c9aa", "fetched_at": "2026-08-29T11:35:40.038132+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/rebuff"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:57.718157+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:57.718157+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:57.718157+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:31:52.983210+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a66f2d1dc2f5cc2c915544f7ccaaf95d414474686ab5fef6e14f84daf00554fe", "fetched_at": "2026-08-28T04:04:57.718157+00:00", "kind": "readme", "missing": false, "url": "https://github.com/protectai/rebuff"}, {"content_hash": "870b6069e790a5c21d909b1ef66c555f55b270eeaf29f8ac76684cee6274c9aa", "fetched_at": "2026-08-29T11:35:40.038132+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/rebuff"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:57.718157+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:57.718157+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:31:52.983210+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a66f2d1dc2f5cc2c915544f7ccaaf95d414474686ab5fef6e14f84daf00554fe", "fetched_at": "2026-08-28T04:04:57.718157+00:00", "kind": "readme", "missing": false, "url": "https://github.com/protectai/rebuff"}, {"content_hash": "870b6069e790a5c21d909b1ef66c555f55b270eeaf29f8ac76684cee6274c9aa", "fetched_at": "2026-08-29T11:35:40.038132+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/rebuff"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:31:52.983210+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a66f2d1dc2f5cc2c915544f7ccaaf95d414474686ab5fef6e14f84daf00554fe", "fetched_at": "2026-08-28T04:04:57.718157+00:00", "kind": "readme", "missing": false, "url": "https://github.com/protectai/rebuff"}, {"content_hash": "870b6069e790a5c21d909b1ef66c555f55b270eeaf29f8ac76684cee6274c9aa", "fetched_at": "2026-08-29T11:35:40.038132+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/rebuff"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:31:52.983210+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a66f2d1dc2f5cc2c915544f7ccaaf95d414474686ab5fef6e14f84daf00554fe", "fetched_at": "2026-08-28T04:04:57.718157+00:00", "kind": "readme", "missing": false, "url": "https://github.com/protectai/rebuff"}, {"content_hash": "870b6069e790a5c21d909b1ef66c555f55b270eeaf29f8ac76684cee6274c9aa", "fetched_at": "2026-08-29T11:35:40.038132+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/rebuff"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:31:52.983210+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a66f2d1dc2f5cc2c915544f7ccaaf95d414474686ab5fef6e14f84daf00554fe", "fetched_at": "2026-08-28T04:04:57.718157+00:00", "kind": "readme", "missing": false, "url": "https://github.com/protectai/rebuff"}, {"content_hash": "870b6069e790a5c21d909b1ef66c555f55b270eeaf29f8ac76684cee6274c9aa", "fetched_at": "2026-08-29T11:35:40.038132+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/rebuff"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 87, "rhythm": 8}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["archived"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 1227, "days_push": 756, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 10, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}