<?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: Lightning Developer</title>
    <description>The latest articles on DEV Community by Lightning Developer (@lightningdev123).</description>
    <link>https://dev.to/lightningdev123</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%2F2757052%2F987f57b6-be53-4d74-9893-755596ff93c5.png</url>
      <title>DEV Community: Lightning Developer</title>
      <link>https://dev.to/lightningdev123</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lightningdev123"/>
    <language>en</language>
    <item>
      <title>Beyond Product Hunt: A Technical Launch Guide for 2026</title>
      <dc:creator>Lightning Developer</dc:creator>
      <pubDate>Fri, 03 Jul 2026 06:01:18 +0000</pubDate>
      <link>https://dev.to/lightningdev123/beyond-product-hunt-a-technical-launch-guide-for-2026-i2j</link>
      <guid>https://dev.to/lightningdev123/beyond-product-hunt-a-technical-launch-guide-for-2026-i2j</guid>
      <description>&lt;p&gt;In 2026, relying solely on Product Hunt for a product launch is often a net negative for indie makers and technical founders. The platform has become heavily saturated, where your visibility is dictated by a 24-hour voting window and existing social capital rather than objective product quality. For developers and bootstrapped founders, the better strategy is a multi-platform distribution model that emphasizes long-term SEO and community engagement over the "burst" traffic of a single leaderboard.&lt;/p&gt;

&lt;p&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%2F784gvucw4l6ri5fanv7o.webp" 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%2F784gvucw4l6ri5fanv7o.webp" alt="Blog Image" width="800" height="487"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Where to Focus Your Launch Efforts
&lt;/h3&gt;

&lt;p&gt;Instead of chasing a single "Launch of the Day," target platforms where your specific audience hangs out. Here are the most effective alternatives:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hacker News (Show HN):&lt;/strong&gt; The gold standard for developer tools, APIs, and CLI utilities. Your success here hinges on technical merit and the absence of marketing fluff. Ensure your product is accessible without a complex signup process.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://productwatch.io/" rel="noopener noreferrer"&gt;ProductWatch.io&lt;/a&gt;:&lt;/strong&gt; Unlike platforms that hide your product after 24 hours, this enables sustained visibility. It is excellent for AI tools and developer utilities.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&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%2Fpa1fj02u6p453n10g1ng.webp" 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%2Fpa1fj02u6p453n10g1ng.webp" alt="Blog Image" width="800" height="487"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;BetaList:&lt;/strong&gt; Ideal for the pre-launch phase. It surfaces your project to early adopters who expect alpha-stage software, making it a perfect funnel for building your initial waitlist.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Indie Hackers:&lt;/strong&gt; This is a community, not a directory. Use it to share "build in public" updates, metrics, and technical deep dives. It converts better than any other platform because the audience understands the trade-offs of the engineering process.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DevHunt:&lt;/strong&gt; A weekly launch platform specifically for SDKs, IDE extensions, and dev-tools. The weekly window allows for word-of-mouth momentum.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Multi-Channel Distribution Pattern
&lt;/h3&gt;

&lt;p&gt;Stop viewing your launch as an event. Treat it as an iterative process of establishing permanent backlinks and indexed pages. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Pre-launch:&lt;/strong&gt; Submit to &lt;code&gt;BetaList&lt;/code&gt; and &lt;code&gt;Launching Next&lt;/code&gt; to start capturing emails.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Execution:&lt;/strong&gt; Launch on &lt;code&gt;Hacker News&lt;/code&gt; or &lt;code&gt;DevHunt&lt;/code&gt; on a Tuesday or Wednesday morning Pacific time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Diversify:&lt;/strong&gt; Simultaneously submit to &lt;code&gt;Uneed&lt;/code&gt;, &lt;code&gt;SaaSHub&lt;/code&gt;, and &lt;code&gt;MicroLaunch&lt;/code&gt; to ensure you show up in long-tail search results.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Repeat:&lt;/strong&gt; Every time you ship a significant feature, treat it as a new launch. Use the same, albeit updated, documentation and directory listings to maintain presence.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&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%2F00arl0gdzpzi38petbju.webp" 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%2F00arl0gdzpzi38petbju.webp" alt="Blog Image" width="800" height="487"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Technical Best Practices
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Optimize for SEO:&lt;/strong&gt; Use &lt;code&gt;SaaSHub&lt;/code&gt; for its domain authority. These listings act as permanent anchors that rank for "[your-competitor] alternatives" queries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Be Transparent:&lt;/strong&gt; On &lt;code&gt;Indie Hackers&lt;/code&gt; or &lt;code&gt;Show HN&lt;/code&gt;, include links to your repository or documentation. If someone cannot verify your architecture, they will not bother with a trial.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skip the Marketing Jargon:&lt;/strong&gt; Use direct titles. Instead of "Revolutionizing Dev Tools with AI," use "Show HN: A CLI tool to automate database migrations with LLMs."&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Reference
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pinggy.io/blog/best_producthunt_alternatives/" rel="noopener noreferrer"&gt;Best Product Hunt Alternatives in 2026 to Launch Your Product&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devtools</category>
      <category>startup</category>
      <category>marketing</category>
      <category>saas</category>
    </item>
    <item>
      <title>Exposing Your Local AI Voice Studio to the Global Network with Pinggy</title>
      <dc:creator>Lightning Developer</dc:creator>
      <pubDate>Fri, 26 Jun 2026 18:33:00 +0000</pubDate>
      <link>https://dev.to/lightningdev123/exposing-your-local-ai-voice-studio-to-the-global-network-with-pinggy-32i5</link>
      <guid>https://dev.to/lightningdev123/exposing-your-local-ai-voice-studio-to-the-global-network-with-pinggy-32i5</guid>
      <description>&lt;p&gt;Voicebox has surged in popularity, becoming a go-to local-first solution for voice cloning, real-time dictation, and multi-engine TTS pipelines. Running models like Qwen3-TTS or Kokoro locally ensures your voice identity remains on your hardware, but this local-first approach often results in a connectivity bottleneck: the backend is restricted to localhost. If you want to bridge your powerful local GPU machine with remote AI agents or mobile workflows, you need a robust way to expose that internal port.&lt;/p&gt;

&lt;p&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%2Fj46i2b0rrqv0efsjbshy.webp" 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%2Fj46i2b0rrqv0efsjbshy.webp" alt="Blog Image" width="800" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Architectural Overview
&lt;/h3&gt;

&lt;p&gt;Voicebox 0.5.0, the latest stability release, functions across three distinct layers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Desktop Frontend:&lt;/strong&gt; A Tauri/React application for voice profile management and sample recording.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FastAPI Backend:&lt;/strong&gt; Runs locally at &lt;code&gt;http://127.0.0.1:17493&lt;/code&gt;, managing REST endpoints for speech generation and transcription.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP Server:&lt;/strong&gt; Exposes tools to agentic frameworks like Cursor or Claude Code, enabling voice features within LLM-driven workflows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whether you are using Docker or running from source, the application binds to the loopback interface by default. To interact with the &lt;code&gt;/generate&lt;/code&gt;, &lt;code&gt;/speak&lt;/code&gt;, or &lt;code&gt;/transcribe&lt;/code&gt; endpoints from a separate machine, you need to expose this port securely.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tunneling with &lt;a href="https://pinggy.io/" rel="noopener noreferrer"&gt;Pinggy&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Instead of fiddling with VPNs or router port forwarding, you can use &lt;a href="https://pinggy.io/" rel="noopener noreferrer"&gt;Pinggy&lt;/a&gt; to tunnel the local backend to a public HTTPS URL with one command. Run this in your terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh &lt;span class="nt"&gt;-p&lt;/span&gt; 443 &lt;span class="nt"&gt;-R0&lt;/span&gt;:localhost:17493 free.pinggy.io
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This command generates a public URL, such as &lt;code&gt;https://abc123.a.pinggy.link&lt;/code&gt;. You can now access your API remotely using standard tools like &lt;code&gt;curl&lt;/code&gt; or hook it directly into an MCP configuration:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"voicebox"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://abc123.a.pinggy.link/mcp"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Security and Production Considerations
&lt;/h3&gt;

&lt;p&gt;Directly exposing your local AI studio does introduce an attack surface. Since voice generation is resource-heavy, you should mitigate unauthorized usage by adding tunnel authentication. You can secure your endpoint with basic credentials:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh &lt;span class="nt"&gt;-p&lt;/span&gt; 443 &lt;span class="nt"&gt;-R0&lt;/span&gt;:localhost:17493 &lt;span class="nt"&gt;-t&lt;/span&gt; a@free.pinggy.io +https+auth:username:password
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;For most developers, this integration solves the gap between the "Privacy First" mandate of local tools and the requirement for distributed AI agent availability. The ability to trigger high-quality, local-model inference from a remote cloud-based orchestrator or a mobile device significantly expands the utility of your local hardware.&lt;/p&gt;
&lt;h2&gt;
  
  
  Reference
&lt;/h2&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://pinggy.io/blog/self_host_voicebox_with_pinggy/" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpinggy.io%2Fimages%2Fself_host_voicebox_with_pinggy%2Fself_host_voicebox_with_pinggy_banner.webp" height="450" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://pinggy.io/blog/self_host_voicebox_with_pinggy/" rel="noopener noreferrer" class="c-link"&gt;
            Self-Host Voicebox and Access Your AI Voice Studio from Anywhere

          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Voicebox is an open-source, local-first AI voice studio for cloning voices, dictating text, and composing multi-track audio. This guide shows how to run it as a server and expose it remotely with Pinggy.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpinggy.io%2Fassets%2Ffavicon2.ico" width="75" height="75"&gt;
          pinggy.io
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>ai</category>
      <category>voicebox</category>
      <category>ssh</category>
      <category>localdev</category>
    </item>
    <item>
      <title>Radiology AI in 2026: Why Your MRI Probably Won't Replace You Yet</title>
      <dc:creator>Lightning Developer</dc:creator>
      <pubDate>Thu, 25 Jun 2026 18:46:00 +0000</pubDate>
      <link>https://dev.to/lightningdev123/radiology-ai-in-2026-why-your-mri-probably-wont-replace-you-yet-b84</link>
      <guid>https://dev.to/lightningdev123/radiology-ai-in-2026-why-your-mri-probably-wont-replace-you-yet-b84</guid>
      <description>&lt;p&gt;So, it is 2026 and we are living in a world where Midjourney, the same people who taught computers to draw surrealist cats, decided to pivot to medical imaging. They have built a giant ultrasound machine that requires a shallow pool of water to operate. Imagine explaining to an FDA inspector that your medical device is basically a fancy hot tub. It uses 358,000 sensors to turn you into 40 GB of data in one minute. Who needs privacy when you can just be a high-resolution cross-section of fat and muscle? &lt;/p&gt;

&lt;h3&gt;
  
  
  The FDA Clearance Binge
&lt;/h3&gt;

&lt;p&gt;The FDA is currently handing out AI clearances like they are candy at a tech conference. We have hit 1,451 cleared devices. Radiology is doing the heavy lifting, accounting for 76% of these. It seems like if you can train a model to distinguish between a lung nodule and a coffee stain on an X-ray, you get a plaque on your wall. &lt;/p&gt;

&lt;h3&gt;
  
  
  The Big Players in the Diagnostic Arena
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Aidoc&lt;/strong&gt;: They are the current overachievers. They have over 31 clearances and are processing 60 million cases a year. Their foundation model for CT scans has 97% sensitivity, which is honestly more reliable than my morning memory search.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&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%2Fgrwgmmbuhsjqvd7vyujy.webp" 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%2Fgrwgmmbuhsjqvd7vyujy.webp" alt="Blog Image" width="800" height="484"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Viz.ai&lt;/strong&gt;: If you are having a stroke, they are the ones rushing to tell your doctor before you finish blinking. They have successfully cut treatment times by 31 minutes. That is less time spent in a hospital bed and more time spent regretting your lifestyle choices.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&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%2Ff8sp8nvg3pwupd9twmf8.webp" 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%2Ff8sp8nvg3pwupd9twmf8.webp" alt="Blog Image" width="799" height="490"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Reality Check
&lt;/h3&gt;

&lt;p&gt;Before we start bowing down to our new radiologist overlords, we have to talk about the 'generalizability gap'. A model that acts like a genius in a clean lab setting often becomes a complete amateur the moment it touches data from a different hospital or even a differently calibrated machine. If your model's accuracy drops by 24% because the hospital changed its brand of scanner, you have not built an AI, you have built a glorified guessing machine that is very sensitive to lighting.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Your Data is the Real Challenge
&lt;/h3&gt;

&lt;p&gt;Beyond technical hurdles, models are prone to 'shortcut learning'. One model figured out that portable X-ray machines were used more often on sicker patients and started using the machine type as a proxy for 'has a deadly disease'. Computers are not smart; they are just very efficient at cheating on the final exam. &lt;/p&gt;

&lt;h2&gt;
  
  
  Reference
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pinggy.io/blog/ai_medical_imaging_diagnostics_2026/" rel="noopener noreferrer"&gt;AI Medical Imaging in 2026: Best Radiology AI Tools, FDA Clearances, and Diagnostic Accuracy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>radiology</category>
      <category>medicaltech</category>
      <category>healthcare</category>
    </item>
    <item>
      <title>Stop Building Demos: Why Your LLMs Need a Sturdy Harness</title>
      <dc:creator>Lightning Developer</dc:creator>
      <pubDate>Thu, 25 Jun 2026 06:23:46 +0000</pubDate>
      <link>https://dev.to/lightningdev123/stop-building-demos-why-your-llms-need-a-sturdy-harness-j7n</link>
      <guid>https://dev.to/lightningdev123/stop-building-demos-why-your-llms-need-a-sturdy-harness-j7n</guid>
      <description>&lt;p&gt;Your LLM isn't broken; your infrastructure is just crying for help. Statistics suggest about 88% of AI projects end up in the digital graveyard because the 'harness' holding them together is thinner than a screen door on a submarine. If you want your agent to stop hallucinating and start working, you need to stop obsessing over model weights and start designing a better harness.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Exactly is a 'Harness'?
&lt;/h2&gt;

&lt;p&gt;Think of it this way: &lt;code&gt;Agent = Model + Harness&lt;/code&gt;. The model is the brain that generates fancy tokens, but the harness is the nervous system that keeps it from walking into a wall. It decides context, tool access, memory persistence, and the dreaded loop that keeps an agent from becoming an infinite cost generator. Two teams might use the same model, but if one has a better harness, they win. It is like putting a Ferrari engine in a lawnmower; sure, the engine is great, but you are still just cutting grass at 200 mph.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Anatomy of Control
&lt;/h2&gt;

