{"adoption": {"forks": 353, "observed_at": "2026-08-28T04:06:37.003038+00:00", "stars": 2319}, "canonical_url": "https://ross.abutalabs.com/products/tuyapi", "card": {"archived": false, "artifact_type": "library", "description": "🌧 An easy-to-use API for devices that use Tuya's cloud services. Documentation: https://codetheweb.github.io/tuyapi.", "domain": ["iot"], "enriched": true, "function": ["iot", "sdk"], "health_score": 58, "homepage": null, "language": "JavaScript", "license": "MIT", "license_family": "permissive", "maturity": "stable", "member_repos": ["codetheweb/tuyapi"], "name": "codetheweb/tuyapi", "platform": [], "pushed_at": "2025-10-09T04:41:51+00:00", "repo": "codetheweb/tuyapi", "stars": 2319, "tags": ["tuya", "smart-home", "home-automation", "local-control", "device-protocol", "smart-plugs", "smart-switches", "javascript-library", "event-based-api", "automation", "nodejs"], "topics": ["iot", "tuya", "nodejs", "smarthome", "local"], "urls": [], "use_cases": ["control Tuya smart plugs and switches from Node.js", "communicate with Tuya devices over the local network instead of the cloud", "read the current status of Tuya-branded smart home devices", "toggle smart home devices programmatically in automation scripts", "build custom integrations for Tuya-compatible IoT devices", "work with devices that respond on port 6668 or work with the TuyaSmart app"], "what_it_is": "TuyAPI is a Node.js library that provides an easy-to-use API for communicating with smart devices built on Tuya's protocol, such as plugs, switches, and lights sold under many brand names. It supports discovering devices on the local network, connecting, and reading or setting their data points either via events or synchronous calls, largely without depending on Tuya's cloud.", "when_to_avoid": ["your devices are not Tuya-based or do not work with the TuyaSmart app", "you need full official cloud features like scheduling, scenes, or device provisioning", "you want a polished end-user app rather than a developer library", "your stack is not Node.js and you cannot integrate a JavaScript dependency"], "when_to_choose": ["your project is in JavaScript/Node.js and talks to Tuya-compatible hardware", "you want low-latency local control of devices without routing through Tuya's cloud", "you need an event-driven or promise-based API to get and set device data points", "you are building a custom smart home integration, bridge, or automation tool"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/tuyapi", "repo": "codetheweb/tuyapi", "role": "main", "score": 44}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:37.003038+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:38:51.040984+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "049ba12305eaa9c048910c19be59bb1810c5071375031e504bee662275c524e0", "fetched_at": "2026-08-28T04:06:37.003038+00:00", "kind": "readme", "missing": false, "url": "https://github.com/codetheweb/tuyapi"}, {"content_hash": "fcd571298ddfb0eed4aad1c5cb4a827b6e7ddeddf395caa0388c4d6fdc66287d", "fetched_at": "2026-08-29T10:19:14.801828+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/tuyapi"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:37.003038+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:38:51.040984+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "049ba12305eaa9c048910c19be59bb1810c5071375031e504bee662275c524e0", "fetched_at": "2026-08-28T04:06:37.003038+00:00", "kind": "readme", "missing": false, "url": "https://github.com/codetheweb/tuyapi"}, {"content_hash": "fcd571298ddfb0eed4aad1c5cb4a827b6e7ddeddf395caa0388c4d6fdc66287d", "fetched_at": "2026-08-29T10:19:14.801828+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/tuyapi"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:38:51.040984+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "049ba12305eaa9c048910c19be59bb1810c5071375031e504bee662275c524e0", "fetched_at": "2026-08-28T04:06:37.003038+00:00", "kind": "readme", "missing": false, "url": "https://github.com/codetheweb/tuyapi"}, {"content_hash": "fcd571298ddfb0eed4aad1c5cb4a827b6e7ddeddf395caa0388c4d6fdc66287d", "fetched_at": "2026-08-29T10:19:14.801828+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/tuyapi"}], "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:37.003038+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:37.003038+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:37.003038+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:38:51.040984+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "049ba12305eaa9c048910c19be59bb1810c5071375031e504bee662275c524e0", "fetched_at": "2026-08-28T04:06:37.003038+00:00", "kind": "readme", "missing": false, "url": "https://github.com/codetheweb/tuyapi"}, {"content_hash": "fcd571298ddfb0eed4aad1c5cb4a827b6e7ddeddf395caa0388c4d6fdc66287d", "fetched_at": "2026-08-29T10:19:14.801828+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/tuyapi"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:37.003038+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:37.003038+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:38:51.040984+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "049ba12305eaa9c048910c19be59bb1810c5071375031e504bee662275c524e0", "fetched_at": "2026-08-28T04:06:37.003038+00:00", "kind": "readme", "missing": false, "url": "https://github.com/codetheweb/tuyapi"}, {"content_hash": "fcd571298ddfb0eed4aad1c5cb4a827b6e7ddeddf395caa0388c4d6fdc66287d", "fetched_at": "2026-08-29T10:19:14.801828+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/tuyapi"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:37.003038+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:37.003038+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:37.003038+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:38:51.040984+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "049ba12305eaa9c048910c19be59bb1810c5071375031e504bee662275c524e0", "fetched_at": "2026-08-28T04:06:37.003038+00:00", "kind": "readme", "missing": false, "url": "https://github.com/codetheweb/tuyapi"}, {"content_hash": "fcd571298ddfb0eed4aad1c5cb4a827b6e7ddeddf395caa0388c4d6fdc66287d", "fetched_at": "2026-08-29T10:19:14.801828+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/tuyapi"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:37.003038+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:37.003038+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:38:51.040984+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "049ba12305eaa9c048910c19be59bb1810c5071375031e504bee662275c524e0", "fetched_at": "2026-08-28T04:06:37.003038+00:00", "kind": "readme", "missing": false, "url": "https://github.com/codetheweb/tuyapi"}, {"content_hash": "fcd571298ddfb0eed4aad1c5cb4a827b6e7ddeddf395caa0388c4d6fdc66287d", "fetched_at": "2026-08-29T10:19:14.801828+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/tuyapi"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:38:51.040984+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "049ba12305eaa9c048910c19be59bb1810c5071375031e504bee662275c524e0", "fetched_at": "2026-08-28T04:06:37.003038+00:00", "kind": "readme", "missing": false, "url": "https://github.com/codetheweb/tuyapi"}, {"content_hash": "fcd571298ddfb0eed4aad1c5cb4a827b6e7ddeddf395caa0388c4d6fdc66287d", "fetched_at": "2026-08-29T10:19:14.801828+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/tuyapi"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:38:51.040984+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "049ba12305eaa9c048910c19be59bb1810c5071375031e504bee662275c524e0", "fetched_at": "2026-08-28T04:06:37.003038+00:00", "kind": "readme", "missing": false, "url": "https://github.com/codetheweb/tuyapi"}, {"content_hash": "fcd571298ddfb0eed4aad1c5cb4a827b6e7ddeddf395caa0388c4d6fdc66287d", "fetched_at": "2026-08-29T10:19:14.801828+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/tuyapi"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:38:51.040984+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "049ba12305eaa9c048910c19be59bb1810c5071375031e504bee662275c524e0", "fetched_at": "2026-08-28T04:06:37.003038+00:00", "kind": "readme", "missing": false, "url": "https://github.com/codetheweb/tuyapi"}, {"content_hash": "fcd571298ddfb0eed4aad1c5cb4a827b6e7ddeddf395caa0388c4d6fdc66287d", "fetched_at": "2026-08-29T10:19:14.801828+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/tuyapi"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 46, "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": 3234, "days_push": 328, "days_rel": 604, "gap_med": null, "n_releases_24m": 1}, "score": 44, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}