{"adoption": {"forks": 375, "observed_at": "2026-08-28T04:05:22.060906+00:00", "stars": 1685}, "canonical_url": "https://ross.abutalabs.com/products/raodv-captcha", "card": {"archived": false, "artifact_type": "library", "description": "行为验证码(滑动拼图、点选文字)，前后端(java)交互，包含h5/Android/IOS/flutter/uni-app的源码和实现", "domain": ["security", "web-development", "frontend", "backend", "mobile-development", "cross-platform"], "enriched": true, "function": ["security", "ui-components", "web-framework", "http-server"], "health_score": 29, "homepage": "https://captcha.anji-plus.com/", "language": "Java", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["raodv/captcha"], "name": "raodv/captcha", "platform": ["jvm", "cross-platform", "browser"], "pushed_at": "2025-04-08T00:41:05+00:00", "repo": "raodv/captcha", "stars": 1685, "tags": ["captcha", "behavioral-captcha", "slide-puzzle", "click-word", "anti-bot", "human-verification", "uni-app", "flutter", "vue", "spring-boot", "spi-extensible", "bot-protection", "login-protection", "form-protection", "android", "ios", "web-server"], "topics": ["java", "vue", "captcha", "flutter", "uni-app"], "urls": [], "use_cases": ["add a sliding puzzle captcha to a login form", "protect signup and comment forms from bots with click-word verification", "verify captcha answers server-side in a Java backend", "embed a captcha in a Flutter or uni-app mobile app", "integrate human verification into a Vue or Angular web app", "block automated credential stuffing on a web login"], "what_it_is": "AjPlus Captcha is an open-source behavioral CAPTCHA library providing sliding puzzle and click-word verification challenges with frontend UI components and a Java backend verification service. It ships client implementations for Android, iOS, Flutter, uni-app, ReactNative, Vue, Angular, HTML, and PHP, with a dependency-free Java core extensible via SPI.", "when_to_avoid": ["your backend is not on the JVM and you cannot port the verification logic", "you prefer fully managed captcha services like reCAPTCHA or hCaptcha with no server code", "you need accessibility-first or audio-based captcha alternatives", "you only need simple image-distortion text captchas"], "when_to_choose": ["you need behavioral captchas (slide puzzle, click word) rather than distorted text", "your stack includes Java on the backend and any of Vue, Angular, Android, iOS, Flutter, or uni-app on the client", "you want a dependency-free core that can be extended with custom captcha types via SPI", "you need a self-hosted captcha solution instead of a paid third-party service"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/raodv-captcha", "repo": "raodv/captcha", "role": "main", "score": 39}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:22.060906+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:41:15.240558+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "94d0fc3dfa0b8daed8afaeefd81a9682d55cacbc7ced44460d80e07946da43b7", "fetched_at": "2026-08-28T04:05:22.060906+00:00", "kind": "readme", "missing": false, "url": "https://github.com/raodv/captcha"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:22.060906+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:41:15.240558+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "94d0fc3dfa0b8daed8afaeefd81a9682d55cacbc7ced44460d80e07946da43b7", "fetched_at": "2026-08-28T04:05:22.060906+00:00", "kind": "readme", "missing": false, "url": "https://github.com/raodv/captcha"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:41:15.240558+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "94d0fc3dfa0b8daed8afaeefd81a9682d55cacbc7ced44460d80e07946da43b7", "fetched_at": "2026-08-28T04:05:22.060906+00:00", "kind": "readme", "missing": false, "url": "https://github.com/raodv/captcha"}], "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:05:22.060906+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:22.060906+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:22.060906+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:41:15.240558+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "94d0fc3dfa0b8daed8afaeefd81a9682d55cacbc7ced44460d80e07946da43b7", "fetched_at": "2026-08-28T04:05:22.060906+00:00", "kind": "readme", "missing": false, "url": "https://github.com/raodv/captcha"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:22.060906+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:22.060906+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:41:15.240558+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "94d0fc3dfa0b8daed8afaeefd81a9682d55cacbc7ced44460d80e07946da43b7", "fetched_at": "2026-08-28T04:05:22.060906+00:00", "kind": "readme", "missing": false, "url": "https://github.com/raodv/captcha"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:22.060906+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:22.060906+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:22.060906+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:41:15.240558+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "94d0fc3dfa0b8daed8afaeefd81a9682d55cacbc7ced44460d80e07946da43b7", "fetched_at": "2026-08-28T04:05:22.060906+00:00", "kind": "readme", "missing": false, "url": "https://github.com/raodv/captcha"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:22.060906+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:22.060906+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:41:15.240558+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "94d0fc3dfa0b8daed8afaeefd81a9682d55cacbc7ced44460d80e07946da43b7", "fetched_at": "2026-08-28T04:05:22.060906+00:00", "kind": "readme", "missing": false, "url": "https://github.com/raodv/captcha"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:41:15.240558+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "94d0fc3dfa0b8daed8afaeefd81a9682d55cacbc7ced44460d80e07946da43b7", "fetched_at": "2026-08-28T04:05:22.060906+00:00", "kind": "readme", "missing": false, "url": "https://github.com/raodv/captcha"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:41:15.240558+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "94d0fc3dfa0b8daed8afaeefd81a9682d55cacbc7ced44460d80e07946da43b7", "fetched_at": "2026-08-28T04:05:22.060906+00:00", "kind": "readme", "missing": false, "url": "https://github.com/raodv/captcha"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:41:15.240558+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "94d0fc3dfa0b8daed8afaeefd81a9682d55cacbc7ced44460d80e07946da43b7", "fetched_at": "2026-08-28T04:05:22.060906+00:00", "kind": "readme", "missing": false, "url": "https://github.com/raodv/captcha"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 15, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2365, "days_push": 513, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 39, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}