{"adoption": {"forks": 276, "observed_at": "2026-08-28T04:06:03.512894+00:00", "stars": 1996}, "canonical_url": "https://ross.abutalabs.com/products/easynode", "card": {"archived": false, "artifact_type": "application", "description": "一个多功能Linux&win服务器WEB终端面板(webSSH&webSFTP). 更新通知TG：", "domain": ["self-hosted", "developer-tools"], "enriched": true, "function": ["ssh", "http-server", "monitoring", "developer-tools", "self-hosted"], "health_score": 99, "homepage": "https://t.me/easynode_notify", "language": "Dart", "license": "NOASSERTION", "license_family": "other", "maturity": "active", "member_repos": ["chaos-zhu/easynode"], "name": "chaos-zhu/easynode", "platform": ["self-hosted", "windows"], "pushed_at": "2026-08-19T15:18:37+00:00", "repo": "chaos-zhu/easynode", "stars": 1996, "tags": ["webssh", "websftp", "server-management-panel", "remote-terminal", "file-transfer", "mobile-app", "flutter", "devops", "command-line", "docker", "web-server", "android", "ios", "linux"], "topics": [], "urls": [], "use_cases": ["manage multiple linux servers from a browser", "web-based ssh terminal for my vps", "upload and download files to servers via web sftp", "run commands on many servers at once", "store and organize ssh credentials securely", "manage servers from my phone", "self-hosted alternative to server ssh panels", "keep a script library for server ops"], "what_it_is": "EasyNode is a self-hosted web-based server management panel providing webSSH and webSFTP for Linux and Windows servers, with features like credential management, script libraries, batch command execution, and an AI agent component. It also ships native iOS/Android mobile clients that reuse the same backend for SSH, SFTP, Docker, and server monitoring on the go.", "when_to_avoid": ["you need a fully audited, enterprise-grade bastion solution with strict compliance requirements", "you only need occasional one-off SSH sessions where a plain terminal client suffices", "the non-standard license is a concern for your usage"], "when_to_choose": ["you want a browser-based SSH/SFTP panel you can self-host with docker", "you manage many servers and need grouping, batch commands, and credential hosting", "you need SSH and server management from mobile devices"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/easynode", "repo": "chaos-zhu/easynode", "role": "main", "score": 98}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:03.512894+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:02:28.810020+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ff0bdcbff68e483ae7c59ee3ccadcce43e13023d4359f438b6bbdbc330bb44af", "fetched_at": "2026-08-28T04:06:03.512894+00:00", "kind": "readme", "missing": false, "url": "https://github.com/chaos-zhu/easynode"}, {"content_hash": "2cae123c85b3a764404b6d31321400cf9eb502fa02e68f49ab1ed74abd3349de", "fetched_at": "2026-08-29T10:42:04.156615+00:00", "kind": "homepage", "missing": false, "url": "https://t.me/easynode_notify"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:03.512894+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:02:28.810020+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ff0bdcbff68e483ae7c59ee3ccadcce43e13023d4359f438b6bbdbc330bb44af", "fetched_at": "2026-08-28T04:06:03.512894+00:00", "kind": "readme", "missing": false, "url": "https://github.com/chaos-zhu/easynode"}, {"content_hash": "2cae123c85b3a764404b6d31321400cf9eb502fa02e68f49ab1ed74abd3349de", "fetched_at": "2026-08-29T10:42:04.156615+00:00", "kind": "homepage", "missing": false, "url": "https://t.me/easynode_notify"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:02:28.810020+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ff0bdcbff68e483ae7c59ee3ccadcce43e13023d4359f438b6bbdbc330bb44af", "fetched_at": "2026-08-28T04:06:03.512894+00:00", "kind": "readme", "missing": false, "url": "https://github.com/chaos-zhu/easynode"}, {"content_hash": "2cae123c85b3a764404b6d31321400cf9eb502fa02e68f49ab1ed74abd3349de", "fetched_at": "2026-08-29T10:42:04.156615+00:00", "kind": "homepage", "missing": false, "url": "https://t.me/easynode_notify"}], "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:06:03.512894+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:03.512894+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:03.512894+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:02:28.810020+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ff0bdcbff68e483ae7c59ee3ccadcce43e13023d4359f438b6bbdbc330bb44af", "fetched_at": "2026-08-28T04:06:03.512894+00:00", "kind": "readme", "missing": false, "url": "https://github.com/chaos-zhu/easynode"}, {"content_hash": "2cae123c85b3a764404b6d31321400cf9eb502fa02e68f49ab1ed74abd3349de", "fetched_at": "2026-08-29T10:42:04.156615+00:00", "kind": "homepage", "missing": false, "url": "https://t.me/easynode_notify"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:03.512894+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:03.512894+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:02:28.810020+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ff0bdcbff68e483ae7c59ee3ccadcce43e13023d4359f438b6bbdbc330bb44af", "fetched_at": "2026-08-28T04:06:03.512894+00:00", "kind": "readme", "missing": false, "url": "https://github.com/chaos-zhu/easynode"}, {"content_hash": "2cae123c85b3a764404b6d31321400cf9eb502fa02e68f49ab1ed74abd3349de", "fetched_at": "2026-08-29T10:42:04.156615+00:00", "kind": "homepage", "missing": false, "url": "https://t.me/easynode_notify"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:03.512894+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:03.512894+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:03.512894+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:02:28.810020+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ff0bdcbff68e483ae7c59ee3ccadcce43e13023d4359f438b6bbdbc330bb44af", "fetched_at": "2026-08-28T04:06:03.512894+00:00", "kind": "readme", "missing": false, "url": "https://github.com/chaos-zhu/easynode"}, {"content_hash": "2cae123c85b3a764404b6d31321400cf9eb502fa02e68f49ab1ed74abd3349de", "fetched_at": "2026-08-29T10:42:04.156615+00:00", "kind": "homepage", "missing": false, "url": "https://t.me/easynode_notify"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:03.512894+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:03.512894+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:02:28.810020+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ff0bdcbff68e483ae7c59ee3ccadcce43e13023d4359f438b6bbdbc330bb44af", "fetched_at": "2026-08-28T04:06:03.512894+00:00", "kind": "readme", "missing": false, "url": "https://github.com/chaos-zhu/easynode"}, {"content_hash": "2cae123c85b3a764404b6d31321400cf9eb502fa02e68f49ab1ed74abd3349de", "fetched_at": "2026-08-29T10:42:04.156615+00:00", "kind": "homepage", "missing": false, "url": "https://t.me/easynode_notify"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:02:28.810020+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ff0bdcbff68e483ae7c59ee3ccadcce43e13023d4359f438b6bbdbc330bb44af", "fetched_at": "2026-08-28T04:06:03.512894+00:00", "kind": "readme", "missing": false, "url": "https://github.com/chaos-zhu/easynode"}, {"content_hash": "2cae123c85b3a764404b6d31321400cf9eb502fa02e68f49ab1ed74abd3349de", "fetched_at": "2026-08-29T10:42:04.156615+00:00", "kind": "homepage", "missing": false, "url": "https://t.me/easynode_notify"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:02:28.810020+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ff0bdcbff68e483ae7c59ee3ccadcce43e13023d4359f438b6bbdbc330bb44af", "fetched_at": "2026-08-28T04:06:03.512894+00:00", "kind": "readme", "missing": false, "url": "https://github.com/chaos-zhu/easynode"}, {"content_hash": "2cae123c85b3a764404b6d31321400cf9eb502fa02e68f49ab1ed74abd3349de", "fetched_at": "2026-08-29T10:42:04.156615+00:00", "kind": "homepage", "missing": false, "url": "https://t.me/easynode_notify"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:02:28.810020+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ff0bdcbff68e483ae7c59ee3ccadcce43e13023d4359f438b6bbdbc330bb44af", "fetched_at": "2026-08-28T04:06:03.512894+00:00", "kind": "readme", "missing": false, "url": "https://github.com/chaos-zhu/easynode"}, {"content_hash": "2cae123c85b3a764404b6d31321400cf9eb502fa02e68f49ab1ed74abd3349de", "fetched_at": "2026-08-29T10:42:04.156615+00:00", "kind": "homepage", "missing": false, "url": "https://t.me/easynode_notify"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 98, "longevity": 100, "rhythm": 98}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 1547, "days_push": 14, "days_rel": 18, "gap_med": 9.0, "n_releases_24m": 43}, "score": 98, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}