&lt;p&gt;To keep your agent from acting like a caffeinated toddler, your harness needs to handle these domains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Context Assembly&lt;/strong&gt;: The model cannot see everything. Use it to decide what to feed the beast so it doesn't choke on irrelevant data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tool Connectors&lt;/strong&gt;: A model that can't touch an API is just a glorified chatbot. Let it play with file systems and services.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory/State&lt;/strong&gt;: Give it a way to remember user preferences so it doesn't ask 'Who are you?' every five minutes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Control Loop&lt;/strong&gt;: This is where logic happens. It should observe, act, and check goals.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Guardrails&lt;/strong&gt;: Please, for the love of everything holy, stop your agent from deleting the production database by accident.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Telemetry&lt;/strong&gt;: If you can't measure it, you can't fix it. Log your failures so you don't look surprised when users complain.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Stack That Doesn't Suck
&lt;/h2&gt;

&lt;p&gt;Don't try to build a custom behemoth from scratch on day one. Most teams thrive with this trio:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Build&lt;/strong&gt;: Grab a framework like &lt;code&gt;LangChain&lt;/code&gt; or &lt;code&gt;LlamaIndex&lt;/code&gt; to stop reinventing the wheel.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Execute&lt;/strong&gt;: Use a coding or workflow harness like &lt;code&gt;n8n&lt;/code&gt; to automate the heavy lifting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sanity Check&lt;/strong&gt;: Use an evaluation framework like &lt;code&gt;Promptfoo&lt;/code&gt; or &lt;code&gt;Braintrust&lt;/code&gt; to ensure your AI isn't just making stuff up.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  A Tiny Harness in Action
&lt;/h2&gt;

&lt;p&gt;Check out this bare-bones logic that actually gates your release if your AI starts failing its homework. If you can't pass this locally, you shouldn't be deploying to production.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;perf_counter&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;LLMHarness&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;llm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;llm&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cases&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;passed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;case&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;cases&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;case&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;case&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;must_include&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
                &lt;span class="n"&gt;passed&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pass_rate&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;passed&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cases&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;

&lt;span class="c1"&gt;# Your CI pipeline gate
&lt;/span&gt;&lt;span class="n"&gt;metrics&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;harness&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cases&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;metrics&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pass_rate&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.95&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Your model is hallucinating again, aborting!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Just swap that &lt;code&gt;fake_llm&lt;/code&gt; for a real one, and you have the start of a production-grade harness that prevents you from shipping garbage code.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pinggy.io/blog/best_ai_harnesses_to_supercharge_llm_models/" rel="noopener noreferrer"&gt;AI Harness Engineering: The Layer That Makes Your LLM Applications Actually Work&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://python.langchain.com/" rel="noopener noreferrer"&gt;LangChain&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.llamaindex.ai/" rel="noopener noreferrer"&gt;LlamaIndex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://n8n.io/" rel="noopener noreferrer"&gt;n8n&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.promptfoo.dev/" rel="noopener noreferrer"&gt;Promptfoo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.braintrust.dev/" rel="noopener noreferrer"&gt;Braintrust&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>devops</category>
      <category>python</category>
    </item>
    <item>
      <title>The Consolidation Era: Who Owns Your AI Coding Stack in 2026?</title>
      <dc:creator>Lightning Developer</dc:creator>
      <pubDate>Tue, 23 Jun 2026 13:18:24 +0000</pubDate>
      <link>https://dev.to/lightningdev123/the-consolidation-era-who-owns-your-ai-coding-stack-in-2026-1cod</link>
      <guid>https://dev.to/lightningdev123/the-consolidation-era-who-owns-your-ai-coding-stack-in-2026-1cod</guid>
      <description>&lt;p&gt;The AI coding landscape shifted dramatically in mid-2026. If you are a developer, your workflow likely relies on Cursor, Windsurf, Claude Code, or Copilot. Yet, many of us ignore who sits behind these tools. Following a wave of acquisitions, that technical oversight has become a strategic concern.&lt;/p&gt;

&lt;h3&gt;
  
  
  The New Ownership Map
&lt;/h3&gt;

&lt;p&gt;Within a 90-day window, the landscape consolidated rapidly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Copilot:&lt;/strong&gt; Owned by Microsoft. They control the base and the VS Code ecosystem.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Windsurf:&lt;/strong&gt; Acquired by OpenAI in March 2026 for $3 billion. Code sent here is now subject to OpenAI data policies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cursor:&lt;/strong&gt; SpaceX announced an acquisition for $60 billion in June 2026. With the xAI merger, this brings together the Colossus compute stack, Grok, and Cursor’s 4 million active users.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemini CLI:&lt;/strong&gt; Google discontinued the open-source version, replacing it with a closed-source Go binary (agy).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code:&lt;/strong&gt; Currently held by Anthropic, which maintains relative independence despite backing by Amazon and Google.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&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%2Ftxbay4xezl3r0l284qq0.webp" 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%2Ftxbay4xezl3r0l284qq0.webp" alt="Blog Image" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why the Aggressive M&amp;amp;A?
&lt;/h3&gt;

&lt;p&gt;This isn't just about market share; it is about vertical integration. Big Tech players are moving to own the entire pipeline, from the IDE to the training data. For SpaceX/xAI, acquiring Cursor is a play for:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Distribution:&lt;/strong&gt; Direct access to millions of professional codebases.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Training Data:&lt;/strong&gt; Real-world diffs and code sessions are essential to improve Grok's performance on SWE-bench.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Incentive Alignment:&lt;/strong&gt; By owning the editor, they create a gravity well for their own models, effectively neutralizing competitors like Anthropic's Claude inside their ecosystem.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Assessing Your Risk
&lt;/h3&gt;

&lt;p&gt;If you use these tools, your daily experience remains largely identical for now. However, you should monitor these three vectors:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model Agnosticism:&lt;/strong&gt; While Cursor currently supports multiple models, the parent company has a direct financial incentive to prioritize their proprietary models via pricing or UI placement.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacy and Compliance:&lt;/strong&gt; Enterprise legal teams need to re-evaluate data controllership. If your code is on proprietary cloud infrastructure, ensure you understand where that telemetry flows after the deal closes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Product Velocity:&lt;/strong&gt; Watch for "integration bloat." Increased compliance requirements and corporate roadmap alignment often slow down the rapid iteration cycles we expect from these tools.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Maintaining Independence
&lt;/h3&gt;

&lt;p&gt;For those who want to remain outside the major tech conglomerates, consider these alternatives:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code:&lt;/strong&gt; A terminal-based agent that currently avoids the large-scale integration "walled gardens."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Aider:&lt;/strong&gt; An open-source, Git-native tool that runs locally. It excels at surgical edits and supports local models via Ollama or OpenRouter.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Continue.dev:&lt;/strong&gt; A fully open-source extension for VS Code and JetBrains that allows you to provide your own API keys. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you need to manage these tools remotely or expose them for collaborative tasks, you can use a tunnel to access your local coding interface without complex configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh &lt;span class="nt"&gt;-p&lt;/span&gt; 443 &lt;span class="nt"&gt;-R0&lt;/span&gt;:localhost:3001 free.pinggy.io
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This command exposes your local session at port 3001 to a public HTTPS URL. It is a practical way to manage headless agents or local web interfaces from outside your primary development machine.&lt;/p&gt;
&lt;h2&gt;
  
  
  Reference
&lt;/h2&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://pinggy.io/blog/spacex_cursor_acquisition_developer_guide/" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpinggy.io%2Fimages%2Fspacex_cursor_acquisition%2Fspacex_cursor_acquisition_hero.webp" height="450" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://pinggy.io/blog/spacex_cursor_acquisition_developer_guide/" rel="noopener noreferrer" class="c-link"&gt;
            Who Owns Your AI Coding Tools in 2026

          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            SpaceX bought Cursor for $60B. OpenAI owns Windsurf. Google killed the Gemini CLI. In one week, the AI coding tool landscape consolidated into Big Tech hands. Here's what that means for your data, your model choice, and what independent options remain.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpinggy.io%2Fassets%2Ffavicon2.ico" width="75" height="75"&gt;
          pinggy.io
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>ai</category>
      <category>developer</category>
      <category>softwareengineering</category>
      <category>coding</category>
    </item>
    <item>
      <title>Decoupling the Network: A Developer's Guide to SDN Architecture</title>
      <dc:creator>Lightning Developer</dc:creator>
      <pubDate>Mon, 22 Jun 2026 16:46:05 +0000</pubDate>
      <link>https://dev.to/lightningdev123/decoupling-the-network-a-developers-guide-to-sdn-architecture-308o</link>
      <guid>https://dev.to/lightningdev123/decoupling-the-network-a-developers-guide-to-sdn-architecture-308o</guid>
      <description>&lt;p&gt;Software Defined Networking (SDN) shifts networking from manual CLI-based configuration to programmable infrastructure. It works by decoupling the control plane (the "brain" that decides where packets go) from the data plane (the "muscle" that forwards packets). In a traditional model, these two are coupled inside each monolithic router or switch, making global changes tedious and error-prone.&lt;/p&gt;

&lt;p&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%2Fj2dzvkr9mgm883blnclt.webp" 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%2Fj2dzvkr9mgm883blnclt.webp" alt="Blog Image" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why SDN Matters
&lt;/h3&gt;

&lt;p&gt;Unlike traditional networking, which relies on per-device configuration, SDN treats the network as an API-driven resource. You get a centralized controller, global topology awareness, and programmatic control, effectively killing vendor lock-in through standardized southbound APIs.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Three-Layer Architecture
&lt;/h3&gt;

&lt;p&gt;SDN partitions the network layer into three distinct components:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Data Plane&lt;/strong&gt;: Simple switches and routers that strictly execute rules (forward, drop, rewrite) defined in their flow tables. They interact with the controller when a packet arrives that doesn't match an existing rule.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Control Plane&lt;/strong&gt;: The SDN controller. It maintains the global network state and pushes rules via southbound protocols like &lt;code&gt;OpenFlow&lt;/code&gt;, &lt;code&gt;NETCONF&lt;/code&gt;, or &lt;code&gt;P4Runtime&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Application Plane&lt;/strong&gt;: Where the logic lives. Instead of local protocols, load balancers, firewalls, and traffic engineering systems run as software that consumes the controller's northbound REST or gRPC APIs.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Key Protocols and Toolsets
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OpenFlow&lt;/strong&gt;: The legacy standard. Effective for fixed match-action pipelines, but restricted by the hard-coded fields in the spec.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;P4&lt;/strong&gt;: The modern choice for custom logic. It lets you define your own packet parsers and headers in code, allowing for in-network telemetry that &lt;code&gt;OpenFlow&lt;/code&gt; can't handle.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NETCONF/RESTCONF&lt;/strong&gt;: Used for device orchestration. While &lt;code&gt;OpenFlow&lt;/code&gt; manages flow-level state, &lt;code&gt;NETCONF&lt;/code&gt; handles the persistent device configuration using YANG data models.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Controller Landscape
&lt;/h3&gt;

&lt;p&gt;If you are evaluating production-ready stacks, focus on these three:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ONOS&lt;/strong&gt;: Built for high-availability. It features native clustering and is the go-to for carrier-grade service provider networks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenDaylight (ODL)&lt;/strong&gt;: The most prevalent choice in multi-vendor cloud integrations. It offers massive protocol support (BGP, OVSDB, etc.) and a robust modular architecture.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ryu&lt;/strong&gt;: Your best bet for prototyping. Being Python-based, it is extremely approachable for labs and research, even without the production features of its counterparts.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tradeoffs and Limitations
&lt;/h3&gt;

&lt;p&gt;Be aware that moving to SDN isn't magic. The controller becomes a critical failure point; unless you cluster your controller, a crash effectively blinds your data plane. Additionally, reactive flow installation introduces latency to the first packet of new flows. For latency-sensitive workflows, you must move to proactive rule installation. Finally, remember that your security model shifts: your northbound API and the southbound channel (ideally secured via TLS) are now your primary attack vectors.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reference
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pinggy.io/blog/what_is_sdn_software_defined_networking/" rel="noopener noreferrer"&gt;What Is SDN (Software Defined Networking)? Architecture, Protocols, and Use Cases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://datatracker.ietf.org/doc/html/rfc6241" rel="noopener noreferrer"&gt;NETCONF Protocol (RFC 6241)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://datatracker.ietf.org/doc/html/rfc8040" rel="noopener noreferrer"&gt;RESTCONF Protocol (RFC 8040)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dl.acm.org/doi/10.1145/2486001.2486019" rel="noopener noreferrer"&gt;B4: Experience with a Globally-Deployed Software Defined WAN&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>networking</category>
      <category>sdn</category>
      <category>infrastructure</category>
      <category>devops</category>
    </item>
    <item>
      <title>Agentjacking Explained: When AI Coding Assistants Can Be Tricked Into Running Malicious Commands</title>
      <dc:creator>Lightning Developer</dc:creator>
      <pubDate>Thu, 18 Jun 2026 12:27:33 +0000</pubDate>
      <link>https://dev.to/lightningdev123/agentjacking-explained-when-ai-coding-assistants-can-be-tricked-into-running-malicious-commands-2271</link>
      <guid>https://dev.to/lightningdev123/agentjacking-explained-when-ai-coding-assistants-can-be-tricked-into-running-malicious-commands-2271</guid>
      <description>&lt;h2&gt;
  
  
  AI Tools Are Becoming More Powerful, But Also More Trusting
&lt;/h2&gt;

&lt;p&gt;AI coding assistants have rapidly become part of many developers' daily workflows. They can inspect logs, analyze production errors, suggest fixes, execute commands, and automate repetitive tasks.&lt;/p&gt;

&lt;p&gt;That convenience, however, has introduced a new category of security concerns.&lt;/p&gt;

&lt;p&gt;Researchers recently uncovered a technique called &lt;strong&gt;Agentjacking&lt;/strong&gt;, a method that manipulates AI coding agents by feeding them malicious information disguised as legitimate development data.&lt;/p&gt;

&lt;p&gt;The concerning part is that no traditional hacking method is required. There is no need to compromise servers, break passwords, or bypass authentication systems. Instead, attackers exploit trust relationships between integrated tools.&lt;/p&gt;

