<?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: Shivsai Anantwar</title>
    <description>The latest articles on DEV Community by Shivsai Anantwar (@ishivsai).</description>
    <link>https://dev.to/ishivsai</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3999904%2Fb05ad861-cffd-4f51-a7c4-dc7c81b589f2.jpg</url>
      <title>DEV Community: Shivsai Anantwar</title>
      <link>https://dev.to/ishivsai</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ishivsai"/>
    <language>en</language>
    <item>
      <title>Hello dev.to — DevOps engineer building in public</title>
      <dc:creator>Shivsai Anantwar</dc:creator>
      <pubDate>Wed, 24 Jun 2026 06:48:56 +0000</pubDate>
      <link>https://dev.to/ishivsai/hello-devto-devops-engineer-building-in-public-ehl</link>
      <guid>https://dev.to/ishivsai/hello-devto-devops-engineer-building-in-public-ehl</guid>
      <description>&lt;p&gt;Hey everyone,&lt;/p&gt;

&lt;p&gt;I'm Shivsai — a DevOps engineer working across cloud &lt;br&gt;
infrastructure, pipelines, and SDLC tooling.&lt;/p&gt;

&lt;p&gt;I've been working with client teams for a while now and &lt;br&gt;
recently started building in public. My first project is &lt;br&gt;
Tokenly — a local-only encrypted credential vault for &lt;br&gt;
developers and DevOps teams. Built it after watching every &lt;br&gt;
dev team I worked with store PATs and API keys in Notepad.&lt;/p&gt;

&lt;p&gt;Stack I work with: Tauri, Rust, React, TypeScript, &lt;br&gt;
and pretty much anything in the DevOps/cloud space.&lt;/p&gt;

&lt;p&gt;Planning to write about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Things I learn building Tokenly in public&lt;/li&gt;
&lt;li&gt;DevOps patterns and anti-patterns from real client work&lt;/li&gt;
&lt;li&gt;Security decisions and trade-offs in developer tooling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Glad to be here. Looking forward to reading and contributing.&lt;/p&gt;

&lt;p&gt;github.com/MeShivsai/Tokenly&lt;br&gt;
bitsandbooks.in&lt;/p&gt;

</description>
      <category>buildinpublic</category>
      <category>devops</category>
      <category>security</category>
      <category>showdev</category>
    </item>
    <item>
      <title>I built a local-only credential vault because every dev team I worked with stored PATs in Notepad</title>
      <dc:creator>Shivsai Anantwar</dc:creator>
      <pubDate>Wed, 24 Jun 2026 06:39:18 +0000</pubDate>
      <link>https://dev.to/ishivsai/i-built-a-local-only-credential-vault-because-every-dev-team-i-worked-with-stored-pats-in-notepad-4dof</link>
      <guid>https://dev.to/ishivsai/i-built-a-local-only-credential-vault-because-every-dev-team-i-worked-with-stored-pats-in-notepad-4dof</guid>
      <description>&lt;h2&gt;
  
  
  The Problem I Kept Seeing
&lt;/h2&gt;

&lt;p&gt;Over the past year working across multiple client teams on &lt;br&gt;
DevOps and pipeline work, I kept noticing the same thing.&lt;/p&gt;

&lt;p&gt;Developers storing GitHub PATs in Notepad.&lt;br&gt;
QA engineers keeping API keys in a text file on the desktop.&lt;br&gt;
DevOps folks with database passwords in a sticky note app.&lt;/p&gt;

&lt;p&gt;During screen shares — sprint reviews, debugging sessions, &lt;br&gt;
pair programming, recorded demos — those credentials were &lt;br&gt;
just sitting there. Visible to everyone in the call.&lt;/p&gt;

&lt;p&gt;Nobody said anything. It just kept happening.&lt;/p&gt;


&lt;h2&gt;
  
  
  Why Existing Tools Didn't Fit
&lt;/h2&gt;

