<?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: Szilárd Pálnagy</title>
    <description>The latest articles on DEV Community by Szilárd Pálnagy (@szilrd_plnagy_643c42ee2).</description>
    <link>https://dev.to/szilrd_plnagy_643c42ee2</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%2F3660579%2Ff9f5637a-1f57-4966-8d1b-61b086ab6cef.png</url>
      <title>DEV Community: Szilárd Pálnagy</title>
      <link>https://dev.to/szilrd_plnagy_643c42ee2</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/szilrd_plnagy_643c42ee2"/>
    <language>en</language>
    <item>
      <title>"How I built a 'Forever' File Uploader with Vanilla JS and No Backend"</title>
      <dc:creator>Szilárd Pálnagy</dc:creator>
      <pubDate>Sat, 13 Dec 2025 22:35:28 +0000</pubDate>
      <link>https://dev.to/szilrd_plnagy_643c42ee2/how-i-built-a-forever-file-uploader-with-vanilla-js-and-no-backend-3g61</link>
      <guid>https://dev.to/szilrd_plnagy_643c42ee2/how-i-built-a-forever-file-uploader-with-vanilla-js-and-no-backend-3g61</guid>
      <description>&lt;p&gt;I am tired of the state of file sharing that is now.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;WeTransfer:&lt;/strong&gt; has a 2GB size limit (unless you pay).&lt;br&gt;
&lt;strong&gt;Google Drive:&lt;/strong&gt; makes you log in, and it traces your identity.&lt;br&gt;
&lt;strong&gt;Discord:&lt;/strong&gt; Large files are blocked.&lt;/p&gt;

&lt;p&gt;I wanted a means of transferring &lt;strong&gt;giant files&lt;/strong&gt; to my friends &lt;strong&gt;forever&lt;/strong&gt; without having to pay for a server or spying on what they are doing.&lt;/p&gt;

&lt;p&gt;So, I created &lt;strong&gt;SimpleShare&lt;/strong&gt;. This application runs within your browser.&lt;/p&gt;
&lt;h2&gt;
  
  
  How it works (The Magic)
&lt;/h2&gt;

&lt;p&gt;This is not a regular file-hosting service. It is a &lt;strong&gt;distributed encryption engine&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Smart Compression:&lt;/strong&gt; Your browser reduces the file size you choose before it leaves your computer, thanks to CompressionStream.&lt;br&gt;
&lt;strong&gt;Military Grade Encryption:&lt;/strong&gt; Your file is converted into “digital noise” via &lt;strong&gt;AES-256-GCM&lt;/strong&gt; encryption. This occurs on &lt;em&gt;your&lt;/em&gt; device.&lt;br&gt;
&lt;strong&gt;Atomic Slicing:&lt;/strong&gt; If your file is really large (say 10GB), we slice it into 200MB "atoms."&lt;br&gt;
&lt;strong&gt;The Ledger:&lt;/strong&gt; We upload the encrypted atoms to &lt;strong&gt;Catbox&lt;/strong&gt; (permanent file host) via a public CORS proxy.&lt;br&gt;
&lt;strong&gt;The Key:&lt;/strong&gt; The website provides a &lt;strong&gt;12-character code&lt;/strong&gt; (or a Magic Link). The code has the map to locate your atoms, as well as the password that is used to unlock them.&lt;br&gt;
Because the encryption happens on your device, I cannot see your files. The server cannot see your files. Only someone with the link can see them.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;async function deriveKeyFromPassword(password) {
    const enc = new TextEncoder();
    const keyMaterial = await window.crypto.subtle.importKey("raw", enc.encode(password), { name: "PBKDF2" }, false, ["deriveKey"]);
    return window.crypto.subtle.deriveKey({ name: "PBKDF2", salt: enc.encode("NeuralShareSalt"), iterations: 100000, hash: "SHA-256" }, keyMaterial, { name: "AES-GCM", length: 256 }, true, ["encrypt", "decrypt"]);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://szilard2011.github.io/SimpleShare/" rel="noopener noreferrer"&gt;https://szilard2011.github.io/SimpleShare/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>opensource</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
