<?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: ARUN GOPAL</title>
    <description>The latest articles on DEV Community by ARUN GOPAL (@raag3arun).</description>
    <link>https://dev.to/raag3arun</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%2F3870506%2Fba6a19b4-ce2f-4e46-a83a-3d18d23adeb2.jpg</url>
      <title>DEV Community: ARUN GOPAL</title>
      <link>https://dev.to/raag3arun</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/raag3arun"/>
    <language>en</language>
    <item>
      <title>I Built 15 Free Browser-Based Developer Tools — Here's What I Learned</title>
      <dc:creator>ARUN GOPAL</dc:creator>
      <pubDate>Thu, 09 Apr 2026 20:08:08 +0000</pubDate>
      <link>https://dev.to/raag3arun/i-built-15-free-browser-based-developer-tools-heres-what-i-learned-1dah</link>
      <guid>https://dev.to/raag3arun/i-built-15-free-browser-based-developer-tools-heres-what-i-learned-1dah</guid>
      <description>&lt;p&gt;Every developer has that moment: you need to quickly format some JSON, generate a UUID, or encode a string to Base64. You google it, click the first result, and get hit with cookie banners, newsletter popups, and a loading spinner while 3MB of JavaScript downloads to do something that takes 5 lines of code.&lt;/p&gt;

&lt;p&gt;I decided to fix this by building &lt;a href="https://toolpry.com" rel="noopener noreferrer"&gt;ToolPry&lt;/a&gt; — a collection of 15 developer tools that are fast, private, and free.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Rules I Set for Myself
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Every tool must run 100% in the browser.&lt;/strong&gt; No server calls. No APIs. Your data never leaves your machine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No frameworks.&lt;/strong&gt; Each tool is a single HTML file with inline CSS and JS. No React, no Tailwind, no build step.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No tracking.&lt;/strong&gt; No Google Analytics, no Hotjar, no cookies (except for ads).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No sign-up.&lt;/strong&gt; Every tool is fully functional for everyone, immediately.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Must work offline.&lt;/strong&gt; Service worker caches everything after first visit.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The 15 Tools
&lt;/h2&gt;

&lt;p&gt;Here's what I built:&lt;/p&gt;

&lt;h3&gt;
  
  
  Data &amp;amp; Encoding
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://toolpry.com/json-formatter" rel="noopener noreferrer"&gt;JSON Formatter &amp;amp; Validator&lt;/a&gt; — Format, validate, minify with syntax highlighting. Uses native &lt;code&gt;JSON.parse()&lt;/code&gt; / &lt;code&gt;JSON.stringify()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://toolpry.com/base64" rel="noopener noreferrer"&gt;Base64 Encoder/Decoder&lt;/a&gt; — Full UTF-8 support via &lt;code&gt;btoa(unescape(encodeURIComponent()))&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://toolpry.com/url-encoder" rel="noopener noreferrer"&gt;URL Encoder/Decoder&lt;/a&gt; — Both &lt;code&gt;encodeURI&lt;/code&gt; and &lt;code&gt;encodeURIComponent&lt;/code&gt; modes.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://toolpry.com/html-entities" rel="noopener noreferrer"&gt;HTML Entity Encoder&lt;/a&gt; — Prevents XSS by encoding &lt;code&gt;&amp;lt;&lt;/code&gt;, &lt;code&gt;&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;amp;&lt;/code&gt;, &lt;code&gt;"&lt;/code&gt;, &lt;code&gt;'&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Security
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://toolpry.com/password-generator" rel="noopener noreferrer"&gt;Password Generator&lt;/a&gt; — Uses &lt;code&gt;crypto.getRandomValues()&lt;/code&gt; (the same CSPRNG banks use). Customizable length, character types, bulk generation.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://toolpry.com/hash-generator" rel="noopener noreferrer"&gt;Hash Generator&lt;/a&gt; — MD5 (JS implementation), SHA-1, SHA-256, SHA-512 (via Web Crypto API &lt;code&gt;crypto.subtle.digest()&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Generators
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://toolpry.com/uuid-generator" rel="noopener noreferrer"&gt;UUID Generator&lt;/a&gt; — RFC 4122 v4 UUIDs using &lt;code&gt;crypto.getRandomValues&lt;/code&gt;. Bulk generate up to 100.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://toolpry.com/lorem-ipsum" rel="noopener noreferrer"&gt;Lorem Ipsum Generator&lt;/a&gt; — Paragraphs, sentences, or word count. Classic or random start.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://toolpry.com/qr-generator" rel="noopener noreferrer"&gt;QR Code Generator&lt;/a&gt; — Uses qrcodejs library. Configurable size and error correction. Download as PNG.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Text &amp;amp; Writing
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://toolpry.com/word-counter" rel="noopener noreferrer"&gt;Word &amp;amp; Character Counter&lt;/a&gt; — Words, characters, sentences, paragraphs, reading time (238 WPM), speaking time, keyword density, vocabulary richness.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://toolpry.com/markdown-preview" rel="noopener noreferrer"&gt;Markdown Preview&lt;/a&gt; — Live rendering using marked.js, sanitized with DOMPurify to prevent XSS.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Developer Utilities
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://toolpry.com/regex-tester" rel="noopener noreferrer"&gt;Regex Tester&lt;/a&gt; — Real-time match highlighting with flag toggles (g, i, m, s). Shows match groups and indices.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://toolpry.com/color-converter" rel="noopener noreferrer"&gt;Color Converter&lt;/a&gt; — Hex ↔ RGB ↔ HSL with live preview, native color picker, and random generator.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://toolpry.com/timestamp-converter" rel="noopener noreferrer"&gt;Timestamp Converter&lt;/a&gt; — Unix epoch ↔ human dates. Auto-detects seconds vs milliseconds. Live clock.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://toolpry.com/css-gradient" rel="noopener noreferrer"&gt;CSS Gradient Generator&lt;/a&gt; — Linear/radial, 3 color stops, adjustable angle, one-click CSS copy.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Technical Decisions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Why no framework?&lt;/strong&gt; Each tool is self-contained. A JSON formatter doesn't need React's virtual DOM — it needs &lt;code&gt;JSON.parse()&lt;/code&gt; and a &lt;code&gt;&amp;lt;pre&amp;gt;&lt;/code&gt; tag. Keeping things vanilla means each page is 6-15KB total, loads instantly, and has zero dependencies to maintain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Web Crypto API?&lt;/strong&gt; For the password generator and hash generator, I use the browser's built-in cryptographic functions. &lt;code&gt;crypto.getRandomValues()&lt;/code&gt; provides the same quality of randomness used in TLS connections. For SHA hashing, &lt;code&gt;crypto.subtle.digest()&lt;/code&gt; is faster and more secure than any JavaScript implementation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why DOMPurify on Markdown?&lt;/strong&gt; The Markdown preview renders user input as HTML. Without sanitization, a user could inject malicious scripts via Markdown. DOMPurify strips any XSS vectors before the HTML reaches the DOM.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;I'm planning to add:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JWT Decoder&lt;/li&gt;
&lt;li&gt;Diff Checker (text comparison)&lt;/li&gt;
&lt;li&gt;CSV to JSON converter&lt;/li&gt;
&lt;li&gt;DNS Lookup tool&lt;/li&gt;
&lt;li&gt;Cron Expression Parser&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;The site is at &lt;a href="https://toolpry.com" rel="noopener noreferrer"&gt;toolpry.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;What developer tools do you find yourself reaching for most often? I'd love suggestions for what to build next.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built with vanilla HTML/JS. Hosted on Cloudflare Pages (free tier). Total monthly cost: one domain name.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