&lt;p&gt;I looked for something simple that solved this. Here's what &lt;br&gt;
I found and why none of it quite worked:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Password managers (1Password, Bitwarden)&lt;/strong&gt;&lt;br&gt;
Good tools. But they're built around cloud sync, browser &lt;br&gt;
extensions, and team sharing. For an individual developer &lt;br&gt;
who just wants somewhere safe to keep a PAT — overkill. &lt;br&gt;
Also: corporate IT policies often block installation of &lt;br&gt;
cloud-synced password managers on work machines.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Secret managers (HashiCorp Vault, AWS Secrets Manager)&lt;/strong&gt;&lt;br&gt;
These are infrastructure tools, not personal workflow tools. &lt;br&gt;
Setting up Vault for an individual developer's PAT collection &lt;br&gt;
is like using a forklift to move a chair.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OS keystores (Windows Credential Manager, macOS Keychain)&lt;/strong&gt;&lt;br&gt;
Actually decent for storage. But no UI built for this &lt;br&gt;
workflow, no copy-to-clipboard, and they don't solve the &lt;br&gt;
screen-exposure problem at all.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The gap:&lt;/strong&gt; Something simple, local, and designed around &lt;br&gt;
the moment of &lt;em&gt;use&lt;/em&gt; — not just storage.&lt;/p&gt;


&lt;h2&gt;
  
  
  So I Built Tokenly
&lt;/h2&gt;

&lt;p&gt;Tokenly is a local-only desktop credential vault. The core &lt;br&gt;
design principle is simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Credential values are never shown on screen.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You copy them to clipboard. That's the only way to use them. &lt;br&gt;
The clipboard auto-clears after 30 seconds.&lt;/p&gt;

&lt;p&gt;If you need to visually verify a value — press and hold a &lt;br&gt;
button. Release it, the value hides immediately. Not a &lt;br&gt;
toggle — a hold. Toggles get forgotten. Holds don't.&lt;/p&gt;


&lt;h2&gt;
  
  
  Technical Decisions Worth Explaining
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Why Tauri over Electron
&lt;/h3&gt;

&lt;p&gt;Tauri uses the operating system's existing WebView (Edge &lt;br&gt;
WebView2 on Windows, WKWebView on macOS) rather than &lt;br&gt;
bundling an entire Chromium browser. The result:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Installer under 10MB vs 150MB+ for Electron apps&lt;/li&gt;
&lt;li&gt;Rust backend with explicit permissions — nothing the 
React frontend can do reaches the system without a 
registered Tauri command&lt;/li&gt;
&lt;li&gt;Memory-safe backend by design&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a security tool, the permission model matters. Electron's &lt;br&gt;
Node.js backend has broad filesystem access by default. &lt;br&gt;
That's the wrong posture for a vault application.&lt;/p&gt;
&lt;h3&gt;
  
  
  Why AES-256-GCM specifically
&lt;/h3&gt;

&lt;p&gt;AES-256-GCM is authenticated encryption — it doesn't just &lt;br&gt;
encrypt, it detects tampering. Every encrypted blob includes &lt;br&gt;
a 128-bit authentication tag. Wrong password or modified &lt;br&gt;
file, the tag fails before any data is returned.&lt;/p&gt;

&lt;p&gt;This means:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;plaintext&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cipher&lt;/span&gt;
    &lt;span class="nf"&gt;.decrypt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nonce&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ciphertext&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;.map_err&lt;/span&gt;&lt;span class="p"&gt;(|&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="s"&gt;"Wrong password or corrupted vault"&lt;/span&gt;&lt;span class="nf"&gt;.to_string&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If decryption succeeds — the password was correct. If it &lt;br&gt;
fails — wrong password or tampered file. No password &lt;br&gt;
comparison ever happens. The encrypted data itself is &lt;br&gt;
the verification mechanism.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Argon2id for key derivation
&lt;/h3&gt;

&lt;p&gt;The master password is never stored anywhere. Instead, &lt;br&gt;
Argon2id derives a 256-bit encryption key from the &lt;br&gt;
password + a random salt:&lt;/p&gt;

</description>
      <category>devops</category>
      <category>security</category>
      <category>rust</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