&lt;p&gt;This incident is forcing developers to rethink how much authority AI agents should have inside development environments.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is Agentjacking?
&lt;/h2&gt;

&lt;p&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%2Fp80zuhurroq3vxh41j23.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%2Fp80zuhurroq3vxh41j23.png" alt="Agentjacking" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agentjacking is an attack that targets AI coding assistants connected to external tools through the Model Context Protocol (MCP).&lt;/p&gt;

&lt;p&gt;The idea is simple.&lt;/p&gt;

&lt;p&gt;An attacker inserts a carefully crafted fake bug report into a system that the AI agent already trusts. Later, when a developer asks the AI to investigate unresolved issues, the agent processes the malicious content and may execute harmful commands.&lt;/p&gt;

&lt;p&gt;The AI believes it is fixing a real problem, while in reality it is carrying out instructions written by an attacker.&lt;/p&gt;

&lt;p&gt;The result can be exposure of sensitive data stored on a developer's machine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Sentry Became The Center Of Attention
&lt;/h2&gt;

&lt;p&gt;Many engineering teams use Sentry to collect application crashes, performance issues, and production errors.&lt;/p&gt;

&lt;p&gt;Applications send error reports to Sentry using a Data Source Name, commonly called a DSN.&lt;/p&gt;

&lt;p&gt;Unlike many credentials, a DSN is intentionally public because browsers and frontend applications need access to it in order to submit error reports.&lt;/p&gt;

&lt;p&gt;Traditionally, this design was considered safe because the DSN only allowed information to be sent into Sentry. It was never intended to provide access to existing data.&lt;/p&gt;

&lt;p&gt;That assumption worked well until AI systems started consuming those incoming reports automatically.&lt;/p&gt;

&lt;p&gt;The separation between "data submission" and "data consumption" has now become a potential security gap.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding MCP And Why It Matters
&lt;/h2&gt;

&lt;p&gt;Model Context Protocol, or MCP, acts as a bridge between AI assistants and external services.&lt;/p&gt;

&lt;p&gt;Instead of manually opening dashboards and copying information, developers can ask their AI agent questions such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Show unresolved production issues&lt;/li&gt;
&lt;li&gt;Analyze recent failures&lt;/li&gt;
&lt;li&gt;Suggest fixes for application errors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The AI retrieves information directly from connected services.&lt;/p&gt;

&lt;p&gt;The problem is that the agent often treats these integrations as trusted sources rather than unverified inputs.&lt;/p&gt;

&lt;p&gt;That trust creates an opportunity for attackers.&lt;/p&gt;

&lt;h2&gt;
  
  
  How The Attack Unfolds
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Locate A Public DSN
&lt;/h3&gt;

&lt;p&gt;Since DSNs are commonly exposed inside frontend code, they can often be found through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Public JavaScript bundles&lt;/li&gt;
&lt;li&gt;Open source repositories&lt;/li&gt;
&lt;li&gt;Search engines that index source code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No security breach is necessary.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Submit A Fake Error Report
&lt;/h3&gt;

&lt;p&gt;An attacker sends an error event to Sentry that looks legitimate.&lt;/p&gt;

&lt;p&gt;Instead of simply describing a problem, the report contains a fabricated solution section.&lt;/p&gt;

&lt;p&gt;That section may include instructions telling the AI agent to run a command line utility.&lt;/p&gt;

&lt;p&gt;From Sentry's perspective, this appears no different from a normal developer note.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Wait For The Developer Workflow
&lt;/h3&gt;

&lt;p&gt;Later, a developer asks their AI coding assistant to investigate production issues.&lt;/p&gt;

&lt;p&gt;The agent queries Sentry through MCP.&lt;/p&gt;

&lt;p&gt;The malicious report is returned alongside genuine application errors.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: The AI Executes The Suggested Command
&lt;/h3&gt;

&lt;p&gt;Since the injected instructions resemble authentic troubleshooting steps, the AI may run them without recognizing the danger.&lt;/p&gt;

&lt;p&gt;The command executes using the same permissions available to the developer.&lt;/p&gt;

&lt;p&gt;At this point, the attacker no longer needs direct access to the system.&lt;/p&gt;

&lt;p&gt;The AI has unknowingly become the intermediary.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Information Could Be Exposed?
&lt;/h2&gt;

&lt;p&gt;A malicious package may attempt to collect sensitive development assets, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Environment variables&lt;/li&gt;
&lt;li&gt;AWS configuration files&lt;/li&gt;
&lt;li&gt;Docker authentication data&lt;/li&gt;
&lt;li&gt;npm access tokens&lt;/li&gt;
&lt;li&gt;SSH keys&lt;/li&gt;
&lt;li&gt;Git credentials&lt;/li&gt;
&lt;li&gt;Internal repository information&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because the commands run within a trusted environment, data can be transmitted externally without immediately raising suspicion.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Traditional Security Tools Struggle To Detect It
&lt;/h2&gt;

&lt;p&gt;This attack is unusual because every action appears authorized.&lt;/p&gt;

&lt;p&gt;Security tools are generally designed to detect suspicious or unauthorized behavior.&lt;/p&gt;

&lt;p&gt;In this scenario:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The AI agent is approved by the developer.&lt;/li&gt;
&lt;li&gt;The external integration is intentionally connected.&lt;/li&gt;
&lt;li&gt;The executed commands appear legitimate.&lt;/li&gt;
&lt;li&gt;The outbound network requests look normal.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is no obvious intrusion.&lt;/p&gt;

&lt;p&gt;The security model breaks down because trust already exists at every stage.&lt;/p&gt;

&lt;p&gt;Researchers describe this as an "authorized trust chain", where each component independently behaves as expected, yet the overall system becomes vulnerable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Prompt Instructions Alone Are Not Enough
&lt;/h2&gt;

&lt;p&gt;Some teams rely on system prompts that tell AI agents to distrust external content.&lt;/p&gt;

&lt;p&gt;Unfortunately, this may not be sufficient.&lt;/p&gt;

&lt;p&gt;AI models often assign a higher level of trust to connected tools than they do to user conversations.&lt;/p&gt;

&lt;p&gt;If a malicious instruction arrives through an approved integration, the agent may treat it as factual information instead of potentially harmful content.&lt;/p&gt;

&lt;p&gt;This highlights a broader limitation of current AI systems.&lt;/p&gt;

&lt;p&gt;Tool outputs are not always evaluated with enough skepticism.&lt;/p&gt;

&lt;h2&gt;
  
  
  This Problem Goes Beyond Sentry
&lt;/h2&gt;

&lt;p&gt;Sentry simply demonstrated the issue clearly.&lt;/p&gt;

&lt;p&gt;The bigger concern is that many collaboration platforms could theoretically become injection points.&lt;/p&gt;

&lt;p&gt;Potential examples include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Issue tracking systems&lt;/li&gt;
&lt;li&gt;Team messaging platforms&lt;/li&gt;
&lt;li&gt;Project management tools&lt;/li&gt;
&lt;li&gt;Incident management dashboards&lt;/li&gt;
&lt;li&gt;External support portals&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Any system that accepts user-generated content and forwards it into an AI agent's context deserves closer examination.&lt;/p&gt;

&lt;p&gt;The more integrations an AI assistant has, the larger its attack surface becomes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practical Steps Developers Should Take Today
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Disconnect Unused MCP Integrations
&lt;/h3&gt;

&lt;p&gt;Review every external service connected to your AI coding assistant.&lt;/p&gt;

&lt;p&gt;Remove anything that is not actively necessary.&lt;/p&gt;

&lt;p&gt;Every integration increases risk.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Audit Publicly Exposed DSNs
&lt;/h3&gt;

&lt;p&gt;Search repositories and historical commits for DSNs.&lt;/p&gt;

&lt;p&gt;If they have been widely exposed, rotate them.&lt;/p&gt;

&lt;p&gt;While DSNs are designed to be public, tracking and refreshing them adds another layer of control.&lt;/p&gt;

&lt;p&gt;Useful commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git log &lt;span class="nt"&gt;--all&lt;/span&gt; &lt;span class="nt"&gt;-S&lt;/span&gt; &lt;span class="s1"&gt;'sentry.io/api'&lt;/span&gt;

&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s1"&gt;'sentry.io/api'&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;--include&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'*.js'&lt;/span&gt; &lt;span class="nt"&gt;--include&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'*.ts'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  3. Add DSN Detection To Secret Scanning
&lt;/h3&gt;

&lt;p&gt;Expand your scanning tools to recognize DSN patterns.&lt;/p&gt;

&lt;p&gt;Although DSNs are intentionally public, monitoring their spread helps identify projects that may be vulnerable.&lt;/p&gt;

&lt;p&gt;Example rule:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[[rules]]&lt;/span&gt;
&lt;span class="py"&gt;id&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"sentry-dsn"&lt;/span&gt;
&lt;span class="py"&gt;description&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Sentry DSN"&lt;/span&gt;
&lt;span class="py"&gt;regex&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'''https://[a-f0-9]{32}@o[0-9]+\.ingest\.sentry\.io'''&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  4. Monitor Outbound Activity
&lt;/h3&gt;

&lt;p&gt;Pay attention to unexpected network requests made by AI agent processes.&lt;/p&gt;

&lt;p&gt;Tools that track new external connections can provide valuable forensic visibility.&lt;/p&gt;

&lt;p&gt;Monitoring will not stop every attack, but it can reveal unusual behavior.&lt;/p&gt;
&lt;h3&gt;
  
  
  5. Treat MCP Servers Like Software Dependencies
&lt;/h3&gt;

&lt;p&gt;Before connecting a service, ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do we fully understand this integration?&lt;/li&gt;
&lt;li&gt;Is it necessary?&lt;/li&gt;
&lt;li&gt;Can it operate in a read-only mode?&lt;/li&gt;
&lt;li&gt;Has it been audited?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Developers already vet packages before installing them.&lt;/p&gt;

&lt;p&gt;AI integrations deserve the same level of scrutiny.&lt;/p&gt;
&lt;h2&gt;
  
  
  AI Agents Are Creating A New Security Category
&lt;/h2&gt;

&lt;p&gt;AI coding assistants are intentionally built to take action.&lt;/p&gt;

&lt;p&gt;Their value comes from reducing manual work.&lt;/p&gt;

&lt;p&gt;However, every capability also expands the potential attack surface.&lt;/p&gt;

&lt;p&gt;The challenge is no longer preventing unauthorized access.&lt;/p&gt;

&lt;p&gt;The challenge is preventing trusted systems from making dangerous decisions on behalf of humans.&lt;/p&gt;

&lt;p&gt;This will likely become one of the defining security conversations of modern software development.&lt;/p&gt;
&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Agentjacking is a reminder that AI systems inherit the trust assumptions of every tool they connect to.&lt;/p&gt;

&lt;p&gt;No single product failed in isolation. Instead, several individually safe components combined to create an unexpected vulnerability.&lt;/p&gt;

&lt;p&gt;As AI agents become more autonomous, developers will need to adopt a new mindset.&lt;/p&gt;

&lt;p&gt;Every integration is a trust boundary.&lt;/p&gt;

&lt;p&gt;Every data source is potentially untrusted.&lt;/p&gt;

&lt;p&gt;And every permission granted to an AI assistant should be treated with the same caution as granting access to another human engineer.&lt;/p&gt;
&lt;h3&gt;
  
  
  Reference
&lt;/h3&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://pinggy.io/blog/agentjacking_ai_coding_agents_sentry_mcp/" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpinggy.io%2Fimages%2Fagentjacking_attack%2Fagentjacking_attack_banner.webp" height="450" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://pinggy.io/blog/agentjacking_ai_coding_agents_sentry_mcp/" rel="noopener noreferrer" class="c-link"&gt;
            Agentjacking: How a Fake Sentry Bug Report Hijacks Your AI Coding Agent

          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            A new attack called agentjacking uses public Sentry DSNs and MCP to inject malicious instructions into Claude Code, Cursor, and Codex - then exfiltrates your AWS keys, GitHub tokens, and git credentials. 85% success rate, 2,388 orgs exposed, zero authentication needed.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpinggy.io%2Fassets%2Ffavicon2.ico" width="75" height="75"&gt;
          pinggy.io
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>aiops</category>
      <category>devops</category>
      <category>tooling</category>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>Self-Hosted Customer Support Is Becoming Mainstream</title>
      <dc:creator>Lightning Developer</dc:creator>
      <pubDate>Wed, 17 Jun 2026 13:14:55 +0000</pubDate>
      <link>https://dev.to/lightningdev123/self-hosted-customer-support-is-becoming-mainstream-1p94</link>
      <guid>https://dev.to/lightningdev123/self-hosted-customer-support-is-becoming-mainstream-1p94</guid>
      <description>&lt;p&gt;Customer support platforms have become an essential part of running online products. Whether it's answering customer questions, managing emails, or handling conversations from multiple channels, businesses often depend on expensive third-party services.&lt;/p&gt;

&lt;p&gt;For many independent developers and small teams, recurring subscription costs can quickly become difficult to justify. Fortunately, open source alternatives have matured significantly.&lt;/p&gt;

&lt;p&gt;One of the strongest options available today is Chatwoot. It allows you to create a complete customer communication system on an infrastructure that you control. Combined with &lt;a href="https://pinggy.io/" rel="noopener noreferrer"&gt;Pinggy&lt;/a&gt;, you can even make a locally hosted Chatwoot instance accessible on the internet without purchasing additional networking infrastructure.&lt;/p&gt;

&lt;p&gt;This guide explains how Chatwoot works, how to deploy it yourself, and how &lt;a href="https://pinggy.io/" rel="noopener noreferrer"&gt;Pinggy&lt;/a&gt; simplifies public access.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Many Developers Are Moving Toward Self-Hosted Customer Support
&lt;/h2&gt;

&lt;p&gt;Popular customer support solutions are convenient, but costs often increase as teams grow or advanced features become necessary.&lt;/p&gt;

&lt;p&gt;A simple support setup can become expensive once you add automation, AI capabilities, or multiple support agents.&lt;/p&gt;

&lt;p&gt;Self-hosting changes that equation. Instead of paying for the software every month, you manage the application yourself and only pay for the infrastructure you use.&lt;/p&gt;

&lt;p&gt;Chatwoot is one of the leading projects in this space.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is Chatwoot?
&lt;/h2&gt;

