{"adoption": {"forks": 402, "observed_at": "2026-08-28T04:07:05.546455+00:00", "stars": 2629}, "canonical_url": "https://ross.abutalabs.com/products/tsung", "card": {"archived": false, "artifact_type": "framework", "description": "Tsung is a high-performance benchmark framework for various protocols including HTTP, XMPP, LDAP, etc.", "domain": ["testing", "performance", "developer-tools", "networking"], "enriched": true, "function": ["benchmarking", "load-testing", "testing"], "health_score": 62, "homepage": "http://www.process-one.net/en/tsung/", "language": "Erlang", "license": "GPL-2.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["processone/tsung"], "name": "processone/tsung", "platform": ["elixir", "cli", "cross-platform"], "pushed_at": "2026-03-02T15:37:11+00:00", "repo": "processone/tsung", "stars": 2629, "tags": ["load-testing", "multi-protocol", "distributed", "http", "xmpp", "mqtt", "amqp", "ldap", "database-load-testing", "erlang", "linux", "macos"], "topics": ["erlang", "xmpp", "benchmark", "benchmarking", "postgresql", "mysql", "ldap", "mqtt", "amqp"], "urls": [], "use_cases": ["load test an HTTP web service with thousands of concurrent users", "benchmark an XMPP messaging server's scalability", "stress test a PostgreSQL or MySQL database under heavy query load", "simulate distributed traffic against an MQTT or AMQP broker", "measure performance of an LDAP directory server", "run distributed load tests from multiple machines"], "what_it_is": "Tsung is a multi-protocol distributed load testing and benchmarking tool written in Erlang. It simulates thousands of clients to test the scalability and performance of IP-based client/server applications over protocols like HTTP, WebDAV, SOAP, PostgreSQL, MySQL, LDAP, MQTT, AMQP, and Jabber/XMPP.", "when_to_avoid": ["you only need simple HTTP load testing with a modern scripting workflow (tools like k6 or Locust may be easier)", "you prefer writing test scenarios in a general-purpose language rather than XML", "you need a GUI-driven load testing tool", "your team has no Erlang/OTP operational experience"], "when_to_choose": ["you need multi-protocol load testing beyond plain HTTP", "you want distributed load generation from multiple nodes", "you need to benchmark messaging protocols like XMPP, MQTT, or AMQP", "you need very high concurrency thanks to Erlang's lightweight processes"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/tsung", "repo": "processone/tsung", "role": "main", "score": 64}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:07:05.546455+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:19:41.104215+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f4666ee6e00d0d780fdd6e18d5e208f438c0290f12325cfb2baf150524afae31", "fetched_at": "2026-08-28T04:07:05.546455+00:00", "kind": "readme", "missing": false, "url": "https://github.com/processone/tsung"}, {"content_hash": "f732c5de59e12a9663d43cc50006d61b0531a34ed72b38f7fec3a49e83ca5c98", "fetched_at": "2026-08-29T10:02:28.898107+00:00", "kind": "homepage", "missing": false, "url": "http://www.process-one.net/en/tsung/"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:07:05.546455+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:19:41.104215+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f4666ee6e00d0d780fdd6e18d5e208f438c0290f12325cfb2baf150524afae31", "fetched_at": "2026-08-28T04:07:05.546455+00:00", "kind": "readme", "missing": false, "url": "https://github.com/processone/tsung"}, {"content_hash": "f732c5de59e12a9663d43cc50006d61b0531a34ed72b38f7fec3a49e83ca5c98", "fetched_at": "2026-08-29T10:02:28.898107+00:00", "kind": "homepage", "missing": false, "url": "http://www.process-one.net/en/tsung/"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:19:41.104215+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f4666ee6e00d0d780fdd6e18d5e208f438c0290f12325cfb2baf150524afae31", "fetched_at": "2026-08-28T04:07:05.546455+00:00", "kind": "readme", "missing": false, "url": "https://github.com/processone/tsung"}, {"content_hash": "f732c5de59e12a9663d43cc50006d61b0531a34ed72b38f7fec3a49e83ca5c98", "fetched_at": "2026-08-29T10:02:28.898107+00:00", "kind": "homepage", "missing": false, "url": "http://www.process-one.net/en/tsung/"}], "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:07:05.546455+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:07:05.546455+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:07:05.546455+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:19:41.104215+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f4666ee6e00d0d780fdd6e18d5e208f438c0290f12325cfb2baf150524afae31", "fetched_at": "2026-08-28T04:07:05.546455+00:00", "kind": "readme", "missing": false, "url": "https://github.com/processone/tsung"}, {"content_hash": "f732c5de59e12a9663d43cc50006d61b0531a34ed72b38f7fec3a49e83ca5c98", "fetched_at": "2026-08-29T10:02:28.898107+00:00", "kind": "homepage", "missing": false, "url": "http://www.process-one.net/en/tsung/"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:07:05.546455+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:07:05.546455+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:19:41.104215+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f4666ee6e00d0d780fdd6e18d5e208f438c0290f12325cfb2baf150524afae31", "fetched_at": "2026-08-28T04:07:05.546455+00:00", "kind": "readme", "missing": false, "url": "https://github.com/processone/tsung"}, {"content_hash": "f732c5de59e12a9663d43cc50006d61b0531a34ed72b38f7fec3a49e83ca5c98", "fetched_at": "2026-08-29T10:02:28.898107+00:00", "kind": "homepage", "missing": false, "url": "http://www.process-one.net/en/tsung/"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:07:05.546455+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:07:05.546455+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:07:05.546455+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:19:41.104215+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f4666ee6e00d0d780fdd6e18d5e208f438c0290f12325cfb2baf150524afae31", "fetched_at": "2026-08-28T04:07:05.546455+00:00", "kind": "readme", "missing": false, "url": "https://github.com/processone/tsung"}, {"content_hash": "f732c5de59e12a9663d43cc50006d61b0531a34ed72b38f7fec3a49e83ca5c98", "fetched_at": "2026-08-29T10:02:28.898107+00:00", "kind": "homepage", "missing": false, "url": "http://www.process-one.net/en/tsung/"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:07:05.546455+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:07:05.546455+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:19:41.104215+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f4666ee6e00d0d780fdd6e18d5e208f438c0290f12325cfb2baf150524afae31", "fetched_at": "2026-08-28T04:07:05.546455+00:00", "kind": "readme", "missing": false, "url": "https://github.com/processone/tsung"}, {"content_hash": "f732c5de59e12a9663d43cc50006d61b0531a34ed72b38f7fec3a49e83ca5c98", "fetched_at": "2026-08-29T10:02:28.898107+00:00", "kind": "homepage", "missing": false, "url": "http://www.process-one.net/en/tsung/"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:19:41.104215+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f4666ee6e00d0d780fdd6e18d5e208f438c0290f12325cfb2baf150524afae31", "fetched_at": "2026-08-28T04:07:05.546455+00:00", "kind": "readme", "missing": false, "url": "https://github.com/processone/tsung"}, {"content_hash": "f732c5de59e12a9663d43cc50006d61b0531a34ed72b38f7fec3a49e83ca5c98", "fetched_at": "2026-08-29T10:02:28.898107+00:00", "kind": "homepage", "missing": false, "url": "http://www.process-one.net/en/tsung/"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:19:41.104215+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f4666ee6e00d0d780fdd6e18d5e208f438c0290f12325cfb2baf150524afae31", "fetched_at": "2026-08-28T04:07:05.546455+00:00", "kind": "readme", "missing": false, "url": "https://github.com/processone/tsung"}, {"content_hash": "f732c5de59e12a9663d43cc50006d61b0531a34ed72b38f7fec3a49e83ca5c98", "fetched_at": "2026-08-29T10:02:28.898107+00:00", "kind": "homepage", "missing": false, "url": "http://www.process-one.net/en/tsung/"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:19:41.104215+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f4666ee6e00d0d780fdd6e18d5e208f438c0290f12325cfb2baf150524afae31", "fetched_at": "2026-08-28T04:07:05.546455+00:00", "kind": "readme", "missing": false, "url": "https://github.com/processone/tsung"}, {"content_hash": "f732c5de59e12a9663d43cc50006d61b0531a34ed72b38f7fec3a49e83ca5c98", "fetched_at": "2026-08-29T10:02:28.898107+00:00", "kind": "homepage", "missing": false, "url": "http://www.process-one.net/en/tsung/"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 70, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 6057, "days_push": 184, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 64, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}