<?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: Nacho@BWS</title>
    <description>The latest articles on DEV Community by Nacho@BWS (@nacho_bws).</description>
    <link>https://dev.to/nacho_bws</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%2F3866438%2F2e98cd17-2cbb-48a8-8e79-64c395acf3b9.png</url>
      <title>DEV Community: Nacho@BWS</title>
      <link>https://dev.to/nacho_bws</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nacho_bws"/>
    <language>en</language>
    <item>
      <title>IPFS.NINJA: A Dead-Simple IPFS Pinning Service for Web3 Developers</title>
      <dc:creator>Nacho@BWS</dc:creator>
      <pubDate>Tue, 07 Apr 2026 19:13:53 +0000</pubDate>
      <link>https://dev.to/nacho_bws/ipfsninja-a-dead-simple-ipfs-pinning-service-for-web3-developers-1726</link>
      <guid>https://dev.to/nacho_bws/ipfsninja-a-dead-simple-ipfs-pinning-service-for-web3-developers-1726</guid>
      <description>&lt;p&gt;If you've ever tried to pin files to IPFS for a dApp, NFT project, or decentralized website, you've run into the same friction: setting up a Kubo node is overkill, existing pinning services have gotten expensive or shut down free tiers, and the API docs are often a mess.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://ipfs.ninja" rel="noopener noreferrer"&gt;IPFS.NINJA&lt;/a&gt;&lt;/strong&gt; is a new entrant that takes a different approach — ruthlessly simple, transparent pricing, and designed around the actual developer workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  What It Does
&lt;/h2&gt;

&lt;p&gt;At its core, IPFS.NINJA gives you:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. File Upload &amp;amp; CID Pinning
&lt;/h3&gt;

&lt;p&gt;Upload files directly through the dashboard or API. Already have a CID on the network? Pin it by reference — no re-upload needed.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Private Dedicated Gateways
&lt;/h3&gt;

&lt;p&gt;Each account gets its own &lt;code&gt;*.gw.ipfs.ninja&lt;/code&gt; subdomain. Unlike public gateways that are shared (and often rate-limited), your gateway bandwidth is yours. The free plan includes 5 GB/month; paid plans scale up to 50 GB per gateway.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Signed Upload Tokens
&lt;/h3&gt;

&lt;p&gt;This is the feature most useful for dApps. You can generate time-limited, scoped upload tokens that let your end-users upload directly to IPFS from the frontend — without ever exposing your master API key. This is critical for any NFT minting flow where users upload their own assets.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. IPNS Support
&lt;/h3&gt;

&lt;p&gt;Paid plans include IPNS names — mutable pointers that always resolve to your latest CID. If you've ever had to update a smart contract just because you changed a metadata JSON, IPNS solves that problem cleanly.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Image Optimization
&lt;/h3&gt;

&lt;p&gt;Built-in image optimization for assets served through the gateway — useful for NFT thumbnails and media-heavy dApps.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pricing
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Plan&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Storage&lt;/th&gt;
&lt;th&gt;Files&lt;/th&gt;
&lt;th&gt;Gateways&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Dharma (Free)&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;1 GB&lt;/td&gt;
&lt;td&gt;500&lt;/td&gt;
&lt;td&gt;1 (5 GB/mo BW)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bodhi&lt;/td&gt;
&lt;td&gt;$5/mo&lt;/td&gt;
&lt;td&gt;10 GB&lt;/td&gt;
&lt;td&gt;50,000&lt;/td&gt;
&lt;td&gt;5 (10 GB/mo ea.)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nirvana&lt;/td&gt;
&lt;td&gt;$29/mo&lt;/td&gt;
&lt;td&gt;100 GB&lt;/td&gt;
&lt;td&gt;500,000&lt;/td&gt;
&lt;td&gt;10 (50 GB/mo ea.)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;No bandwidth overage fees on any plan — bandwidth resets monthly and you just hit a soft cap. Storage is cumulative (doesn't reset), so you pay for what you keep.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick API Example
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Upload a file&lt;/span&gt;
curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://ipfs.ninja/api/v1/files &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer YOUR_API_KEY"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-F&lt;/span&gt; &lt;span class="s2"&gt;"file=@metadata.json"&lt;/span&gt;

&lt;span class="c"&gt;# Response includes your CID + gateway URL&lt;/span&gt;
&lt;span class="c"&gt;# { "cid": "bafybeig...", "url": "https://abc123.gw.ipfs.ninja/ipfs/bafybeig..." }&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Signed Upload Tokens — A Closer Look
&lt;/h2&gt;

&lt;p&gt;For dApp developers, signed upload tokens are the standout feature. Here's why they matter:&lt;/p&gt;

&lt;p&gt;In a typical NFT minting flow, users need to upload their image and metadata to IPFS before the mint transaction. The naive approach is to proxy uploads through your backend — every file goes through your server, adding latency and cost.&lt;/p&gt;

&lt;p&gt;With signed upload tokens, you can issue a short-lived, scoped token server-side and send it to the client. The client uploads directly to IPFS.NINJA without ever seeing your master API key. The token can be restricted by file size, file type, and expiry time.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Server-side: generate a signed token&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://ipfs.ninja/api/v1/upload-tokens&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Authorization&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Bearer YOUR_API_KEY&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;maxFileSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10485760&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// 10MB&lt;/span&gt;
    &lt;span class="na"&gt;expiresIn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3600&lt;/span&gt;        &lt;span class="c1"&gt;// 1 hour&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Send token to client — they upload directly&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Who Is This For?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;NFT builders&lt;/strong&gt; — pin metadata + media, serve through a private gateway, use IPNS so your tokenURI never goes stale&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;dApp developers&lt;/strong&gt; — use signed upload tokens so users upload their own content securely&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decentralized website hosting&lt;/strong&gt; — deploy static sites to IPFS with a stable gateway URL&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Teams migrating off nft.storage or Infura IPFS&lt;/strong&gt; — simple REST API, clean dashboard, no surprises&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Now?
&lt;/h2&gt;

&lt;p&gt;The IPFS pinning landscape shifted dramatically over the past two years. nft.storage ended its free tier. Infura deprecated its IPFS service. web3.storage went through multiple pivots. Developers who built on these services were left scrambling.&lt;/p&gt;

&lt;p&gt;IPFS.NINJA enters with a clear positioning: simple, transparent, and here to stay. The free tier is real (1 GB, 500 files, private gateway) and the paid plans are priced for actual indie developers and small teams — not just enterprise.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bottom Line
&lt;/h2&gt;

&lt;p&gt;IPFS.NINJA is worth trying if you want an IPFS pinning service that gets out of your way. The free tier is genuinely useful, and the $5/month Bodhi plan covers most small-to-medium projects comfortably.&lt;/p&gt;

&lt;p&gt;Check it out at &lt;a href="https://ipfs.ninja" rel="noopener noreferrer"&gt;ipfs.ninja&lt;/a&gt; and share your thoughts in the comments — especially if you're migrating from another service and have specific requirements.&lt;/p&gt;

</description>
      <category>ipfs</category>
      <category>web3</category>
      <category>blockchain</category>
      <category>api</category>
    </item>
  </channel>
</rss>