&lt;p&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.amazonaws.com%2Fuploads%2Farticles%2Fifwisgekmqnu8eadj1bp.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.amazonaws.com%2Fuploads%2Farticles%2Fifwisgekmqnu8eadj1bp.png" alt="Chatwoot" width="799" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Chatwoot is an open-source customer engagement platform that centralizes communication from multiple channels into a single interface.&lt;/p&gt;

&lt;p&gt;It can be installed on your own server or personal machine and supports various communication sources.&lt;/p&gt;

&lt;p&gt;Some of its major capabilities include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website live chat&lt;/li&gt;
&lt;li&gt;Shared team inboxes&lt;/li&gt;
&lt;li&gt;Email integration&lt;/li&gt;
&lt;li&gt;WhatsApp connectivity&lt;/li&gt;
&lt;li&gt;Telegram integration&lt;/li&gt;
&lt;li&gt;Customer knowledge bases&lt;/li&gt;
&lt;li&gt;Internal notes for support teams&lt;/li&gt;
&lt;li&gt;Automated routing rules&lt;/li&gt;
&lt;li&gt;AI-powered assistance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The project is actively maintained and has built a large developer community.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Chatwoot Organizes Customer Conversations
&lt;/h2&gt;

&lt;p&gt;At its heart, Chatwoot acts as a unified inbox.&lt;/p&gt;

&lt;p&gt;Instead of opening separate applications for emails, website chats, and messaging apps, every incoming conversation appears in one dashboard.&lt;/p&gt;

&lt;p&gt;Support teams can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Assign conversations to specific team members&lt;/li&gt;
&lt;li&gt;Add internal comments&lt;/li&gt;
&lt;li&gt;View customer history&lt;/li&gt;
&lt;li&gt;Tag conversations&lt;/li&gt;
&lt;li&gt;Create canned responses&lt;/li&gt;
&lt;li&gt;Track visitor activity before they start a conversation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This significantly reduces context switching.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Built-In AI Assistant: Captain
&lt;/h2&gt;

&lt;p&gt;Recent Chatwoot releases introduced Captain, an integrated AI system designed to help support teams work more efficiently.&lt;/p&gt;

&lt;p&gt;Captain includes several useful components.&lt;/p&gt;

&lt;h3&gt;
  
  
  Captain Assistant
&lt;/h3&gt;

&lt;p&gt;This feature can answer customer questions automatically by referencing your documentation and previous interactions.&lt;/p&gt;

&lt;p&gt;It is particularly useful during non-working hours.&lt;/p&gt;

&lt;h3&gt;
  
  
  Captain Co-Pilot
&lt;/h3&gt;

&lt;p&gt;Instead of writing every response manually, support agents receive AI-generated suggestions directly inside the editor.&lt;/p&gt;

&lt;p&gt;Human agents can modify and approve responses before sending them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Captain FAQs
&lt;/h3&gt;

&lt;p&gt;This component identifies unanswered questions appearing repeatedly in customer conversations.&lt;/p&gt;

&lt;p&gt;It helps teams discover gaps in their documentation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Captain Memories
&lt;/h3&gt;

&lt;p&gt;The AI stores useful customer context such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Business size&lt;/li&gt;
&lt;li&gt;Previous issues&lt;/li&gt;
&lt;li&gt;Product preferences&lt;/li&gt;
&lt;li&gt;Historical interactions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That information becomes available during future conversations.&lt;/p&gt;

&lt;p&gt;The captain requires an external AI provider such as OpenAI or any compatible endpoint.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Biggest Challenge of Running Chatwoot Locally
&lt;/h2&gt;

&lt;p&gt;Deploying Chatwoot is relatively straightforward.&lt;/p&gt;

&lt;p&gt;The networking aspect is where many beginners get stuck.&lt;/p&gt;

&lt;p&gt;By default, Docker keeps services accessible only from the local machine.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;http://localhost:3000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;works perfectly on your own computer.&lt;/p&gt;

&lt;p&gt;However, website visitors cannot reach localhost.&lt;/p&gt;

&lt;p&gt;If you embed a chat widget on your website, external users need a publicly accessible URL.&lt;/p&gt;

&lt;p&gt;There are several traditional ways to solve this.&lt;/p&gt;
&lt;h3&gt;
  
  
  Option 1: Rent a VPS
&lt;/h3&gt;

&lt;p&gt;You can deploy Chatwoot directly to a cloud server.&lt;/p&gt;

&lt;p&gt;Although effective, this adds server management responsibilities.&lt;/p&gt;
&lt;h3&gt;
  
  
  Option 2: Configure Router Port Forwarding
&lt;/h3&gt;

&lt;p&gt;This exposes your home network to the internet.&lt;/p&gt;

&lt;p&gt;It may also require a static IP address and additional firewall configuration.&lt;/p&gt;
&lt;h3&gt;
  
  
  Option 3: Use a Secure Tunnel
&lt;/h3&gt;

&lt;p&gt;This is often the easiest approach for small projects.&lt;/p&gt;

&lt;p&gt;This is where &lt;a href="https://pinggy.io/" rel="noopener noreferrer"&gt;Pinggy&lt;/a&gt; becomes useful.&lt;/p&gt;
&lt;h2&gt;
  
  
  How Pinggy Makes Local Chatwoot Accessible Online
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://pinggy.io/" rel="noopener noreferrer"&gt;Pinggy&lt;/a&gt; establishes a reverse SSH tunnel.&lt;/p&gt;

&lt;p&gt;Instead of opening your network to incoming traffic, your computer creates an outbound connection.&lt;/p&gt;

&lt;p&gt;When users access your public URL, &lt;a href="https://pinggy.io/" rel="noopener noreferrer"&gt;Pinggy&lt;/a&gt; securely forwards requests back to your local Chatwoot installation.&lt;/p&gt;

&lt;p&gt;Advantages include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No router modifications&lt;/li&gt;
&lt;li&gt;No firewall changes&lt;/li&gt;
&lt;li&gt;No static IP requirements&lt;/li&gt;
&lt;li&gt;No server administration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A single command can expose your application.&lt;/p&gt;
&lt;h2&gt;
  
  
  System Requirements Before Installation
&lt;/h2&gt;

&lt;p&gt;You will need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;Docker Compose&lt;/li&gt;
&lt;li&gt;Linux, macOS, or Windows with WSL2&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Step 1: Download the Required Configuration Files
&lt;/h2&gt;

&lt;p&gt;Create a working directory and fetch the necessary files.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;chatwoot
&lt;span class="nb"&gt;cd &lt;/span&gt;chatwoot

wget &lt;span class="nt"&gt;-O&lt;/span&gt; .env https://raw.githubusercontent.com/chatwoot/chatwoot/develop/.env.example

wget &lt;span class="nt"&gt;-O&lt;/span&gt; docker-compose.yaml https://raw.githubusercontent.com/chatwoot/chatwoot/develop/docker-compose.production.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Step 2: Configure Environment Variables
&lt;/h2&gt;

&lt;p&gt;Open the &lt;code&gt;.env&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;Configure these values.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Generate with openssl rand -hex 64&lt;/span&gt;

&lt;span class="nv"&gt;SECRET_KEY_BASE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_secret_key_here

&lt;span class="nv"&gt;POSTGRES_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_database_password

&lt;span class="nv"&gt;REDIS_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_redis_password

&lt;span class="nv"&gt;FRONTEND_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;http://localhost:3000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;code&gt;FRONTEND_URL&lt;/code&gt; is extremely important because Chatwoot uses it when generating links and connecting widgets.&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 3: Prepare the Database
&lt;/h2&gt;

&lt;p&gt;Before launching the application, initialize the database.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose run &lt;span class="nt"&gt;--no-deps&lt;/span&gt; rails bundle &lt;span class="nb"&gt;exec &lt;/span&gt;rails db:chatwoot_prepare
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;During this process, create your administrator account.&lt;/p&gt;

&lt;p&gt;Choose credentials that you can easily remember.&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 4: Launch Chatwoot
&lt;/h2&gt;

&lt;p&gt;Start all required services.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Several containers will start:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rails application server&lt;/li&gt;
&lt;li&gt;Sidekiq background processor&lt;/li&gt;
&lt;li&gt;PostgreSQL database&lt;/li&gt;
&lt;li&gt;Redis cache&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After a short wait, open:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:3000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;You should see the login screen.&lt;/p&gt;
&lt;h1&gt;
  
  
  Making Chatwoot Public with Pinggy
&lt;/h1&gt;

&lt;p&gt;Open a new terminal window.&lt;/p&gt;

&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh &lt;span class="nt"&gt;-p&lt;/span&gt; 443 &lt;span class="nt"&gt;-R0&lt;/span&gt;:localhost:3000 free.pinggy.io
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://pinggy.io/" rel="noopener noreferrer"&gt;Pinggy&lt;/a&gt; will generate temporary public URLs.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://xyz123.a.pinggy.link

https://xyz123.a.pinggy.link
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Copy the HTTPS URL.&lt;/p&gt;

&lt;p&gt;Update your &lt;code&gt;.env&lt;/code&gt; file.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;FRONTEND_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;https://xyz123.a.pinggy.link
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Now restart the affected services.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose restart rails sidekiq
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Your Chatwoot instance is now accessible worldwide.&lt;/p&gt;
&lt;h2&gt;
  
  
  Creating a Permanent URL
&lt;/h2&gt;

&lt;p&gt;Temporary addresses change whenever the tunnel reconnects.&lt;/p&gt;

&lt;p&gt;For long term deployments, obtaining a fixed domain is more practical.&lt;/p&gt;

&lt;p&gt;A persistent URL removes the need to repeatedly update your configuration.&lt;/p&gt;

&lt;p&gt;Automated reconnection can also be configured using authentication tokens.&lt;/p&gt;
&lt;h2&gt;
  
  
  Creating Your First Website Inbox
&lt;/h2&gt;

&lt;p&gt;After logging in, navigate to:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Settings → Inboxes → New Inbox
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Choose:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Website
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Chatwoot will generate a JavaScript snippet.&lt;/p&gt;

&lt;p&gt;Place it before the closing body tag of your website.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;BASE_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://your-domain&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;g&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;

&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementsByTagName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="nx"&gt;g&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;BASE_URL&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/packs/js/sdk.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;g&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;defer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;g&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parentNode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;insertBefore&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;g&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;g&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onload&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;

&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;chatwootSDK&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;

&lt;span class="na"&gt;websiteToken&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;your_token&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

&lt;span class="na"&gt;baseUrl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;BASE_URL&lt;/span&gt;

