<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: David Nussio</title>
    <description>The latest articles on DEV Community by David Nussio (@davidnussio).</description>
    <link>https://dev.to/davidnussio</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F39918%2F977f996c-ca34-4675-9059-0f5f11cc0ee4.jpg</url>
      <title>DEV Community: David Nussio</title>
      <link>https://dev.to/davidnussio</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/davidnussio"/>
    <language>en</language>
    <item>
      <title>Your Terminal Remembers Every Secret You've Ever Typed</title>
      <dc:creator>David Nussio</dc:creator>
      <pubDate>Tue, 24 Mar 2026 12:41:03 +0000</pubDate>
      <link>https://dev.to/davidnussio/your-terminal-remembers-every-secret-youve-ever-typed-jj2</link>
      <guid>https://dev.to/davidnussio/your-terminal-remembers-every-secret-youve-ever-typed-jj2</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; I built &lt;a href="https://envsec.dev" rel="noopener noreferrer"&gt;envsec&lt;/a&gt;, a free, open-source CLI that stores your development secrets in macOS Keychain, GNOME Keyring, or Windows Credential Manager. Run commands with secrets without ever exposing them in your shell history or &lt;code&gt;ps&lt;/code&gt; output. Generate &lt;code&gt;.env&lt;/code&gt; files on the fly when you need them, delete them when you're done. No provider, no account, no subscription. The v1.0 beta is out now. &lt;code&gt;npm install -g envsec@beta&lt;/code&gt; and you're done.&lt;/p&gt;




&lt;h2&gt;
  
  
  The secrets hiding in your terminal
&lt;/h2&gt;

&lt;p&gt;Open your shell history right now. Go ahead, &lt;code&gt;history | grep -i key&lt;/code&gt; or &lt;code&gt;history | grep -i password&lt;/code&gt;. Scared yet?&lt;/p&gt;

&lt;p&gt;Every time you run &lt;code&gt;curl&lt;/code&gt; with an API key, &lt;code&gt;psql&lt;/code&gt; with a connection string, or &lt;code&gt;docker run&lt;/code&gt; with credentials, those secrets land in your shell history file. They show up in &lt;code&gt;ps&lt;/code&gt; output. They live in plaintext on disk until you manually scrub them — which you never do.&lt;/p&gt;

&lt;p&gt;And it gets worse. If you're like most developers, you also have .env files scattered across every project directory on your machine — including projects you haven't touched in months. Each one is a plaintext file with API keys, database passwords, and tokens just sitting there on your filesystem. Any process running as your user can read them. Any supply chain attack that scans your project directories can harvest them. One malicious npm postinstall script, one compromised VS Code extension, and every secret across every project you've ever worked on is exfiltrated in milliseconds.&lt;/p&gt;

&lt;p&gt;This isn't theoretical. In September 2025, the Shai-Hulud worm did exactly this: it compromised over 500 npm packages and used TruffleHog to recursively scan victims' home directories — .env files, git history, config files, all of it. When I read about it, my first thought wasn't "am I running one of those packages?" It was: "how many abandoned .env files do I have sitting in my projects right now?" I checked. The answer was uncomfortable.&lt;br&gt;
Security researchers have found over a million secrets from exposed environment files across tens of thousands of websites. Stolen credentials were the attack vector in roughly one in five breaches reported in recent industry analyses.&lt;/p&gt;

&lt;p&gt;The enterprise world solved this with tools like HashiCorp Vault, Doppler, and Infisical. But those solutions require cloud accounts, infrastructure, and dedicated DevOps staff. If you're a solo developer or on a small team, you don't need a SaaS platform with SSO and RBAC to keep your Stripe test key out of your shell history.&lt;/p&gt;
&lt;h2&gt;
  
  
  What if your OS could be the vault?
&lt;/h2&gt;

&lt;p&gt;Your operating system already has a battle-tested, encrypted credential store:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;macOS&lt;/strong&gt; has the Keychain&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Linux&lt;/strong&gt; has GNOME Keyring / KDE Wallet (Secret Service API)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Windows&lt;/strong&gt; has Credential Manager&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are the same systems that protect your Wi-Fi passwords, SSH keys, and browser credentials. They use hardware-backed encryption where available. They've been audited by millions of users for decades.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;&lt;a href="https://github.com/davidnussio/envsec" rel="noopener noreferrer"&gt;envsec&lt;/a&gt;&lt;/strong&gt; to put them to work for your development secrets.&lt;/p&gt;
&lt;h2&gt;
  
  
  How envsec works
&lt;/h2&gt;

&lt;p&gt;envsec is a Node.js CLI. No daemon, no server, no cloud account. You install it, and it talks directly to your OS credential store.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Store a secret&lt;/span&gt;
envsec &lt;span class="nt"&gt;-c&lt;/span&gt; myapp.dev add api.key &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s2"&gt;"sk-abc123"&lt;/span&gt;

