{"adoption": {"forks": 54, "observed_at": "2026-08-28T04:04:33.480576+00:00", "stars": 1378}, "canonical_url": "https://ross.abutalabs.com/products/wait4x", "card": {"archived": false, "artifact_type": "cli-tool", "description": "Wait4X allows you to wait for a port or a service to enter the requested state.", "domain": ["developer-tools"], "enriched": true, "function": ["cli", "developer-tools", "http-client", "networking", "workflow-automation"], "health_score": 100, "homepage": "https://wait4x.dev", "language": "Go", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["wait4x/wait4x"], "name": "wait4x/wait4x", "platform": ["windows", "cross-platform", "go", "cli"], "pushed_at": "2026-08-24T10:49:53+00:00", "repo": "wait4x/wait4x", "stars": 1378, "tags": ["service-readiness", "health-check", "wait-for-it", "ci-cd", "zero-dependency", "retry-backoff", "database-readiness", "devops", "command-line", "automation", "containers", "linux", "macos", "docker"], "topics": ["wait4x", "cli", "golang", "postgresql", "mysql", "mariadb", "redis", "http", "tcp", "dns", "go", "linux", "influxdb", "mongodb", "rabbitmq", "wait-for-it", "kafka"], "urls": [], "use_cases": ["wait for postgres to be ready before running migrations", "block CI pipeline until redis is up", "wait for a tcp port to open in docker-compose", "check http endpoint health before deployment rollout", "wait for kafka or rabbitmq before starting consumers", "find a free port with reverse checking", "wait for dns record to propagate"], "what_it_is": "Wait4X is a lightweight, zero-dependency CLI tool (also importable as a Go package) that waits for ports or services like TCP, HTTP, DNS, Redis, MySQL, PostgreSQL, MongoDB, Kafka, and RabbitMQ to become ready. It supports customizable timeouts, exponential backoff, reverse and parallel checking, and command execution after a successful wait.", "when_to_avoid": ["you need full monitoring or alerting rather than simple readiness gating", "your orchestrator already has built-in readiness probes and init containers", "you need a long-running daemon or dashboard rather than a one-shot wait"], "when_to_choose": ["you need a single static binary with no runtime dependencies for readiness checks", "you orchestrate multi-service startup in CI/CD, containers, or local dev", "you want to wait on many protocols and services with one consistent tool", "you need reverse checks (wait for a port to be free) or parallel checks"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/wait4x", "repo": "wait4x/wait4x", "role": "main", "score": 99}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:33.480576+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:40:24.156858+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "17a452d358897dee84466399a9a3650a8fa87be73b5370fb3706eb8611b63574", "fetched_at": "2026-08-28T04:04:33.480576+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wait4x/wait4x"}, {"content_hash": "4f6b25c7ea91cef68ea1136f90c0837ef230e5320c8db0b7074a49b10eb39fa3", "fetched_at": "2026-08-29T11:56:29.703455+00:00", "kind": "homepage", "missing": false, "url": "https://wait4x.dev"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:33.480576+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:40:24.156858+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "17a452d358897dee84466399a9a3650a8fa87be73b5370fb3706eb8611b63574", "fetched_at": "2026-08-28T04:04:33.480576+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wait4x/wait4x"}, {"content_hash": "4f6b25c7ea91cef68ea1136f90c0837ef230e5320c8db0b7074a49b10eb39fa3", "fetched_at": "2026-08-29T11:56:29.703455+00:00", "kind": "homepage", "missing": false, "url": "https://wait4x.dev"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:40:24.156858+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "17a452d358897dee84466399a9a3650a8fa87be73b5370fb3706eb8611b63574", "fetched_at": "2026-08-28T04:04:33.480576+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wait4x/wait4x"}, {"content_hash": "4f6b25c7ea91cef68ea1136f90c0837ef230e5320c8db0b7074a49b10eb39fa3", "fetched_at": "2026-08-29T11:56:29.703455+00:00", "kind": "homepage", "missing": false, "url": "https://wait4x.dev"}], "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:33.480576+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:33.480576+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:33.480576+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:40:24.156858+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "17a452d358897dee84466399a9a3650a8fa87be73b5370fb3706eb8611b63574", "fetched_at": "2026-08-28T04:04:33.480576+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wait4x/wait4x"}, {"content_hash": "4f6b25c7ea91cef68ea1136f90c0837ef230e5320c8db0b7074a49b10eb39fa3", "fetched_at": "2026-08-29T11:56:29.703455+00:00", "kind": "homepage", "missing": false, "url": "https://wait4x.dev"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:33.480576+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:33.480576+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:40:24.156858+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "17a452d358897dee84466399a9a3650a8fa87be73b5370fb3706eb8611b63574", "fetched_at": "2026-08-28T04:04:33.480576+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wait4x/wait4x"}, {"content_hash": "4f6b25c7ea91cef68ea1136f90c0837ef230e5320c8db0b7074a49b10eb39fa3", "fetched_at": "2026-08-29T11:56:29.703455+00:00", "kind": "homepage", "missing": false, "url": "https://wait4x.dev"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:33.480576+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:33.480576+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:33.480576+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:40:24.156858+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "17a452d358897dee84466399a9a3650a8fa87be73b5370fb3706eb8611b63574", "fetched_at": "2026-08-28T04:04:33.480576+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wait4x/wait4x"}, {"content_hash": "4f6b25c7ea91cef68ea1136f90c0837ef230e5320c8db0b7074a49b10eb39fa3", "fetched_at": "2026-08-29T11:56:29.703455+00:00", "kind": "homepage", "missing": false, "url": "https://wait4x.dev"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:33.480576+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:33.480576+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:40:24.156858+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "17a452d358897dee84466399a9a3650a8fa87be73b5370fb3706eb8611b63574", "fetched_at": "2026-08-28T04:04:33.480576+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wait4x/wait4x"}, {"content_hash": "4f6b25c7ea91cef68ea1136f90c0837ef230e5320c8db0b7074a49b10eb39fa3", "fetched_at": "2026-08-29T11:56:29.703455+00:00", "kind": "homepage", "missing": false, "url": "https://wait4x.dev"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:40:24.156858+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "17a452d358897dee84466399a9a3650a8fa87be73b5370fb3706eb8611b63574", "fetched_at": "2026-08-28T04:04:33.480576+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wait4x/wait4x"}, {"content_hash": "4f6b25c7ea91cef68ea1136f90c0837ef230e5320c8db0b7074a49b10eb39fa3", "fetched_at": "2026-08-29T11:56:29.703455+00:00", "kind": "homepage", "missing": false, "url": "https://wait4x.dev"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:40:24.156858+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "17a452d358897dee84466399a9a3650a8fa87be73b5370fb3706eb8611b63574", "fetched_at": "2026-08-28T04:04:33.480576+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wait4x/wait4x"}, {"content_hash": "4f6b25c7ea91cef68ea1136f90c0837ef230e5320c8db0b7074a49b10eb39fa3", "fetched_at": "2026-08-29T11:56:29.703455+00:00", "kind": "homepage", "missing": false, "url": "https://wait4x.dev"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:40:24.156858+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "17a452d358897dee84466399a9a3650a8fa87be73b5370fb3706eb8611b63574", "fetched_at": "2026-08-28T04:04:33.480576+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wait4x/wait4x"}, {"content_hash": "4f6b25c7ea91cef68ea1136f90c0837ef230e5320c8db0b7074a49b10eb39fa3", "fetched_at": "2026-08-29T11:56:29.703455+00:00", "kind": "homepage", "missing": false, "url": "https://wait4x.dev"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 98}, "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": 2497, "days_push": 9, "days_rel": 14, "gap_med": 24.0, "n_releases_24m": 13}, "score": 99, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}