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.
- package/README.md +195 -276
- package/ROADMAP.md +17 -13
- package/docs/CHANGELOG.md +258 -32
- package/lib/envilder/apps/cli/Cli.d.ts.map +1 -0
- package/lib/{apps → envilder/apps}/cli/Cli.js +5 -5
- package/lib/envilder/apps/cli/Cli.js.map +1 -0
- package/lib/envilder/apps/cli/Index.d.ts.map +1 -0
- package/lib/envilder/apps/cli/Index.js.map +1 -0
- package/lib/{apps → envilder/apps}/cli/Startup.d.ts +1 -1
- package/lib/envilder/apps/cli/Startup.d.ts.map +1 -0
- package/lib/envilder/apps/cli/Startup.js.map +1 -0
- package/lib/envilder/apps/gha/Gha.d.ts.map +1 -0
- package/lib/{apps → envilder/apps}/gha/Gha.js +4 -4
- package/lib/envilder/apps/gha/Gha.js.map +1 -0
- package/lib/envilder/apps/gha/Index.d.ts.map +1 -0
- package/lib/envilder/apps/gha/Index.js.map +1 -0
- package/lib/{apps → envilder/apps}/gha/Startup.d.ts +1 -1
- package/lib/envilder/apps/gha/Startup.d.ts.map +1 -0
- package/lib/envilder/apps/gha/Startup.js.map +1 -0
- package/lib/{apps → envilder/apps}/shared/ContainerConfiguration.d.ts +2 -2
- package/lib/envilder/apps/shared/ContainerConfiguration.d.ts.map +1 -0
- package/lib/{apps → envilder/apps}/shared/ContainerConfiguration.js +10 -10
- package/lib/envilder/apps/shared/ContainerConfiguration.js.map +1 -0
- package/lib/envilder/core/application/dispatch/DispatchActionCommand.d.ts.map +1 -0
- package/lib/envilder/core/application/dispatch/DispatchActionCommand.js.map +1 -0
- package/lib/envilder/core/application/dispatch/DispatchActionCommandHandler.d.ts.map +1 -0
- package/lib/envilder/core/application/dispatch/DispatchActionCommandHandler.js.map +1 -0
- package/lib/envilder/core/application/pullSecretsToEnv/PullSecretsToEnvCommand.d.ts.map +1 -0
- package/lib/envilder/core/application/pullSecretsToEnv/PullSecretsToEnvCommand.js.map +1 -0
- package/lib/envilder/core/application/pullSecretsToEnv/PullSecretsToEnvCommandHandler.d.ts.map +1 -0
- package/lib/envilder/core/application/pullSecretsToEnv/PullSecretsToEnvCommandHandler.js.map +1 -0
- package/lib/envilder/core/application/pushEnvToSecrets/PushEnvToSecretsCommand.d.ts.map +1 -0
- package/lib/envilder/core/application/pushEnvToSecrets/PushEnvToSecretsCommand.js.map +1 -0
- package/lib/envilder/core/application/pushEnvToSecrets/PushEnvToSecretsCommandHandler.d.ts.map +1 -0
- package/lib/envilder/core/application/pushEnvToSecrets/PushEnvToSecretsCommandHandler.js.map +1 -0
- package/lib/envilder/core/application/pushSingle/PushSingleCommand.d.ts.map +1 -0
- package/lib/envilder/core/application/pushSingle/PushSingleCommand.js.map +1 -0
- package/lib/envilder/core/application/pushSingle/PushSingleCommandHandler.d.ts.map +1 -0
- package/lib/envilder/core/application/pushSingle/PushSingleCommandHandler.js.map +1 -0
- package/lib/envilder/core/domain/CliOptions.d.ts.map +1 -0
- package/lib/envilder/core/domain/CliOptions.js.map +1 -0
- package/lib/envilder/core/domain/EnvironmentVariable.d.ts.map +1 -0
- package/lib/envilder/core/domain/EnvironmentVariable.js.map +1 -0
- package/lib/envilder/core/domain/MapFileConfig.d.ts.map +1 -0
- package/lib/envilder/core/domain/MapFileConfig.js.map +1 -0
- package/lib/envilder/core/domain/OperationMode.d.ts.map +1 -0
- package/lib/envilder/core/domain/OperationMode.js.map +1 -0
- package/lib/envilder/core/domain/errors/DomainErrors.d.ts.map +1 -0
- package/lib/envilder/core/domain/errors/DomainErrors.js.map +1 -0
- package/lib/envilder/core/domain/ports/ILogger.d.ts.map +1 -0
- package/lib/envilder/core/domain/ports/ILogger.js.map +1 -0
- package/lib/envilder/core/domain/ports/ISecretProvider.d.ts.map +1 -0
- package/lib/envilder/core/domain/ports/ISecretProvider.js.map +1 -0
- package/lib/envilder/core/domain/ports/IVariableStore.d.ts.map +1 -0
- package/lib/envilder/core/domain/ports/IVariableStore.js.map +1 -0
- package/lib/envilder/core/infrastructure/aws/AwsSecretProviderFactory.d.ts.map +1 -0
- package/lib/envilder/core/infrastructure/aws/AwsSecretProviderFactory.js.map +1 -0
- package/lib/envilder/core/infrastructure/aws/AwsSsmSecretProvider.d.ts.map +1 -0
- package/lib/envilder/core/infrastructure/aws/AwsSsmSecretProvider.js.map +1 -0
- package/lib/envilder/core/infrastructure/azure/AzureKeyVaultSecretProvider.d.ts.map +1 -0
- package/lib/envilder/core/infrastructure/azure/AzureKeyVaultSecretProvider.js.map +1 -0
- package/lib/envilder/core/infrastructure/azure/AzureSecretProviderFactory.d.ts.map +1 -0
- package/lib/envilder/core/infrastructure/azure/AzureSecretProviderFactory.js.map +1 -0
- package/lib/envilder/core/infrastructure/azure/AzureVaultUrlValidator.d.ts.map +1 -0
- package/lib/envilder/core/infrastructure/azure/AzureVaultUrlValidator.js.map +1 -0
- package/lib/envilder/core/infrastructure/logger/ConsoleLogger.d.ts.map +1 -0
- package/lib/envilder/core/infrastructure/logger/ConsoleLogger.js.map +1 -0
- package/lib/envilder/core/infrastructure/package/PackageVersionReader.d.ts.map +1 -0
- package/lib/envilder/core/infrastructure/package/PackageVersionReader.js.map +1 -0
- package/lib/envilder/core/infrastructure/variableStore/FileVariableStore.d.ts.map +1 -0
- package/lib/envilder/core/infrastructure/variableStore/FileVariableStore.js.map +1 -0
- package/lib/envilder/core/types.d.ts.map +1 -0
- package/lib/envilder/core/types.js.map +1 -0
- package/lib/iac/bin/main.js +1 -1
- package/lib/iac/bin/main.js.map +1 -1
- package/package.json +15 -8
- package/lib/apps/cli/Cli.d.ts.map +0 -1
- package/lib/apps/cli/Cli.js.map +0 -1
- package/lib/apps/cli/Index.d.ts.map +0 -1
- package/lib/apps/cli/Index.js.map +0 -1
- package/lib/apps/cli/Startup.d.ts.map +0 -1
- package/lib/apps/cli/Startup.js.map +0 -1
- package/lib/apps/gha/Gha.d.ts.map +0 -1
- package/lib/apps/gha/Gha.js.map +0 -1
- package/lib/apps/gha/Index.d.ts.map +0 -1
- package/lib/apps/gha/Index.js.map +0 -1
- package/lib/apps/gha/Startup.d.ts.map +0 -1
- package/lib/apps/gha/Startup.js.map +0 -1
- package/lib/apps/shared/ContainerConfiguration.d.ts.map +0 -1
- package/lib/apps/shared/ContainerConfiguration.js.map +0 -1
- package/lib/envilder/application/dispatch/DispatchActionCommand.d.ts.map +0 -1
- package/lib/envilder/application/dispatch/DispatchActionCommand.js.map +0 -1
- package/lib/envilder/application/dispatch/DispatchActionCommandHandler.d.ts.map +0 -1
- package/lib/envilder/application/dispatch/DispatchActionCommandHandler.js.map +0 -1
- package/lib/envilder/application/pullSecretsToEnv/PullSecretsToEnvCommand.d.ts.map +0 -1
- package/lib/envilder/application/pullSecretsToEnv/PullSecretsToEnvCommand.js.map +0 -1
- package/lib/envilder/application/pullSecretsToEnv/PullSecretsToEnvCommandHandler.d.ts.map +0 -1
- package/lib/envilder/application/pullSecretsToEnv/PullSecretsToEnvCommandHandler.js.map +0 -1
- package/lib/envilder/application/pushEnvToSecrets/PushEnvToSecretsCommand.d.ts.map +0 -1
- package/lib/envilder/application/pushEnvToSecrets/PushEnvToSecretsCommand.js.map +0 -1
- package/lib/envilder/application/pushEnvToSecrets/PushEnvToSecretsCommandHandler.d.ts.map +0 -1
- package/lib/envilder/application/pushEnvToSecrets/PushEnvToSecretsCommandHandler.js.map +0 -1
- package/lib/envilder/application/pushSingle/PushSingleCommand.d.ts.map +0 -1
- package/lib/envilder/application/pushSingle/PushSingleCommand.js.map +0 -1
- package/lib/envilder/application/pushSingle/PushSingleCommandHandler.d.ts.map +0 -1
- package/lib/envilder/application/pushSingle/PushSingleCommandHandler.js.map +0 -1
- package/lib/envilder/domain/CliOptions.d.ts.map +0 -1
- package/lib/envilder/domain/CliOptions.js.map +0 -1
- package/lib/envilder/domain/EnvironmentVariable.d.ts.map +0 -1
- package/lib/envilder/domain/EnvironmentVariable.js.map +0 -1
- package/lib/envilder/domain/MapFileConfig.d.ts.map +0 -1
- package/lib/envilder/domain/MapFileConfig.js.map +0 -1
- package/lib/envilder/domain/OperationMode.d.ts.map +0 -1
- package/lib/envilder/domain/OperationMode.js.map +0 -1
- package/lib/envilder/domain/errors/DomainErrors.d.ts.map +0 -1
- package/lib/envilder/domain/errors/DomainErrors.js.map +0 -1
- package/lib/envilder/domain/ports/ILogger.d.ts.map +0 -1
- package/lib/envilder/domain/ports/ILogger.js.map +0 -1
- package/lib/envilder/domain/ports/ISecretProvider.d.ts.map +0 -1
- package/lib/envilder/domain/ports/ISecretProvider.js.map +0 -1
- package/lib/envilder/domain/ports/IVariableStore.d.ts.map +0 -1
- package/lib/envilder/domain/ports/IVariableStore.js.map +0 -1
- package/lib/envilder/infrastructure/aws/AwsSecretProviderFactory.d.ts.map +0 -1
- package/lib/envilder/infrastructure/aws/AwsSecretProviderFactory.js.map +0 -1
- package/lib/envilder/infrastructure/aws/AwsSsmSecretProvider.d.ts.map +0 -1
- package/lib/envilder/infrastructure/aws/AwsSsmSecretProvider.js.map +0 -1
- package/lib/envilder/infrastructure/azure/AzureKeyVaultSecretProvider.d.ts.map +0 -1
- package/lib/envilder/infrastructure/azure/AzureKeyVaultSecretProvider.js.map +0 -1
- package/lib/envilder/infrastructure/azure/AzureSecretProviderFactory.d.ts.map +0 -1
- package/lib/envilder/infrastructure/azure/AzureSecretProviderFactory.js.map +0 -1
- package/lib/envilder/infrastructure/azure/AzureVaultUrlValidator.d.ts.map +0 -1
- package/lib/envilder/infrastructure/azure/AzureVaultUrlValidator.js.map +0 -1
- package/lib/envilder/infrastructure/logger/ConsoleLogger.d.ts.map +0 -1
- package/lib/envilder/infrastructure/logger/ConsoleLogger.js.map +0 -1
- package/lib/envilder/infrastructure/package/PackageVersionReader.d.ts.map +0 -1
- package/lib/envilder/infrastructure/package/PackageVersionReader.js.map +0 -1
- package/lib/envilder/infrastructure/variableStore/FileVariableStore.d.ts.map +0 -1
- package/lib/envilder/infrastructure/variableStore/FileVariableStore.js.map +0 -1
- package/lib/envilder/types.d.ts.map +0 -1
- package/lib/envilder/types.js.map +0 -1
- /package/lib/{apps → envilder/apps}/cli/Cli.d.ts +0 -0
- /package/lib/{apps → envilder/apps}/cli/Index.d.ts +0 -0
- /package/lib/{apps → envilder/apps}/cli/Index.js +0 -0
- /package/lib/{apps → envilder/apps}/cli/Startup.js +0 -0
- /package/lib/{apps → envilder/apps}/gha/Gha.d.ts +0 -0
- /package/lib/{apps → envilder/apps}/gha/Index.d.ts +0 -0
- /package/lib/{apps → envilder/apps}/gha/Index.js +0 -0
- /package/lib/{apps → envilder/apps}/gha/Startup.js +0 -0
- /package/lib/envilder/{application → core/application}/dispatch/DispatchActionCommand.d.ts +0 -0
- /package/lib/envilder/{application → core/application}/dispatch/DispatchActionCommand.js +0 -0
- /package/lib/envilder/{application → core/application}/dispatch/DispatchActionCommandHandler.d.ts +0 -0
- /package/lib/envilder/{application → core/application}/dispatch/DispatchActionCommandHandler.js +0 -0
- /package/lib/envilder/{application → core/application}/pullSecretsToEnv/PullSecretsToEnvCommand.d.ts +0 -0
- /package/lib/envilder/{application → core/application}/pullSecretsToEnv/PullSecretsToEnvCommand.js +0 -0
- /package/lib/envilder/{application → core/application}/pullSecretsToEnv/PullSecretsToEnvCommandHandler.d.ts +0 -0
- /package/lib/envilder/{application → core/application}/pullSecretsToEnv/PullSecretsToEnvCommandHandler.js +0 -0
- /package/lib/envilder/{application → core/application}/pushEnvToSecrets/PushEnvToSecretsCommand.d.ts +0 -0
- /package/lib/envilder/{application → core/application}/pushEnvToSecrets/PushEnvToSecretsCommand.js +0 -0
- /package/lib/envilder/{application → core/application}/pushEnvToSecrets/PushEnvToSecretsCommandHandler.d.ts +0 -0
- /package/lib/envilder/{application → core/application}/pushEnvToSecrets/PushEnvToSecretsCommandHandler.js +0 -0
- /package/lib/envilder/{application → core/application}/pushSingle/PushSingleCommand.d.ts +0 -0
- /package/lib/envilder/{application → core/application}/pushSingle/PushSingleCommand.js +0 -0
- /package/lib/envilder/{application → core/application}/pushSingle/PushSingleCommandHandler.d.ts +0 -0
- /package/lib/envilder/{application → core/application}/pushSingle/PushSingleCommandHandler.js +0 -0
- /package/lib/envilder/{domain → core/domain}/CliOptions.d.ts +0 -0
- /package/lib/envilder/{domain → core/domain}/CliOptions.js +0 -0
- /package/lib/envilder/{domain → core/domain}/EnvironmentVariable.d.ts +0 -0
- /package/lib/envilder/{domain → core/domain}/EnvironmentVariable.js +0 -0
- /package/lib/envilder/{domain → core/domain}/MapFileConfig.d.ts +0 -0
- /package/lib/envilder/{domain → core/domain}/MapFileConfig.js +0 -0
- /package/lib/envilder/{domain → core/domain}/OperationMode.d.ts +0 -0
- /package/lib/envilder/{domain → core/domain}/OperationMode.js +0 -0
- /package/lib/envilder/{domain → core/domain}/errors/DomainErrors.d.ts +0 -0
- /package/lib/envilder/{domain → core/domain}/errors/DomainErrors.js +0 -0
- /package/lib/envilder/{domain → core/domain}/ports/ILogger.d.ts +0 -0
- /package/lib/envilder/{domain → core/domain}/ports/ILogger.js +0 -0
- /package/lib/envilder/{domain → core/domain}/ports/ISecretProvider.d.ts +0 -0
- /package/lib/envilder/{domain → core/domain}/ports/ISecretProvider.js +0 -0
- /package/lib/envilder/{domain → core/domain}/ports/IVariableStore.d.ts +0 -0
- /package/lib/envilder/{domain → core/domain}/ports/IVariableStore.js +0 -0
- /package/lib/envilder/{infrastructure → core/infrastructure}/aws/AwsSecretProviderFactory.d.ts +0 -0
- /package/lib/envilder/{infrastructure → core/infrastructure}/aws/AwsSecretProviderFactory.js +0 -0
- /package/lib/envilder/{infrastructure → core/infrastructure}/aws/AwsSsmSecretProvider.d.ts +0 -0
- /package/lib/envilder/{infrastructure → core/infrastructure}/aws/AwsSsmSecretProvider.js +0 -0
- /package/lib/envilder/{infrastructure → core/infrastructure}/azure/AzureKeyVaultSecretProvider.d.ts +0 -0
- /package/lib/envilder/{infrastructure → core/infrastructure}/azure/AzureKeyVaultSecretProvider.js +0 -0
- /package/lib/envilder/{infrastructure → core/infrastructure}/azure/AzureSecretProviderFactory.d.ts +0 -0
- /package/lib/envilder/{infrastructure → core/infrastructure}/azure/AzureSecretProviderFactory.js +0 -0
- /package/lib/envilder/{infrastructure → core/infrastructure}/azure/AzureVaultUrlValidator.d.ts +0 -0
- /package/lib/envilder/{infrastructure → core/infrastructure}/azure/AzureVaultUrlValidator.js +0 -0
- /package/lib/envilder/{infrastructure → core/infrastructure}/logger/ConsoleLogger.d.ts +0 -0
- /package/lib/envilder/{infrastructure → core/infrastructure}/logger/ConsoleLogger.js +0 -0
- /package/lib/envilder/{infrastructure → core/infrastructure}/package/PackageVersionReader.d.ts +0 -0
- /package/lib/envilder/{infrastructure → core/infrastructure}/package/PackageVersionReader.js +0 -0
- /package/lib/envilder/{infrastructure → core/infrastructure}/variableStore/FileVariableStore.d.ts +0 -0
- /package/lib/envilder/{infrastructure → core/infrastructure}/variableStore/FileVariableStore.js +0 -0
- /package/lib/envilder/{types.d.ts → core/types.d.ts} +0 -0
- /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>
|
|
9
|
-
<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
|
-

