<?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: nullisland</title>
    <description>The latest articles on DEV Community by nullisland (@nullisland).</description>
    <link>https://dev.to/nullisland</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%2F4055302%2Ff580f1cf-b452-49bc-b139-7bb240511cfa.png</url>
      <title>DEV Community: nullisland</title>
      <link>https://dev.to/nullisland</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nullisland"/>
    <language>en</language>
    <item>
      <title>I built dev tools that literally cannot send your data anywhere</title>
      <dc:creator>nullisland</dc:creator>
      <pubDate>Wed, 05 Aug 2026 18:45:20 +0000</pubDate>
      <link>https://dev.to/nullisland/i-built-dev-tools-that-literally-cannot-send-your-data-anywhere-1a61</link>
      <guid>https://dev.to/nullisland/i-built-dev-tools-that-literally-cannot-send-your-data-anywhere-1a61</guid>
      <description>&lt;p&gt;I find myself Googling then subsequently pasting things into random online JSON formatters and JWT decoders which seemed fine at first, but I realized that I have no real way of trusting these sites. Granted I'm not putting in any PII or company proprietary info into them, but still... maybe they're fine. Maybe they're logging every payload to a database somewhere. There's no way to tell from the outside.&lt;/p&gt;

&lt;p&gt;After hearing about &lt;a href="https://www.pixelite.co.nz/article/chrome-extensions-are-a-supply-chain-risk-build-your-own-instead/" rel="noopener noreferrer"&gt;Chrome extension issues with JSON formatters&lt;/a&gt; earlier this year, I stopped assuming it was a paranoid thing to worry about.&lt;/p&gt;

&lt;p&gt;So I built &lt;a href="https://vaultools.dev" rel="noopener noreferrer"&gt;Vaultools&lt;/a&gt;, a small set of developer micro-tools where every tool page shows a &lt;strong&gt;live "network requests sent: 0" counter&lt;/strong&gt; the whole time you're using it. It's simply a number, updating in real time, that you can watch stay at zero while you paste in something.&lt;/p&gt;

&lt;p&gt;Here's a screenshot of where the "network requests sent" counter is:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F84gbczkkpb4bnlsdoq17.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F84gbczkkpb4bnlsdoq17.PNG" alt="Screenshot showcasing the location of the network requests sent counter" width="800" height="535"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's an automated test showcasing the JSON Formatter tool on the site:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsvx9gcppjn7srdcx71fr.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsvx9gcppjn7srdcx71fr.gif" alt="Automated test showcasing the JSON formatter tool" width="759" height="506"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What's actually in it right now
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;JSON formatter&lt;/strong&gt;, with a batch mode to format/validate many blobs at once&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JWT decoder&lt;/strong&gt;, inspects header/payload claims without a token ever leaving your machine&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UUID / hash generator&lt;/strong&gt;, for UUIDs and hashing arbitrary text (SHA-256, etc.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regex tester&lt;/strong&gt;, test and batch-replace against many lines at once&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Timestamp converter&lt;/strong&gt;, Unix to ISO 8601 and back, batch mode included&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Still working on a Base64/URL encoder and a text diff checker, so I guess expect that soon-ish, but I ain't making any promises in this post ahah.&lt;/p&gt;

&lt;p&gt;There's also a CLI now, &lt;code&gt;npx vaultools&lt;/code&gt;, for anyone who'd rather not open a browser tab at all:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npx vaultools json format package.json&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;It wraps the exact same tested lib functions as the web pages, so it's the same guarantee. It's meant for CI and scripting&lt;br&gt;
use (looking at you CLI savvy users out there). Piping many files or values through at once is a Pro feature there too, mirroring the site's batch mode.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it actually works
&lt;/h2&gt;

&lt;p&gt;Every tool page is a static &lt;a href="https://astro.build" rel="noopener noreferrer"&gt;Astro&lt;/a&gt; page with zero&lt;br&gt;
server-side logic. The parsing, formatting, and hashing all runs in a small, pure, framework-free TypeScript module that's unit-tested with Vitest and has no &lt;code&gt;fetch&lt;/code&gt;, no DOM access, nothing that could phone home even by accident.&lt;/p&gt;

&lt;p&gt;Pop open your browser's network tab right now on any tool page and watch it: paste something in, and nothing goes out. The CLI imports those same modules directly, so it's effectively the same but obviously more script-able, not a separate reimplementation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Full disclosure&lt;/strong&gt;: &lt;strong&gt;a lot of this was built with AI assistance&lt;/strong&gt;. That's exactly why the tests and the "watch the network tab yourself" pitch matter more here than a "trust me bro" would. You don't have to take my word for the code quality either. Check the behavior directly.&lt;/p&gt;

&lt;p&gt;The only server-side code in the whole project is two small Cloudflare Pages Functions, and they only handle the optional Pro tier's payment flow (i.e., Stripe Checkout plus license verification). The tool pages themselves never touch them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Free vs. Pro
&lt;/h2&gt;

&lt;p&gt;Everything above is free, no account, no signup required. There's an&lt;br&gt;
optional Pro tier ($5/mo or $49 one-time) that adds batch processing across most tools and removes the single small ad slot (I'm still working/thinking about other features too). But the core promise,&lt;br&gt;
nothing you paste ever leaves your browser, applies identically whether or not you pay for anything.&lt;/p&gt;

&lt;p&gt;Maybe I should've made this a "buy me a coffee" link or something -- I don't know; I'm still new at this, but I'm still excited to see where I take it!&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://vaultools.dev" rel="noopener noreferrer"&gt;https://vaultools.dev&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Feedback, bug reports, tool requests are all welcome. There's a &lt;a href="https://vaultools.dev/contact" rel="noopener noreferrer"&gt;contact form&lt;/a&gt;, or just reply here.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>showdev</category>
      <category>security</category>
      <category>privacy</category>
    </item>
  </channel>
</rss>
