<?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: nilutpal</title>
    <description>The latest articles on DEV Community by nilutpal (@nilutpal_).</description>
    <link>https://dev.to/nilutpal_</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%2F3585889%2F7e9705f9-e357-4dcb-8ad2-72c43a2f21b9.png</url>
      <title>DEV Community: nilutpal</title>
      <link>https://dev.to/nilutpal_</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nilutpal_"/>
    <language>en</language>
    <item>
      <title>I built a browser-only JSON &amp; Markdown workbench so my data never has to leave my laptop</title>
      <dc:creator>nilutpal</dc:creator>
      <pubDate>Wed, 22 Jul 2026 19:25:50 +0000</pubDate>
      <link>https://dev.to/nilutpal_/i-built-a-browser-only-json-markdown-workbench-so-my-data-never-has-to-leave-my-laptop-4inj</link>
      <guid>https://dev.to/nilutpal_/i-built-a-browser-only-json-markdown-workbench-so-my-data-never-has-to-leave-my-laptop-4inj</guid>
      <description>&lt;h3&gt;
  
  
  The problem
&lt;/h3&gt;

&lt;p&gt;Every time I needed to format, diff, or validate a gnarly JSON payload — a webhook log, an API response, a config file with a stray trailing comma — I ended up on some random jsonformatter.xyz site, pasting in data I probably shouldn't have pasted anywhere. Some of that data had customer emails in it. Some had auth tokens. I got tired of trusting "we don't store your data" banners on sites clearly funded by ad networks.&lt;/p&gt;

&lt;p&gt;So I built JSON OS — a JSON and Markdown workbench that runs 100% in the browser. No upload, no backend call, no account. Open the tab, paste your data, close the tab, it's gone.&lt;/p&gt;

&lt;h3&gt;
  
  
  What it actually does
&lt;/h3&gt;

&lt;p&gt;It's not just a formatter. It's four synced views over the same document, plus a set of tools I kept wanting and never found bundled together anywhere:&lt;/p&gt;

&lt;p&gt;Four views on one doc&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Text View — CodeMirror 6, syntax highlighting, and an inline "⚡ 1-click repair" banner the moment your JSON breaks&lt;/li&gt;
&lt;li&gt;Tree View — virtualized so it doesn't choke on huge payloads, expandable/searchable&lt;/li&gt;
&lt;li&gt;Table View — turns JSON arrays into a sortable spreadsheet grid with CSV export&lt;/li&gt;
&lt;li&gt;Chart View — bar/line/pie/doughnut SVG charts straight from a JSON array, with SUM/AVG/MIN/MAX built in and SVG export&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;A repair engine for real-world broken JSON&lt;/strong&gt; Not just "valid or invalid" — it actually fixes the stuff that shows up in production logs: escaped quotes, smart curly quotes, unquoted keys, Python/JS literals (True, None, undefined), trailing commas, missing colons, even log-line prefixes like 2026-07-22 INFO {"a": 1}.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One-click type generation&lt;/strong&gt; Paste JSON, get TypeScript interfaces, Zod schemas, Python Pydantic models, Rust Serde structs, Go structs, or Draft-07 JSON Schema. I use this constantly when reverse-engineering an API that has no docs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PII &amp;amp; secrets anonymizer&lt;/strong&gt; Detects emails, passwords, API keys, JWTs, credit cards, and IPs, then redacts, masks, or hashes them — genuinely useful before pasting a payload into a bug report or a Slack thread.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;An in-browser API sandbox&lt;/strong&gt; Send GET/POST/PUT/DELETE requests, import a cURL command from DevTools/Postman to auto-fill everything, export your request back as cURL, and pipe the response straight into a new tab for charting or type generation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Schema validation + Mongo-style querying + diffing&lt;/strong&gt; Ajv-based JSON Schema validation (Draft-07 and 2020-12) with templates for common shapes, $match-style filtering ($eq, $gt, $in, $regex, $elemMatch, $and/$or), and a side-by-side diff view with configurable ignore rules.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A Markdown studio, because I needed one anyway&lt;/strong&gt; Live preview, Mermaid diagrams (flowcharts, sequence, Gantt, mindmaps, ER diagrams), KaTeX math, an outline drawer, and a word-count/reading-time footer.&lt;/p&gt;

&lt;h3&gt;
  
  
  How it's built
&lt;/h3&gt;

&lt;p&gt;For the curious: Svelte 5 (runes) + Vite + TypeScript on the frontend, with all the compute-heavy work — parsing, validating, formatting, repairing, sorting — offloaded to a Web Worker via Comlink so the UI thread never locks up on huge files. Ajv is lazy-loaded inside the worker so it doesn't bloat the main bundle. Persistence is IndexedDB via idb-keyval, debounced so it doesn't thrash on every keystroke. It works fully offline as an installable PWA. Multi-tab document state lives in a per-tab store class, and components read through a proxy bound to the active tab instead of prop-drilling — which turned out to be the only sane way to keep four different views in sync without leaking state between tabs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Try it
&lt;/h3&gt;

&lt;p&gt;&lt;u&gt;jsonos.online&lt;/u&gt;&lt;br&gt;
&lt;/p&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://jsonos.online/" 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%2Fjsonos.online%2Fog-image.png" height="420" 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://jsonos.online/" rel="noopener noreferrer" class="c-link"&gt;
            JSON Schema Validator Online, JSON Editor &amp;amp; Type Generator — Validate, Format, Query, Chart &amp;amp; Redact · JSON OS
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Two free, browser-based workbenches in one app. JSON: format, validate, repair, compare, MongoDB-style query. Markdown: live preview with Mermaid diagrams, KaTeX math, syntax-highlighted code and rich embeds. No signup, no uploads.
          &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%2Fjsonos.online%2Ffavicon.svg" width="32" height="32"&gt;
          jsonos.online
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;If you work with JSON or Markdown regularly, I'd genuinely appreciate you kicking the tires and telling me what's missing. Bug reports and feature requests are welcome, and if you want to see how something is implemented, it's all in the open.&lt;/p&gt;

