{"id":15537318,"url":"https://github.com/nullvoxpopuli/turbo-daemon","last_synced_at":"2026-01-23T00:37:50.423Z","repository":{"id":250071555,"uuid":"833362497","full_name":"NullVoxPopuli/turbo-daemon","owner":"NullVoxPopuli","description":"Tool to idempotently run a local turborepo server.","archived":false,"fork":false,"pushed_at":"2025-03-12T21:56:36.000Z","size":174,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-05T13:47:43.435Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NullVoxPopuli.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-07-24T22:30:22.000Z","updated_at":"2025-04-19T04:03:05.000Z","dependencies_parsed_at":"2025-04-23T15:23:18.616Z","dependency_job_id":"2f71c677-fd7b-4944-8aa0-25735a88d5ff","html_url":"https://github.com/NullVoxPopuli/turbo-daemon","commit_stats":null,"previous_names":["nullvoxpopuli/turbo-daemon"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/NullVoxPopuli/turbo-daemon","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NullVoxPopuli%2Fturbo-daemon","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NullVoxPopuli%2Fturbo-daemon/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NullVoxPopuli%2Fturbo-daemon/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NullVoxPopuli%2Fturbo-daemon/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NullVoxPopuli","download_url":"https://codeload.github.com/NullVoxPopuli/turbo-daemon/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NullVoxPopuli%2Fturbo-daemon/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270946068,"owners_count":24672890,"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-18T02:00:08.743Z","response_time":89,"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":[],"created_at":"2024-10-02T11:56:04.644Z","updated_at":"2026-01-23T00:37:50.414Z","avatar_url":"https://github.com/NullVoxPopuli.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Turbo Daemon\n\nA tool for running turbo locally as a demon that can be integrated with monorepo scripts.\n\n## Features\n\n- no money paid to Vercel   \n  (they do good work tho, It's just that I'm cheap)\n- doesn't use [pm2](https://github.com/Unitech/pm2/pull/5566)\n  (turbo-daemon is released under the MIT license)\n- wrapper around the highly tried and tested [turborepo-remote-cache](https://github.com/ducktors/turborepo-remote-cache/) server\n- idempotent   \n  (call as many times as you want, only one server will run)\n  - powered by [salvatore](https://github.com/nullvoxpopuli/salvatore)\n- automatically shuts down after inactivity  \n- CLI available for debugging\n\n## Installation\n\n```bash \npnpm add turbo-daemon\n\n```\n\nOr from git:\nIn your package.json:\n\n```js \n\"devDependencies\": {\n    \"turbo-daemon\": \"github:NullVoxPopuli/turbo-daemon\"\n}\n```\n\nTo test out a specific branch / tag:\n```js \n\"devDependencies\": {\n    \"turbo-daemon\": \"github:NullVoxPopuli/turbo-daemon#branch-name\"\n}\n```\n\n\n## Usage\n\nIn your tooling that wraps `turbo` commands,\nadd a function that determines what the turbo environment variables should be.\n\nFor example:\n```js\nimport { execa } from 'execa';\nimport { createDaemon, TURBO_TOKEN } from 'turbo-daemon';\nimport ci from 'ci-info';\n\nconst daemon = createDaemon();\nconst TURBO_TEAM = 'team_your_team_name_here';\n\nasync function getServer() {\n\tif (ci.isCI) {\n\t\treturn {\n\t\t\tTURBO_API: 'https://turborepo.your-domain-here.com',\n\t\t\tTURBO_TEAM,\n\t\t\tTURBO_TOKEN: process.env['TURBO_TOKEN'],\n\t\t}\n\t}\n\n    /**\n     * Environment variables from \n     * https://ducktors.github.io/turborepo-remote-cache/environment-variables.html\n     *\n     * These environment variables are required for the daemon to have \n     * access to remote storage.\n     * If these are omitted, turbo will still work, but fallback to local, in-repo cache.\n     */\n    Object.assign(process.env, {\n      TURBO_TEAM,\n      /* ... */\n    });\n\n\tawait daemon.ensureStarted();\n\treturn {\n\t\tTURBO_API: `http://localhost:${daemon.info.data.port}`,\n\t\tTURBO_TEAM,\n\t\tTURBO_TOKEN,\n\t}\n}\n\n/**\n * have your package.json scripts call this instead of turbo directly\n */\nexport async function wrappedTurbo(args) {\n\tconst connectionInfo = await getServer();\n\n\tawait execa(`pnpm`, [`turbo`, ...args], {\n\t\tenv: {\n\t\t\t...connectionInfo,\n\t\t}\n\t})\n}\n```\n\n### Increasing the allowed size of uploaded assets\n\nIn your local / ci env set the `BODY_LIMIT` environment variable.\nThe value is measured in bytes.\n\ne.g.:\n```bash\nBODY_LIMIT=1048576 # 1 MB (fastify default, 1024^2)\nBODY_LIMIT=536870912 # 512 MB (1024^2 * 512)\nBODY_LIMIT=1073741824 # 1 GB (1024^3)\n```\n\n## Debugging\n\nThis project stores files in `\u003cgit root\u003e/node_modules/.turbo-daemon/`\n\n### Start\n\n```bash \npnpm turbo-daemon start\n```\n\nor when working in this project:\n```bash\npnpm cli start\n```\n\n### Restart\n\n\n```bash \npnpm turbo-daemon restart\n```\n\nor when working in this project:\n```bash\npnpm cli restart\n```\n\n### Stop\n\n```bash \npnpm turbo-daemon stop\n```\n\nor when working in this project:\n```bash\npnpm cli stop\n```\n\n### Status \n\n```bash \npnpm turbo-daemon status\n```\n\nor when working in this project:\n```bash\npnpm cli status\n```\n\n\n### Logs\n\n```bash \npnpm turbo-daemon logs\n```\n\nor when working in this project:\n```bash\npnpm logs\n```\n\n### Watching for the pid file:\n\n```bash\nwatch -n 2 \"cat node_modules/.turbo-daemon/.turbo.pid\"\n```\n\n### Debugging why the daemon isn't starting from other tools\n\nin _this project_, run:\n```bash\nnode ./src/run-turbo.js\n```\nand observe the output, logs, and pidfile.\n\nIf that's fine, try the daemonized version:\n```bash\npnpm cli start\n```\n\n### Debugging what is in the turbo daemon folder\n\n```bash\nls -la node_modules/.turbo-daemon/**\n```\nThis may require\n```bash\nshopt -s globstar\n```\n\nand to watch for changes:\n```bash\nwatch -n 2 \"ls -la node_modules/.turbo-daemon/**\"\n```\n\n### Clearing local cache to test remote speed\n\n```bash\nfind . -name '.turbo' -type d -prune -exec rm -rf '{}' +\n```\n\n`.turbo` folders are in each package's `node_modules` directory.\n\n\n## Debugging S3 Access\n\n### Testing access to the cache bucket\n\nTo see if your local credentials have access to the s3 bucket, run:\n```bash\n❯ aws s3 ls $NAME_OF_BUCKET\n# output doesn't matter\n❯ echo $?\n0 # this is what you're looking for\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnullvoxpopuli%2Fturbo-daemon","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnullvoxpopuli%2Fturbo-daemon","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnullvoxpopuli%2Fturbo-daemon/lists"}