# Secret works in EAS builds but is wrong locally (401 in dev only)

> Expo's .env loader expands $name inside values as variable references, so a secret containing $ loses characters locally.

Web page: https://davidewins.com/errors/expo-env-dollar-sign-expanded

Expo. Confirmed fix, 13 September 2026.

Versions: @expo/env (dotenv-expand)

There is no error message for this one, only the symptom in the title.

## Cause

Expo's .env loader expands `$name` inside values as variable references, so a secret containing `$` loses characters locally. EAS-hosted env vars are not expanded, so production gets the right value.

## Fix

Escape it as `\$` in .env. Check what Expo actually loads:
```bash
node -e "require('@expo/env').load('.',{force:true,silent:true});console.log(process.env.MY_VAR.length)"
```
Then restart Metro with `--clear`.

## More Expo errors

- [Dev client red screen: No script URL provided (launcher never appears)](https://davidewins.com/errors/expo-dev-client-no-script-url-precompiled)
- [Bundle fails with Invalid expression encountered after supabase-js update](https://davidewins.com/errors/supabase-js-hermes-invalid-expression)
- [After upgrading to SDK 57, expo-font / expo-image / expo-asset config is missing](https://davidewins.com/errors/expo-sdk57-plugins-must-be-declared)
- [SDK upgrade: export dies with SyntaxError after expo install --fix](https://davidewins.com/errors/expo-install-fix-leaves-babel-preset-stale)
- [expo-doctor wants TypeScript 6 but tsc reports hundreds of errors](https://davidewins.com/errors/typescript-6-explodes-typecheck-expo)

[Search all errors](https://davidewins.com/errors)
