<?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: MaikiDev</title>
    <description>The latest articles on DEV Community by MaikiDev (@maikidev).</description>
    <link>https://dev.to/maikidev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3618814%2F779d304a-bb07-4911-8986-b75bd820843b.jpg</url>
      <title>DEV Community: MaikiDev</title>
      <link>https://dev.to/maikidev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/maikidev"/>
    <language>en</language>
    <item>
      <title>Client side audio transcription using Parakeet v3 and WebGPU</title>
      <dc:creator>MaikiDev</dc:creator>
      <pubDate>Thu, 16 Apr 2026 10:08:58 +0000</pubDate>
      <link>https://dev.to/maikidev/client-side-audio-transcription-using-parakeet-v3-and-webgpu-1916</link>
      <guid>https://dev.to/maikidev/client-side-audio-transcription-using-parakeet-v3-and-webgpu-1916</guid>
      <description>&lt;p&gt;Processing audio files into text usually requires sending personal data to an external server. That approach always bothered me because of the privacy implications and the recurring API costs. As browser technologies advanced over the last few years, I started looking into ways to handle speech recognition locally without relying on external servers at all.&lt;/p&gt;

&lt;p&gt;OpenAI released Whisper a while ago and it quickly became the standard for open source transcription. Developers did incredible work porting it to run in the browser using WebAssembly and WebGPU. I initially tried building my project around Whisper. The accuracy is great, but the hardware demands are very high.&lt;/p&gt;

&lt;p&gt;Running Whisper locally in a browser tab often causes the entire page to freeze or lag. It heavily requires a dedicated GPU to perform at a reasonable speed. If you try to run a medium Whisper model on a standard laptop CPU, the transcription process can easily take much longer than the audio itself. This makes for a frustrating user experience when someone just wants to transcribe a ten minute meeting.&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.amazonaws.com%2Fuploads%2Farticles%2F88jhrt569w8bbmez2ab0.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%2F88jhrt569w8bbmez2ab0.png" alt="Transcrisper — Free Unlimited Audio &amp;amp; Video AI Transcription" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I started searching for lighter alternatives and discovered NVIDIA Parakeet v3. It is a highly optimized acoustic model designed specifically for speed and efficiency. To get it working within a web environment, I implemented a library called parakeet.js. This setup changed the performance dynamic of my project entirely.&lt;br&gt;
The most noticeable difference between Parakeet and Whisper in the browser is the raw execution speed. Parakeet processes audio files significantly faster. Because the model architecture is vastly more efficient, it does not rely exclusively on heavy WebGPU compute pipelines. It actually runs with very decent speed on a standard CPU.&lt;/p&gt;

&lt;p&gt;This is a massive benefit for web development. Most people browsing the web do not have a dedicated graphics card. Being able to transcribe an hour of audio on a basic office laptop using just the processor makes local machine learning much more accessible to the average person.&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.amazonaws.com%2Fuploads%2Farticles%2Foi0zjk19chlnl8qo8gzc.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%2Foi0zjk19chlnl8qo8gzc.png" alt="Transcrisper — Free Unlimited Audio &amp;amp; Video AI Transcription" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The efficiency of parakeet.js also extends to mobile devices. Running Whisper on a phone browser usually crashes the tab immediately due to strict memory limits imposed by mobile operating systems. Parakeet has a much smaller memory footprint. I tested it on several recent mobile phones and the models load and run successfully. You can record a voice memo on your phone and transcribe it directly in your mobile browser without uploading anything to a cloud provider.&lt;/p&gt;

&lt;p&gt;I put this technology into a web application called Transcrisper. The goal was to make a simple interface where anyone can drop an audio or video file and get text back. The entire pipeline executes locally. Your media file never leaves your hard drive. No server uploads and no backend databases are storing your private conversations.&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.amazonaws.com%2Fuploads%2Farticles%2Fvtdfv7nvmzx02f7aoj4b.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%2Fvtdfv7nvmzx02f7aoj4b.png" alt="Transcrisper — Free Unlimited Audio &amp;amp; Video AI Transcription" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I implemented speaker diarization so the output identifies exactly when different people are talking in the audio track. This feature is usually locked behind expensive subscription tiers on commercial platforms. The application also generates standard text files and SRT files for video subtitles. Since the heavy lifting happens on the user device, I do not have to pay for server compute time. This means I can offer the tool completely for free with no artificial limits on file size or length.&lt;/p&gt;

&lt;p&gt;Managing browser memory is still the main challenge when building client side tools. The browser has to download the model weights on the first visit. I used the Cache API to store these files locally on the hard drive. Subsequent visits load the model directly from the browser cache, which makes the application ready to use instantly without downloading megabytes of data again.&lt;/p&gt;

&lt;p&gt;You also have to be careful with garbage collection in JavaScript when passing large audio buffers around. I spent a lot of time optimizing how the audio chunks are fed into the model so the tab does not run out of memory on long podcast episodes.&lt;/p&gt;

