
Security News
Risky Biz Podcast: Making Reachability Analysis Work in Real-World Codebases
This episode explores the hard problem of reachability analysis, from static analysis limits to handling dynamic languages and massive dependency trees.
@americanairlines/simple-env
Advanced tools
An intuitive, strongly typed, and scalable way to retrieve environment variables
simple-env
An intuitive, strongly typed, and scalable way to retrieve environment variables.
# Via npm
npm install @americanairlines/simple-env
# Via Yarn
yarn add @americanairlines/simple-env
Create a file to manage your environment variables (either added via arguments or a .env
file loaded with dotenv
):
// src/env.ts
import setEnv from '@americanairlines/simple-env';
export const env = setEnv({
required: {
nodeEnv: 'NODE_ENV',
someRequiredSecret: 'SOME_REQUIRED_SECRET',
},
optional: {
anOptionalSecret: 'AN_OPTIONAL_SECRET',
},
});
Import env
(or whatever you named your export) from your configuration file:
// src/index.ts
import env from './env';
const someRequiredSecret = env.someRequiredSecret;
Env Var Type | State of Variable | Return Value/Behavior |
---|---|---|
optional | set | ✅ Associated value returned as string |
optional | unset | ✅ undefined returned |
required | set | ✅ Associated value returned as string |
required | unset | 💥 Runtime error |
N/A - Unknown | ??? | 💥 Compilation error |
⚠️ Retrieving an unset and
required
env variable at the root of a file will throw an error and the app will fail to start.
simple-env
?Autocomplete and Strongly Typed Keys are your new best friend! Using simple-env
makes it easier for devs to utilize environment variables via autocomplete and requiring defined keys prevents typos and makes refactoring incredibly simple.
Feature | simple-env | dotenv | env-var |
---|---|---|---|
Zero Dependencies | ✅ | ✅ | ✅ |
JS/TS Support | ✅ | ✅ | ✅ |
Required vs Optional Specification | ✅ | ❌ | ✅ |
Autocomplete | ✅ | ❌ | ❌ |
Strongly Typed Keys | ✅ | ❌ | ❌ |
Single Location Refactor | ✅ | ❌ | ❌ |
Return Type Helpers | 🔜 | ❌ | ✅ |
Loads .env | 🔜 | ✅ | ❌ |
Let's see how some of the features above look in code:
// fileA.ts
const secret = process.env.SECRET;
// fileB.ts
const secret = process.env.SECRE;
// 👆 Brittle, susceptible to typos, weak types, and painful to refactor 😓
const env = setEnv({
required: { secret: 'SOMETHING_SECRET' },
});
const secret = env.secret;
const secret = env.secre; // Property 'secre' does not exist on type '{ readonly secret: string; }'. Did you mean 'secret'? ts(2551)
// 👆 Compilation errors on typos, autocompletes as you type, and env var key can be modified without needing to refactor everywhere 👌
const env = setEnv({
required: { requiredSecret: 'SOME_REQUIRED_SECRET' },
optional: { optionalSecret: 'SOME_OPTIONAL_SECRET' },
});
env.requiredSecret.valueOf(); // No error
env.optionalSecret.valueOf(); // Object is possibly 'undefined'. ts(2532)
// 👆 Extremely strong typing - it knows what's required vs optional, which helps you catch bugs faster 🐞
setEnv
accepts multiple optional arguments:
// src/env.ts
import setEnv from '@americanairlines/simple-env';
export const env = setEnv({
required: {
nodeEnv: 'NODE_ENV',
someRequiredSecret: 'SOME_REQUIRED_SECRET',
},
});
You can choose to only include optional
env vars by passing in a single object:
// src/env.ts
import setEnv from '@americanairlines/simple-env';
export const env = setEnv({
optional: {
anOptionalSecret: 'AN_OPTIONAL_SECRET',
},
});
If you want to set your env vars in multiple groups, make sure to destructure the optional env vars properly.
// src/env.ts
import setEnv from '@americanairlines/simple-env';
setEnv({
required: {
nodeEnv: 'NODE_ENV',
someRequiredSecret: 'SOME_REQUIRED_SECRET',
},
});
export const env = setEnv({
optional: {
anOptionalSecret: 'AN_OPTIONAL_SECRET',
},
});
NOTE: if you choose to assign
optional
andrequired
env vars individually,setEnv
should only be done once for each or you will overwrite your previously defined values.
Interested in contributing to the project? Check out our Contributing Guidelines.
npm i
npm run dev
to compile and re-compile on changenpm link
npm link @americanairlines/simple-env
You can now use simple-env
functionality within your project. On changing/adding functionality, the @americanairlines/simple-env
package will update within your other project so you can test changes immediately.
FAQs
An intuitive, strongly typed, and scalable way to retrieve environment variables
The npm package @americanairlines/simple-env receives a total of 366 weekly downloads. As such, @americanairlines/simple-env popularity was classified as not popular.
We found that @americanairlines/simple-env demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
This episode explores the hard problem of reachability analysis, from static analysis limits to handling dynamic languages and massive dependency trees.
Security News
/Research
Malicious Nx npm versions stole secrets and wallet info using AI CLI tools; Socket’s AI scanner detected the supply chain attack and flagged the malware.
Security News
CISA’s 2025 draft SBOM guidance adds new fields like hashes, licenses, and tool metadata to make software inventories more actionable.