</description>
      <category>json</category>
      <category>webdev</category>
      <category>opensource</category>
      <category>sveltekit</category>
    </item>
    <item>
      <title>Fault-Tolerant Realtime Data Ingestion with QuestDB Write-Ahead Logs</title>
      <dc:creator>nilutpal</dc:creator>
      <pubDate>Tue, 28 Oct 2025 18:26:56 +0000</pubDate>
      <link>https://dev.to/nilutpal_/fault-tolerant-realtime-data-ingestion-with-questdb-write-ahead-logs-51e5</link>
      <guid>https://dev.to/nilutpal_/fault-tolerant-realtime-data-ingestion-with-questdb-write-ahead-logs-51e5</guid>
      <description>&lt;p&gt;When you’re tracking thousands of moving objects — drivers, delivery agents, or devices — reliability matters just as much as speed.&lt;/p&gt;

&lt;p&gt;You can’t afford to lose a single GPS ping.&lt;/p&gt;

&lt;p&gt;That’s where QuestDB’s wal_tables() come in.&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%2F3ekcmukz8nkzo9ucbgz9.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.amazonaws.com%2Fuploads%2Farticles%2F3ekcmukz8nkzo9ucbgz9.webp" alt="questdb title image" width="800" height="261"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  What is wal_tables()?
&lt;/h3&gt;

&lt;p&gt;In QuestDB, a Write-Ahead Log (WAL) table is a durable, crash-resilient ingestion mode.&lt;/p&gt;

&lt;p&gt;Normally, when data is inserted into a non-WAL table, QuestDB writes it directly to disk in columnar format. That’s blazing fast — but if something crashes mid-write, that data might be lost.&lt;/p&gt;

&lt;p&gt;With WAL enabled, all incoming writes are first recorded in a write-ahead log (a transaction log). This ensures that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Writes are durable — no data loss even on crashes.&lt;/li&gt;
&lt;li&gt;Parallel ingestion is supported.&lt;/li&gt;
&lt;li&gt;Replication and recovery are faster.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can list all WAL-enabled tables using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT * FROM wal_tables();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This query returns metadata about all active write-ahead log tables — perfect for monitoring ingestion health and consistency.&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%2Fd2szf65fua0vekn0sg1i.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.amazonaws.com%2Fuploads%2Farticles%2Fd2szf65fua0vekn0sg1i.webp" alt="wal transactions" width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Example:&lt;/strong&gt; Kafka + QuestDB for Realtime Location Tracking
&lt;/h3&gt;

&lt;p&gt;Let’s imagine you’re building a location tracking service.&lt;br&gt;
Each user periodically sends GPS updates to a Kafka topic named locations.&lt;/p&gt;

&lt;p&gt;A small Kafka consumer script reads these messages and inserts them into a WAL-enabled QuestDB table.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Table Schema Example:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE TABLE locations (
    id INT,
    latitude DOUBLE,
    longitude DOUBLE,
    timestamp TIMESTAMP
) timestamp(timestamp)
PARTITION BY DAY
WAL;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This single WAL; line at the end turns your table into a write-ahead log table.&lt;/p&gt;

&lt;p&gt;Location data are now safely stored in the WAL before being committed — ensuring zero data loss, even if your ingestion script restarts or your server crashes.&lt;/p&gt;




&lt;h3&gt;
  
  
  Monitoring and Debugging WAL Tables
&lt;/h3&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%2F007cyq7gtdwqz83ymzvx.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%2F007cyq7gtdwqz83ymzvx.png" alt="wal tables debugging" width="800" height="121"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inspect all WAL tables and their ingestion state:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT * FROM wal_tables();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This helps you confirm ingestion is live, and no logs are stuck uncommitted — a key part of real-time reliability monitoring.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To resume suspended WAL tables:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ALTER TABLE table_name RESUME WAL;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Check Writer Transactions, ensure &lt;code&gt;writerTxn &amp;lt; sequencerTxn&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ALTER TABLE table_name RESUME WAL FROM TXN writerTxn;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These quick checks can help you unstick ingestion pipelines without losing data integrity.&lt;/p&gt;

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

&lt;p&gt;In a realtime system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kafka ensures scalable pub/sub messaging.&lt;/li&gt;
&lt;li&gt;QuestDB with WAL ensures fault-tolerant storage.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Together, they deliver speed + reliability — a reliable realtime data systems.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;In summary&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;wal_tables() lists all QuestDB tables using Write-Ahead Logging&lt;/li&gt;
&lt;li&gt;WAL = durability + parallel ingestion + easy recovery&lt;/li&gt;
&lt;li&gt;a reliable real-time systems like location tracking with Kafka ingestion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://questdb.com/docs/concept/write-ahead-log/" rel="noopener noreferrer"&gt;QuestDB Write-Ahead Log&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://questdb.com/docs/reference/sql/alter-table-resume-wal/" rel="noopener noreferrer"&gt;QuestDB restarts suspended transactions.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;blockquote&gt;
&lt;p&gt;“Real-time systems aren’t just about speed — they’re about trusting every update you receive.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;What’s your go-to tech stack for handling real-time data ingestion?&lt;/p&gt;

</description>
      <category>questdb</category>
      <category>realtime</category>
      <category>kafka</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
