{"adoption": {"forks": 148, "observed_at": "2026-08-28T04:04:34.732237+00:00", "stars": 1384}, "canonical_url": "https://ross.abutalabs.com/products/bean-searcher", "card": {"archived": false, "artifact_type": "framework", "description": "🔥🔥🔥 A read-only ORM for complex queries in Java", "domain": ["web-development", "backend", "databases", "developer-tools"], "enriched": true, "function": ["orm", "database", "search-engine", "web-framework", "api-framework"], "health_score": 98, "homepage": "https://bs.zhxu.cn/en/", "language": "Java", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["troyzhxu/bean-searcher"], "name": "troyzhxu/bean-searcher", "platform": ["jvm", "cross-platform"], "pushed_at": "2026-08-12T03:34:38+00:00", "repo": "troyzhxu/bean-searcher", "stars": 1384, "tags": ["declarative-search", "readonly-orm", "dynamic-sql", "list-queries", "spring-boot-starter", "pagination", "multi-table-joins", "search", "spring-boot"], "topics": ["java", "spring-boot", "graphql", "search-framework", "declarative-search", "list-query", "orm-framework", "readonly-orm", "dynamic-sql"], "urls": [], "use_cases": ["build multi-condition list query endpoints without if-else SQL stitching", "query across multiple tables with annotation-declared joins", "let frontend dynamically combine filters, sorting, and pagination without backend changes", "add searchable list APIs to existing Spring Boot apps alongside MyBatis or JPA", "implement paginated admin data tables with filtering and stats", "prevent SQL injection and deep pagination performance issues by default"], "what_it_is": "Bean Searcher is a read-only ORM framework for Java focused on declarative complex list queries, where entities define search boundaries and request parameters drive filtering, sorting, pagination, and joins. It generates SQL automatically, integrates non-invasively with Spring Boot alongside MyBatis or JPA, and includes built-in protections like SQL injection prevention and deep-offset throttling.", "when_to_avoid": ["you need full CRUD with writes and transactional entity management", "you prefer hand-tuned SQL or heavy control over generated queries", "your project is not on the JVM/Java ecosystem"], "when_to_choose": ["you need complex list/retrieval queries in Java with minimal boilerplate", "your frontend needs flexible, parameter-driven filtering and sorting", "you want a read-only query layer that coexists with your existing ORM"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/bean-searcher", "repo": "troyzhxu/bean-searcher", "role": "main", "score": 97}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:34.732237+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:39:59.746863+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "40b5a926fadd71e7b01b961994191d88ce006d607438e3eeec0f3dcf2f9dba65", "fetched_at": "2026-08-28T04:04:34.732237+00:00", "kind": "readme", "missing": false, "url": "https://github.com/troyzhxu/bean-searcher"}, {"content_hash": "5f571c2a6dfa5ddc61722e7f89bf2b382b8df8f9475adab04b93a2dcf0d1e468", "fetched_at": "2026-08-29T11:55:42.679414+00:00", "kind": "homepage", "missing": false, "url": "https://bs.zhxu.cn/en/"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:34.732237+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:39:59.746863+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "40b5a926fadd71e7b01b961994191d88ce006d607438e3eeec0f3dcf2f9dba65", "fetched_at": "2026-08-28T04:04:34.732237+00:00", "kind": "readme", "missing": false, "url": "https://github.com/troyzhxu/bean-searcher"}, {"content_hash": "5f571c2a6dfa5ddc61722e7f89bf2b382b8df8f9475adab04b93a2dcf0d1e468", "fetched_at": "2026-08-29T11:55:42.679414+00:00", "kind": "homepage", "missing": false, "url": "https://bs.zhxu.cn/en/"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:39:59.746863+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "40b5a926fadd71e7b01b961994191d88ce006d607438e3eeec0f3dcf2f9dba65", "fetched_at": "2026-08-28T04:04:34.732237+00:00", "kind": "readme", "missing": false, "url": "https://github.com/troyzhxu/bean-searcher"}, {"content_hash": "5f571c2a6dfa5ddc61722e7f89bf2b382b8df8f9475adab04b93a2dcf0d1e468", "fetched_at": "2026-08-29T11:55:42.679414+00:00", "kind": "homepage", "missing": false, "url": "https://bs.zhxu.cn/en/"}], "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:34.732237+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:34.732237+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:34.732237+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:39:59.746863+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "40b5a926fadd71e7b01b961994191d88ce006d607438e3eeec0f3dcf2f9dba65", "fetched_at": "2026-08-28T04:04:34.732237+00:00", "kind": "readme", "missing": false, "url": "https://github.com/troyzhxu/bean-searcher"}, {"content_hash": "5f571c2a6dfa5ddc61722e7f89bf2b382b8df8f9475adab04b93a2dcf0d1e468", "fetched_at": "2026-08-29T11:55:42.679414+00:00", "kind": "homepage", "missing": false, "url": "https://bs.zhxu.cn/en/"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:34.732237+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:34.732237+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:39:59.746863+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "40b5a926fadd71e7b01b961994191d88ce006d607438e3eeec0f3dcf2f9dba65", "fetched_at": "2026-08-28T04:04:34.732237+00:00", "kind": "readme", "missing": false, "url": "https://github.com/troyzhxu/bean-searcher"}, {"content_hash": "5f571c2a6dfa5ddc61722e7f89bf2b382b8df8f9475adab04b93a2dcf0d1e468", "fetched_at": "2026-08-29T11:55:42.679414+00:00", "kind": "homepage", "missing": false, "url": "https://bs.zhxu.cn/en/"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:34.732237+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:34.732237+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:34.732237+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:39:59.746863+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "40b5a926fadd71e7b01b961994191d88ce006d607438e3eeec0f3dcf2f9dba65", "fetched_at": "2026-08-28T04:04:34.732237+00:00", "kind": "readme", "missing": false, "url": "https://github.com/troyzhxu/bean-searcher"}, {"content_hash": "5f571c2a6dfa5ddc61722e7f89bf2b382b8df8f9475adab04b93a2dcf0d1e468", "fetched_at": "2026-08-29T11:55:42.679414+00:00", "kind": "homepage", "missing": false, "url": "https://bs.zhxu.cn/en/"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:34.732237+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:34.732237+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:39:59.746863+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "40b5a926fadd71e7b01b961994191d88ce006d607438e3eeec0f3dcf2f9dba65", "fetched_at": "2026-08-28T04:04:34.732237+00:00", "kind": "readme", "missing": false, "url": "https://github.com/troyzhxu/bean-searcher"}, {"content_hash": "5f571c2a6dfa5ddc61722e7f89bf2b382b8df8f9475adab04b93a2dcf0d1e468", "fetched_at": "2026-08-29T11:55:42.679414+00:00", "kind": "homepage", "missing": false, "url": "https://bs.zhxu.cn/en/"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:39:59.746863+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "40b5a926fadd71e7b01b961994191d88ce006d607438e3eeec0f3dcf2f9dba65", "fetched_at": "2026-08-28T04:04:34.732237+00:00", "kind": "readme", "missing": false, "url": "https://github.com/troyzhxu/bean-searcher"}, {"content_hash": "5f571c2a6dfa5ddc61722e7f89bf2b382b8df8f9475adab04b93a2dcf0d1e468", "fetched_at": "2026-08-29T11:55:42.679414+00:00", "kind": "homepage", "missing": false, "url": "https://bs.zhxu.cn/en/"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:39:59.746863+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "40b5a926fadd71e7b01b961994191d88ce006d607438e3eeec0f3dcf2f9dba65", "fetched_at": "2026-08-28T04:04:34.732237+00:00", "kind": "readme", "missing": false, "url": "https://github.com/troyzhxu/bean-searcher"}, {"content_hash": "5f571c2a6dfa5ddc61722e7f89bf2b382b8df8f9475adab04b93a2dcf0d1e468", "fetched_at": "2026-08-29T11:55:42.679414+00:00", "kind": "homepage", "missing": false, "url": "https://bs.zhxu.cn/en/"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:39:59.746863+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "40b5a926fadd71e7b01b961994191d88ce006d607438e3eeec0f3dcf2f9dba65", "fetched_at": "2026-08-28T04:04:34.732237+00:00", "kind": "readme", "missing": false, "url": "https://github.com/troyzhxu/bean-searcher"}, {"content_hash": "5f571c2a6dfa5ddc61722e7f89bf2b382b8df8f9475adab04b93a2dcf0d1e468", "fetched_at": "2026-08-29T11:55:42.679414+00:00", "kind": "homepage", "missing": false, "url": "https://bs.zhxu.cn/en/"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 97, "longevity": 100, "rhythm": 95}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3368, "days_push": 21, "days_rel": 38, "gap_med": 8.5, "n_releases_24m": 25}, "score": 97, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}