{"adoption": {"forks": 583, "observed_at": "2026-08-28T04:03:35.513750+00:00", "stars": 1101}, "canonical_url": "https://ross.abutalabs.com/products/tianti", "card": {"archived": false, "artifact_type": "application", "description": "java轻量级的CMS解决方案-天梯。天梯是一个用java相关技术搭建的后台CMS解决方案，用户可以结合自身业务进行相应扩展，同时提供了针对dao、service等的代码生成工具。技术选型：Spring Data JPA、Hibernate、Shiro、 Spring MVC、Layer、Mysql等。", "domain": ["cms", "web-development", "backend", "self-hosted"], "enriched": true, "function": ["web-framework", "templating", "auth", "orm", "caching", "static-site-generator"], "health_score": 20, "homepage": null, "language": "Java", "license": "Apache-2.0", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["xujeff/tianti"], "name": "xujeff/tianti", "platform": ["jvm", "self-hosted", "cross-platform"], "pushed_at": "2022-05-20T09:31:18+00:00", "repo": "xujeff/tianti", "stars": 1101, "tags": ["java-cms", "spring-mvc", "shiro", "spring-data-jpa", "code-generation", "responsive-frontend", "chinese-language", "web-server"], "topics": ["java", "cms", "spring-mvc", "hibernate", "spring-data-jpa", "layer", "shiro", "mysql"], "urls": [], "use_cases": ["build a content management site in java without writing code", "self-hosted cms with admin backend and responsive frontend", "java cms solution for news and article publishing", "extendable cms base for custom business modules", "generate dao and service code for a spring jpa project", "pc and mobile adaptive website with cms backend"], "what_it_is": "Tianti is a free, lightweight Java-based CMS providing a complete backend admin and responsive frontend solution built on Spring MVC, Spring Data JPA, Hibernate, Shiro, and MySQL. It features clear module layering for easy extension, skinning support, and companion code-generation tools for DAO and service layers.", "when_to_avoid": ["you need a modern stack (Spring Boot, microservices, or JS frontend frameworks)", "you require frequent updates and active community support", "you need headless/API-only CMS capabilities", "your team does not work with JSP and legacy Spring 4.x"], "when_to_choose": ["you want a lightweight java CMS on the Spring stack", "you need a CMS that is easy to extend with your own business modules", "you prefer Spring Data JPA/Hibernate over PHP-based CMS options", "you want built-in admin, permissions (Shiro), and responsive frontend out of the box"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/tianti", "repo": "xujeff/tianti", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:35.513750+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:45:44.988981+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5004da1693087a1eb5c9899636ab0532ac23613ee5578f2bf21ac8a3198da150", "fetched_at": "2026-08-28T04:03:35.513750+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xujeff/tianti"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:35.513750+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:45:44.988981+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5004da1693087a1eb5c9899636ab0532ac23613ee5578f2bf21ac8a3198da150", "fetched_at": "2026-08-28T04:03:35.513750+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xujeff/tianti"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:45:44.988981+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5004da1693087a1eb5c9899636ab0532ac23613ee5578f2bf21ac8a3198da150", "fetched_at": "2026-08-28T04:03:35.513750+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xujeff/tianti"}], "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:03:35.513750+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:35.513750+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:35.513750+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:45:44.988981+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5004da1693087a1eb5c9899636ab0532ac23613ee5578f2bf21ac8a3198da150", "fetched_at": "2026-08-28T04:03:35.513750+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xujeff/tianti"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:35.513750+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:35.513750+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:45:44.988981+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5004da1693087a1eb5c9899636ab0532ac23613ee5578f2bf21ac8a3198da150", "fetched_at": "2026-08-28T04:03:35.513750+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xujeff/tianti"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:35.513750+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:35.513750+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:35.513750+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:45:44.988981+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5004da1693087a1eb5c9899636ab0532ac23613ee5578f2bf21ac8a3198da150", "fetched_at": "2026-08-28T04:03:35.513750+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xujeff/tianti"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:35.513750+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:35.513750+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:45:44.988981+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5004da1693087a1eb5c9899636ab0532ac23613ee5578f2bf21ac8a3198da150", "fetched_at": "2026-08-28T04:03:35.513750+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xujeff/tianti"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:45:44.988981+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5004da1693087a1eb5c9899636ab0532ac23613ee5578f2bf21ac8a3198da150", "fetched_at": "2026-08-28T04:03:35.513750+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xujeff/tianti"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:45:44.988981+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5004da1693087a1eb5c9899636ab0532ac23613ee5578f2bf21ac8a3198da150", "fetched_at": "2026-08-28T04:03:35.513750+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xujeff/tianti"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:45:44.988981+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5004da1693087a1eb5c9899636ab0532ac23613ee5578f2bf21ac8a3198da150", "fetched_at": "2026-08-28T04:03:35.513750+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xujeff/tianti"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "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": 3493, "days_push": 1566, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 23, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}