&lt;span class="c"&gt;# Retrieve it&lt;/span&gt;
envsec &lt;span class="nt"&gt;-c&lt;/span&gt; myapp.dev get api.key

&lt;span class="c"&gt;# Run a command with secrets injected as env vars&lt;/span&gt;
envsec &lt;span class="nt"&gt;-c&lt;/span&gt; myapp.dev run &lt;span class="s1"&gt;'curl -H "Auth: {api.key}" https://api.example.com'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;-c&lt;/code&gt; flag sets a &lt;strong&gt;context&lt;/strong&gt; — a label for grouping related secrets. Think &lt;code&gt;myapp.dev&lt;/code&gt;, &lt;code&gt;stripe-api.prod&lt;/code&gt;, &lt;code&gt;work.staging&lt;/code&gt;. You organize secrets however makes sense for your workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Secret values go straight into the OS credential store.&lt;/strong&gt; They never touch a config file, a log, or intermediate storage. envsec only keeps metadata (key names, timestamps) in a local SQLite database — never the values themselves.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you can do with it
&lt;/h2&gt;

&lt;h3&gt;
  
  
  .env files become ephemeral, not permanent
&lt;/h3&gt;

&lt;p&gt;envsec doesn't try to eliminate &lt;code&gt;.env&lt;/code&gt; files — too many tools depend on them. Instead, it changes the relationship. Your secrets live permanently in the OS vault. The &lt;code&gt;.env&lt;/code&gt; file becomes a &lt;strong&gt;temporary artifact&lt;/strong&gt; you generate when you start working and throw away when you're done:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Start of your work session: generate .env from the vault&lt;/span&gt;
envsec &lt;span class="nt"&gt;-c&lt;/span&gt; myapp.dev env-file &lt;span class="nt"&gt;--output&lt;/span&gt; .env.local

&lt;span class="c"&gt;# ... do your work ...&lt;/span&gt;

&lt;span class="c"&gt;# End of session: delete it. The secrets are safe in the vault.&lt;/span&gt;
&lt;span class="nb"&gt;rm&lt;/span&gt; .env.local
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why does this matter? Think about supply chain attacks. A malicious npm package, a compromised postinstall script, a rogue VS Code extension — all they need to do is scan &lt;code&gt;$HOME&lt;/code&gt; or your project directories for &lt;code&gt;.env&lt;/code&gt; files. If you have 10 projects, that's 10 plaintext files with credentials sitting there 24/7, waiting to be harvested.&lt;/p&gt;

&lt;p&gt;With envsec, the &lt;code&gt;.env&lt;/code&gt; exists only while you're actively working. The attack surface window shrinks from "always" to "only during active development." And the secrets themselves? Locked behind OS-level encryption that no &lt;code&gt;fs.readFileSync&lt;/code&gt; can touch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Coming soon:&lt;/strong&gt; I'm working on automating this pattern — &lt;code&gt;envsec&lt;/code&gt; will hook into your shell or project tooling to export secrets when you &lt;code&gt;cd&lt;/code&gt; into a project and clean them up when you leave. Zero manual steps.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# You can also import existing .env files into the vault&lt;/span&gt;
envsec &lt;span class="nt"&gt;-c&lt;/span&gt; myapp.dev load &lt;span class="nt"&gt;--input&lt;/span&gt; .env.local

&lt;span class="c"&gt;# Then delete the original — you won't need it anymore&lt;/span&gt;
&lt;span class="nb"&gt;rm&lt;/span&gt; .env.local
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Your terminal is leaking secrets — envsec stops that
&lt;/h3&gt;

&lt;p&gt;This is the part I care about the most, and the core reason I built envsec.&lt;/p&gt;

&lt;p&gt;Think about what happens every time you run a command with a secret in it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# This is what most of us do — and it's terrible&lt;/span&gt;
curl &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer sk-live-abc123xyz"&lt;/span&gt; https://api.stripe.com/v1/charges
psql &lt;span class="s2"&gt;"postgres://admin:P@ssw0rd!@db.example.com:5432/prod"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That API key is now in your &lt;strong&gt;shell history&lt;/strong&gt; forever. It's visible in &lt;code&gt;ps&lt;/code&gt; output to every process on your machine. It's probably synced to your dotfiles repo. If you use a shared server, your coworkers can see it.&lt;/p&gt;

&lt;p&gt;The usual workaround? Prefix with a space (and hope your shell is configured to ignore it), or pipe from a file, or use some ad-hoc &lt;code&gt;export&lt;/code&gt; dance that you forget the syntax of every time.&lt;/p&gt;

