{"id":19551398,"url":"https://github.com/sndrs/ok","last_synced_at":"2026-04-17T10:04:24.994Z","repository":{"id":42468792,"uuid":"248215497","full_name":"sndrs/ok","owner":"sndrs","description":"🙇 Obliging task runner","archived":false,"fork":false,"pushed_at":"2023-02-03T05:23:32.000Z","size":28888,"stargazers_count":1,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-08T22:32:12.611Z","etag":null,"topics":["npm","npm-scripts","nvm","package-scripts","proof-of-concept","task-runner","yarn"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sndrs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-03-18T11:40:18.000Z","updated_at":"2022-04-04T13:50:36.000Z","dependencies_parsed_at":"2023-02-18T03:46:08.119Z","dependency_job_id":null,"html_url":"https://github.com/sndrs/ok","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/sndrs/ok","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sndrs%2Fok","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sndrs%2Fok/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sndrs%2Fok/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sndrs%2Fok/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sndrs","download_url":"https://codeload.github.com/sndrs/ok/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sndrs%2Fok/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270586464,"owners_count":24611317,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-15T02:00:12.559Z","response_time":110,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["npm","npm-scripts","nvm","package-scripts","proof-of-concept","task-runner","yarn"],"created_at":"2024-11-11T04:13:46.121Z","updated_at":"2026-04-17T10:04:24.949Z","avatar_url":"https://github.com/sndrs.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ok\n\n\u003e 🙇‍♂️ An obliging task runner\n\nRun `npm-scripts` in the correct environment without further installation or config.\n\n\u003cimg src=\"demo.gif\" width=\"455\"\u003e\n\n## Install\n\n\u003ca href=\"https://npmjs.org/package/@sndrs/ok\" title=\"View this project on NPM\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/@sndrs/ok.svg\" alt=\"NPM version\" /\u003e\u003c/a\u003e\n\n```bash\n$ yarn global add @sndrs/ok\n```\n\nor\n\n```bash\n$ npm install -g @sndrs/ok\n```\n\nThen use it to run your `npm-scripts`:\n\n```bash\n$ ok test # etc...\n```\n\n### Changes the host env as little as possible\n\n`ok` uses [nvexeca](https://github.com/ehmicky/nvexeca) behind the scenes. This means:\n\n-   it does not need to make changes to `$PATH`\n-   it does not affect existing Node versions\n-   it does not affect `NVM`, `fnm` etc\n\n### Follows project conventions\n\n-   uses correct Node version, observing [`.nvmrc`, `engines` and more](https://github.com/ehmicky/preferred-node-version/blob/main/README.md)\n-   uses the correct package manager for the project ([`yarn`, `npm` or `pnpm`](https://github.com/zkochan/packages/tree/master/preferred-pm))\n    -   observes `engines.npm` if present (unlike npm)\n-   always run tasks with up-to-date dependencies\n\n### No further dependencies\n\n-   uses its own copy of `yarn` if it cannot find one\n-   no `nvm`/`n`/`fnm` etc needed\n\n### Experience\n\n-   All task output is shown – no magic\n-   All available scripts in current context are discoverable by running without args (`\u003e ok`)\n-   Notifies you if you're using out-of-date version\n\n## See also\n\n-   [`nvexeca`](https://github.com/ehmicky/nvexeca): `nvm` + `execa`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsndrs%2Fok","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsndrs%2Fok","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsndrs%2Fok/lists"}