<?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>Forem: Sarav AK</title>
    <description>The latest articles on Forem by Sarav AK (@sarav_ak).</description>
    <link>https://forem.com/sarav_ak</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%2F1078759%2Fe2f4efa5-ef93-4242-8f61-2b21087be377.png</url>
      <title>Forem: Sarav AK</title>
      <link>https://forem.com/sarav_ak</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/sarav_ak"/>
    <language>en</language>
    <item>
      <title>ConfMap: Transform Your Configuration Files into Interactive Mind Maps</title>
      <dc:creator>Sarav AK</dc:creator>
      <pubDate>Mon, 22 Sep 2025 13:30:33 +0000</pubDate>
      <link>https://forem.com/sarav_ak/confmap-transform-your-configuration-files-into-interactive-mind-maps-24gm</link>
      <guid>https://forem.com/sarav_ak/confmap-transform-your-configuration-files-into-interactive-mind-maps-24gm</guid>
      <description>&lt;p&gt;How many times have you opened any Complex YAML or JSON file or a complex application configuration and felt overwhelmed by the nested structure? &lt;/p&gt;

&lt;p&gt;You know the data is there, but understanding the relationships and hierarchy feels like solving a puzzle.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ConfMap&lt;/strong&gt; solves this problem by transforming your configuration files into beautiful, interactive mind maps that make complex structures instantly understandable, searchable, extractable and more.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 What is ConfMap?
&lt;/h2&gt;

&lt;p&gt;ConfMap is an open-source tool that converts YAML, JSON, and YML configuration files into interactive mind maps with intelligent 13-level color coding. Think of it as a visual debugger for your configuration files.&lt;/p&gt;

&lt;p&gt;Try it live: &lt;a href="https://confmap.com" rel="noopener noreferrer"&gt;https://confmap.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Quick Demo on ConfMap&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%2Fx32x2e8upqhfheexsbh8.gif" 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%2Fx32x2e8upqhfheexsbh8.gif" alt="ConfMapDemo" width="560" height="330"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ✨ Key Features - Curated from the feedback and pain
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;🎨 Intelligent Color Coding&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;13 distinct colors for different hierarchy levels&lt;/li&gt;
&lt;li&gt;Automatic color cycling for deeper nesting&lt;/li&gt;
&lt;li&gt;Visual legend showing all color levels&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🔍 Powerful Search &amp;amp; Navigation&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Find and highlight ALL matching nodes&lt;/li&gt;
&lt;li&gt;Navigate results with ↑/↓ arrow keys&lt;/li&gt;
&lt;li&gt;Smart highlighting with visual feedback&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🧹 TidyUp Mode (My Personal Favorite!)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Press Alt+T to focus on any node's lineage&lt;/li&gt;
&lt;li&gt;Shows only the path from root + all descendants&lt;/li&gt;
&lt;li&gt;Perfect for understanding complex nested structures&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;📝 Word Wrapping for Long Text&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Press Alt+W to toggle word wrapping&lt;/li&gt;
&lt;li&gt;Handles those ridiculously long configuration keys&lt;/li&gt;
&lt;li&gt;Makes everything readable without horizontal scrolling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🎯 Multiple Layouts&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Horizontal: Traditional left-to-right flow&lt;/li&gt;
&lt;li&gt;Vertical: Top-to-bottom hierarchy&lt;/li&gt;
&lt;li&gt;Radial: Circular, centered view&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🌀 Copy Lineage Feature&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Press Ctrl+C to copy any node's lineage&lt;/li&gt;
&lt;li&gt;Multiple formats: tree view and YAML-like structure&lt;/li&gt;
&lt;li&gt;Perfect for documentation and debugging&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;⌨️ Keyboard Shortcuts (Because We Love Efficiency)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Click on the Help section of the app to get to know all the shortcuts available - I know Legends does not use mouse&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🛠️ Built with Modern Tech&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TypeScript for type safety&lt;/li&gt;
&lt;li&gt;ECharts for beautiful visualizations&lt;/li&gt;
&lt;li&gt;Tailwind CSS for responsive design&lt;/li&gt;
&lt;li&gt;Vite for lightning-fast builds&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to use it
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Option 1: Use the Live Version (Recommended)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Visit &lt;a href="https://confmap.com" rel="noopener noreferrer"&gt;https://confmap.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Upload your configuration file ( Its locally rendered - data is not shared anywhere)&lt;/li&gt;
&lt;li&gt;Start exploring immediately!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Option 2: Run Locally&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;# Clone the repository
git clone https://github.com/aksarav/confmap.git
cd confmap