&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;})(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;script&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Once deployed, visitors will immediately see a chat widget.&lt;/p&gt;
&lt;h2&gt;
  
  
  How AI Support Works in Daily Operations
&lt;/h2&gt;

&lt;p&gt;After enabling Captain, AI assistance becomes available directly inside your workflow.&lt;/p&gt;

&lt;p&gt;The system can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Suggest responses&lt;/li&gt;
&lt;li&gt;Answer questions automatically&lt;/li&gt;
&lt;li&gt;Analyze customer patterns&lt;/li&gt;
&lt;li&gt;Improve documentation over time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One particularly useful feature is FAQ discovery.&lt;/p&gt;

&lt;p&gt;After a week of customer interactions, teams can identify recurring questions that are not properly documented.&lt;/p&gt;

&lt;p&gt;This creates a roadmap for improving support resources.&lt;/p&gt;
&lt;h2&gt;
  
  
  Important Considerations Before Self-Hosting
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Email Configuration Is Not Automatic
&lt;/h3&gt;

&lt;p&gt;SMTP settings are disabled by default.&lt;/p&gt;

&lt;p&gt;Without configuring an email provider, email notifications will not work.&lt;/p&gt;

&lt;p&gt;Services like Resend or Brevo are often used.&lt;/p&gt;
&lt;h3&gt;
  
  
  AI Usage Still Has Costs
&lt;/h3&gt;

&lt;p&gt;Chatwoot itself is free.&lt;/p&gt;

&lt;p&gt;However, external AI providers charge based on token consumption.&lt;/p&gt;

&lt;p&gt;The total cost depends entirely on usage volume.&lt;/p&gt;
&lt;h3&gt;
  
  
  Infrastructure Is Your Responsibility
&lt;/h3&gt;

&lt;p&gt;Self-hosting means ownership.&lt;/p&gt;

&lt;p&gt;You are responsible for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Software updates&lt;/li&gt;
&lt;li&gt;Data backups&lt;/li&gt;
&lt;li&gt;System monitoring&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Routine updates are simple, though.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose pull

docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Hardware Requirements Are Reasonable
&lt;/h3&gt;

&lt;p&gt;A lightweight deployment generally consumes around 600 MB to 700 MB of memory at idle.&lt;/p&gt;

&lt;p&gt;For smooth operation, 2 GB RAM is recommended.&lt;/p&gt;

&lt;p&gt;Modern laptops and devices such as the Raspberry Pi 5 can handle it comfortably.&lt;/p&gt;
&lt;h1&gt;
  
  
  Is Self-Hosting Worth It?
&lt;/h1&gt;

&lt;p&gt;The answer depends on your priorities.&lt;/p&gt;

&lt;p&gt;Hosted services offer convenience, but self-hosted solutions provide flexibility and cost control.&lt;/p&gt;

&lt;p&gt;If you are comfortable managing Docker applications, Chatwoot offers an impressive set of capabilities without forcing you into recurring software subscriptions.&lt;/p&gt;

&lt;p&gt;The only missing ingredient for local deployments is internet accessibility.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pinggy.io/" rel="noopener noreferrer"&gt;Pinggy&lt;/a&gt; fills that gap with a simple SSH tunnel, allowing anyone to connect to your support platform without complicated networking configurations.&lt;/p&gt;

&lt;p&gt;For developers, indie founders, and small teams, this combination creates a practical way to run a professional customer support system entirely under their own control.&lt;/p&gt;
&lt;h3&gt;
  
  
  Reference
&lt;/h3&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://pinggy.io/blog/self_host_chatwoot_expose_with_pinggy/" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpinggy.io%2Fimages%2Fself_host_chatwoot%2Fself_host_chatwoot_banner.webp" height="450" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://pinggy.io/blog/self_host_chatwoot_expose_with_pinggy/" rel="noopener noreferrer" class="c-link"&gt;
            Self-Host Chatwoot and Expose It with Pinggy

          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Chatwoot v4.14 ships Captain AI for automated customer support. Run the full stack locally with Docker Compose, then expose it to the internet with one Pinggy command - no port forwarding, no SaaS bill.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpinggy.io%2Fassets%2Ffavicon2.ico" width="75" height="75"&gt;
          pinggy.io
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>ai</category>
      <category>opensource</category>
      <category>webdev</category>
      <category>pinggy</category>
    </item>
    <item>
      <title>7 Open Source Tools That Can Reduce AI Coding Agent Token Costs in 2026</title>
      <dc:creator>Lightning Developer</dc:creator>
      <pubDate>Mon, 15 Jun 2026 10:52:32 +0000</pubDate>
      <link>https://dev.to/lightningdev123/npm-v12-security-shakeup-why-your-build-scripts-are-about-to-break-1f99</link>
      <guid>https://dev.to/lightningdev123/npm-v12-security-shakeup-why-your-build-scripts-are-about-to-break-1f99</guid>
      <description>&lt;p&gt;AI coding agents have become an essential part of many developers' workflows. They can debug applications, refactor code, create documentation, and even manage complex projects with minimal guidance.&lt;/p&gt;

&lt;p&gt;However, there is a hidden issue that many developers underestimate: token consumption.&lt;/p&gt;

&lt;p&gt;A task that appears simple at first glance can quietly become expensive behind the scenes. Every interaction, file access, tool usage, and response adds more tokens to the conversation.&lt;/p&gt;

&lt;p&gt;Over time, these costs can grow dramatically.&lt;/p&gt;

&lt;p&gt;Fortunately, several open source solutions have emerged to address this problem. Instead of relying on a single technique, developers can combine multiple approaches to make AI coding assistants far more efficient.&lt;/p&gt;

&lt;p&gt;In this guide, we will explore seven open source tools that help reduce token usage while maintaining productivity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why AI Coding Agents Consume So Many Tokens
&lt;/h2&gt;

&lt;p&gt;Before discussing the tools, it helps to understand where tokens are actually being spent.&lt;/p&gt;

&lt;p&gt;Most AI coding agents do not retain memory between actions. Every time they perform a task, they receive the entire conversation history again.&lt;/p&gt;

&lt;p&gt;This creates a snowball effect.&lt;/p&gt;

&lt;p&gt;As sessions become longer, token consumption increases because previous messages are repeatedly resent.&lt;/p&gt;

&lt;p&gt;Several factors contribute to this issue:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Entire conversation histories are included in every interaction&lt;/li&gt;
&lt;li&gt;Tool descriptions are repeatedly attached to prompts&lt;/li&gt;
&lt;li&gt;Agents often read complete files when only a few lines are needed&lt;/li&gt;
&lt;li&gt;Long AI-generated explanations become part of future context&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without optimization, a single coding session can easily consume hundreds of thousands of tokens.&lt;/p&gt;

&lt;p&gt;The following tools tackle different parts of this challenge.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Graphify: Build a Smarter Understanding of Large Codebases
&lt;/h2&gt;

&lt;p&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.amazonaws.com%2Fuploads%2Farticles%2F5xp5bwvtf1dcnm5f29ip.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.amazonaws.com%2Fuploads%2Farticles%2F5xp5bwvtf1dcnm5f29ip.png" alt="Graphify" width="799" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of the biggest reasons AI agents waste tokens is excessive exploration.&lt;/p&gt;

&lt;p&gt;When an agent encounters a new project, it may inspect numerous files before understanding how everything connects.&lt;/p&gt;

&lt;p&gt;Graphify solves this by transforming a codebase into a searchable knowledge graph.&lt;/p&gt;

&lt;p&gt;Instead of opening entire files, agents can directly ask questions about relationships inside the project.&lt;/p&gt;

&lt;p&gt;The system maps connections such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which functions call other functions&lt;/li&gt;
&lt;li&gt;Module dependencies&lt;/li&gt;
&lt;li&gt;Type relationships&lt;/li&gt;
&lt;li&gt;Important components across the application&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This targeted retrieval dramatically reduces unnecessary file loading.&lt;/p&gt;

&lt;p&gt;Another useful feature is identifying highly connected components, often referred to as critical nodes. These are usually the areas developers need to understand first.&lt;/p&gt;

&lt;h3&gt;
  
  
  Graphify Commands
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install Graphify&lt;/span&gt;
pip &lt;span class="nb"&gt;install &lt;/span&gt;graphify

&lt;span class="c"&gt;# Build a knowledge graph&lt;/span&gt;
graphify build &lt;span class="nb"&gt;.&lt;/span&gt;

&lt;span class="c"&gt;# Query project relationships&lt;/span&gt;
graphify query &lt;span class="s2"&gt;"what calls authenticate_user?"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Best use case
&lt;/h3&gt;

&lt;p&gt;Large repositories with multiple interconnected modules.&lt;/p&gt;
&lt;h2&gt;
  
  
  2. Caveman: Reduce Verbose AI Responses
&lt;/h2&gt;

&lt;p&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.amazonaws.com%2Fuploads%2Farticles%2Fvm1vuv6p1b5z4kni6d0n.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.amazonaws.com%2Fuploads%2Farticles%2Fvm1vuv6p1b5z4kni6d0n.png" alt="Caveman" width="799" height="435"&gt;&lt;/a&gt;&lt;br&gt;
AI models often explain far more than necessary.&lt;/p&gt;

&lt;p&gt;A response that could be delivered in 150 words may end up being 1,000 words long.&lt;/p&gt;

&lt;p&gt;The problem is that every extra word becomes future context.&lt;/p&gt;

&lt;p&gt;Caveman addresses this by compressing AI output into concise, information-rich responses.&lt;/p&gt;

&lt;p&gt;Rather than changing what the AI reads, it changes what the AI writes.&lt;/p&gt;

&lt;p&gt;Its different compression modes allow developers to choose varying levels of brevity.&lt;/p&gt;

&lt;p&gt;Useful commands include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Minimal commit message generation&lt;/li&gt;
&lt;li&gt;Short pull request reviews&lt;/li&gt;
&lt;li&gt;Compression of memory files&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Common Caveman Commands
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/caveman-commit

/caveman-review

/caveman-compress
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Best use case
&lt;/h3&gt;

&lt;p&gt;Developers whose AI assistants generate overly detailed explanations.&lt;/p&gt;
&lt;h2&gt;
  
  
  3. Continue.dev: Smarter Context Retrieval With RAG
&lt;/h2&gt;

&lt;p&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.amazonaws.com%2Fuploads%2Farticles%2Fhpghvbidev55p43qchvb.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.amazonaws.com%2Fuploads%2Farticles%2Fhpghvbidev55p43qchvb.png" alt="Continue" width="799" height="435"&gt;&lt;/a&gt;&lt;br&gt;
Retrieval Augmented Generation, commonly called RAG, has become extremely valuable for coding assistants.&lt;/p&gt;

&lt;p&gt;The idea is straightforward.&lt;/p&gt;

&lt;p&gt;Instead of loading an entire file, the system retrieves only the sections relevant to the current task.&lt;/p&gt;

&lt;p&gt;Continue.dev uses embeddings to search code semantically.&lt;/p&gt;

&lt;p&gt;This means the AI can locate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Relevant functions&lt;/li&gt;
&lt;li&gt;Associated classes&lt;/li&gt;
&lt;li&gt;Important comments&lt;/li&gt;
&lt;li&gt;Related code fragments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Developers working with private environments also benefit because local embedding models can be used without exposing code externally.&lt;/p&gt;
&lt;h3&gt;
  
  
  Best use case
&lt;/h3&gt;

&lt;p&gt;Teams working with medium to large repositories that require privacy.&lt;/p&gt;
&lt;h2&gt;
  
  
  4. AnythingLLM: Organize Documentation and Code Into Searchable Workspaces
&lt;/h2&gt;

&lt;p&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.amazonaws.com%2Fuploads%2Farticles%2F6xaffzvdc1hcmfo8tqug.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.amazonaws.com%2Fuploads%2Farticles%2F6xaffzvdc1hcmfo8tqug.png" alt="AnythingLLM" width="799" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AnythingLLM expands the RAG concept even further.&lt;/p&gt;

&lt;p&gt;It allows developers to create dedicated workspaces containing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Source code&lt;/li&gt;
&lt;li&gt;Internal documentation&lt;/li&gt;
&lt;li&gt;Technical references&lt;/li&gt;
&lt;li&gt;Additional project resources&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Agents can then search across these knowledge sources simultaneously.&lt;/p&gt;

&lt;p&gt;One advantage is flexibility.&lt;/p&gt;

&lt;p&gt;Different workspaces can be created for different projects without mixing contexts.&lt;/p&gt;

&lt;p&gt;It also supports numerous language models and local deployment options.&lt;/p&gt;
&lt;h3&gt;
  
  
  Best use case
&lt;/h3&gt;

&lt;p&gt;Organizations managing multiple projects and documentation sources.&lt;/p&gt;
&lt;h2&gt;
  
  
  5. Built-In Context Compression Tools
&lt;/h2&gt;

&lt;p&gt;Even optimized workflows eventually accumulate lengthy histories.&lt;/p&gt;

&lt;p&gt;At some point, older conversations become unnecessary.&lt;/p&gt;

&lt;p&gt;Claude Code addresses this issue with its &lt;code&gt;/compact&lt;/code&gt; command.&lt;/p&gt;

&lt;p&gt;Instead of preserving every detail, it summarizes completed work into a smaller context.&lt;/p&gt;

&lt;p&gt;Developers should also regularly clear unrelated conversations.&lt;/p&gt;

&lt;p&gt;Useful habits include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Compacting sessions after finishing a feature&lt;/li&gt;
&lt;li&gt;Starting fresh when switching projects&lt;/li&gt;
&lt;li&gt;Keeping instruction files concise&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Another helpful tool is Tokalator, a VS Code extension focused on context management.&lt;/p&gt;

&lt;p&gt;It offers features such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Token budgeting&lt;/li&gt;
&lt;li&gt;Usage monitoring&lt;/li&gt;
&lt;li&gt;Context prioritization&lt;/li&gt;
&lt;li&gt;Automated compaction triggers&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Useful Commands
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/compact

/clear
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Best use case
&lt;/h3&gt;

&lt;p&gt;Long development sessions that span multiple tasks.&lt;/p&gt;
&lt;h2&gt;
  
  
  6. Prompt Caching: One of the Biggest Cost Savers
&lt;/h2&gt;

&lt;p&gt;If you directly use APIs, prompt caching is one of the most effective optimization techniques available.&lt;/p&gt;

&lt;p&gt;Many prompts contain static information such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;System instructions&lt;/li&gt;
&lt;li&gt;Tool descriptions&lt;/li&gt;
&lt;li&gt;Fixed project guidelines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of processing them every time, these sections can be cached.&lt;/p&gt;

&lt;p&gt;Future requests then become significantly cheaper.&lt;/p&gt;
&lt;h3&gt;
  
  
  Python Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;claude-sonnet-4-6&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;system&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;system_prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cache_control&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ephemeral&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Prompt caching is especially valuable for repeated workflows that run continuously.&lt;/p&gt;
&lt;h3&gt;
  
  
  Best use case
&lt;/h3&gt;

&lt;p&gt;Teams building AI-powered applications at scale.&lt;/p&gt;
&lt;h2&gt;
  
  
  7. LiteLLM: Assign Different Models to Different Tasks
&lt;/h2&gt;

&lt;p&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.amazonaws.com%2Fuploads%2Farticles%2Fa75yhyv630i4hmmibcrj.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.amazonaws.com%2Fuploads%2Farticles%2Fa75yhyv630i4hmmibcrj.png" alt="LiteLLM" width="799" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Not every AI task requires maximum intelligence.&lt;/p&gt;

&lt;p&gt;Simple operations should not consume premium model resources.&lt;/p&gt;

&lt;p&gt;LiteLLM solves this through model routing.&lt;/p&gt;

&lt;p&gt;Developers can automatically send lightweight tasks to inexpensive models while reserving powerful models for complex reasoning.&lt;/p&gt;

&lt;p&gt;Examples include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;File existence checks → smaller models&lt;/li&gt;
&lt;li&gt;Architecture planning → advanced models&lt;/li&gt;
&lt;li&gt;Multi-step reasoning → premium models&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;LiteLLM also supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Load balancing&lt;/li&gt;
&lt;li&gt;Fallback systems&lt;/li&gt;
&lt;li&gt;Cost tracking&lt;/li&gt;
&lt;li&gt;Multi-provider integration&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Best use case
&lt;/h3&gt;

&lt;p&gt;Production environments with frequent AI agent execution.&lt;/p&gt;
&lt;h2&gt;
  
  
  Bonus Technique: Semantic Tool Selection
&lt;/h2&gt;

&lt;p&gt;Many AI agents expose every available tool to the model.&lt;/p&gt;

&lt;p&gt;This unnecessarily increases prompt size.&lt;/p&gt;

&lt;p&gt;A better approach is semantic filtering.&lt;/p&gt;

&lt;p&gt;The system evaluates the user's request and only provides relevant tools.&lt;/p&gt;

&lt;p&gt;Using vector search libraries such as FAISS can make this process highly efficient.&lt;/p&gt;
&lt;h3&gt;
  
  
  Example Implementation
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;faiss&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;sentence_transformers&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;SentenceTransformer&lt;/span&gt;

&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;SentenceTransformer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;all-MiniLM-L6-v2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;tool_embeddings&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;description&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;all_tools&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;index&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;faiss&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;IndexFlatL2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;tool_embeddings&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shape&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tool_embeddings&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_relevant_tools&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;query_embedding&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

    &lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;indices&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;query_embedding&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;k&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="n"&gt;all_tools&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;indices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This simple adjustment can significantly reduce prompt overhead.&lt;/p&gt;
&lt;h2&gt;
  
  
  How to Combine These Tools Effectively
&lt;/h2&gt;

&lt;p&gt;You do not need to implement everything at once.&lt;/p&gt;

&lt;p&gt;A practical adoption strategy looks like this:&lt;/p&gt;
&lt;h3&gt;
  
  
  Start with the basics
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;/compact&lt;/code&gt; regularly&lt;/li&gt;
&lt;li&gt;Clear unrelated sessions&lt;/li&gt;
&lt;li&gt;Keep instruction files short&lt;/li&gt;
&lt;li&gt;Enable prompt caching&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Add retrieval improvements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Use Graphify for code relationships&lt;/li&gt;
&lt;li&gt;Implement Continue.dev for semantic search&lt;/li&gt;
&lt;li&gt;Use AnythingLLM for documentation management&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Scale further when necessary
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Introduce LiteLLM routing&lt;/li&gt;
&lt;li&gt;Add semantic tool selection&lt;/li&gt;
&lt;li&gt;Compress outputs with Caveman&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each layer contributes to lower token consumption.&lt;/p&gt;
&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;AI coding agents are incredibly capable, but their token usage can become expensive if left unmanaged.&lt;/p&gt;

&lt;p&gt;Most costs come from three areas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Repeated conversation histories&lt;/li&gt;
&lt;li&gt;Excessive file exploration&lt;/li&gt;
&lt;li&gt;Overly verbose outputs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Fortunately, open source solutions now exist for each of these problems.&lt;/p&gt;

&lt;p&gt;Graphify improves code understanding, RAG systems retrieve only essential information, Caveman shortens responses, and caching reduces repeated processing.&lt;/p&gt;

&lt;p&gt;The biggest advantage is that these tools work well together.&lt;/p&gt;

&lt;p&gt;Instead of replacing your current workflow, they enhance it, making AI-assisted development far more sustainable in 2026.&lt;/p&gt;
&lt;h3&gt;
  
  
  Reference
&lt;/h3&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://pinggy.io/blog/tools_to_reduce_ai_coding_agent_token_usage/" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpinggy.io%2Fimages%2Ftools_to_reduce_ai_coding_agent_token_usage%2Ftools_to_reduce_ai_coding_agent_token_usage_banner.webp" height="450" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://pinggy.io/blog/tools_to_reduce_ai_coding_agent_token_usage/" rel="noopener noreferrer" class="c-link"&gt;
            7 Open Source Tools to Slash AI Coding Agent Token Usage in 2026

          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            AI coding agents burn tokens fast. Here are the best open source tools - Graphify, Caveman, RAG pipelines, Continue.dev, and more - to cut context costs without losing quality.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpinggy.io%2Fassets%2Ffavicon2.ico" width="75" height="75"&gt;
          pinggy.io
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>ai</category>
      <category>opensource</category>
      <category>productivity</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Apple's New Container Tool: A Lightweight Way to Run Linux Containers on Mac</title>
      <dc:creator>Lightning Developer</dc:creator>
      <pubDate>Mon, 15 Jun 2026 07:52:31 +0000</pubDate>
      <link>https://dev.to/lightningdev123/apples-new-container-tool-a-lightweight-way-to-run-linux-containers-on-mac-195h</link>
      <guid>https://dev.to/lightningdev123/apples-new-container-tool-a-lightweight-way-to-run-linux-containers-on-mac-195h</guid>
      <description>&lt;p&gt;Containerized development has become a standard workflow for developers, but many Mac users have long relied on third party tools that consume significant system resources.&lt;/p&gt;

&lt;p&gt;At WWDC 2026, Apple quietly introduced a new open source project simply called &lt;strong&gt;Container&lt;/strong&gt;. Rather than competing by adding more features, Apple focused on simplicity, performance, and deeper integration with macOS.&lt;/p&gt;

&lt;p&gt;The tool allows developers to run Linux containers directly on Apple Silicon Macs without depending on Docker Desktop.&lt;/p&gt;

&lt;p&gt;For developers working on modern Mac machines, this could become an interesting addition to the local development toolkit.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is Apple's Container Tool?
&lt;/h2&gt;

&lt;p&gt;Apple released version 1.0.0 of its Container project on June 9, 2026.&lt;/p&gt;

&lt;p&gt;It is an open-source command-line application built in Swift that enables Linux container execution through lightweight virtual machines.&lt;/p&gt;

&lt;p&gt;Unlike traditional approaches that rely on one large shared Linux virtual machine, Apple takes a different path by creating isolated virtual environments for each container.&lt;/p&gt;

&lt;p&gt;The project is distributed under the Apache 2.0 license and is optimized specifically for Apple Silicon hardware.&lt;/p&gt;

&lt;p&gt;At launch, it quickly gained popularity among developers and climbed GitHub trending charts.&lt;/p&gt;

&lt;h2&gt;
  
  
  System Requirements
&lt;/h2&gt;

&lt;p&gt;Before installing it, make sure your system meets these requirements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apple Silicon Mac (M1, M2, M3, M4)&lt;/li&gt;
&lt;li&gt;macOS 15 Sequoia or macOS 26 Tahoe&lt;/li&gt;
&lt;li&gt;Administrator access for installation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Intel-based Macs are currently unsupported.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing Apple's Container Tool
&lt;/h2&gt;

&lt;p&gt;At the moment, there is no Homebrew package available.&lt;/p&gt;

&lt;p&gt;Installation is done through Apple's signed package installer.&lt;/p&gt;

&lt;p&gt;After downloading and installing the package, initialize the container service.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;container system start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;During the first execution, the tool downloads a Linux kernel automatically.&lt;/p&gt;

&lt;p&gt;This setup process usually takes less than a minute.&lt;/p&gt;

&lt;p&gt;Once completed, the environment is ready to execute containers.&lt;/p&gt;
&lt;h2&gt;
  
  
  Running Your First Linux Container
&lt;/h2&gt;

&lt;p&gt;Developers familiar with Docker will immediately recognize the commands because Apple intentionally kept the interface straightforward.&lt;/p&gt;

&lt;p&gt;Run Alpine Linux interactively:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;container run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; docker.io/library/alpine:latest sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Launch an Nginx server in the background:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;container run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; web &lt;span class="nt"&gt;-p&lt;/span&gt; 8080:80/tcp nginx:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Check active containers:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;container list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;View logs:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;container logs &lt;span class="nt"&gt;-f&lt;/span&gt; web
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Stop and remove a container:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;container stop web
container &lt;span class="nb"&gt;rm &lt;/span&gt;web
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Most users will quickly adapt because the workflow closely resembles existing container tools.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why Apple's Architecture Is Different
&lt;/h2&gt;

&lt;p&gt;One of the biggest distinctions lies in how resources are managed.&lt;/p&gt;
&lt;h3&gt;
  
  
  Traditional Shared Virtual Machine Model
&lt;/h3&gt;

&lt;p&gt;Many container solutions place all containers inside a single Linux virtual machine.&lt;/p&gt;

&lt;p&gt;This central VM remains active in the background and requires predefined CPU and memory allocation.&lt;/p&gt;

&lt;p&gt;Even when containers are not actively running, the virtual machine may continue occupying system resources.&lt;/p&gt;
&lt;h3&gt;
  
  
  Apple's Independent VM Approach
&lt;/h3&gt;

&lt;p&gt;Apple creates an individual lightweight virtual machine for every container.&lt;/p&gt;

&lt;p&gt;These virtual machines are generated using the macOS Virtualization Framework.&lt;/p&gt;

&lt;p&gt;Several advantages come from this design.&lt;/p&gt;
&lt;h3&gt;
  
  
  Dynamic Resource Usage
&lt;/h3&gt;

&lt;p&gt;Resources are allocated only when containers are active.&lt;/p&gt;

&lt;p&gt;Idle workloads do not reserve unnecessary memory.&lt;/p&gt;
&lt;h3&gt;
  
  
  Stronger Isolation
&lt;/h3&gt;

&lt;p&gt;Containers remain separated from one another.&lt;/p&gt;

&lt;p&gt;Each instance operates independently and cannot directly access another container's memory.&lt;/p&gt;
&lt;h3&gt;
  
  
  Faster Startup Experience
&lt;/h3&gt;

&lt;p&gt;Applications launch based on their own requirements instead of waiting for a large shared virtual machine.&lt;/p&gt;

&lt;p&gt;Smaller workloads can become available within milliseconds.&lt;/p&gt;
&lt;h2&gt;
  
  
  Are There Any Tradeoffs?
&lt;/h2&gt;

&lt;p&gt;Every design decision has compromises.&lt;/p&gt;

&lt;p&gt;The independent VM architecture introduces slightly more overhead per container compared to traditional shared kernel systems.&lt;/p&gt;

&lt;p&gt;For individual developers running a few services locally, this difference is usually negligible.&lt;/p&gt;

&lt;p&gt;However, organizations running dozens of containers simultaneously in CI pipelines may want to benchmark performance before migrating.&lt;/p&gt;
&lt;h2&gt;
  
  
  Networking Works Differently Too
&lt;/h2&gt;

&lt;p&gt;Networking is one area where Apple introduces some useful improvements.&lt;/p&gt;

&lt;p&gt;Each container automatically receives its own private IP address.&lt;/p&gt;

&lt;p&gt;You can inspect container information to retrieve it.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;container inspect web
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Apple also includes a built-in DNS system.&lt;/p&gt;

&lt;p&gt;For example, a container named &lt;code&gt;web&lt;/code&gt; can be accessed directly using:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;web.dev.local
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This removes the need to manually edit hosts files.&lt;/p&gt;

&lt;p&gt;Port forwarding remains available whenever applications need localhost exposure.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;container run &lt;span class="nt"&gt;--name&lt;/span&gt; web &lt;span class="nt"&gt;-p&lt;/span&gt; 8080:80/tcp nginx:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The application then becomes available at:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Some users have reported DNS inconsistencies after sleep and wake cycles.&lt;/p&gt;

&lt;p&gt;Restarting the container system generally resolves the issue.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;container system stop
container system start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Building Container Images
&lt;/h2&gt;

&lt;p&gt;Apple uses BuildKit behind the scenes for image creation.&lt;/p&gt;

&lt;p&gt;Developers can build images similarly to Docker workflows.&lt;/p&gt;

&lt;p&gt;Build using a Dockerfile in the current directory:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;container build &lt;span class="nt"&gt;--tag&lt;/span&gt; myapp:latest &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Specify a custom Dockerfile:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;container build &lt;span class="nt"&gt;--tag&lt;/span&gt; myapp:latest &lt;span class="nt"&gt;--file&lt;/span&gt; deploy/Dockerfile &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Push images to a registry:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;container push ghcr.io/yourorg/myapp:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The images follow standard OCI specifications.&lt;/p&gt;

&lt;p&gt;That means images remain compatible across different platforms and registries.&lt;/p&gt;

&lt;p&gt;Developers can still use Docker Hub or GitHub Container Registry without additional conversion.&lt;/p&gt;
&lt;h2&gt;
  
  
  Container Machines for Cross Platform Development
&lt;/h2&gt;

&lt;p&gt;WWDC 2026 also introduced another interesting capability called &lt;strong&gt;Container Machines&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of temporary containers, developers can create persistent Linux environments.&lt;/p&gt;

&lt;p&gt;These environments synchronize with macOS users and their project directories.&lt;/p&gt;

&lt;p&gt;This workflow is particularly useful for building Linux applications while staying inside the macOS ecosystem.&lt;/p&gt;

&lt;p&gt;Create a development machine:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;container machine create &lt;span class="nt"&gt;--name&lt;/span&gt; dev &lt;span class="nt"&gt;--set-default&lt;/span&gt; alpine
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Execute a command inside it:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;container machine run swift build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Open an interactive shell:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;container machine run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The experience feels similar to working with a dedicated Linux workstation that coexists alongside macOS.&lt;/p&gt;
&lt;h2&gt;
  
  
  Current Limitations Developers Should Know
&lt;/h2&gt;

&lt;p&gt;Although the project looks promising, it is still in its early stages.&lt;/p&gt;
&lt;h3&gt;
  
  
  No Docker Compose Support
&lt;/h3&gt;

&lt;p&gt;This is currently the biggest missing feature.&lt;/p&gt;

&lt;p&gt;Teams running multiple interconnected services cannot manage everything using a single compose file.&lt;/p&gt;

&lt;p&gt;Developers working with application servers, databases, and caching layers together may still need Docker Desktop.&lt;/p&gt;
&lt;h3&gt;
  
  
  Limited DevContainer Integration
&lt;/h3&gt;

&lt;p&gt;Support for VS Code DevContainers is incomplete.&lt;/p&gt;

&lt;p&gt;Teams that heavily rely on &lt;code&gt;.devcontainer&lt;/code&gt; configurations may encounter friction.&lt;/p&gt;
&lt;h3&gt;
  
  
  Apple Silicon Only
&lt;/h3&gt;

&lt;p&gt;Older Intel Macs are not supported.&lt;/p&gt;

&lt;p&gt;Organizations with mixed hardware environments should keep this limitation in mind.&lt;/p&gt;
&lt;h3&gt;
  
  
  File Intensive Workloads Can Be Slower
&lt;/h3&gt;

&lt;p&gt;Each container uses its own EXT4 block device.&lt;/p&gt;

&lt;p&gt;Tasks involving large numbers of small files, such as JavaScript dependency installations, may perform slower than expected.&lt;/p&gt;
&lt;h2&gt;
  
  
  Sharing a Local Container Over the Internet
&lt;/h2&gt;

&lt;p&gt;Sometimes developers need temporary public access to local applications for demos, testing, or webhook development.&lt;/p&gt;

&lt;p&gt;After exposing a local port, an SSH tunnel can create a publicly accessible HTTPS endpoint.&lt;/p&gt;

&lt;p&gt;Run the application:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;container run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; web &lt;span class="nt"&gt;-p&lt;/span&gt; 8080:80/tcp nginx:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Open a tunnel:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh &lt;span class="nt"&gt;-p&lt;/span&gt; 443 &lt;span class="nt"&gt;-R0&lt;/span&gt;:localhost:8080 free.pinggy.io
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;A temporary public URL will be generated.&lt;/p&gt;

&lt;p&gt;This workflow is useful when testing webhooks or sharing ongoing development work without deploying to external infrastructure.&lt;/p&gt;
&lt;h2&gt;
  
  
  Should Developers Replace Docker Desktop?
&lt;/h2&gt;

&lt;p&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.amazonaws.com%2Fuploads%2Farticles%2Foeq83rod6qrto569kqlo.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.amazonaws.com%2Fuploads%2Farticles%2Foeq83rod6qrto569kqlo.png" alt="comaprison" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The answer depends entirely on your workflow.&lt;/p&gt;

&lt;p&gt;Apple's Container tool already offers a clean experience for developers who typically work with a single application or a small number of services.&lt;/p&gt;

&lt;p&gt;The lightweight resource usage and native macOS integration are appealing benefits.&lt;/p&gt;

&lt;p&gt;However, developers who rely heavily on Docker Compose or advanced DevContainer setups may find it too early to switch completely.&lt;/p&gt;

&lt;p&gt;As the project matures, additional ecosystem support will likely determine how widely it gets adopted.&lt;/p&gt;

&lt;p&gt;For now, it stands as an interesting native alternative that showcases Apple's long-term vision for local development on Apple Silicon Macs.&lt;/p&gt;
&lt;h3&gt;
  
  
  Reference
&lt;/h3&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://pinggy.io/blog/apple_container_tool_linux_containers_mac/" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpinggy.io%2Fimages%2Fapple_container_tool%2Fapple_container_tool_banner.webp" height="450" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://pinggy.io/blog/apple_container_tool_linux_containers_mac/" rel="noopener noreferrer" class="c-link"&gt;
            Apple's container: Run Linux Containers on Mac Without Docker Desktop

          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Apple shipped an official container tool at WWDC 2026. Each container gets its own lightweight VM, startup is sub-second, and it pulls standard OCI images from Docker Hub. Here's how it works, how it compares to Docker, and how to share containers publicly.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpinggy.io%2Fassets%2Ffavicon2.ico" width="75" height="75"&gt;
          pinggy.io
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>devops</category>
      <category>tutorial</category>
      <category>software</category>
      <category>linux</category>
    </item>
    <item>
      <title>Finding the Right Local LLM for Your PC: A Practical Guide with whichllm</title>
      <dc:creator>Lightning Developer</dc:creator>
      <pubDate>Fri, 12 Jun 2026 06:48:00 +0000</pubDate>
      <link>https://dev.to/lightningdev123/finding-the-right-local-llm-for-your-pc-a-practical-guide-with-whichllm-3o4g</link>
      <guid>https://dev.to/lightningdev123/finding-the-right-local-llm-for-your-pc-a-practical-guide-with-whichllm-3o4g</guid>
      <description>&lt;h2&gt;
  
  
  The Challenge of Picking a Local AI Model
&lt;/h2&gt;

&lt;p&gt;The open-source AI ecosystem is expanding at an incredible pace. New language models appear almost every week, each promising better reasoning, coding, or conversational abilities. At the same time, hardware requirements vary significantly between models, making the selection process more complicated than simply downloading the most popular option.&lt;/p&gt;

&lt;p&gt;A model that runs smoothly on one machine may struggle on another. Available VRAM, system memory, quantization settings, and processor capabilities all influence the experience. As a result, many users spend hours comparing benchmarks, reading community recommendations, and testing multiple models before finding one that works well.&lt;/p&gt;

&lt;p&gt;This is exactly the problem that whichllm aims to solve.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is whichllm?
&lt;/h2&gt;

&lt;p&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.amazonaws.com%2Fuploads%2Farticles%2Fnfcmb5twr36z6igvszdz.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.amazonaws.com%2Fuploads%2Farticles%2Fnfcmb5twr36z6igvszdz.png" alt="whichllm" width="800" height="439"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;whichllm is an open-source command-line utility that recommends local language models based on the hardware available on your system. Instead of relying on generic rankings or parameter counts, it analyzes your machine and suggests models that balance quality, speed, and resource requirements.&lt;/p&gt;

&lt;p&gt;The tool automatically evaluates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GPU specifications&lt;/li&gt;
&lt;li&gt;Available VRAM&lt;/li&gt;
&lt;li&gt;CPU resources&lt;/li&gt;
&lt;li&gt;System memory&lt;/li&gt;
&lt;li&gt;Storage capacity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Using this information, it generates recommendations that are practical for your specific setup rather than theoretical best-case scenarios.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Model Selection Is Often Difficult
&lt;/h2&gt;

&lt;p&gt;Running a local language model typically involves three separate decisions.&lt;/p&gt;

&lt;p&gt;First, you need to determine which models can realistically fit within your hardware limits.&lt;/p&gt;

&lt;p&gt;Second, among the models that fit, you must identify which one actually performs best.&lt;/p&gt;

&lt;p&gt;Finally, you need to deploy and run the chosen model.&lt;/p&gt;

&lt;p&gt;Most modern tools focus on deployment. Determining compatibility and evaluating quality usually requires manual research. Benchmark sites, discussion forums, and community recommendations can help, but they often become outdated quickly as new models are released.&lt;/p&gt;

&lt;p&gt;whichllm simplifies the first two stages by combining hardware analysis with benchmark-based recommendations.&lt;/p&gt;

&lt;h2&gt;
  
  
  How whichllm Evaluates Models
&lt;/h2&gt;

&lt;p&gt;The recommendation system goes beyond simple hardware matching. It incorporates data from multiple benchmark sources to create a broader assessment of model quality.&lt;/p&gt;

&lt;p&gt;The evaluation process considers information from sources such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;LiveBench&lt;/li&gt;
&lt;li&gt;Artificial Analysis Index&lt;/li&gt;
&lt;li&gt;Chatbot Arena rankings&lt;/li&gt;
&lt;li&gt;Open LLM Leaderboard&lt;/li&gt;
&lt;li&gt;Coding-focused benchmarks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Rather than relying on a single score, whichllm combines multiple signals into a composite ranking. Newer models are also given appropriate consideration so that outdated benchmark results do not dominate recommendations.&lt;/p&gt;

&lt;p&gt;Another important factor is quantization. A model that barely fits in memory using an aggressive quantization level may provide a worse experience than a slightly smaller model running at a higher-quality quantization. The ranking system attempts to account for these tradeoffs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing whichllm
&lt;/h2&gt;

&lt;p&gt;One of the easiest ways to run the tool is through uv:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uvx whichllm@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;For a permanent installation:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uv tool &lt;span class="nb"&gt;install &lt;/span&gt;whichllm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Alternatively:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;whichllm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Once installed, launch it with:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;whichllm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The tool will inspect the available hardware and generate a list of recommended models.&lt;/p&gt;

&lt;p&gt;A typical output includes hardware information along with model rankings, estimated throughput, quantization recommendations, and overall quality scores.&lt;/p&gt;
&lt;h2&gt;
  
  
  Useful Commands
&lt;/h2&gt;

&lt;p&gt;whichllm includes several commands beyond basic recommendations.&lt;/p&gt;

&lt;p&gt;Simulate recommendations for another GPU:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;whichllm &lt;span class="nt"&gt;--gpu&lt;/span&gt; &lt;span class="s2"&gt;"RTX 5090"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Compare upgrade possibilities:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;whichllm upgrade &lt;span class="s2"&gt;"RTX 4090"&lt;/span&gt; &lt;span class="s2"&gt;"RTX 5090"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Launch a recommended model directly:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;whichllm run &lt;span class="s2"&gt;"qwen3.6"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Generate structured JSON output:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;whichllm &lt;span class="nt"&gt;--json&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Users planning future hardware purchases can also estimate what components are required for specific models.&lt;/p&gt;
&lt;h2&gt;
  
  
  Running the Recommended Model with Ollama
&lt;/h2&gt;

&lt;p&gt;After selecting a model, the next step is deployment. Ollama provides one of the simplest ways to run quantized models locally.&lt;/p&gt;

&lt;p&gt;Install Ollama:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://ollama.com/install.sh | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Download a recommended model:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ollama pull qwen3:27b-q5_k_m
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Start the inference server:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ollama serve
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The API becomes available locally on port 11434.&lt;/p&gt;

&lt;p&gt;To verify that the server is running correctly:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl http://localhost:11434/api/tags
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;You can also generate a quick response using:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl http://localhost:11434/api/generate &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
  "model":"qwen3:27b-q5_k_m",
  "prompt":"Explain quantization in simple terms.",
  "stream":false
}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Accessing a Local LLM from Anywhere
&lt;/h2&gt;

