{"adoption": {"forks": 638, "observed_at": "2026-08-28T04:05:18.720924+00:00", "stars": 1662}, "canonical_url": "https://ross.abutalabs.com/products/spring-statemachine", "card": {"archived": true, "artifact_type": "framework", "description": "Spring Statemachine is a framework for application developers to use state machine concepts with Spring.", "domain": ["backend", "developer-tools"], "enriched": true, "function": ["state-management", "workflow-automation", "middleware"], "health_score": 10, "homepage": "http://spring-attic.github.io/spring-statemachine/", "language": "Java", "license": "Apache-2.0", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["spring-attic/spring-statemachine"], "name": "spring-attic/spring-statemachine", "platform": ["jvm"], "pushed_at": "2026-07-05T20:45:56+00:00", "repo": "spring-attic/spring-statemachine", "stars": 1662, "tags": ["state-machine", "spring-ecosystem", "finite-state-machine", "uml-modeling", "zookeeper", "automation", "spring"], "topics": ["java", "spring", "statemachine"], "urls": [], "use_cases": ["model order lifecycle states in a Spring application", "implement hierarchical state machines for complex workflows", "manage device or session states with guaranteed consistent transitions", "persist and restore state machine configurations", "build distributed state machines coordinated via Zookeeper", "define state transitions with guards, actions, and event triggers"], "what_it_is": "Spring Statemachine is a Java framework that lets Spring application developers model application logic as finite state machines, supporting flat, hierarchical, and regional state configurations with triggers, guards, and actions. It integrates with Spring IOC, offers UML Eclipse Papyrus modeling, persistent machine configuration, and Zookeeper-based distributed state machines.", "when_to_avoid": ["you are not using the Spring/JVM ecosystem", "your state logic is trivial and a simple enum or if/else suffices", "you need a framework under active development, as this project is in the Spring Attic"], "when_to_choose": ["you are building a Spring or Spring Boot application with complex state-dependent behavior", "you need hierarchical states, regions, or UML modeling support", "you want state transitions managed declaratively with Spring IOC integration"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/spring-statemachine", "repo": "spring-attic/spring-statemachine", "role": "main", "score": 10}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:18.720924+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:44:35.765240+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "037dcf8eaa6697d473fcf7372086ee4729e3e0d6fef6940202f57bc64f7e16a6", "fetched_at": "2026-08-29T11:16:48.679304+00:00", "kind": "homepage", "missing": false, "url": "http://spring-attic.github.io/spring-statemachine/"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:18.720924+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:44:35.765240+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "037dcf8eaa6697d473fcf7372086ee4729e3e0d6fef6940202f57bc64f7e16a6", "fetched_at": "2026-08-29T11:16:48.679304+00:00", "kind": "homepage", "missing": false, "url": "http://spring-attic.github.io/spring-statemachine/"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:44:35.765240+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "037dcf8eaa6697d473fcf7372086ee4729e3e0d6fef6940202f57bc64f7e16a6", "fetched_at": "2026-08-29T11:16:48.679304+00:00", "kind": "homepage", "missing": false, "url": "http://spring-attic.github.io/spring-statemachine/"}], "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:18.720924+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:18.720924+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:18.720924+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:44:35.765240+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "037dcf8eaa6697d473fcf7372086ee4729e3e0d6fef6940202f57bc64f7e16a6", "fetched_at": "2026-08-29T11:16:48.679304+00:00", "kind": "homepage", "missing": false, "url": "http://spring-attic.github.io/spring-statemachine/"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:18.720924+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:18.720924+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:44:35.765240+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "037dcf8eaa6697d473fcf7372086ee4729e3e0d6fef6940202f57bc64f7e16a6", "fetched_at": "2026-08-29T11:16:48.679304+00:00", "kind": "homepage", "missing": false, "url": "http://spring-attic.github.io/spring-statemachine/"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:18.720924+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:18.720924+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:18.720924+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:44:35.765240+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "037dcf8eaa6697d473fcf7372086ee4729e3e0d6fef6940202f57bc64f7e16a6", "fetched_at": "2026-08-29T11:16:48.679304+00:00", "kind": "homepage", "missing": false, "url": "http://spring-attic.github.io/spring-statemachine/"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:18.720924+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:18.720924+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:44:35.765240+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "037dcf8eaa6697d473fcf7372086ee4729e3e0d6fef6940202f57bc64f7e16a6", "fetched_at": "2026-08-29T11:16:48.679304+00:00", "kind": "homepage", "missing": false, "url": "http://spring-attic.github.io/spring-statemachine/"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:44:35.765240+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "037dcf8eaa6697d473fcf7372086ee4729e3e0d6fef6940202f57bc64f7e16a6", "fetched_at": "2026-08-29T11:16:48.679304+00:00", "kind": "homepage", "missing": false, "url": "http://spring-attic.github.io/spring-statemachine/"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:44:35.765240+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "037dcf8eaa6697d473fcf7372086ee4729e3e0d6fef6940202f57bc64f7e16a6", "fetched_at": "2026-08-29T11:16:48.679304+00:00", "kind": "homepage", "missing": false, "url": "http://spring-attic.github.io/spring-statemachine/"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:44:35.765240+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "037dcf8eaa6697d473fcf7372086ee4729e3e0d6fef6940202f57bc64f7e16a6", "fetched_at": "2026-08-29T11:16:48.679304+00:00", "kind": "homepage", "missing": false, "url": "http://spring-attic.github.io/spring-statemachine/"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 91, "longevity": 100, "rhythm": 56}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["archived", "no_readme"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 4228, "days_push": 59, "days_rel": 83, "gap_med": 347, "n_releases_24m": 2}, "score": 10, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}