# Install dependencies
npm install

# Start development server
npm run dev

# Open map.html in your browser
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🤝 Contributing &amp;amp; Community
&lt;/h3&gt;

&lt;p&gt;ConfMap is open-source and we'd love your contributions! Whether it's:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🐛 Bug reports&lt;/li&gt;
&lt;li&gt;💡 Feature suggestions&lt;/li&gt;
&lt;li&gt;🔧 Code contributions&lt;/li&gt;
&lt;li&gt;📖 Documentation improvements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Visit our GitHub repository to get involved.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;⭐ Star the repo if you find it useful! Your support helps us continue improving.&lt;br&gt;
*&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🎯 Why This Matters
&lt;/h3&gt;

&lt;p&gt;Configuration files are the backbone of modern applications, but they're often treated as an afterthought. &lt;/p&gt;

&lt;p&gt;ConfMap and our other initiaves like ConfQL, YamlQL bridges the gap between complex configurations and human understanding, making your development workflow more efficient and less error-prone.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's Next?
&lt;/h3&gt;

&lt;p&gt;We're constantly adding new features based on community feedback. &lt;/p&gt;

&lt;p&gt;Some ideas in the pipeline:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Support for more file formats (TOML, INI, etc.)&lt;/li&gt;
&lt;li&gt;Collaborative editing features&lt;/li&gt;
&lt;li&gt;Configuration diff visualization&lt;/li&gt;
&lt;li&gt;Integration with popular IDEs as Extension&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>opensource</category>
      <category>productivity</category>
      <category>javascript</category>
      <category>programming</category>
    </item>
    <item>
      <title>Query YAML Like a Database — Why I Built YamlQL (And How It Works)</title>
      <dc:creator>Sarav AK</dc:creator>
      <pubDate>Fri, 20 Jun 2025 22:02:58 +0000</pubDate>
      <link>https://forem.com/sarav_ak/query-yaml-like-a-database-why-i-built-yamlql-and-how-it-works-4hfg</link>
      <guid>https://forem.com/sarav_ak/query-yaml-like-a-database-why-i-built-yamlql-and-how-it-works-4hfg</guid>
      <description>&lt;p&gt;Have you ever tried to grep through large set of Kubernetes YAML files just to figure out which pods are missing CPU limits?&lt;/p&gt;

&lt;p&gt;I did.&lt;br&gt;
And I hated it.&lt;/p&gt;

&lt;p&gt;So I built &lt;a href="https://github.com/AKSarav/YamlQL/tree/main" rel="noopener noreferrer"&gt;YamlQL&lt;/a&gt; — a tool that lets you query YAML files using SQL.&lt;/p&gt;

&lt;p&gt;YAMLQL has three mode of opeartions&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Discover the schema of your YAML file&lt;/li&gt;
&lt;li&gt;Run manual SQL queries over YAML&lt;/li&gt;
&lt;li&gt;Use AI to generate SQL (schema-aware, no data sent)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;YamlQL is a CLI + Python tool that converts YAML into DuckDB tables, so you can query it like a database.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;
  
  
  😵‍💫 YAML is beautiful until it is not
&lt;/h3&gt;

&lt;p&gt;YAML is beautiful for humans to write — but a nightmare to audit or analyze at scale. You’ve likely seen it everywhere:&lt;br&gt;
 &lt;br&gt;
    • Docker Compose&lt;br&gt;
    • Kubernetes manifests&lt;br&gt;
    • Helm values&lt;br&gt;
    • GitHub Actions&lt;br&gt;
    • CircleCI, ArgoCD, and more&lt;/p&gt;

&lt;p&gt;But try to ask simple questions like:&lt;br&gt;
 &lt;br&gt;
    • “Which containers expose port 80?”&lt;br&gt;
    • “Where did we forget resources.limits.memory?”&lt;br&gt;
    • “Are any services still using HTTP?”&lt;/p&gt;

&lt;p&gt;You’re stuck with &lt;code&gt;grep&lt;/code&gt;, &lt;code&gt;yq&lt;/code&gt;, or writing ad-hoc scripts that break when a field is missing or nested differently.&lt;/p&gt;

