{"record":{"id":"94241ef06af9cec4","repo":"vercel/turborepo","slug":"no-caches-are-enabled","errorCode":null,"errorMessage":"no caches are enabled","messagePattern":"no caches are enabled","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"crates/turborepo-cache/src/multiplexer.rs","lineNumber":49,"sourceCode":"\nimpl CacheMultiplexer {\n    #[tracing::instrument(skip_all)]\n    pub fn new(\n        opts: &CacheOpts,\n        repo_root: &AbsoluteSystemPath,\n        api_client: Option<APIClient>,\n        api_auth: Option<APIAuth>,\n        analytics_recorder: Option<AnalyticsSender>,\n        scm_state: LazyScmState,\n    ) -> Result<Self, CacheError> {\n        let use_fs_cache = opts.cache.local.should_use();\n        let use_http_cache = opts.cache.remote.should_use();\n\n        // Since the above two flags are not mutually exclusive it is possible to\n        // configure yourself out of having a cache. We should tell you about it\n        // but we shouldn't fail your build for that reason.\n        if !use_fs_cache && !use_http_cache {\n            turborepo_log::warn(\n                turborepo_log::Source::turbo(turborepo_log::Subsystem::Cache),\n                \"no caches are enabled\",\n            )\n            .emit();\n        }\n\n        debug!(\n            \"CacheMultiplexer::new creating FSCache with cache_dir={}, repo_root={}\",\n            opts.cache_dir, repo_root\n        );\n        let fs_cache = use_fs_cache\n            .then(|| {\n                FSCache::new(\n                    &opts.cache_dir,\n                    repo_root,\n                    analytics_recorder.clone(),\n                    scm_state.clone(),\n                )","sourceCodeStart":31,"sourceCodeEnd":67,"githubUrl":"https://github.com/vercel/turborepo/blob/f9245100cf0d31d96628804ead485f6bf226e55a/crates/turborepo-cache/src/multiplexer.rs#L31-L67","documentation":"CacheMultiplexer::new (crates/turborepo-cache/src/multiplexer.rs:43-55) computes should_use() for both the local filesystem cache and the remote HTTP cache. The flags are not mutually exclusive, so you can disable both; since a cache-less build still works (just slower), turbo warns instead of failing: 'no caches are enabled'.","triggerScenarios":"Passing --remote-only (implies local cache off) while the remote cache is unavailable/unconfigured (not linked, no TURBO_TOKEN/TURBO_TEAM), or combining cache config that disables both sides: --no-cache, remoteCache settings, or TURBO_REMOTE_CACHE_ENABLED=0 with local caching disabled.","commonSituations":"CI pipelines copying a `--remote-only` flag from another project without linking this one; TURBO_TOKEN/TURBO_TEAM env vars missing in a fork's CI; or explicit cache config in turbo.json disabling both layers. Every task runs cold, so builds are slow despite no errors.","solutions":["If you intended remote-only caching, link and authenticate: `turbo login` + `turbo link`, or set TURBO_TOKEN and TURBO_TEAM.","Drop `--remote-only` so the local filesystem cache is used.","Audit flags/config: check for --no-cache, cache settings in turbo.json, and TURBO_REMOTE_CACHE_ENABLED in the environment.","Confirm the warning disappears and cache behavior by watching the cache status line in run output."],"exampleFix":"# before: remote-only without credentials -> local off, remote off\nexport TURBO_TEAM=my-team   # token missing/unlinked\nturbo run build --remote-only   # -> no caches are enabled\n\n# after: authenticate, or re-enable local caching\nexport TURBO_TOKEN=xxxx TURBO_TEAM=my-team\nturbo run build --remote-only   # remote cache enabled","handlingStrategy":"validation","validationCode":"#!/usr/bin/env bash\n# fail fast in CI when caching is silently off\nif [[ \"$*\" == *--remote-only* ]]; then\n  : \"${TURBO_TOKEN:?--remote-only set but TURBO_TOKEN missing — no cache would be enabled}\"\n  : \"${TURBO_TEAM:?--remote-only set but TURBO_TEAM missing}\"\nfi\nturbo run build \"$@\"","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Add a CI guard that rejects --remote-only runs without TURBO_TOKEN/TURBO_TEAM present.","After config changes, grep run output for 'no caches are enabled' and fail the job if found.","Understand the matrix: --no-cache, --remote-only, remoteCache config, and TURBO_REMOTE_CACHE_ENABLED each disable a side; keep at least one enabled."],"tags":["turborepo","cache","configuration","remote-cache","local-cache"],"backgroundTag":"cache-disabled-by-config","analyzedSha":"f9245100cf0d31d96628804ead485f6bf226e55a","analyzedAt":"2026-08-17T10:46:15.696Z","schemaVersion":2},"datasetVersion":"2026-08-21T11:28:35.574Z"}