envilder 0.9.1 → 0.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. package/README.md +195 -276
  2. package/ROADMAP.md +17 -13
  3. package/docs/CHANGELOG.md +258 -32
  4. package/lib/envilder/apps/cli/Cli.d.ts.map +1 -0
  5. package/lib/{apps → envilder/apps}/cli/Cli.js +5 -5
  6. package/lib/envilder/apps/cli/Cli.js.map +1 -0
  7. package/lib/envilder/apps/cli/Index.d.ts.map +1 -0
  8. package/lib/envilder/apps/cli/Index.js.map +1 -0
  9. package/lib/{apps → envilder/apps}/cli/Startup.d.ts +1 -1
  10. package/lib/envilder/apps/cli/Startup.d.ts.map +1 -0
  11. package/lib/envilder/apps/cli/Startup.js.map +1 -0
  12. package/lib/envilder/apps/gha/Gha.d.ts.map +1 -0
  13. package/lib/{apps → envilder/apps}/gha/Gha.js +4 -4
  14. package/lib/envilder/apps/gha/Gha.js.map +1 -0
  15. package/lib/envilder/apps/gha/Index.d.ts.map +1 -0
  16. package/lib/envilder/apps/gha/Index.js.map +1 -0
  17. package/lib/{apps → envilder/apps}/gha/Startup.d.ts +1 -1
  18. package/lib/envilder/apps/gha/Startup.d.ts.map +1 -0
  19. package/lib/envilder/apps/gha/Startup.js.map +1 -0
  20. package/lib/{apps → envilder/apps}/shared/ContainerConfiguration.d.ts +2 -2
  21. package/lib/envilder/apps/shared/ContainerConfiguration.d.ts.map +1 -0
  22. package/lib/{apps → envilder/apps}/shared/ContainerConfiguration.js +10 -10
  23. package/lib/envilder/apps/shared/ContainerConfiguration.js.map +1 -0
  24. package/lib/envilder/core/application/dispatch/DispatchActionCommand.d.ts.map +1 -0
  25. package/lib/envilder/core/application/dispatch/DispatchActionCommand.js.map +1 -0
  26. package/lib/envilder/core/application/dispatch/DispatchActionCommandHandler.d.ts.map +1 -0
  27. package/lib/envilder/core/application/dispatch/DispatchActionCommandHandler.js.map +1 -0
  28. package/lib/envilder/core/application/pullSecretsToEnv/PullSecretsToEnvCommand.d.ts.map +1 -0
  29. package/lib/envilder/core/application/pullSecretsToEnv/PullSecretsToEnvCommand.js.map +1 -0
  30. package/lib/envilder/core/application/pullSecretsToEnv/PullSecretsToEnvCommandHandler.d.ts.map +1 -0
  31. package/lib/envilder/core/application/pullSecretsToEnv/PullSecretsToEnvCommandHandler.js.map +1 -0
  32. package/lib/envilder/core/application/pushEnvToSecrets/PushEnvToSecretsCommand.d.ts.map +1 -0
  33. package/lib/envilder/core/application/pushEnvToSecrets/PushEnvToSecretsCommand.js.map +1 -0
  34. package/lib/envilder/core/application/pushEnvToSecrets/PushEnvToSecretsCommandHandler.d.ts.map +1 -0
  35. package/lib/envilder/core/application/pushEnvToSecrets/PushEnvToSecretsCommandHandler.js.map +1 -0
  36. package/lib/envilder/core/application/pushSingle/PushSingleCommand.d.ts.map +1 -0
  37. package/lib/envilder/core/application/pushSingle/PushSingleCommand.js.map +1 -0
  38. package/lib/envilder/core/application/pushSingle/PushSingleCommandHandler.d.ts.map +1 -0
  39. package/lib/envilder/core/application/pushSingle/PushSingleCommandHandler.js.map +1 -0
  40. package/lib/envilder/core/domain/CliOptions.d.ts.map +1 -0
  41. package/lib/envilder/core/domain/CliOptions.js.map +1 -0
  42. package/lib/envilder/core/domain/EnvironmentVariable.d.ts.map +1 -0
  43. package/lib/envilder/core/domain/EnvironmentVariable.js.map +1 -0
  44. package/lib/envilder/core/domain/MapFileConfig.d.ts.map +1 -0
  45. package/lib/envilder/core/domain/MapFileConfig.js.map +1 -0
  46. package/lib/envilder/core/domain/OperationMode.d.ts.map +1 -0
  47. package/lib/envilder/core/domain/OperationMode.js.map +1 -0
  48. package/lib/envilder/core/domain/errors/DomainErrors.d.ts.map +1 -0
  49. package/lib/envilder/core/domain/errors/DomainErrors.js.map +1 -0
  50. package/lib/envilder/core/domain/ports/ILogger.d.ts.map +1 -0
  51. package/lib/envilder/core/domain/ports/ILogger.js.map +1 -0
  52. package/lib/envilder/core/domain/ports/ISecretProvider.d.ts.map +1 -0
  53. package/lib/envilder/core/domain/ports/ISecretProvider.js.map +1 -0
  54. package/lib/envilder/core/domain/ports/IVariableStore.d.ts.map +1 -0
  55. package/lib/envilder/core/domain/ports/IVariableStore.js.map +1 -0
  56. package/lib/envilder/core/infrastructure/aws/AwsSecretProviderFactory.d.ts.map +1 -0
  57. package/lib/envilder/core/infrastructure/aws/AwsSecretProviderFactory.js.map +1 -0
  58. package/lib/envilder/core/infrastructure/aws/AwsSsmSecretProvider.d.ts.map +1 -0
  59. package/lib/envilder/core/infrastructure/aws/AwsSsmSecretProvider.js.map +1 -0
  60. package/lib/envilder/core/infrastructure/azure/AzureKeyVaultSecretProvider.d.ts.map +1 -0
  61. package/lib/envilder/core/infrastructure/azure/AzureKeyVaultSecretProvider.js.map +1 -0
  62. package/lib/envilder/core/infrastructure/azure/AzureSecretProviderFactory.d.ts.map +1 -0
  63. package/lib/envilder/core/infrastructure/azure/AzureSecretProviderFactory.js.map +1 -0
  64. package/lib/envilder/core/infrastructure/azure/AzureVaultUrlValidator.d.ts.map +1 -0
  65. package/lib/envilder/core/infrastructure/azure/AzureVaultUrlValidator.js.map +1 -0
  66. package/lib/envilder/core/infrastructure/logger/ConsoleLogger.d.ts.map +1 -0
  67. package/lib/envilder/core/infrastructure/logger/ConsoleLogger.js.map +1 -0
  68. package/lib/envilder/core/infrastructure/package/PackageVersionReader.d.ts.map +1 -0
  69. package/lib/envilder/core/infrastructure/package/PackageVersionReader.js.map +1 -0
  70. package/lib/envilder/core/infrastructure/variableStore/FileVariableStore.d.ts.map +1 -0
  71. package/lib/envilder/core/infrastructure/variableStore/FileVariableStore.js.map +1 -0
  72. package/lib/envilder/core/types.d.ts.map +1 -0
  73. package/lib/envilder/core/types.js.map +1 -0
  74. package/lib/iac/bin/main.js +1 -1
  75. package/lib/iac/bin/main.js.map +1 -1
  76. package/package.json +15 -8
  77. package/lib/apps/cli/Cli.d.ts.map +0 -1
  78. package/lib/apps/cli/Cli.js.map +0 -1
  79. package/lib/apps/cli/Index.d.ts.map +0 -1
  80. package/lib/apps/cli/Index.js.map +0 -1
  81. package/lib/apps/cli/Startup.d.ts.map +0 -1
  82. package/lib/apps/cli/Startup.js.map +0 -1
  83. package/lib/apps/gha/Gha.d.ts.map +0 -1
  84. package/lib/apps/gha/Gha.js.map +0 -1
  85. package/lib/apps/gha/Index.d.ts.map +0 -1
  86. package/lib/apps/gha/Index.js.map +0 -1
  87. package/lib/apps/gha/Startup.d.ts.map +0 -1
  88. package/lib/apps/gha/Startup.js.map +0 -1
  89. package/lib/apps/shared/ContainerConfiguration.d.ts.map +0 -1
  90. package/lib/apps/shared/ContainerConfiguration.js.map +0 -1
  91. package/lib/envilder/application/dispatch/DispatchActionCommand.d.ts.map +0 -1
  92. package/lib/envilder/application/dispatch/DispatchActionCommand.js.map +0 -1
  93. package/lib/envilder/application/dispatch/DispatchActionCommandHandler.d.ts.map +0 -1
  94. package/lib/envilder/application/dispatch/DispatchActionCommandHandler.js.map +0 -1
  95. package/lib/envilder/application/pullSecretsToEnv/PullSecretsToEnvCommand.d.ts.map +0 -1
  96. package/lib/envilder/application/pullSecretsToEnv/PullSecretsToEnvCommand.js.map +0 -1
  97. package/lib/envilder/application/pullSecretsToEnv/PullSecretsToEnvCommandHandler.d.ts.map +0 -1
  98. package/lib/envilder/application/pullSecretsToEnv/PullSecretsToEnvCommandHandler.js.map +0 -1
  99. package/lib/envilder/application/pushEnvToSecrets/PushEnvToSecretsCommand.d.ts.map +0 -1
  100. package/lib/envilder/application/pushEnvToSecrets/PushEnvToSecretsCommand.js.map +0 -1
  101. package/lib/envilder/application/pushEnvToSecrets/PushEnvToSecretsCommandHandler.d.ts.map +0 -1
  102. package/lib/envilder/application/pushEnvToSecrets/PushEnvToSecretsCommandHandler.js.map +0 -1
  103. package/lib/envilder/application/pushSingle/PushSingleCommand.d.ts.map +0 -1
  104. package/lib/envilder/application/pushSingle/PushSingleCommand.js.map +0 -1
  105. package/lib/envilder/application/pushSingle/PushSingleCommandHandler.d.ts.map +0 -1
  106. package/lib/envilder/application/pushSingle/PushSingleCommandHandler.js.map +0 -1
  107. package/lib/envilder/domain/CliOptions.d.ts.map +0 -1
  108. package/lib/envilder/domain/CliOptions.js.map +0 -1
  109. package/lib/envilder/domain/EnvironmentVariable.d.ts.map +0 -1
  110. package/lib/envilder/domain/EnvironmentVariable.js.map +0 -1
  111. package/lib/envilder/domain/MapFileConfig.d.ts.map +0 -1
  112. package/lib/envilder/domain/MapFileConfig.js.map +0 -1
  113. package/lib/envilder/domain/OperationMode.d.ts.map +0 -1
  114. package/lib/envilder/domain/OperationMode.js.map +0 -1
  115. package/lib/envilder/domain/errors/DomainErrors.d.ts.map +0 -1
  116. package/lib/envilder/domain/errors/DomainErrors.js.map +0 -1
  117. package/lib/envilder/domain/ports/ILogger.d.ts.map +0 -1
  118. package/lib/envilder/domain/ports/ILogger.js.map +0 -1
  119. package/lib/envilder/domain/ports/ISecretProvider.d.ts.map +0 -1
  120. package/lib/envilder/domain/ports/ISecretProvider.js.map +0 -1
  121. package/lib/envilder/domain/ports/IVariableStore.d.ts.map +0 -1
  122. package/lib/envilder/domain/ports/IVariableStore.js.map +0 -1
  123. package/lib/envilder/infrastructure/aws/AwsSecretProviderFactory.d.ts.map +0 -1
  124. package/lib/envilder/infrastructure/aws/AwsSecretProviderFactory.js.map +0 -1
  125. package/lib/envilder/infrastructure/aws/AwsSsmSecretProvider.d.ts.map +0 -1
  126. package/lib/envilder/infrastructure/aws/AwsSsmSecretProvider.js.map +0 -1
  127. package/lib/envilder/infrastructure/azure/AzureKeyVaultSecretProvider.d.ts.map +0 -1
  128. package/lib/envilder/infrastructure/azure/AzureKeyVaultSecretProvider.js.map +0 -1
  129. package/lib/envilder/infrastructure/azure/AzureSecretProviderFactory.d.ts.map +0 -1
  130. package/lib/envilder/infrastructure/azure/AzureSecretProviderFactory.js.map +0 -1
  131. package/lib/envilder/infrastructure/azure/AzureVaultUrlValidator.d.ts.map +0 -1
  132. package/lib/envilder/infrastructure/azure/AzureVaultUrlValidator.js.map +0 -1
  133. package/lib/envilder/infrastructure/logger/ConsoleLogger.d.ts.map +0 -1
  134. package/lib/envilder/infrastructure/logger/ConsoleLogger.js.map +0 -1
  135. package/lib/envilder/infrastructure/package/PackageVersionReader.d.ts.map +0 -1
  136. package/lib/envilder/infrastructure/package/PackageVersionReader.js.map +0 -1
  137. package/lib/envilder/infrastructure/variableStore/FileVariableStore.d.ts.map +0 -1
  138. package/lib/envilder/infrastructure/variableStore/FileVariableStore.js.map +0 -1
  139. package/lib/envilder/types.d.ts.map +0 -1
  140. package/lib/envilder/types.js.map +0 -1
  141. /package/lib/{apps → envilder/apps}/cli/Cli.d.ts +0 -0
  142. /package/lib/{apps → envilder/apps}/cli/Index.d.ts +0 -0
  143. /package/lib/{apps → envilder/apps}/cli/Index.js +0 -0
  144. /package/lib/{apps → envilder/apps}/cli/Startup.js +0 -0
  145. /package/lib/{apps → envilder/apps}/gha/Gha.d.ts +0 -0
  146. /package/lib/{apps → envilder/apps}/gha/Index.d.ts +0 -0
  147. /package/lib/{apps → envilder/apps}/gha/Index.js +0 -0
  148. /package/lib/{apps → envilder/apps}/gha/Startup.js +0 -0
  149. /package/lib/envilder/{application → core/application}/dispatch/DispatchActionCommand.d.ts +0 -0
  150. /package/lib/envilder/{application → core/application}/dispatch/DispatchActionCommand.js +0 -0
  151. /package/lib/envilder/{application → core/application}/dispatch/DispatchActionCommandHandler.d.ts +0 -0
  152. /package/lib/envilder/{application → core/application}/dispatch/DispatchActionCommandHandler.js +0 -0
  153. /package/lib/envilder/{application → core/application}/pullSecretsToEnv/PullSecretsToEnvCommand.d.ts +0 -0
  154. /package/lib/envilder/{application → core/application}/pullSecretsToEnv/PullSecretsToEnvCommand.js +0 -0
  155. /package/lib/envilder/{application → core/application}/pullSecretsToEnv/PullSecretsToEnvCommandHandler.d.ts +0 -0
  156. /package/lib/envilder/{application → core/application}/pullSecretsToEnv/PullSecretsToEnvCommandHandler.js +0 -0
  157. /package/lib/envilder/{application → core/application}/pushEnvToSecrets/PushEnvToSecretsCommand.d.ts +0 -0
  158. /package/lib/envilder/{application → core/application}/pushEnvToSecrets/PushEnvToSecretsCommand.js +0 -0
  159. /package/lib/envilder/{application → core/application}/pushEnvToSecrets/PushEnvToSecretsCommandHandler.d.ts +0 -0
  160. /package/lib/envilder/{application → core/application}/pushEnvToSecrets/PushEnvToSecretsCommandHandler.js +0 -0
  161. /package/lib/envilder/{application → core/application}/pushSingle/PushSingleCommand.d.ts +0 -0
  162. /package/lib/envilder/{application → core/application}/pushSingle/PushSingleCommand.js +0 -0
  163. /package/lib/envilder/{application → core/application}/pushSingle/PushSingleCommandHandler.d.ts +0 -0
  164. /package/lib/envilder/{application → core/application}/pushSingle/PushSingleCommandHandler.js +0 -0
  165. /package/lib/envilder/{domain → core/domain}/CliOptions.d.ts +0 -0
  166. /package/lib/envilder/{domain → core/domain}/CliOptions.js +0 -0
  167. /package/lib/envilder/{domain → core/domain}/EnvironmentVariable.d.ts +0 -0
  168. /package/lib/envilder/{domain → core/domain}/EnvironmentVariable.js +0 -0
  169. /package/lib/envilder/{domain → core/domain}/MapFileConfig.d.ts +0 -0
  170. /package/lib/envilder/{domain → core/domain}/MapFileConfig.js +0 -0
  171. /package/lib/envilder/{domain → core/domain}/OperationMode.d.ts +0 -0
  172. /package/lib/envilder/{domain → core/domain}/OperationMode.js +0 -0
  173. /package/lib/envilder/{domain → core/domain}/errors/DomainErrors.d.ts +0 -0
  174. /package/lib/envilder/{domain → core/domain}/errors/DomainErrors.js +0 -0
  175. /package/lib/envilder/{domain → core/domain}/ports/ILogger.d.ts +0 -0
  176. /package/lib/envilder/{domain → core/domain}/ports/ILogger.js +0 -0
  177. /package/lib/envilder/{domain → core/domain}/ports/ISecretProvider.d.ts +0 -0
  178. /package/lib/envilder/{domain → core/domain}/ports/ISecretProvider.js +0 -0
  179. /package/lib/envilder/{domain → core/domain}/ports/IVariableStore.d.ts +0 -0
  180. /package/lib/envilder/{domain → core/domain}/ports/IVariableStore.js +0 -0
  181. /package/lib/envilder/{infrastructure → core/infrastructure}/aws/AwsSecretProviderFactory.d.ts +0 -0
  182. /package/lib/envilder/{infrastructure → core/infrastructure}/aws/AwsSecretProviderFactory.js +0 -0
  183. /package/lib/envilder/{infrastructure → core/infrastructure}/aws/AwsSsmSecretProvider.d.ts +0 -0
  184. /package/lib/envilder/{infrastructure → core/infrastructure}/aws/AwsSsmSecretProvider.js +0 -0
  185. /package/lib/envilder/{infrastructure → core/infrastructure}/azure/AzureKeyVaultSecretProvider.d.ts +0 -0
  186. /package/lib/envilder/{infrastructure → core/infrastructure}/azure/AzureKeyVaultSecretProvider.js +0 -0
  187. /package/lib/envilder/{infrastructure → core/infrastructure}/azure/AzureSecretProviderFactory.d.ts +0 -0
  188. /package/lib/envilder/{infrastructure → core/infrastructure}/azure/AzureSecretProviderFactory.js +0 -0
  189. /package/lib/envilder/{infrastructure → core/infrastructure}/azure/AzureVaultUrlValidator.d.ts +0 -0
  190. /package/lib/envilder/{infrastructure → core/infrastructure}/azure/AzureVaultUrlValidator.js +0 -0
  191. /package/lib/envilder/{infrastructure → core/infrastructure}/logger/ConsoleLogger.d.ts +0 -0
  192. /package/lib/envilder/{infrastructure → core/infrastructure}/logger/ConsoleLogger.js +0 -0
  193. /package/lib/envilder/{infrastructure → core/infrastructure}/package/PackageVersionReader.d.ts +0 -0
  194. /package/lib/envilder/{infrastructure → core/infrastructure}/package/PackageVersionReader.js +0 -0
  195. /package/lib/envilder/{infrastructure → core/infrastructure}/variableStore/FileVariableStore.d.ts +0 -0
  196. /package/lib/envilder/{infrastructure → core/infrastructure}/variableStore/FileVariableStore.js +0 -0
  197. /package/lib/envilder/{types.d.ts → core/types.d.ts} +0 -0
  198. /package/lib/envilder/{types.js → core/types.js} +0 -0