&lt;p&gt;envsec solves this cleanly. The &lt;code&gt;run&lt;/code&gt; command resolves &lt;code&gt;{key}&lt;/code&gt; placeholders and injects values as &lt;strong&gt;environment variables of the child process&lt;/strong&gt; — the actual secret values never appear in &lt;code&gt;ps&lt;/code&gt; output, never land in shell history, and never touch the command string:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# The secret never appears in your terminal or history&lt;/span&gt;
envsec &lt;span class="nt"&gt;-c&lt;/span&gt; myapp.prod run &lt;span class="s1"&gt;'psql {db.connection_string}'&lt;/span&gt;

&lt;span class="c"&gt;# Same for API calls&lt;/span&gt;
envsec &lt;span class="nt"&gt;-c&lt;/span&gt; stripe.live run &lt;span class="s1"&gt;'curl -H "Authorization: Bearer {api.key}" https://api.stripe.com/v1/charges'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What your shell history sees:&lt;/strong&gt; &lt;code&gt;envsec -c stripe.live run 'curl -H "Authorization: Bearer {api.key}" ...'&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;What it doesn't see:&lt;/strong&gt; your actual API key. Ever.&lt;/p&gt;
&lt;h3&gt;
  
  
  Save the command, forget the secret
&lt;/h3&gt;

&lt;p&gt;But here's where it gets really practical. How many times do you run the same command with the same secrets? Database connections, API calls, deploy scripts — it's always the same commands. envsec lets you &lt;strong&gt;save the command template once and replay it forever&lt;/strong&gt;, without ever exposing the underlying secrets:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Save a command for later&lt;/span&gt;
envsec &lt;span class="nt"&gt;-c&lt;/span&gt; myapp.dev run &lt;span class="nt"&gt;--save&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; deploy &lt;span class="s1"&gt;'kubectl apply -f - &amp;lt;&amp;lt;&amp;lt; {k8s.manifest}'&lt;/span&gt;

&lt;span class="c"&gt;# Run it again — secrets are resolved fresh from the vault every time&lt;/span&gt;
envsec cmd run deploy

&lt;span class="c"&gt;# Same command, different environment — just swap the context&lt;/span&gt;
envsec cmd run deploy &lt;span class="nt"&gt;--override-context&lt;/span&gt; myapp.prod

&lt;span class="c"&gt;# List all your saved commands&lt;/span&gt;
envsec cmd list

&lt;span class="c"&gt;# Search through them&lt;/span&gt;
envsec cmd search psql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the workflow I always wanted: &lt;strong&gt;the command lives in envsec, the secret lives in the OS vault, and your terminal history stays clean.&lt;/strong&gt; No provider, no cloud account, no subscription. Just a free, open-source devtool that respects both your security and your workflow.&lt;/p&gt;

&lt;h3&gt;
  
  
  Export as shell variables
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# bash/zsh&lt;/span&gt;
&lt;span class="nb"&gt;eval&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;envsec &lt;span class="nt"&gt;-c&lt;/span&gt; myapp.dev &lt;span class="nb"&gt;env&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;# fish&lt;/span&gt;
envsec &lt;span class="nt"&gt;-c&lt;/span&gt; myapp.dev &lt;span class="nb"&gt;env&lt;/span&gt; &lt;span class="nt"&gt;--shell&lt;/span&gt; fish
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Audit expiring credentials
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Set expiry when adding secrets&lt;/span&gt;
envsec &lt;span class="nt"&gt;-c&lt;/span&gt; myapp.dev add api.key &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s2"&gt;"sk-abc123"&lt;/span&gt; &lt;span class="nt"&gt;--expires&lt;/span&gt; 30d

&lt;span class="c"&gt;# Audit what's expiring soon&lt;/span&gt;
envsec &lt;span class="nt"&gt;-c&lt;/span&gt; myapp.dev audit &lt;span class="nt"&gt;--within&lt;/span&gt; 7d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Share secrets securely with GPG
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;envsec &lt;span class="nt"&gt;-c&lt;/span&gt; myapp.dev share &lt;span class="nt"&gt;--encrypt-to&lt;/span&gt; colleague@company.com &lt;span class="nt"&gt;-o&lt;/span&gt; secrets.enc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No more pasting API keys in Slack DMs.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it compares
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;envsec&lt;/th&gt;
&lt;th&gt;.env files&lt;/th&gt;
&lt;th&gt;Doppler/Infisical&lt;/th&gt;
&lt;th&gt;HashiCorp Vault&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Setup time&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;30 seconds&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;10-30 minutes&lt;/td&gt;
&lt;td&gt;Hours/days&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Infrastructure&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Cloud/self-hosted&lt;/td&gt;
&lt;td&gt;Self-hosted cluster&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Provider/account&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None needed&lt;/td&gt;
&lt;td&gt;None needed&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Encryption&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;OS-native&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Custom/AES&lt;/td&gt;
&lt;td&gt;Custom&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Shell history safe&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes — secrets never in history&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;CLI injection yes&lt;/td&gt;
&lt;td&gt;CLI injection yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Command memory&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Built-in (save &amp;amp; replay)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Supply chain exposure&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Secrets not on filesystem&lt;/td&gt;
&lt;td&gt;Always on disk&lt;/td&gt;
&lt;td&gt;Not on disk&lt;/td&gt;
&lt;td&gt;Not on disk&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cost&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Free, forever&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;Free tier + paid&lt;/td&gt;
&lt;td&gt;Free + operational cost&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Solo devs, small teams&lt;/td&gt;
&lt;td&gt;Quick prototypes&lt;/td&gt;
&lt;td&gt;Growing teams&lt;/td&gt;
&lt;td&gt;Enterprise&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;envsec isn't trying to replace Vault or Doppler. If you need centralized team management with RBAC and audit logs at scale, those tools are excellent. envsec fills a different gap: a &lt;strong&gt;free, provider-free devtool&lt;/strong&gt; for developers who want secure secrets in their terminal without infrastructure or accounts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I built this
&lt;/h2&gt;