&lt;p&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.amazonaws.com%2Fuploads%2Farticles%2Fxw97x8vacoo11ad8cek7.jpeg" 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.amazonaws.com%2Fuploads%2Farticles%2Fxw97x8vacoo11ad8cek7.jpeg" alt="LLM" width="800" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By default, Ollama listens only on localhost, which means other devices cannot access the model directly.&lt;/p&gt;

&lt;p&gt;This can become limiting when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Collaborating with team members&lt;/li&gt;
&lt;li&gt;Testing applications from mobile devices&lt;/li&gt;
&lt;li&gt;Connecting cloud applications to local AI infrastructure&lt;/li&gt;
&lt;li&gt;Demonstrating projects remotely&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One approach is creating a secure tunnel that exposes the local API through a public HTTPS endpoint.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh &lt;span class="nt"&gt;-p&lt;/span&gt; 443 &lt;span class="nt"&gt;-R0&lt;/span&gt;:localhost:11434 &lt;span class="nt"&gt;-t&lt;/span&gt; qr@free.pinggy.io &lt;span class="s2"&gt;"u:Host:localhost:11434"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;After the tunnel is established, requests sent to the generated URL are forwarded to the local Ollama instance.&lt;/p&gt;

&lt;p&gt;This allows OpenAI-compatible clients, development tools, and applications to communicate with the locally hosted model without deploying it to a cloud server.&lt;/p&gt;
&lt;h2&gt;
  
  
  Adding Authentication