&lt;p&gt;YAML as a language has various problems&lt;/p&gt;

&lt;p&gt;The following article is a great summary of the problems with YAML:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ruudvanasseldonk.com/2023/01/11/the-yaml-document-from-hell" rel="noopener noreferrer"&gt;https://ruudvanasseldonk.com/2023/01/11/the-yaml-document-from-hell&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;
  
  
  🛠️ What I Built: YamlQL
&lt;/h3&gt;

&lt;p&gt;YamlQL is a CLI + Python tool that converts YAML into DuckDB tables, so you can query it like a database.&lt;/p&gt;

&lt;p&gt;✅ Key Features&lt;br&gt;
    • discover — See the schema of your YAML file&lt;br&gt;
    • sql — Run manual SQL queries over YAML&lt;br&gt;
    • ai — Use AI to generate SQL (schema-aware, no data sent)&lt;br&gt;
    • Supports nested structures, lists, dicts&lt;br&gt;
    • Works locally, offline, and fast&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Let's see how YAMLQL works with an example &lt;/p&gt;
&lt;h4&gt;
  
  
  The Sample Deployment file
&lt;/h4&gt;

&lt;p&gt;Lets consider the following kubernetes deployment manifest for an example&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;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;apps/v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Deployment&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&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;complex-app&lt;/span&gt;
  &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;complex-app&lt;/span&gt;
    &lt;span class="na"&gt;tier&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;backend&lt;/span&gt;
  &lt;span class="na"&gt;annotations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;prometheus.io/scrape&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;true"&lt;/span&gt;
    &lt;span class="na"&gt;prometheus.io/port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;9090"&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;replicas&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;matchLabels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;complex-app&lt;/span&gt;
  &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;complex-app&lt;/span&gt;
        &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1&lt;/span&gt;
    &lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&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="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;config-volume&lt;/span&gt;
          &lt;span class="na"&gt;configMap&lt;/span&gt;&lt;span class="pi"&gt;:&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;app-config&lt;/span&gt;
        &lt;span class="pi"&gt;-&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;secret-volume&lt;/span&gt;
          &lt;span class="na"&gt;secret&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;secretName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;app-secrets&lt;/span&gt;
        &lt;span class="pi"&gt;-&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;shared-logs&lt;/span&gt;
          &lt;span class="na"&gt;emptyDir&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{}&lt;/span&gt;
      &lt;span class="na"&gt;containers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&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;main-app&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;myorg/main-app:latest&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="na"&gt;containerPort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8080&lt;/span&gt;
          &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&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;APP_ENV&lt;/span&gt;
              &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;production&lt;/span&gt;
            &lt;span class="pi"&gt;-&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;CONFIG_PATH&lt;/span&gt;
              &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/etc/config&lt;/span&gt;
            &lt;span class="pi"&gt;-&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;SECRET_TOKEN&lt;/span&gt;
              &lt;span class="na"&gt;valueFrom&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
                &lt;span class="na"&gt;secretKeyRef&lt;/span&gt;&lt;span class="pi"&gt;:&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;app-secrets&lt;/span&gt;
                  &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;token&lt;/span&gt;
          &lt;span class="na"&gt;volumeMounts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&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;config-volume&lt;/span&gt;
              &lt;span class="na"&gt;mountPath&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/etc/config&lt;/span&gt;
            &lt;span class="pi"&gt;-&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;shared-logs&lt;/span&gt;
              &lt;span class="na"&gt;mountPath&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/var/log/app&lt;/span&gt;
          &lt;span class="na"&gt;livenessProbe&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;httpGet&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
              &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/health&lt;/span&gt;
              &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8080&lt;/span&gt;
            &lt;span class="na"&gt;initialDelaySeconds&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;30&lt;/span&gt;
            &lt;span class="na"&gt;periodSeconds&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;
          &lt;span class="na"&gt;readinessProbe&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;httpGet&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
              &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/ready&lt;/span&gt;
              &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8080&lt;/span&gt;
            &lt;span class="na"&gt;initialDelaySeconds&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;
            &lt;span class="na"&gt;periodSeconds&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;
          &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;requests&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
              &lt;span class="na"&gt;cpu&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;500m"&lt;/span&gt;
              &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;256Mi"&lt;/span&gt;
            &lt;span class="na"&gt;limits&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
              &lt;span class="na"&gt;cpu&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1"&lt;/span&gt;
              &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;512Mi"&lt;/span&gt;
        &lt;span class="pi"&gt;-&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;sidecar-logger&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;fluent/fluentd:latest&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="na"&gt;containerPort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;24224&lt;/span&gt;
          &lt;span class="na"&gt;volumeMounts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&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;shared-logs&lt;/span&gt;
              &lt;span class="na"&gt;mountPath&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/fluentd/log&lt;/span&gt;
          &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&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;FLUENTD_CONF&lt;/span&gt;
              &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;fluentd.conf&lt;/span&gt;
        &lt;span class="pi"&gt;-&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;metrics-exporter&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;prom/node-exporter&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="na"&gt;containerPort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;9090&lt;/span&gt;
          &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;limits&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
              &lt;span class="na"&gt;cpu&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;100m"&lt;/span&gt;
              &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;128Mi"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;/p&gt;