&lt;p&gt;Three things kept bugging me.&lt;/p&gt;

&lt;p&gt;First, my terminal was a liability. Every &lt;code&gt;curl&lt;/code&gt;, every &lt;code&gt;psql&lt;/code&gt;, every deploy script with a credential in it — all captured in shell history, all visible in process listings. I wanted to run commands with secrets without leaving traces.&lt;/p&gt;

&lt;p&gt;Second, my &lt;code&gt;.env&lt;/code&gt; files were a sitting target. Every project directory had one. Always there, always in plaintext, always available for any process — legitimate or malicious — to read. I didn't want to stop using &lt;code&gt;.env&lt;/code&gt; files entirely (too many tools depend on them), but I wanted them to be &lt;strong&gt;temporary&lt;/strong&gt; — generated when I need them, deleted when I'm done, with the real secrets locked in the OS vault.&lt;/p&gt;

&lt;p&gt;Third, the false dichotomy. The developer community acts like there are only two options: plaintext files, or sign up for a cloud service. But I didn't want a provider. I didn't want to create an account. I didn't want my secrets leaving my machine. I just wanted a proper devtool — free, local, provider-free — that treats secrets like secrets.&lt;/p&gt;

&lt;p&gt;Your OS already has the answer. It just needed a decent CLI in front of it. That's envsec: a devtool that gives you secure secret management in the terminal, with command memory so you never have to type (or expose) a secret again. No vendor, no lock-in, no monthly bill. Just your Keychain and your rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  The beta is live
&lt;/h2&gt;

&lt;p&gt;envsec v1.0 beta is available now:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;davidnussio/homebrew-tap/envsec

npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; envsec@beta

npx envsec@beta
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It works on macOS, Linux, and Windows. Node.js 18+ required. On Linux you'll need &lt;code&gt;libsecret-tools&lt;/code&gt; installed (most desktop distros have it).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's in the beta:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Full CRUD for secrets organized by context&lt;/li&gt;
&lt;li&gt;Glob pattern search across contexts and secrets&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.env&lt;/code&gt; import/export for backward compatibility&lt;/li&gt;
&lt;li&gt;Command interpolation and saved commands&lt;/li&gt;
&lt;li&gt;Secret expiry and audit&lt;/li&gt;
&lt;li&gt;GPG-based team sharing&lt;/li&gt;
&lt;li&gt;Shell completions for bash, zsh, fish, and PowerShell&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it, break it, tell me about it
&lt;/h2&gt;

&lt;p&gt;This is a beta, which means I want your feedback. If something feels wrong, if a workflow is missing, if it blows up on your specific Linux distro — I want to hear about it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/davidnussio/envsec" rel="noopener noreferrer"&gt;github.com/davidnussio/envsec&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href="https://envsec.dev" rel="noopener noreferrer"&gt;envsec.dev&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;npm:&lt;/strong&gt; &lt;a href="https://www.npmjs.com/package/envsec" rel="noopener noreferrer"&gt;npmjs.com/package/envsec&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Star the repo if you think your terminal history shouldn't be a liability. Open an issue if envsec doesn't work for you yet. And if you find it useful, share it with a developer friend who's still typing API keys directly into &lt;code&gt;curl&lt;/code&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;envsec is MIT-licensed and will always be free and open source.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;code&gt;#opensource&lt;/code&gt; &lt;code&gt;#security&lt;/code&gt; &lt;code&gt;#devtools&lt;/code&gt; &lt;code&gt;#node&lt;/code&gt; &lt;code&gt;#cli&lt;/code&gt; &lt;code&gt;#dotenv&lt;/code&gt; &lt;code&gt;#secrets&lt;/code&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>security</category>
      <category>node</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
