<?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: HollyGG</title>
    <description>The latest articles on DEV Community by HollyGG (@hollygg).</description>
    <link>https://dev.to/hollygg</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%2F3674319%2F00e63301-e93a-4679-850b-46e3225d8bfd.jpg</url>
      <title>DEV Community: HollyGG</title>
      <link>https://dev.to/hollygg</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hollygg"/>
    <language>en</language>
    <item>
      <title>Stop uploading your DBs! View SQLite files 100% locally with WASM</title>
      <dc:creator>HollyGG</dc:creator>
      <pubDate>Tue, 23 Dec 2025 01:50:47 +0000</pubDate>
      <link>https://dev.to/hollygg/stop-uploading-your-dbs-view-sqlite-files-100-locally-with-wasm-20k3</link>
      <guid>https://dev.to/hollygg/stop-uploading-your-dbs-view-sqlite-files-100-locally-with-wasm-20k3</guid>
      <description>&lt;h1&gt;
  
  
  🛑 Stop uploading your DBs! View SQLite files 100% locally with WASM
&lt;/h1&gt;

&lt;h2&gt;
  
  
  The Problem: "Please upload your .db file" ... Ummm, No. 🙅‍♂️
&lt;/h2&gt;

&lt;p&gt;Last week, I needed to debug a strange issue with a user's local SQLite database. They sent me the &lt;code&gt;.db&lt;/code&gt; file (with permission, of course). I just needed to run a quick &lt;code&gt;SELECT * FROM users WHERE id=...&lt;/code&gt; to check a flag.&lt;/p&gt;

&lt;p&gt;I didn't want to spin up a whole DBeaver instance or write a Python script just for a 30-second check. So, like any lazy developer, I Googled &lt;strong&gt;"Online SQLite Viewer"&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The results? A minefield. 💣&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Upload your file to view it!"&lt;/em&gt;&lt;br&gt;
&lt;em&gt;"Server processing..."&lt;/em&gt;&lt;br&gt;
&lt;em&gt;"Wait for upload..."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Absolutely not.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This was production data. I am not uploading a user's database to some random server in who-knows-where. Even if they promise "we delete it after," I can't take that risk.&lt;/p&gt;

&lt;p&gt;I realized there was a gap. Why does viewing a local file require a server round-trip in 2025? Browsers are powerful enough to run Doom; surely they can read a SQLite file?&lt;/p&gt;

&lt;h2&gt;
  
  
  The Tech Stack: WebAssembly to the Rescue 🦸‍♂️
&lt;/h2&gt;

&lt;p&gt;I decided to build my own. No servers. No uploads. Just pure client-side power.&lt;/p&gt;

&lt;p&gt;Here is the stack I chose:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;⚡ Nuxt 3&lt;/strong&gt;: For that sweet, sweet Developer Experience (DX) and auto-imports.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;🎨 Tailwind CSS&lt;/strong&gt;: Because I want it to look good without fighting CSS.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;🦀 &lt;code&gt;sqlite-wasm&lt;/code&gt;&lt;/strong&gt;: The magic sauce. This is the official WebAssembly build of SQLite. It allows us to run a full SQLite engine &lt;em&gt;inside&lt;/em&gt; the browser tab.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Solution: KNothing SQLite Viewer 🛠️
&lt;/h2&gt;

&lt;p&gt;After a weekend of coding and caffeinating, I deployed &lt;strong&gt;&lt;a href="https://knothing.com/sqlite-viewer" rel="noopener noreferrer"&gt;KNothing SQLite Viewer&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here is why it's different:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. It runs in your RAM 🧠
&lt;/h3&gt;

&lt;p&gt;When you "open" a file, it's not verified or sent anywhere. The browser reads the file buffer and passes it directly to the WASM instance in memory. If you open the Network tab in DevTools, you will see &lt;strong&gt;zero&lt;/strong&gt; requests sending your DB file.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. It pulls the plug on the internet 🔌
&lt;/h3&gt;

&lt;p&gt;Don't believe me? Load the page, then &lt;strong&gt;turn off your Wi-Fi&lt;/strong&gt;.&lt;br&gt;
Now try to open a file and run a query. &lt;strong&gt;It still works.&lt;/strong&gt;&lt;br&gt;
It's a PWA (Progressive Web App), so it's fully functional offline.&lt;/p&gt;
&lt;h3&gt;
  
  
  3. Full SQL Power ⚡
&lt;/h3&gt;

&lt;p&gt;It's not just a read-only list. You can run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt; 
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt; 
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;created_at&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It supports whatever the standard SQLite engine supports.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it out! 🚀
&lt;/h2&gt;

&lt;p&gt;I made this tool free and open for everyone. No ads, no tracking, no nonsense.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://knothing.com/sqlite-viewer" rel="noopener noreferrer"&gt;Try the Offline SQLite Viewer&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It's open source-ish (I'm cleaning up the repo to share soon).&lt;/p&gt;

&lt;p&gt;Let me know what you think! Does it handle your 1GB+ files? (It depends on your RAM, but I've tested it up to 500MB comfortably).&lt;/p&gt;

&lt;p&gt;Happy (Secure) Coding! 🔒&lt;/p&gt;

</description>
      <category>webassembly</category>
      <category>nuxt</category>
      <category>privacy</category>
      <category>offline</category>
    </item>
  </channel>
</rss>