&lt;/h2&gt;

&lt;p&gt;Security becomes important once an endpoint is publicly accessible.&lt;/p&gt;

&lt;p&gt;A token can be added during tunnel creation:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh &lt;span class="nt"&gt;-p&lt;/span&gt; 443 &lt;span class="nt"&gt;-R0&lt;/span&gt;:localhost:11434 &lt;span class="nt"&gt;-t&lt;/span&gt; qr@free.pinggy.io &lt;span class="s2"&gt;"u:Host:localhost:11434"&lt;/span&gt; &lt;span class="s2"&gt;"k:mysecrettoken"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Requests must then include:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Authorization: Bearer mysecrettoken
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This prevents unauthorized usage and helps protect local computing resources.&lt;/p&gt;
&lt;h2&gt;
  
  
  Limitations to Keep in Mind
&lt;/h2&gt;

&lt;p&gt;Although whichllm significantly simplifies model selection, it is not intended to be a universal AI recommendation engine.&lt;/p&gt;

&lt;p&gt;A few limitations include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Private models are not evaluated.&lt;/li&gt;
&lt;li&gt;Very recent releases may not have enough benchmark data.&lt;/li&gt;
&lt;li&gt;Throughput estimates remain approximations.&lt;/li&gt;
&lt;li&gt;Specialized audio and embedding models are outside its primary focus.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These limitations stem largely from available benchmark information rather than the tool itself.&lt;/p&gt;
&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Choosing a local language model has traditionally involved a combination of guesswork, experimentation, and community recommendations. While that process can be educational, it is often time-consuming and inconsistent.&lt;/p&gt;

&lt;p&gt;whichllm introduces a more structured approach by evaluating actual hardware capabilities and combining them with benchmark-driven rankings. Instead of wondering which model might work best, users receive recommendations tailored to the resources available on their machines.&lt;/p&gt;

&lt;p&gt;Combined with Ollama for deployment, the workflow becomes remarkably simple: analyze hardware, select a model, download it, and start serving it locally. For anyone exploring self-hosted AI, that removes much of the friction that previously stood between curiosity and practical experimentation.&lt;/p&gt;
&lt;h3&gt;
  
  
  Reference
&lt;/h3&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://pinggy.io/blog/whichllm_find_best_local_llm/" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpinggy.io%2Fimages%2Fwhichllm_find_best_local_llm%2Fwhichllm_find_best_local_llm_banner.webp" height="450" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://pinggy.io/blog/whichllm_find_best_local_llm/" rel="noopener noreferrer" class="c-link"&gt;
            whichllm: One Command to Find the Best Local LLM for Your Hardware

          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            whichllm auto-detects your GPU, CPU, and RAM, then ranks local models by real benchmarks rather than parameter count. Here's how to use it, run your pick with Ollama, and share it remotely via Pinggy.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpinggy.io%2Fassets%2Ffavicon2.ico" width="75" height="75"&gt;
          pinggy.io
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>ai</category>
      <category>webdev</category>
      <category>rag</category>
      <category>pinggy</category>
    </item>
    <item>
      <title>Building a Personal Streaming Platform: Top Open-Source Media Servers Worth Running</title>
      <dc:creator>Lightning Developer</dc:creator>
      <pubDate>Wed, 10 Jun 2026 12:43:21 +0000</pubDate>
      <link>https://dev.to/lightningdev123/building-a-personal-streaming-platform-top-open-source-media-servers-worth-running-549a</link>
      <guid>https://dev.to/lightningdev123/building-a-personal-streaming-platform-top-open-source-media-servers-worth-running-549a</guid>
      <description>&lt;p&gt;## Why More People Are Hosting Their Own Media Libraries&lt;/p&gt;

&lt;p&gt;The way people consume entertainment has changed dramatically over the last decade. Movies, music, podcasts, audiobooks, and even personal photo collections now live across dozens of separate platforms. While subscription services offer convenience, the monthly costs can quickly accumulate, and access to content is always dependent on a third party.&lt;/p&gt;

&lt;p&gt;Self-hosted media servers offer a different approach. Instead of relying entirely on streaming providers, users can organize and access their own collections from virtually any device. Whether it's a movie archive, a music catalog, family photos, or a growing ebook library, self-hosting puts ownership and control back into the hands of the user.&lt;/p&gt;

&lt;p&gt;The ecosystem surrounding self-hosted media has matured significantly. Installation is easier, mobile apps are more polished, and performance is strong even on affordable hardware.&lt;/p&gt;

&lt;p&gt;In this guide, we'll explore some of the most capable open-source media servers available today and explain where each one fits best.&lt;/p&gt;

&lt;h1&gt;
  
  
  Quick Overview of Popular Self-Hosted Media Servers
&lt;/h1&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;th&gt;License&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Jellyfin&lt;/td&gt;
&lt;td&gt;Movies, TV, Music, Live TV&lt;/td&gt;
&lt;td&gt;GPL-2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Navidrome&lt;/td&gt;
&lt;td&gt;Music Streaming&lt;/td&gt;
&lt;td&gt;GPL-3.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Immich&lt;/td&gt;
&lt;td&gt;Photos &amp;amp; Videos&lt;/td&gt;
&lt;td&gt;AGPL-3.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Audiobookshelf&lt;/td&gt;
&lt;td&gt;Audiobooks &amp;amp; Podcasts&lt;/td&gt;
&lt;td&gt;GPL-3.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kavita&lt;/td&gt;
&lt;td&gt;Ebooks, Comics &amp;amp; Manga&lt;/td&gt;
&lt;td&gt;GPL-3.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;One important thing to understand is that these applications are designed to work together rather than compete directly. A dedicated music server provides a far better listening experience than a general media platform, while a specialized photo server delivers features unavailable in video-focused applications.&lt;/p&gt;

