---
title: Handling platforms
description: Learn how to handle caching around operating systems, architectures, and other arbitrary conditions for Turborepo tasks.
product: turborepo
type: guide
summary: Account for OS, architecture, and Node.js version differences in your Turborepo cache hash.
prerequisites:
  - /docs/crafting-your-repository/caching
related:
  - /docs/guides/ci-vendors
---

# Handling platforms

Node.js versions [#nodejs-versions]

To account for Node.js versions, use [the engines key in package.json](https://docs.npmjs.com/cli/v10/configuring-npm/package-json#engines). Turborepo will account for changes to this field and miss cache accordingly.

Operating systems, architecture, and other arbitrary conditions [#operating-systems-architecture-and-other-arbitrary-conditions]

For advanced use cases, you may want the operating system (OS), architecture, or other external factors to contribute to your hash.

1. Write an arbitrary file to disk [#1-write-an-arbitrary-file-to-disk]

First, create a script that accounts for the hash contributors that you are interested in. For example, here is a Node.js script that identifies platform and architecture and writes those details to a file (`turbo-cache-key.json`):

```js title="./scripts/create-turbo-cache-key.js"
#!/usr/bin/env node

const { writeFileSync } = require("fs");
const { join } = require("path");

const { platform, arch } = process;
const file = "turbo-cache-key.json";
const str = JSON.stringify({ platform, arch });
console.log(`Generating cache key: ${str}`);
writeFileSync(file, str);
```

2. Add the file to your .gitignore [#2-add-the-file-to-your-gitignore]

You won't want to commit this file to source control since it's dependent on environment. Add it to your `.gitignore`:

```diff title=".gitignore"
+ turbo-cache-key.json
```

3. Add the file to the hash [#3-add-the-file-to-the-hash]

Now, make sure that `turbo` is aware of the file by adding it to task inputs. You can do this two ways:

* **For specific tasks**: Include the file in [the `inputs` array](/docs/reference/configuration#inputs) of the task(s):

```json title="./turbo.json"
{
  "tasks": {
    "build-for-platforms": {
      "dependsOn": ["^build"],
      "inputs": ["$TURBO_DEFAULT$", "turbo-cache-key.json"]
    }
  }
}
```

* **For all tasks**: Add the file to [`globalDependencies`](/docs/reference/configuration#globaldependencies)

```json title="./turbo.json"
{
  "globalDependencies": ["turbo-cache-key.json"],
  "tasks": {
    ...
  }
}
```

4. Generate the file before running turbo [#4-generate-the-file-before-running-turbo]

Last, you'll want to ensure that you run the script before running `turbo`. For example:

```json title="./package.json"
{
  "scripts": {
    "build-for-platforms": "node ./scripts/create-turbo-cache-key.js && turbo run build"
  }
}
```

`turbo run build` will now take into account the contents of `turbo-cache-key.json` when calculating the hash for the `build` task.

---

[View full sitemap](/sitemap.md)