&lt;p&gt;Moving machine learning to the client side solves major privacy concerns and eliminates expensive server costs. I think we will see many more applications adopt this local first approach as browser standards improve. You can try it out &lt;a href="https://transcrisper.com" rel="noopener noreferrer"&gt;here&lt;/a&gt;. I am very interested to hear how it performs on different hardware setups, especially older CPUs and mobile devices. Let me know your thoughts in the comments.&lt;/p&gt;

</description>
      <category>whisper</category>
      <category>productivity</category>
      <category>tooling</category>
      <category>ai</category>
    </item>
    <item>
      <title>JSON is Costing You Money: Enter TOON - the Format Built for LLMs</title>
      <dc:creator>MaikiDev</dc:creator>
      <pubDate>Wed, 19 Nov 2025 08:09:55 +0000</pubDate>
      <link>https://dev.to/maikidev/json-is-costing-you-money-enter-toon-the-format-built-for-llms-4ce8</link>
      <guid>https://dev.to/maikidev/json-is-costing-you-money-enter-toon-the-format-built-for-llms-4ce8</guid>
      <description>&lt;p&gt;If you are building with Large Language Models (LLMs), you are essentially a logistics manager. Your job is to ship information from your database to an AI’s brain and back again, as efficiently as possible.&lt;/p&gt;

&lt;p&gt;For years, we’ve defaulted to &lt;strong&gt;JSON&lt;/strong&gt; because it is the lingua franca of the web. But have you ever looked at a 50-item JSON list inside a prompt window? It’s a sea of repetitive keys, curly braces, and wasted tokens.&lt;/p&gt;

&lt;p&gt;In the world of GenAI, &lt;strong&gt;context is currency&lt;/strong&gt;. Every token you waste on syntax is a token you can't use for reasoning, history, or creativity.&lt;/p&gt;

&lt;p&gt;Enter &lt;strong&gt;TOON (Token-Oriented Object Notation)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It’s not just "another standard". It is a purpose-built syntax designed to fix the specific headaches of communicating with AI. Today, let's pop the hood, look at some complex examples, and see how TOON stacks up against the heavyweights: JSON, YAML, and CSV.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is TOON?
&lt;/h2&gt;

&lt;p&gt;TOON is a data format designed to be &lt;strong&gt;human-readable, machine-parsable, and token-cheap&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The philosophy is simple: &lt;strong&gt;"Sparse Trees, Dense Lists"&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Most data formats are either &lt;strong&gt;Trees&lt;/strong&gt; (JSON, YAML, XML) or &lt;strong&gt;Tables&lt;/strong&gt; (CSV, SQL). Real-world data is usually a mix of both. You have metadata (Tree) and lists of items (Table).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;JSON&lt;/strong&gt; forces tables to act like trees (repeating keys for every row).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;CSV&lt;/strong&gt; forces trees to act like tables (flattening everything awkwardly).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;TOON&lt;/strong&gt; lets trees be trees and tables be tables.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Showdown: TOON vs. The World
&lt;/h2&gt;

&lt;p&gt;Let’s look at a realistic scenario: &lt;strong&gt;An E-commerce Order Receipt&lt;/strong&gt;.&lt;br&gt;
We have an Order ID, a Customer (nested object), and a list of Items (array).&lt;/p&gt;
&lt;h3&gt;
  
  
  1. The JSON Way
&lt;/h3&gt;

&lt;p&gt;JSON is explicit, but it charges you a tax for that clarity. Notice how many times we have to write &lt;code&gt;"product_id"&lt;/code&gt;, &lt;code&gt;"name"&lt;/code&gt;, and &lt;code&gt;"price"&lt;/code&gt;.&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;"order_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ORD-123"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2025-11-19"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"customer"&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;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;99&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"jane@dev.to"&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;"items"&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;span class="nl"&gt;"product_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"A1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Wireless Mouse"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"qty"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;25.00&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="nl"&gt;"product_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"B2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Mechanical Keyboard"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"qty"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;120.00&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="nl"&gt;"product_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C3"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"USB-C Hub"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"qty"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;40.00&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;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; As the list grows, the token count explodes linearly with the schema names.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. The YAML Way
&lt;/h3&gt;

&lt;p&gt;YAML removes the brackets, which helps. But for lists, it’s still repetitive. You still have to define the keys for every item, just with dashes instead of braces.&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;order_id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ORD-123&lt;/span&gt;
&lt;span class="na"&gt;date&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;2025-11-19&lt;/span&gt;
&lt;span class="na"&gt;customer&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;99&lt;/span&gt;
  &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;jane@dev.to&lt;/span&gt;
&lt;span class="na"&gt;items&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;product_id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;A1&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Wireless Mouse&lt;/span&gt;
    &lt;span class="na"&gt;qty&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
    &lt;span class="na"&gt;price&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;25.00&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;product_id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;B2&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Mechanical Keyboard&lt;/span&gt;
    &lt;span class="s"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; Still verbose for lists. Also, LLMs notoriously struggle with deep indentation levels in YAML, sometimes losing track of which parent a property belongs to.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. The TOON Way
&lt;/h3&gt;

&lt;p&gt;Here is that same order in TOON.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;order_id: ORD-123
date: 2025-11-19
customer:
  id: 99
  email: jane@dev.to