&lt;h4&gt;
  
  
  Discover
&lt;/h4&gt;

&lt;p&gt;Before writing the query - you need to know how this YAML file is converted as a table and its schema &lt;/p&gt;

&lt;p&gt;So first we use the discover mode&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yamlql discover deployment.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F2c64nr6t67rtoqeu9inl.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%2F2c64nr6t67rtoqeu9inl.png" alt="YamlQL-Discover" width="800" height="751"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h4&gt;
  
  
  🧠 Write SQL queries Manually
&lt;/h4&gt;

&lt;p&gt;Now we know the Table and the field names and the Schema of this file - Let us put it to use&lt;/p&gt;

&lt;p&gt;Lets write some SQL queries to get the data from YAML&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%2Fdm29amb91z1invz15yeh.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%2Fdm29amb91z1invz15yeh.png" alt="YamlQL-SQL" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h4&gt;
  
  
  👨‍💻 Write SQL queries with AI - without sharing your actual Data
&lt;/h4&gt;

&lt;p&gt;As English has become the new programming language in the ERA of Software 3.0 &lt;/p&gt;

&lt;p&gt;Let us do some Vibe Code and write Natural Language Query which would be sent to AI along with the &lt;code&gt;schema&lt;/code&gt; - without sharing the actual data&lt;/p&gt;

&lt;p&gt;LLM is used here only for converting the NLP to SQL with schema as an input&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%2Frxw6iuwsx6x3orsbv0qm.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%2Frxw6iuwsx6x3orsbv0qm.png" alt="YamlQL-AI" width="800" height="543"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  🎥 Video Demo
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=6MRYTz027Fc" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=6MRYTz027Fc&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  🤖 YAML in RAG and AI Workflows
&lt;/h3&gt;

&lt;p&gt;This started as a tool for my RAG pipelines.&lt;/p&gt;

&lt;p&gt;I needed to:&lt;br&gt;
    • Ingest YAML-based metadata (Helm, K8s, config files)&lt;br&gt;
    • Normalize it&lt;br&gt;
    • Extract relevant structured data before embedding&lt;/p&gt;

&lt;p&gt;YamlQL made it clean, SQL-native, and easy to scale.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;
  
  
  ✨ It’s Open Source
&lt;/h3&gt;

&lt;p&gt;Find the sourcecode here and feel free to contribute and improve&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://github.com/AKSarav/YamlQL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install with &lt;code&gt;pip&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install yamlql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here are some example commands you can use&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yamlql discover yourfile.yaml
yamlql sql yourfile.yaml --query "SELECT * FROM metadata"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  I’d Love Your Feedback and contribution
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;What would make this more useful in your workflow?&lt;/li&gt;
&lt;li&gt;What’s missing before you’d use this in CI/CD?&lt;/li&gt;
&lt;li&gt;Would you want to see it in YAMLQL&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Leave a comment, open an issue, or just ping me.&lt;/p&gt;

&lt;p&gt;I’m building this in the open, and you hoping it would help someone and with your feedback and contribute this can go further.&lt;/p&gt;

&lt;p&gt;Thanks&lt;br&gt;
Sarav&lt;/p&gt;

&lt;p&gt;Find me on LinkedIn&lt;br&gt;
&lt;a href="https://www.linkedin.com/in/aksarav/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/aksarav/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>kubernetes</category>
      <category>sql</category>
    </item>
  </channel>
</rss>