package/README.md CHANGED
@@ -5,143 +5,114 @@
5
5
  </p>
6
6
 
7
7
  <p align="center">
8
- <b>Automate .env and secret management with Envilder</b><br>
9
- <span>Streamline your environment setup with AWS SSM Parameter Store or Azure Key Vault</span>
8
+ <b>One model. Your secrets. Every runtime.</b><br>
9
+ <span>Define secret mappings once. Resolve them consistently from AWS SSM or Azure Key Vault.</span>
10
10
  </p>
11
11
 
12
- ![CodeRabbit Pull Request Reviews](https://img.shields.io/coderabbit/prs/github/macalbert/envilder?utm_source=oss&utm_medium=github&utm_campaign=macalbert%2Fenvilder&labelColor=171717&color=FF570A&link=https%3A%2F%2Fcoderabbit.ai&label=CodeRabbit+Reviews)
13
-
14
12
  [![npm version](https://img.shields.io/npm/v/envilder.svg)](https://www.npmjs.com/package/envilder)
15
13
  [![npm downloads](https://img.shields.io/npm/dm/envilder.svg)](https://npmcharts.com/compare/envilder)
16
14
  [![CI Tests](https://github.com/macalbert/envilder/actions/workflows/tests.yml/badge.svg)](https://github.com/macalbert/envilder/actions/workflows/tests.yml)
17
- [![Coverage Report](https://img.shields.io/badge/coverage-report-green.svg)](https://macalbert.github.io/envilder/)
18
- [![Known Vulnerabilities](https://snyk.io/test/github/macalbert/envilder/badge.svg)](https://snyk.io/test/github/macalbert/envilder)
15
+ [![Overall Coverage](https://macalbert.github.io/envilder/badge_combined.svg)](https://macalbert.github.io/envilder/)
19
16
  [![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE)
20
17
 
21
- ## Why centralize environment variables?
18
+ ## Why Envilder?
19
+
20
+ Your new developer joins the team. They need environment variables to run the app locally.
21
+ What happens next? Someone sends API keys over Slack. Someone else digs up a wiki page
22
+ with outdated credentials. Forty-five minutes later, their `.env` file is "probably correct".
23
+
24
+ **Envilder fixes this in one command.**
22
25
 
23
- Envilder is a CLI tool for .env automation, cloud secrets management, and secure environment variable sync.
24
- Generating and maintaining consistent .env files is a real pain point for any development team. From outdated
25
- secrets to insecure practices, the risks are tangible. Envilder eliminates these pitfalls by centralizing and
26
- automating secret management across real-world environments (dev, test, production) in a simple, secure, and
27
- efficient way. Use Envilder to automate .env files, sync secrets with AWS SSM Parameter Store or Azure Key Vault,
28
- and streamline onboarding and CI/CD workflows.
26
+ You create a JSON mapping between variable names and cloud secret paths. Envilder resolves
27
+ them from AWS SSM or Azure Key Vault. The same mapping file works in local dev (CLI),
28
+ CI/CD (GitHub Action), and application startup (runtime SDKs).
29
+
30
+ ```bash
31
+ envilder --map=param-map.json --envfile=.env
32
+ ```
33
+
34
+ No SaaS middleman. No vendor lock-in. Secrets stay in your cloud.
29
35
 
30
36
  ---
31
37
 
32
- ## What Envilder solves
38
+ ## The problem
33
39
 
34
- - Desync between environments (dev, prod)
35
- - Secrets not properly propagated across team members
36
- - CI/CD pipeline failures due to outdated or missing .env files
37
- - Slow and manual onboarding processes
38
- - Security risks from sharing secrets via Slack, email, or other channels
39
- - Insecure .env practices and manual secret sharing
40
+ - **Onboarding takes hours, not seconds.** Every new developer needs someone to explain which
41
+ secrets go where. Keys get shared over Slack, pasted from wikis, or copied from a colleague's
42
+ machine. It's slow, error-prone, and insecure.
43
+ - **Every environment has its own workflow.** Local dev reads `.env` files. CI/CD uses vault
44
+ integrations. Production has its own method. Same app, three different secret workflows.
45
+ - **No single source of truth.** Without a versioned contract, dev/staging/production configs
46
+ drift apart. Deployments break. Nobody knows which config is correct.
40
47
 
41
- ## How Envilder makes life easier
48
+ ## How Envilder solves it
42
49
 
43
- - 🛡️ Centralizes secrets in AWS SSM Parameter Store or Azure Key Vault
44
- - ☁️ Multi-provider support choose `aws` or `azure` with the `--provider` flag
45
- - ⚙️ Generates .env files automatically for every environment
46
- - 🔄 Applies changes idempotently and instantly
47
- - 🔐 Improves security: no need to share secrets manually; everything is managed via your cloud provider
48
- - 👥 Simplifies onboarding and internal rotations
49
- - 🚀 Enables cloud-native, infrastructure-as-code secret management
50
- - 🤖 Perfect for DevOps, CI/CD, and team sync
50
+ - 📋 **One mapping file for everything.** A single `param-map.json` defines what secrets your app
51
+ needs. Git-versioned, PR-reviewable, the same across every environment.
52
+ - **Works everywhere your code runs.** CLI for local dev, GitHub Action for CI/CD, runtime SDKs
53
+ for application startup. Same file, same result.
54
+ - 🛡️ **Your cloud, zero infrastructure.** Secrets stay in AWS SSM or Azure Key Vault. No SaaS
55
+ proxy, no extra servers, no data to migrate.
51
56
 
52
57
  ---
53
58
 
54
- ## 📚 Table of Contents
55
-
56
- - [🗝️ Envilder ☁️](#️-envilder-️)
57
- - [Why centralize environment variables?](#why-centralize-environment-variables)
58
- - [❗ What Envilder solves](#-what-envilder-solves)
59
- - [✅ How Envilder makes life easier](#-how-envilder-makes-life-easier)
60
- - [📚 Table of Contents](#-table-of-contents)
61
- - [⚙️ Features](#️-features)
62
- - [🧱 Feature Status](#-feature-status)
63
- - [💾 Installation](#-installation)
64
- - [🤖 GitHub Action](#-github-action)
65
- - [🚀 Quick Start](#-quick-start)
66
- - [🎥 Video Demonstration](#-video-demonstration)
67
- - [🏁 Get Started (3 steps)](#-get-started-3-steps)
68
- - [AWS SSM (default)](#aws-ssm-default)
69
- - [Azure Key Vault](#azure-key-vault)
70
- - [📚 Quick Links](#-quick-links)
71
- - [🗺️ Mapping File Format](#️-mapping-file-format)
72
- - [Basic Format (AWS SSM — default)](#basic-format-aws-ssm--default)
73
- - [With `$config` (explicit provider)](#with-config-explicit-provider)
74
- - [`$config` Options](#config-options)
75
- - [Configuration Priority](#configuration-priority)
76
- - [🛠️ How it works](#️-how-it-works)
77
- - [Frequently Asked Questions (FAQ)](#frequently-asked-questions-faq)
78
- - [🔍 Envilder vs. Alternatives](#-envilder-vs-alternatives)
79
- - [Secrets sync tools (direct alternatives)](#secrets-sync-tools-direct-alternatives)
80
- - [Runtime \& credential tools (not direct alternatives)](#runtime--credential-tools-not-direct-alternatives)
81
- - [When to use what](#when-to-use-what)
82
- - [Why choose Envilder?](#why-choose-envilder)
83
- - [Where Envilder fits best](#where-envilder-fits-best)
84
- - [🏁 Roadmap](#-roadmap)
85
- - [🤝 Contributing](#-contributing)
86
- - [📜 License](#-license)
59
+ ## ⚙️ Features
60
+
61
+ | Feature | Description |
62
+ |---------|-------------|
63
+ | 📋 **Declarative Mapping** | One JSON file defines all secrets. Git-versioned, PR-reviewable, diff-able |
64
+ | ☁️ **Multi-Provider** | AWS SSM + Azure Key Vault. No vendor lock-in |
65
+ | 🔌 **Runtime SDKs** | Load secrets into memory at app startup: [.NET](./src/sdks/dotnet/README.md), [Python](./src/sdks/python/README.md). No `.env` on disk |
66
+ | ⚙️ **GitHub Action** | Pull secrets in CI/CD. Same mapping, zero manual config |
67
+ | 🔄 **Bidirectional Sync** | Pull secrets to `.env` or push values back to the cloud |
68
+ | 🧱 **Zero Infrastructure** | No servers, no proxies, no SaaS. Uses cloud services you already have |
87
69
 
88
70
  ---
89
71
 
90
- ## ⚙️ Features
72
+ ## 🚀 Quick Start
91
73
 
92
- - 🔒 **Strict access control** — IAM policies (AWS) or RBAC (Azure) define access to secrets across stages
93
- (dev, staging, prod)
94
- - 📊 **Auditable** — All reads/writes are logged in AWS CloudTrail or Azure Monitor
95
- - 🧩 **Single source of truth** — No more Notion, emails or copy/paste of envs
96
- - 🔁 **Idempotent sync** — Only what's in your map gets updated. Nothing else is touched
97
- - 🧱 **Zero infrastructure** — Fully based on native cloud services. No Lambdas, no servers, no fuss
74
+ ### 🎥 See it in action
98
75
 
99
- ### 🧱 Feature Status
76
+ Watch how easy it is to automate your .env management in less than 1 minute:
100
77
 
101
- - 🤖 **GitHub Action** — [Integrate directly in CI/CD workflows](./github-action/README.md)
102
- - 📤 **Push & Pull** — Bidirectional sync between local `.env` and your cloud provider
103
- - ☁️ **Multi-provider** — AWS SSM Parameter Store and Azure Key Vault
104
- - 🎯 **AWS Profile support** — Use `--profile` flag for multi-account setups
78
+ ![Watch the video](https://github.com/user-attachments/assets/9f194143-117d-49f3-a6fb-f400040ea514)
105
79
 
106
- ---
80
+ ### 🏁 Get Started (2 steps)
107
81
 
108
- ## 💾 Installation
82
+ **1. Create a mapping file** (`param-map.json`):
109
83
 
110
- 🛠 Requirements:
84
+ ```json
85
+ {
86
+ "DB_PASSWORD": "/my-app/db/password",
87
+ "API_KEY": "/my-app/api-key"
88
+ }
89
+ ```
111
90
 
112
- - Node.js **v20+** (cloud-native compatible)
113
- - **AWS provider**: AWS CLI installed and configured; IAM user/role with `ssm:GetParameter`, `ssm:PutParameter`
114
- - **Azure provider**: Azure CLI installed; vault URL configured via
115
- `$config.vaultUrl` in your map file or `--vault-url` flag
91
+ **2. Generate your `.env` file:**
116
92
 
117
93
  ```bash
118
- pnpm add -g envilder
94
+ npx envilder --map=param-map.json --envfile=.env
119
95
  ```
120
96
 
121
- Or use your preferred package manager:
97
+ That's it. Your secrets are pulled from AWS SSM and written to `.env`.
98
+ Add `.env` to `.gitignore`. The mapping file is versioned and reviewable in PRs.
99
+
100
+ > 💡 Using Azure Key Vault? Add a `$config` section to your mapping file.
101
+ > See [Mapping File Format](#️-mapping-file-format) below.
102
+
103
+ ### 💾 Installation
122
104
 
123
105
  ```bash
124
106
  npm install -g envilder
125
107
  ```
126
108
 
127
- > 💡 **Want to try without installing?** Run `npx envilder --help` to explore the CLI instantly.
128
- >
129
- > 💡 **New to AWS SSM?** AWS Systems Manager Parameter Store provides secure storage for configuration data and secrets:
109
+ > 💡 **No install needed?** `npx envilder` works out of the box.
130
110
  >
131
- > - [AWS SSM Parameter Store Overview](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html)
132
- > - [Setting up AWS CLI credentials](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)
133
- > - [IAM permissions for SSM](https://docs.aws.amazon.com/systems-manager/latest/userguide/setup-instance-profile.html)
134
- >
135
- > 💡 **New to Azure Key Vault?** Azure Key Vault safeguards cryptographic keys and secrets used by cloud apps:
136
- >
137
- > - [Azure Key Vault Overview](https://learn.microsoft.com/en-us/azure/key-vault/general/overview)
138
- > - [Setting up Azure CLI](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli)
139
- > - [Key Vault access policies](https://learn.microsoft.com/en-us/azure/key-vault/general/assign-access-policy)
111
+ > **Requirements:** Node.js v20+. AWS CLI or Azure CLI configured.
112
+ > See [full requirements](docs/requirements-installation.md).
140
113
 
141
114
  ### 🤖 GitHub Action
142
115
 
143
- Use Envilder directly in your CI/CD workflows with our official GitHub Action:
144
-
145
116
  **AWS SSM (default):**
146
117
 
147
118
  ```yaml
@@ -177,77 +148,11 @@ Use Envilder directly in your CI/CD workflows with our official GitHub Action:
177
148
  vault-url: ${{ secrets.AZURE_KEY_VAULT_URL }}
178
149
  ```
179
150
 
180
- 📖 **[View full GitHub Action documentation](./github-action/README.md)**
181
-
182
- ---
183
-
184
- ## 🚀 Quick Start
185
-
186
- ### 🎥 Video Demonstration
187
-
188
- Watch how easy it is to automate your .env management in less than 1 minute:
189
-
190
- ![Watch the video](https://github.com/user-attachments/assets/9f194143-117d-49f3-a6fb-f400040ea514)
191
-
192
- ### 🏁 Get Started (3 steps)
193
-
194
- After configuring your cloud provider credentials, you can begin managing your secrets.
195
-
196
- #### AWS SSM (default)
197
-
198
- 1. **Create a mapping file:**
199
-
200
- ```json
201
- {
202
- "DB_PASSWORD": "/my-app/db/password"
203
- }
204
- ```
205
-
206
- 2. **Push a secret to AWS SSM:**
207
-
208
- ```bash
209
- envilder --push --key=DB_PASSWORD --value=12345 --secret-path=/my-app/db/password
210
- ```
211
-
212
- 3. **Generate your .env file from AWS SSM:**
213
-
214
- ```bash
215
- envilder --map=param-map.json --envfile=.env
216
- ```
217
-
218
- #### Azure Key Vault
151
+ 📖 **[Full GitHub Action docs](./github-action/README.md)**
219
152
 
220
- 1. **Add `$config` to your mapping file:**
153
+ ### 📚 More resources
221
154
 
222
- ```json
223
- {
224
- "$config": {
225
- "provider": "azure",
226
- "vaultUrl": "https://my-vault.vault.azure.net"
227
- },
228
- "DB_PASSWORD": "my-app-db-password"
229
- }
230
- ```
231
-
232
- 2. **Pull secrets from Azure Key Vault:**
233
-
234
- ```bash
235
- envilder --map=param-map.json --envfile=.env
236
- ```
237
-
238
- Or use CLI flags to override:
239
-
240
- ```bash
241
- envilder --provider=azure --vault-url=https://my-vault.vault.azure.net --map=param-map.json --envfile=.env
242
- ```
243
-
244
- Your secrets are now managed and versioned from your cloud provider. Add `.env` to your `.gitignore` for security.
245
- Envilder is designed for automation, onboarding, and secure cloud-native workflows.
246
-
247
- ### 📚 Quick Links
248
-
249
- - [📖 Full Documentation](https://envilder.com) — Visit envilder.com for the complete guide
250
- - [Requirements & Installation](docs/requirements-installation.md)
155
+ - [📖 Full Documentation](https://envilder.com): the complete guide at envilder.com
251
156
  - [Push Command Guide](docs/push-command.md)
252
157
  - [Pull Command Guide](docs/pull-command.md)
253
158
 
@@ -255,10 +160,12 @@ Envilder is designed for automation, onboarding, and secure cloud-native workflo
255
160
 
256
161
  ## 🗺️ Mapping File Format
257
162
 
258
- The mapping file (`param-map.json`) is the core of Envilder. It maps environment variable names to secret paths
259
- in your cloud provider. You can optionally include a `$config` section to declare which provider and settings to use.
163
+ The mapping file (`param-map.json`) is the core of Envilder. It's the single model that defines
164
+ what secrets your app needs and where they live in your cloud provider. The same file is used by
165
+ the CLI, the GitHub Action, and the runtime SDKs. You can optionally include a `$config` section
166
+ to declare which provider and settings to use.
260
167
 
261
- ### Basic Format (AWS SSM default)
168
+ ### Basic Format (AWS SSM, default)
262
169
 
263
170
  When no `$config` is present, Envilder defaults to AWS SSM Parameter Store:
264
171
 
@@ -304,7 +211,7 @@ and uses all other keys as secret mappings:
304
211
  ```
305
212
 
306
213
  > **Azure naming:** Key Vault secret names only allow alphanumeric characters and hyphens.
307
- > Envilder automatically normalizes names slashes and underscores become hyphens
214
+ > Envilder automatically normalizes names: slashes and underscores become hyphens
308
215
  > (e.g., `/myapp/db/password` → `myapp-db-password`).
309
216
 
310
217
  ### `$config` Options
@@ -312,8 +219,8 @@ and uses all other keys as secret mappings:
312
219
  | Key | Type | Default | Description |
313
220
  | --- | --- | --- | --- |
314
221
  | `provider` | `"aws"` \| `"azure"` | `"aws"` | Cloud provider to use |
315
- | `vaultUrl` | `string` | | Azure Key Vault URL (required when `provider` is `"azure"`) |
316
- | `profile` | `string` | | AWS CLI profile for multi-account setups (AWS only) |
222
+ | `vaultUrl` | `string` | - | Azure Key Vault URL (required when `provider` is `"azure"`) |
223
+ | `profile` | `string` | - | AWS CLI profile for multi-account setups (AWS only) |
317
224
 
318
225
  ### Configuration Priority
319
226
 
@@ -335,152 +242,146 @@ envilder --provider=azure --vault-url=https://other-vault.vault.azure.net --map=
335
242
 
336
243
  ---
337
244
 
338
- ## 🛠️ How it works
339
-
340
- ```mermaid
341
- graph LR
342
- A["Mapping File (param-map.json)"] --> B[Envilder]:::core
343
- C["Environment File (.env or --key)"] --> B
344
- D["Cloud Credentials (AWS or Azure)"]:::cloud --> B
345
- E["AWS SSM / Azure Key Vault"]:::cloud --> B
346
- B --> F["Pull/Push Secrets"]
347
-
348
- classDef cloud fill:#ffcc66,color:#000000,stroke:#333,stroke-width:1.5px;
349
- classDef core fill:#1f3b57,color:#fff,stroke:#ccc,stroke-width:2px;
350
- ```
351
-
352
- 1. Define mappings in a JSON file: `{"DB_PASSWORD": "/myapp/db/password"}`
353
- 2. **Pull** secrets into a `.env` file: `envilder --map=param-map.json --envfile=.env`
354
- 3. **Push** local values back: `envilder --push --map=param-map.json --envfile=.env`
355
- 4. Envilder syncs secrets securely with AWS SSM or Azure Key Vault using your cloud credentials
356
- 5. Use `--provider=azure` to switch from the default AWS provider
357
- 6. Result: your secrets are always up-to-date, secure, and ready for any environment
245
+ ## 🧩 Runtime SDKs
358
246
 
359
- ---
247
+ Beyond the CLI and GitHub Action, Envilder provides **runtime SDKs** that resolve secrets
248
+ directly into your application's memory at startup. No `.env` file written to disk, no secrets
249
+ left behind. SDKs use the same map-file format as the CLI.
360
250
 
361
- ## Frequently Asked Questions (FAQ)
251
+ ### .NET SDK
362
252
 
363
- **Q: What is Envilder?**
364
- A: Envilder is a CLI tool for automating .env and secret management using AWS SSM Parameter Store or Azure Key Vault.
253
+ Install via NuGet:
365
254
 
366
- **Q: Which cloud providers are supported?**
367
- A: AWS SSM Parameter Store (default) and Azure Key Vault. Use `--provider=azure` to switch providers.
255
+ ```bash
256
+ dotnet add package Envilder
257
+ ```
368
258
 
369
- **Q: How does Envilder improve security?**
370
- A: Secrets are never stored in code or shared via chat/email. All secrets are managed and synced securely via your
371
- cloud provider.
259
+ Load secrets into `IConfiguration` or inject them into the process environment:
372
260
 
373
- **Q: Can I use Envilder in CI/CD pipelines?**
374
- A: Yes! Use the official [Envilder GitHub Action](./github-action/README.md) to pull secrets directly
375
- in your workflows no extra setup needed.
261
+ ```csharp
262
+ // Option A: integrate with IConfiguration
263
+ var mapFile = new MapFileParser().Parse(
264
+ File.ReadAllText("secrets-map.json"));
265
+ var provider = SecretProviderFactory.Create(mapFile.Config);
376
266
 
377
- **Q: Does Envilder support multiple AWS profiles?**
378
- A: Yes, you can use the `--profile` flag to select different AWS credentials.
267
+ var config = new ConfigurationBuilder()
268
+ .AddEnvilder("secrets-map.json", provider)
269
+ .Build();
379
270
 
380
- **Q: How do I configure Azure Key Vault?**
381
- A: Add a `$config` section to your map file with `"provider": "azure"` and `"vaultUrl": "https://my-vault.vault.azure.net"`,
382
- or use `--provider=azure --vault-url=https://my-vault.vault.azure.net` CLI flags. Authentication uses Azure
383
- Default Credentials (Azure CLI, managed identity, etc.).
271
+ var dbPassword = config["DB_PASSWORD"];
384
272
 
385
- **Q: What environments does Envilder support?**
386
- A: Any environment supported by your cloud provider—dev, test, staging, production, etc.
273
+ // Option B: resolve + inject into environment
274
+ var client = new EnvilderClient(provider);
275
+ var secrets = await client.ResolveSecretsAsync(mapFile);
276
+ EnvilderClient.InjectIntoEnvironment(secrets);
277
+ ```
387
278
 
388
- **Q: Is Envilder open source?**
389
- A: Yes, licensed under MIT.
279
+ 📖 **[Full .NET SDK docs](./src/sdks/dotnet/README.md)**
390
280
 
391
- ---
281
+ ### Python SDK
392
282
 
393
- ## 🔍 Envilder vs. Alternatives
283
+ Install via uv (recommended) or pip:
394
284
 
395
- Envilder is not a secrets manager. It is a **deterministic projection layer** from cloud secret
396
- stores into `.env` files. It does not store secrets, does not require a backend, and integrates
397
- cleanly into CI/CD pipelines.
285
+ ```bash
286
+ uv add envilder
287
+ # or
288
+ pip install envilder
289
+ ```
398
290
 
399
- To make a fair comparison, it's important to separate tools by what they actually do:
291
+ Load secrets into your application with a single line:
400
292
 
401
- ### Secrets sync tools (direct alternatives)
293
+ ```python
294
+ from envilder import Envilder
402
295
 
403
- These tools manage secrets as data and project them into `.env` or runtime:
296
+ # Resolve + inject into os.environ
297
+ Envilder.load('secrets-map.json')
298
+ ```
404
299
 
405
- | Feature | Envilder | dotenv-vault | infisical |
406
- |---------|----------|-------------|----------|
407
- | **Source of truth** | External (SSM / Key Vault) | dotenv vault (SaaS) | Infisical backend |
408
- | **Sync direction** | Bidirectional | Pull only | Bidirectional |
409
- | **Declarative mapping** | ✅ JSON mapping | ❌ | ❌ |
410
- | **Multi-provider (AWS + Azure)** | ✅ | ❌ | ⚠️ (primarily its own backend) |
411
- | **Local `.env` generation** | ✅ | ✅ | ✅ |
412
- | **CI/CD integration** | ✅ Native GitHub Action | Manual | ✅ Native |
413
- | **Requires SaaS** | ❌ | ✅ | Optional |
414
- | **Self-hosted** | N/A (no server needed) | ❌ | ✅ |
415
- | **Complexity** | Low | Low | Medium |
416
- | **Vendor lock-in** | Low | High | Medium |
417
- | **Open source** | ✅ MIT | Partial | ✅ |
300
+ Or route by environment, where each environment points to its own map file:
418
301
 
419
- ### Runtime & credential tools (not direct alternatives)
302
+ ```python
303
+ from envilder import Envilder
420
304
 
421
- These tools serve different purposes and are better seen as **complements**, not competitors:
305
+ Envilder.load('production', {
306
+ 'production': 'prod-secrets.json',
307
+ 'development': 'dev-secrets.json',
308
+ 'test': None, # no secrets loaded
309
+ })
310
+ ```
422
311
 
423
- | Tool | Purpose | Manages app secrets? | Works with `.env`? |
424
- |------|---------|---------------------|-------------------|
425
- | **chamber** | Injects SSM params at runtime (`exec` with env) | ❌ | ❌ |
426
- | **aws-vault** | Safely assumes AWS IAM roles / STS credentials | ❌ | ❌ |
312
+ 📖 **[Full Python SDK docs](./src/sdks/python/README.md)**
427
313
 
428
- ### When to use what
314
+ ---
429
315
 
430
- - **Need a full vault with its own backend?** → [Infisical](https://infisical.com)
431
- - **Need SaaS simplicity for `.env` sync?** → [dotenv-vault](https://www.dotenv.org/vault)
432
- - **Need a projection layer from existing cloud stores?** → **Envilder**
316
+ ## 🛠️ How it works
433
317
 
434
- ### Why choose Envilder?
318
+ ```mermaid
319
+ graph LR
320
+ A["Mapping Model (param-map.json)"] --> B[Envilder]:::core
321
+ B --> C["CLI → .env file"]
322
+ B --> D["GitHub Action → CI/CD"]
323
+ B --> E["SDK → app memory"]
324
+ F["AWS SSM / Azure Key Vault"]:::cloud --> B
435
325
 
436
- If you already use AWS SSM or Azure Key Vault and want a lightweight, zero-infrastructure CLI
437
- that generates `.env` files from a declarative JSON mapping — without a SaaS dependency or extra
438
- servers — Envilder is the simplest path.
326
+ classDef cloud fill:#ffcc66,color:#000000,stroke:#333,stroke-width:1.5px;
327
+ classDef core fill:#1f3b57,color:#fff,stroke:#ccc,stroke-width:2px;
328
+ ```
439
329
 
440
- Envilder also brings unique strengths in **determinism** and **testability**:
330
+ 1. **Define**: create a `param-map.json` mapping env var names to cloud secret paths
331
+ 2. **Resolve**: Envilder fetches each secret from your cloud vault
332
+ 3. **Deliver**: secrets arrive as a `.env` file (CLI/GHA) or in-memory (SDKs)
333
+ 4. **Push**: rotate or add secrets from your local environment back to the cloud
441
334
 
442
- - **Versioned mappings** — your `param-map.json` lives in source control, making secret
443
- projections reproducible across environments
444
- - **Mockable architecture** — hexagonal design with port interfaces makes offline testing
445
- and CI validation straightforward
446
- - **Audit trail** — all reads/writes are logged by your cloud provider
447
- (AWS CloudTrail / Azure Monitor), not by a third-party SaaS
335
+ ---
448
336
 
449
- ### Where Envilder fits best
337
+ ## 🔍 Envilder vs. Alternatives
450
338
 
451
- Envilder generates `.env` files on disk. This is ideal for:
339
+ Envilder is not a secrets manager. It is a **configuration resolution layer** that reads from your
340
+ existing cloud vault and delivers secrets where they're needed (`.env` file, CI/CD, app memory).
341
+ No SaaS backend. No extra servers.
452
342
 
453
- - **Local development** onboard new team members with a single command
454
- - **CI/CD pipelines** — inject secrets at build time without hardcoding them
455
- - **SSG/SSR builds** frameworks like Next.js, Nuxt, or Astro that read env vars at build time
343
+ | | Envilder | dotenvx | Infisical |
344
+ |-|----------|---------|-----------|
345
+ | **Source of truth** | Your cloud (SSM / Key Vault) | Encrypted `.env` in git | Infisical backend |
346
+ | **Declarative mapping** | ✅ JSON file | ❌ | ❌ |
347
+ | **Multi-cloud** | ✅ AWS + Azure | ❌ | ✅ |
348
+ | **Runtime SDKs** | ✅ .NET, Python | ✅ Node.js | ✅ 6+ languages |
349
+ | **Requires SaaS** | ❌ | ❌ | Optional |
350
+ | **Infrastructure** | None | None | Server required |
456
351
 
457
- For **production runtime**, container orchestrators (ECS, Kubernetes) and platform services
458
- (Vercel, Fly.io) can inject secrets directly as environment variables no `.env` file needed.
459
- In those cases, prefer native secret injection over writing secrets to disk.
352
+ > **When Envilder shines:** you already have secrets in AWS SSM or Azure Key Vault and want
353
+ > a versioned mapping file that resolves them everywhere: local dev, CI/CD, and app runtime.
354
+ > No data to migrate. No servers to deploy. No vendor to depend on.
460
355
 
461
- > **Coming soon:** An `--exec` mode is planned to inject secrets directly into a child process
462
- > without writing to disk (e.g., `envilder exec -- node server.js`). See the [Roadmap](./ROADMAP.md).
356
+ For detailed tool-by-tool comparison including
357
+ [chamber](https://github.com/segmentio/chamber) and
358
+ [aws-vault](https://github.com/99designs/aws-vault),
359
+ see [envilder.com](https://envilder.com).
463
360
 
464
361
  ---
465
362
 
466
- ## 🏁 Roadmap
363
+ ## 🏁 What's Next
467
364
 
468
- We're continuously improving Envilder based on community feedback. Upcoming features include:
365
+ Envilder already covers the full dev-to-production lifecycle with CLI, GitHub Action,
366
+ and runtime SDKs for .NET and Python. Here's what's coming:
469
367
 
470
- - **Azure Key Vault support** — now available alongside AWS SSM
471
- - � **Exec mode** — inject secrets into a child process without writing to disk
472
- - 🔍 **Check/sync mode** for drift detection
473
- - 🌐 **Documentation website** dedicated docs site with guides and examples
474
- - 🧠 **Auto-discovery** for bulk parameter fetching
475
- - 🔌 **More backends** (HashiCorp Vault, GCP Secret Manager, etc.)
368
+ | Status | Feature |
369
+ |--------|---------|
370
+ | | Pull & Push: bidirectional sync between `.env` and cloud vault |
371
+ | | Multi-provider: AWS SSM + Azure Key Vault |
372
+ | | GitHub Action for CI/CD |
373
+ | | .NET SDK and Python SDK |
374
+ | 🚧 | TypeScript, Go, and Java SDKs |
375
+ | 🚧 | GCP Secret Manager |
376
+ | 🚧 | Exec mode (inject secrets without writing to disk) |
476
377
 
477
- 👉 **[View full roadmap with priorities](./ROADMAP.md)**
378
+ 👉 **[Full roadmap with priorities](./ROADMAP.md)**
478
379
 
479
380
  ---
480
381
 
481
382
  ## 🤝 Contributing
482
383
 
483
- All help is welcome PRs, issues, ideas!
384
+ All help is welcome! PRs, issues, ideas.
484
385
 
485
386
  - 🔧 Use our [Pull Request Template](.github/pull_request_template.md)
486
387
  - 🧪 Add tests where possible
@@ -490,6 +391,24 @@ All help is welcome — PRs, issues, ideas!
490
391
 
491
392
  ---
492
393
 
394
+ ## 💜 Sponsors
395
+
396
+ <p align="center">
397
+ <a href="https://localstack.cloud" target="_blank" rel="noopener noreferrer">
398
+ <picture>
399
+ <source media="(prefers-color-scheme: dark)" srcset="./src/website/public/localstack-logo-horizontal-Light.svg">
400
+ <source media="(prefers-color-scheme: light)" srcset="./src/website/public/localstack-logo-horizontal-Dark.svg">
401
+ <img src="./src/website/public/localstack-logo-horizontal-Dark.svg" alt="LocalStack" height="40">
402
+ </picture>
403
+ </a>
404
+ </p>
405
+
406
+ <p align="center">
407
+ Supported by <a href="https://localstack.cloud">LocalStack</a>.
408
+ </p>
409
+
410
+ ---
411
+
493
412
  ## 📜 License
494
413
 
495
414
  MIT © [Marçal Albert](https://github.com/macalbert)