items[3]{product_id, name, qty, price}:
A1, Wireless Mouse, 1, 25.00
B2, Mechanical Keyboard, 1, 120.00
C3, USB-C Hub, 2, 40.00
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Look at the difference.&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Top-level props:&lt;/strong&gt; Look like clean YAML.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;The Array (&lt;code&gt;items&lt;/code&gt;):&lt;/strong&gt; Instantly switches to a CSV-style table.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;The Header (&lt;code&gt;[3]{...}&lt;/code&gt;):&lt;/strong&gt; Tells the LLM exactly what is coming: "I am sending 3 items, and here is the map to read them."&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We just saved the model from reading the word &lt;code&gt;"product_id"&lt;/code&gt; three times. If this were a list of 50 items, we would have saved it 49 times. That is massive token efficiency.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Not Just Use CSV?
&lt;/h2&gt;

&lt;p&gt;You might ask, &lt;em&gt;"If the list part is just CSV, why not use CSV?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;CSV is flat. It fails the moment you need metadata. If you wanted to send that Order Receipt in CSV, you'd have to duplicate the &lt;code&gt;order_id&lt;/code&gt; on every single row:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;order_id, date, product_id, name
ORD-123, 2025-11-19, A1, Mouse
ORD-123, 2025-11-19, B2, Keyboard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is data redundancy—another waste of tokens. TOON gives you the hierarchy of JSON with the density of CSV.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Advantages
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Token Efficiency
&lt;/h3&gt;

&lt;p&gt;Benchmarks show TOON uses &lt;strong&gt;~30-50% fewer tokens&lt;/strong&gt; than standard JSON for mixed-structure data. If you are processing massive logs or long context windows (RAG), that savings pays for itself instantly.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Higher Accuracy
&lt;/h3&gt;

&lt;p&gt;This might sound counter-intuitive—isn't JSON the "native language" of code?&lt;br&gt;
Actually, LLMs are pattern matchers. When an LLM reads TOON, it sees a clear, predictable pattern (Headers -&amp;gt; Data). Benchmarks indicate that models like GPT-4 and Claude actually have &lt;strong&gt;higher retrieval accuracy (74% vs 70%)&lt;/strong&gt; when reading TOON compared to JSON. The clutter of JSON brackets can sometimes confuse the model's attention mechanism in deep context windows.&lt;/p&gt;
&lt;h3&gt;
  
  
  3. Streaming Friendly
&lt;/h3&gt;

&lt;p&gt;Because TOON is line-based, it is exceptionally easy to stream to a frontend. You don't have to wait for a closing &lt;code&gt;}&lt;/code&gt; or &lt;code&gt;]&lt;/code&gt; to know a row is finished.&lt;/p&gt;
&lt;h2&gt;
  
  
  How to Integrate TOON into Your Workflow
&lt;/h2&gt;

&lt;p&gt;You don't need to rewrite your entire backend. TOON is best used as the &lt;strong&gt;communication layer&lt;/strong&gt; between your code and the LLM.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 1: The Input
&lt;/h3&gt;

&lt;p&gt;When sending data &lt;em&gt;to&lt;/em&gt; the LLM (RAG contexts, few-shot examples), convert your JSON to TOON before inserting it into the prompt.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;encode&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@toon-format/toon&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Compress your data before the LLM sees it&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;largeLogData&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;indent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;delimiter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;keyFolding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;off&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;flattenDepth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;Infinity&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`Analyze the following logs: \n\n &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: The Output
&lt;/h3&gt;

&lt;p&gt;If you want the LLM to &lt;em&gt;reply&lt;/em&gt; in TOON, just show it an example. You don't need a complex system prompt.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;User:&lt;/strong&gt; "Analyze the following logs and return the errors in TOON format."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Model:&lt;/strong&gt;&lt;/p&gt;


&lt;pre class="highlight plaintext"&gt;&lt;code&gt;errors[3]{code,message,severity}:
500,Database connection failed,High
404,User avatar not found,Low
503,Service unavailable,Critical
&lt;/code&gt;&lt;/pre&gt;

&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Step 3: Parsing
&lt;/h3&gt;

&lt;p&gt;Use the library to turn it back into objects your code can use.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;decode&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@toon-format/toon&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;llmResponse&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;indent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;strict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;expandPaths&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;off&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Want to try it right now?
&lt;/h2&gt;

&lt;p&gt;You don't need to install the CLI just to see how it looks. There is a &lt;a href="https://jsontotoonapp.com" rel="noopener noreferrer"&gt;&lt;strong&gt;free tool&lt;/strong&gt;&lt;/a&gt; available where you can paste your current JSON blobs and see them magically shrink into TOON. It’s a great way to visualize how much token "fat" you can trim from your prompts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;JSON isn't going anywhere—it’s the backbone of the web. But for the specific, high-cost, high-complexity world of Generative AI, it’s showing its age.&lt;/p&gt;

&lt;p&gt;TOON treats data the way LLMs treat text: as a structured, flowing stream of information, not a rigid tree of brackets. Give it a try in your next prompt; your token budget (and your sanity) will thank you.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>ai</category>
      <category>development</category>
      <category>tooling</category>
    </item>
  </channel>
</rss>