&lt;p&gt;Many self-hosters combine several tools into a single media stack to cover every content type.&lt;/p&gt;

&lt;h1&gt;
  
  
  Benefits of Running Your Own Media Server
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Freedom from Subscription Dependency
&lt;/h2&gt;

&lt;p&gt;Streaming services continue to increase prices while frequently rotating content catalogs. A movie available today may disappear next month because of licensing agreements.&lt;/p&gt;

&lt;p&gt;A self-hosted library avoids that uncertainty. Once media is added to your collection, access remains under your control.&lt;/p&gt;

&lt;h2&gt;
  
  
  Better Privacy
&lt;/h2&gt;

&lt;p&gt;Commercial streaming platforms collect extensive viewing and listening data. They track consumption habits, recommendations, watch history, and user behavior.&lt;/p&gt;

&lt;p&gt;With a self-hosted setup, activity remains within your own infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Greater Flexibility
&lt;/h2&gt;

&lt;p&gt;Self-hosted platforms often include features that are restricted or unavailable in subscription services:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;High-quality streaming without premium tiers&lt;/li&gt;
&lt;li&gt;User management and family accounts&lt;/li&gt;
&lt;li&gt;Automatic subtitle downloads&lt;/li&gt;
&lt;li&gt;Remote access from multiple devices&lt;/li&gt;
&lt;li&gt;Advanced library organization&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Long-Term Ownership
&lt;/h2&gt;

&lt;p&gt;Perhaps the biggest advantage is ownership. Your collection is not tied to a company's business decisions, licensing agreements, or service availability.&lt;/p&gt;

&lt;h1&gt;
  
  
  Jellyfin: The Leading Open-Source Media Center
&lt;/h1&gt;

&lt;p&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.amazonaws.com%2Fuploads%2Farticles%2Fyvdrodljmbqv8afklqid.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.amazonaws.com%2Fuploads%2Farticles%2Fyvdrodljmbqv8afklqid.png" alt="Jellyfin" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A Complete Home Media Solution
&lt;/h2&gt;

&lt;p&gt;For most newcomers, Jellyfin is the natural starting point.&lt;/p&gt;

&lt;p&gt;The platform manages movies, television shows, music collections, photos, and even live television within a single interface. Its open-source nature means every major feature is available without subscriptions or locked premium tiers.&lt;/p&gt;

&lt;p&gt;Jellyfin originated from a community-driven effort to preserve a fully open media server ecosystem. Since then, it has grown into one of the most widely adopted self-hosted media projects.&lt;/p&gt;

&lt;h3&gt;
  
  
  Standout Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Hardware-accelerated video transcoding&lt;/li&gt;
&lt;li&gt;Multi-user support&lt;/li&gt;
&lt;li&gt;Live TV and DVR functionality&lt;/li&gt;
&lt;li&gt;Automatic metadata retrieval&lt;/li&gt;
&lt;li&gt;Subtitle management&lt;/li&gt;
&lt;li&gt;Watch history tracking&lt;/li&gt;
&lt;li&gt;Synchronized viewing sessions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The platform supports Linux, Windows, macOS, Docker environments, and ARM-based devices such as Raspberry Pi systems.&lt;/p&gt;

&lt;h3&gt;
  
  
  Recommended Media Organization
&lt;/h3&gt;

&lt;p&gt;Proper file naming improves metadata accuracy.&lt;/p&gt;

&lt;p&gt;For movies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/media/movies/Inception (2010)/Inception (2010).mkv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;For TV shows:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/media/tv/Breaking Bad/Season 01/Breaking Bad S01E01.mkv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Following a consistent structure helps Jellyfin identify content correctly and reduces manual corrections later.&lt;/p&gt;
&lt;h1&gt;
  
  
  Navidrome: A Dedicated Music Streaming Server
&lt;/h1&gt;

&lt;p&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.amazonaws.com%2Fuploads%2Farticles%2F9x565c8r2kwn8idqjzv4.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.amazonaws.com%2Fuploads%2Farticles%2F9x565c8r2kwn8idqjzv4.png" alt="Navidrome" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  An Excellent Alternative for Personal Music Libraries
&lt;/h2&gt;

&lt;p&gt;While Jellyfin supports music playback, dedicated music listeners often prefer Navidrome.&lt;/p&gt;

&lt;p&gt;Built with efficiency in mind, Navidrome consumes very little memory and can run comfortably on lightweight hardware. Despite its small footprint, it delivers a surprisingly complete music streaming experience.&lt;/p&gt;

&lt;p&gt;The platform automatically indexes collections, retrieves artwork, organizes albums, and tracks listening history.&lt;/p&gt;
&lt;h3&gt;
  
  
  Why Music Enthusiasts Like Navidrome
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Lightweight resource usage&lt;/li&gt;
&lt;li&gt;Multi-user support&lt;/li&gt;
&lt;li&gt;Smart playlists&lt;/li&gt;
&lt;li&gt;ReplayGain volume normalization&lt;/li&gt;
&lt;li&gt;Last.fm integration&lt;/li&gt;
&lt;li&gt;Broad client compatibility&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One of Navidrome's strongest advantages is its support for the Subsonic ecosystem, allowing users to connect with numerous mobile and desktop applications.&lt;/p&gt;
&lt;h3&gt;
  
  
  Example Docker Deployment
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;navidrome&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deluan/navidrome:latest&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;navidrome&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;4533:4533"&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./navidrome-data:/data&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;/path/to/music:/music:ro&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h1&gt;
  
  
  Immich: A Private Alternative to Cloud Photo Services
&lt;/h1&gt;

&lt;p&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.amazonaws.com%2Fuploads%2Farticles%2Fv3kn1ezhc224yc6gi8t7.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.amazonaws.com%2Fuploads%2Farticles%2Fv3kn1ezhc224yc6gi8t7.png" alt="Immich" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Managing Photos Without Depending on External Platforms
&lt;/h2&gt;

&lt;p&gt;Immich has become one of the most talked-about projects in self-hosting.&lt;/p&gt;

&lt;p&gt;Designed to provide an experience similar to modern photo backup platforms, it offers automatic uploads, timeline organization, album management, location-based browsing, and intelligent search capabilities.&lt;/p&gt;

&lt;p&gt;Unlike cloud-based solutions, all processing remains under your control.&lt;/p&gt;
&lt;h3&gt;
  
  
  Key Capabilities
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Automatic mobile backups&lt;/li&gt;
&lt;li&gt;Facial recognition&lt;/li&gt;
&lt;li&gt;Object and scene detection&lt;/li&gt;
&lt;li&gt;Smart search&lt;/li&gt;
&lt;li&gt;Shared albums&lt;/li&gt;
&lt;li&gt;Timeline view&lt;/li&gt;
&lt;li&gt;Storage flexibility&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Users can store files on local disks, network shares, or compatible object storage systems.&lt;/p&gt;

&lt;p&gt;Because image analysis requires additional processing power, Immich benefits from modern hardware and sufficient memory.&lt;/p&gt;
&lt;h1&gt;
  
  
  Audiobookshelf: Built for Audiobook and Podcast Collections
&lt;/h1&gt;

&lt;p&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.amazonaws.com%2Fuploads%2Farticles%2F03znu4g3er6m114xxrbg.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.amazonaws.com%2Fuploads%2Farticles%2F03znu4g3er6m114xxrbg.png" alt="Audiobookshelf" width="800" height="456"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  A Better Experience for Spoken Content
&lt;/h2&gt;

&lt;p&gt;Audiobooks have unique requirements. Chapters, bookmarks, listening progress, sleep timers, and playback speed controls all play a critical role.&lt;/p&gt;

&lt;p&gt;Audiobookshelf focuses specifically on these needs.&lt;/p&gt;

&lt;p&gt;The platform organizes audiobook libraries, downloads metadata, synchronizes progress between devices, and provides dedicated mobile applications.&lt;/p&gt;
&lt;h3&gt;
  
  
  Features That Matter
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Progress synchronization&lt;/li&gt;
&lt;li&gt;Chapter navigation&lt;/li&gt;
&lt;li&gt;Sleep timer&lt;/li&gt;
&lt;li&gt;Adjustable playback speed&lt;/li&gt;
&lt;li&gt;Podcast subscriptions&lt;/li&gt;
&lt;li&gt;Multi-user support&lt;/li&gt;
&lt;li&gt;Metadata enrichment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For users who consume large numbers of audiobooks or podcasts, Audiobookshelf offers a significantly better experience than general-purpose media servers.&lt;/p&gt;
&lt;h1&gt;
  
  
  Kavita: Organizing Ebooks, Comics, and Manga
&lt;/h1&gt;

&lt;p&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.amazonaws.com%2Fuploads%2Farticles%2Foaqu2gmpagbts2581zfj.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.amazonaws.com%2Fuploads%2Farticles%2Foaqu2gmpagbts2581zfj.png" alt="Kavita" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  A Centralized Reading Library
&lt;/h2&gt;

&lt;p&gt;Kavita addresses a category often ignored by traditional media servers.&lt;/p&gt;

&lt;p&gt;The platform manages ebooks, comics, manga, and graphic novels while offering specialized reading modes for different formats.&lt;/p&gt;

&lt;p&gt;Whether you're reading EPUB novels or manga archives, Kavita adapts the interface accordingly.&lt;/p&gt;
&lt;h3&gt;
  
  
  Supported Formats
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;EPUB&lt;/li&gt;
&lt;li&gt;PDF&lt;/li&gt;
&lt;li&gt;CBZ&lt;/li&gt;
&lt;li&gt;CBR&lt;/li&gt;
&lt;li&gt;ZIP archives&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Additional Highlights
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Reading progress synchronization&lt;/li&gt;
&lt;li&gt;Metadata fetching&lt;/li&gt;
&lt;li&gt;Multi-user access&lt;/li&gt;
&lt;li&gt;OPDS support for e-readers&lt;/li&gt;
&lt;li&gt;Comic and manga optimization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For readers with large digital collections, Kavita provides a clean and organized experience.&lt;/p&gt;
&lt;h1&gt;
  
  
  Deploying Jellyfin with Docker
&lt;/h1&gt;

&lt;p&gt;Docker remains the easiest way to get started with self-hosted media services.&lt;/p&gt;

&lt;p&gt;Install Docker:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://get.docker.com | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Create a simple Jellyfin configuration:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;jellyfin&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;jellyfin/jellyfin:latest&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;jellyfin&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;8096:8096"&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./config:/config&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./cache:/cache&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;/path/to/media:/media:ro&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Launch the service:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Once running, open:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:8096
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The setup wizard will guide you through library creation and media scanning.&lt;/p&gt;
&lt;h3&gt;
  
  
  Enabling Intel Hardware Acceleration
&lt;/h3&gt;

&lt;p&gt;Systems equipped with Intel integrated graphics can offload video transcoding tasks to dedicated hardware.&lt;/p&gt;

&lt;p&gt;Example device mapping:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;devices&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;/dev/dri:/dev/dri&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This improves efficiency when streaming to multiple devices simultaneously.&lt;/p&gt;
&lt;h1&gt;
  
  
  Accessing Your Media Library Outside Your Home Network
&lt;/h1&gt;

&lt;p&gt;A media server becomes much more useful when it can be reached from anywhere.&lt;/p&gt;

&lt;p&gt;Traditional remote access methods often involve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Router port forwarding&lt;/li&gt;
&lt;li&gt;Dynamic DNS services&lt;/li&gt;
&lt;li&gt;SSL certificate management&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An alternative approach is to expose local services through secure tunnels.&lt;/p&gt;

&lt;p&gt;For example, a Jellyfin instance running on port 8096 can be shared using:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh &lt;span class="nt"&gt;-p&lt;/span&gt; 443 &lt;span class="nt"&gt;-R0&lt;/span&gt;:localhost:8096 free.pinggy.io
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The same approach can be used with other self-hosted applications such as Navidrome, Immich, and Audiobookshelf by replacing the port number.&lt;/p&gt;

&lt;p&gt;This removes much of the networking complexity typically associated with remote access.&lt;/p&gt;
&lt;h1&gt;
  
  
  Choosing the Right Combination
&lt;/h1&gt;

&lt;p&gt;The ideal setup depends on the type of media you consume most frequently.&lt;/p&gt;

&lt;p&gt;A practical starting point might look like this:&lt;/p&gt;
&lt;h3&gt;
  
  
  For Movies and TV
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Jellyfin&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  For Music
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Navidrome&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  For Photos and Videos
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Immich&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  For Audiobooks and Podcasts
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Audiobookshelf&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  For Ebooks and Comics
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Kavita&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These services can run together on a single machine while remaining relatively lightweight.&lt;/p&gt;

&lt;p&gt;Users with modest hardware can begin with one application and gradually expand their stack as requirements grow.&lt;/p&gt;
&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;Open-source media servers have evolved from hobby projects into polished platforms capable of replacing many commercial media services. Whether the goal is preserving privacy, reducing recurring costs, organizing personal collections, or simply maintaining control over your content, today's self-hosted ecosystem offers mature solutions for nearly every type of media.&lt;/p&gt;

&lt;p&gt;Jellyfin delivers a strong foundation for video content, Navidrome excels at music streaming, Immich brings modern photo management, Audiobookshelf enhances audiobook listening, and Kavita provides an excellent home for digital reading collections.&lt;/p&gt;

&lt;p&gt;Together, they create a flexible and highly customizable media environment where the user remains in control of both the content and the infrastructure.&lt;/p&gt;
&lt;h2&gt;
  
  
  Reference
&lt;/h2&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://pinggy.io/blog/best_self_hosted_media_servers/" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpinggy.io%2Fimages%2Fbest_self_hosted_media_servers%2Fbest_self_hosted_media_servers_banner.webp" height="450" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://pinggy.io/blog/best_self_hosted_media_servers/" rel="noopener noreferrer" class="c-link"&gt;
            Your Own Streaming Stack: The Best Open-Source Self-Hosted Media Servers in 2026

          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            A practical guide to the best open-source self-hosted media servers in 2026. Compare Jellyfin, Navidrome, Immich, Audiobookshelf, and Kavita to build your own Netflix, Spotify, and Google Photos at home.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpinggy.io%2Fassets%2Ffavicon2.ico" width="75" height="75"&gt;
          pinggy.io
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>ai</category>
      <category>tutorial</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