|
|
13
|
-
|
|
14
12
|
[](https://www.npmjs.com/package/envilder)
|
|
15
13
|
[](https://npmcharts.com/compare/envilder)
|
|
16
14
|
[](https://github.com/macalbert/envilder/actions/workflows/tests.yml)
|
|
17
|
-
[](https://snyk.io/test/github/macalbert/envilder)
|
|
15
|
+
[](https://macalbert.github.io/envilder/)
|
|
19
16
|
[](./LICENSE)
|
|
20
17
|
|
|
21
|
-
## Why
|
|
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
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
-
##
|
|
38
|
+
## The problem
|
|
33
39
|
|
|
34
|
-
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
-
|
|
38
|
-
|
|
39
|
-
-
|
|
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
|
-
##
|
|
48
|
+
## How Envilder solves it
|
|
42
49
|
|
|
43
|
-
-
|
|
44
|
-
-
|
|
45
|
-
-
|
|
46
|
-
|
|
47
|
-
-
|
|
48
|
-
|
|
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
|
-
##
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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
|
-
##
|
|
72
|
+
## 🚀 Quick Start
|
|
91
73
|
|
|
92
|
-
|
|
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
|
-
|
|
76
|
+
Watch how easy it is to automate your .env management in less than 1 minute:
|
|
100
77
|
|
|
101
|
-
|
|
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
|
+

|
|
105
79
|
|
|
106
|
-
|
|
80
|
+
### 🏁 Get Started (2 steps)
|
|
107
81
|
|
|
108
|
-
|
|
82
|
+
**1. Create a mapping file** (`param-map.json`):
|
|
109
83
|
|
|
110
|
-
|
|
84
|
+
```json
|
|
85
|
+
{
|
|
86
|
+
"DB_PASSWORD": "/my-app/db/password",
|
|
87
|
+
"API_KEY": "/my-app/api-key"
|
|
88
|
+
}
|
|
89
|
+
```
|
|
111
90
|
|
|
112
|
-
|
|
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
|
-
|
|
94
|
+
npx envilder --map=param-map.json --envfile=.env
|
|
119
95
|
```
|
|
120
96
|
|
|
121
|
-
|
|
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
|
-
> 💡 **
|
|
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
|
-
>
|
|
132
|
-
>
|
|
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
|
-
📖 **[
|
|
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
|
-

|
|
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
|
-
|
|
153
|
+
### 📚 More resources
|
|
221
154
|
|
|
222
|
-
|
|
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
|
|
259
|
-
|
|
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
|
|
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
|
|
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` |
|
|
316
|
-
| `profile` | `string` |
|
|
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
|
-
##
|
|
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
|
-
|
|
251
|
+
### .NET SDK
|
|
362
252
|
|
|
363
|
-
|
|
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
|
-
|
|
367
|
-
|
|
255
|
+
```bash
|
|
256
|
+
dotnet add package Envilder
|
|
257
|
+
```
|
|
368
258
|
|
|
369
|
-
|
|
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
|
-
|
|
374
|
-
A:
|
|
375
|
-
|
|
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
|
-
|
|
378
|
-
|
|
267
|
+
var config = new ConfigurationBuilder()
|
|
268
|
+
.AddEnvilder("secrets-map.json", provider)
|
|
269
|
+
.Build();
|
|
379
270
|
|
|
380
|
-
|
|
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
|
-
|
|
386
|
-
|
|
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
|
-
**
|
|
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
|
-
|
|
283
|
+
Install via uv (recommended) or pip:
|
|
394
284
|
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
285
|
+
```bash
|
|
286
|
+
uv add envilder
|
|
287
|
+
# or
|
|
288
|
+
pip install envilder
|
|
289
|
+
```
|
|
398
290
|
|
|
399
|
-
|
|
291
|
+
Load secrets into your application with a single line:
|
|
400
292
|
|
|
401
|
-
|
|
293
|
+
```python
|
|
294
|
+
from envilder import Envilder
|
|
402
295
|
|
|
403
|
-
|
|
296
|
+
# Resolve + inject into os.environ
|
|
297
|
+
Envilder.load('secrets-map.json')
|
|
298
|
+
```
|
|
404
299
|
|
|
405
|
-
|
|
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
|
-
|
|
302
|
+
```python
|
|
303
|
+
from envilder import Envilder
|
|
420
304
|
|
|
421
|
-
|
|
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
|
-
|
|
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
|
-
|
|
314
|
+
---
|
|
429
315
|
|
|
430
|
-
|
|
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
|
-
|
|
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
|
-
|
|
437
|
-
|
|
438
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
337
|
+
## 🔍 Envilder vs. Alternatives
|
|
450
338
|
|
|
451
|
-
Envilder
|
|
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
|
-
|
|
454
|
-
|
|
455
|
-
|
|
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
|
-
|
|
458
|
-
|
|
459
|
-
|
|
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
|
-
|
|
462
|
-
|
|
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
|
-
## 🏁
|
|
363
|
+
## 🏁 What's Next
|
|
467
364
|
|
|
468
|
-
|
|
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
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
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
|
-
👉 **[
|
|
378
|
+
👉 **[Full roadmap with priorities](./ROADMAP.md)**
|
|
478
379
|
|
|
479
380
|
---
|
|
480
381
|
|
|
481
382
|
## 🤝 Contributing
|
|
482
383
|
|
|
483
|
-
All help is welcome
|
|
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)
|