<?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: Abhinav Singh</title>
    <description>The latest articles on Forem by Abhinav Singh (@cached_engineer).</description>
    <link>https://forem.com/cached_engineer</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%2F2981941%2Fa2db5d17-a936-49fd-bca4-a0cc7564c2f1.png</url>
      <title>Forem: Abhinav Singh</title>
      <link>https://forem.com/cached_engineer</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/cached_engineer"/>
    <language>en</language>
    <item>
      <title>DevStash: AI-Powered Developer Knowledge Management with Algolia MCP</title>
      <dc:creator>Abhinav Singh</dc:creator>
      <pubDate>Sun, 27 Jul 2025 10:58:56 +0000</pubDate>
      <link>https://forem.com/cached_engineer/devstash-ai-powered-developer-knowledge-management-with-algolia-mcp-4n76</link>
      <guid>https://forem.com/cached_engineer/devstash-ai-powered-developer-knowledge-management-with-algolia-mcp-4n76</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/algolia-2025-07-09"&gt;Algolia MCP Server Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built DevStash, a comprehensive developer knowledge management ecosystem that transforms how developers save, organize, and retrieve code snippets, commands, queries, and notes, etc. Unlike traditional snippet managers, DevStash leverages AI to intelligently analyze and enrich content before storing it in Algolia, creating a truly smart search experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  Core Features:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;VS Code Extension: Seamless snippet saving with command &lt;code&gt;Devstash: Save&lt;/code&gt; or &lt;code&gt;Ctrl+Alt+S&lt;/code&gt; and searching with command &lt;code&gt;Devstash: Search&lt;/code&gt; or &lt;code&gt;Ctrl+Alt+D&lt;/code&gt; directly in your editor&lt;/li&gt;
&lt;li&gt;AI-Powered Analysis: Automatic content categorization, language detection, smart tagging, and title generation&lt;/li&gt;
&lt;li&gt;Intelligent Search: Algolia-powered search with rich metadata and context-aware results&lt;/li&gt;
&lt;li&gt;Self-Hostable: Complete deployment blueprints for Render.com&lt;/li&gt;
&lt;li&gt;Extensible Architecture: Built with n8n workflows and MCP server for easy customization&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The system consists of:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;VS Code Extension (frontend interface)&lt;/li&gt;
&lt;li&gt;n8n Workflow (AI-powered backend processing)&lt;/li&gt;
&lt;li&gt;Algolia (storage and search engine)&lt;/li&gt;
&lt;li&gt;Algolia MCP Server (AI assistant integration)&lt;/li&gt;
&lt;li&gt;OpenRouter AI Models (content analysis)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;GitHub Repository: &lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/bugcacher" rel="noopener noreferrer"&gt;
        bugcacher
      &lt;/a&gt; / &lt;a href="https://github.com/bugcacher/devstash" rel="noopener noreferrer"&gt;
        devstash
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A comprehensive developer knowledge management system that allows you to save, organize, and search code snippets, commands, queries, notes, etc
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;DevStash&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;A comprehensive developer knowledge management system that allows you to save, organize, and search code snippets, commands, queries, notes, etc.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;System Architecture&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/bugcacher/devstash/assets/devstash-architecture.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fbugcacher%2Fdevstash%2Fassets%2Fdevstash-architecture.png" alt="DevStash Architecture"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The DevStash ecosystem consists of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/bugcacher/devstash-vscode-extension" rel="noopener noreferrer"&gt;VS Code Extension&lt;/a&gt;&lt;/strong&gt;: Frontend interface for saving, deleting, and searching snippets&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;n8n Workflow&lt;/strong&gt;: AI-powered backend processing and data orchestration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Algolia&lt;/strong&gt;: Combined storage and search engine&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Algolia MCP Server&lt;/strong&gt;:  Model Context Protocol server for seamless AI assistant integration with your Algolia indexes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Models&lt;/strong&gt;: Intelligent content analysis and metadata extraction via OpenRouter&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Prerequisites&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Before setting up DevStash, ensure you have:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;n8n instance (self-hosted or cloud)&lt;/li&gt;
&lt;li&gt;Algolia account&lt;/li&gt;
&lt;li&gt;OpenRouter API account (for AI processing)&lt;/li&gt;
&lt;li&gt;VS Code&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Installation Guide&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Step 1: Set up Algolia&lt;/h3&gt;

&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Create an &lt;a href="https://www.algolia.com/" rel="nofollow noopener noreferrer"&gt;Algolia account&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Create a new application&lt;/li&gt;
&lt;li&gt;Create an index (e.g., &lt;code&gt;stashes&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Get your credentials:
&lt;ul&gt;
&lt;li&gt;Application ID&lt;/li&gt;
&lt;li&gt;Search-Only API Key&lt;/li&gt;
&lt;li&gt;Admin API Key (for n8n workflow)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Step 2: Set up OpenRouter or any other&lt;/h3&gt;…&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/bugcacher/devstash" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Demo Link:   &lt;iframe src="https://www.youtube.com/embed/B32KOYfukZs"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Utilized the Algolia MCP Server
&lt;/h2&gt;

&lt;p&gt;The Algolia MCP Server is the backbone of DevStash's AI integration, enabling seamless communication between AI models and Algolia search infrastructure.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Data Storage &amp;amp; Indexing: The n8n workflow uses the Algolia MCP Server to create and maintain a searchable index of all saved content - from code snippets and commands to configuration files and notes. Each entry combines user-provided content with AI-enhanced metadata, creating rich, searchable documents.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Auto Index Management The MCP server enables AI models to Create indexes automatically when they don't exist, ensuring seamless setup.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Why MCP Server Over Direct API?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI-Native: Designed specifically for AI model interactions&lt;/li&gt;
&lt;li&gt;Simplified Integration: No need to handle Algolia API complexities in n8n&lt;/li&gt;
&lt;li&gt;Standardized Protocol: MCP provides consistent interface across different AI models&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Challenges Faced
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Challenge 1&lt;/strong&gt;: Getting Algolia MCP Server Deployed and Working - Initially struggled with getting the Algolia MCP server to properly authenticate and connect. Due to a bug in the MCP server, if no tools are explicitly provided in the configuration, the Algolia credentials are not read from environment variables, causing all calls to the MCP server to fail.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;: After reading through the MCP server code, I discovered the issue and fixed it by specifically mentioning the required tools in the configuration. This ensures proper credential loading and successful Algolia operations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Challenge 2&lt;/strong&gt;: Self-Hosting Complexity - Wanted to make the system accessible to developers without complex setup requirements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;: Developed comprehensive Render.com blueprints and n8n templates for easy deployments.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;MCP Server Integration: Discovered how the Algolia MCP Server simplifies AI-to-search workflows, eliminating API complexity while maintaining powerful indexing capabilities&lt;/li&gt;
&lt;li&gt;Visual Workflow Development: Learned that n8n's visual approach makes AI-powered data processing surprisingly accessible compared to traditional backend coding&lt;/li&gt;
&lt;li&gt;Privacy-First Architecture: Understood the value of self-hosting for developer tools - complete data control without sacrificing search performance&lt;/li&gt;
&lt;li&gt;AI-Enhanced Search: Realized how AI-generated metadata transforms search from keyword matching to intent understanding, making forgotten content discoverable&lt;/li&gt;
&lt;li&gt;VS Code Extension Capabilities: Explored how webviews can create rich, interactive experiences within the familiar editor environment&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Impact
&lt;/h2&gt;

&lt;p&gt;DevStash transforms scattered developer knowledge into a centralized, searchable repository that grows more valuable over time. It's particularly useful for developers working with complex systems, configurations, or codebases who need quick access to previously used patterns and solutions.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>algoliachallenge</category>
      <category>webdev</category>
      <category>ai</category>
    </item>
    <item>
      <title>Use Pulumi ESC as Your OpenFeature Provider for Secrets and Configs</title>
      <dc:creator>Abhinav Singh</dc:creator>
      <pubDate>Sun, 06 Apr 2025 16:02:50 +0000</pubDate>
      <link>https://forem.com/cached_engineer/use-pulumi-esc-as-your-openfeature-provider-for-secrets-and-configs-nbg</link>
      <guid>https://forem.com/cached_engineer/use-pulumi-esc-as-your-openfeature-provider-for-secrets-and-configs-nbg</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/pulumi"&gt;Pulumi Deploy and Document Challenge&lt;/a&gt;: Shhh, It's a Secret!&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built an &lt;a href="https://openfeature.dev/docs/reference/intro#what-is-openfeature" rel="noopener noreferrer"&gt;OpenFeature&lt;/a&gt; Provider for Pulumi ESC, written in Go. This provider lets developers securely fetch configuration and secret values from Pulumi ESC in a type-safe, extensible, and standards-compliant way using the OpenFeature SDK. It can replace environment variables, remote config systems, and flag providers in modern applications — all while simplifying cloud secrets access from AWS, GCP, or Azure using OIDC.&lt;/p&gt;

&lt;h2&gt;
  
  
  Live Demo Link
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=Hqdk_IXms2A" rel="noopener noreferrer"&gt;Demo Link&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/bugcacher/pulumi-challenge/tree/master" rel="noopener noreferrer"&gt;Demo Application Source Code&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Project Repo
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/bugcacher" rel="noopener noreferrer"&gt;
        bugcacher
      &lt;/a&gt; / &lt;a href="https://github.com/bugcacher/open-feature-pulumi-esc-provider" rel="noopener noreferrer"&gt;
        open-feature-pulumi-esc-provider
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Pulumi ESC Provider For Open Feature
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;OpenFeature Pulumi ESC Provider&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/a0b5d7a9beb299525409ecfcbb05e917252d11d515120dac27962b059e8e6d84/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6f70656e666561747572652d70726f76696465722d626c7565"&gt;&lt;img alt="OpenFeature + Pulumi ESC" src="https://camo.githubusercontent.com/a0b5d7a9beb299525409ecfcbb05e917252d11d515120dac27962b059e8e6d84/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6f70656e666561747572652d70726f76696465722d626c7565"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/e29541492c4b327dfe47a9114000b6342b6f07a5165be896a5992f6fbbf650c3/68747470733a2f2f676f7265706f7274636172642e636f6d2f62616467652f6769746875622e636f6d2f6275676361636865722f6f70656e2d666561747572652d70756c756d692d6573632d70726f7669646572"&gt;&lt;img alt="Go Report Card" src="https://camo.githubusercontent.com/e29541492c4b327dfe47a9114000b6342b6f07a5165be896a5992f6fbbf650c3/68747470733a2f2f676f7265706f7274636172642e636f6d2f62616467652f6769746875622e636f6d2f6275676361636865722f6f70656e2d666561747572652d70756c756d692d6573632d70726f7669646572"&gt;&lt;/a&gt;
  &lt;a href="https://pkg.go.dev/github.com/bugcacher/open-feature-pulumi-esc-provider" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/8a806167565ff020bd0522d43e17beef135cb02ae10655d935972e3c8e8df9dc/68747470733a2f2f706b672e676f2e6465762f62616467652f6769746875622e636f6d2f6275676361636865722f6f70656e2d666561747572652d70756c756d692d6573632d70726f76696465722e737667" alt="Go Reference"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/ab3b5411cc7e5b51cd53c0b054ccb30978b4e6276ee58bf8a6661e256087a1f0/68747470733a2f2f696d672e736869656c64732e696f2f636f6465636f762f632f6769746875622f6275676361636865722f6f70656e2d666561747572652d70756c756d692d6573632d70726f7669646572"&gt;&lt;img alt="Coverage" src="https://camo.githubusercontent.com/ab3b5411cc7e5b51cd53c0b054ccb30978b4e6276ee58bf8a6661e256087a1f0/68747470733a2f2f696d672e736869656c64732e696f2f636f6465636f762f632f6769746875622f6275676361636865722f6f70656e2d666561747572652d70756c756d692d6573632d70726f7669646572"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/77e8282e7062bee6da20c40af3f510131275d800cb1097c0e1af1558f0b59035/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f6275676361636865722f6f70656e2d666561747572652d70756c756d692d6573632d70726f7669646572"&gt;&lt;img alt="GitHub Release" src="https://camo.githubusercontent.com/77e8282e7062bee6da20c40af3f510131275d800cb1097c0e1af1558f0b59035/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f6275676361636865722f6f70656e2d666561747572652d70756c756d692d6573632d70726f7669646572"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/4d78b67f4d31aecc24fe855ae42edc60bbcc7eb55ac20225c6b28d4415e32997/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f6275676361636865722f6f70656e2d666561747572652d70756c756d692d6573632d70726f7669646572"&gt;&lt;img alt="License" src="https://camo.githubusercontent.com/4d78b67f4d31aecc24fe855ae42edc60bbcc7eb55ac20225c6b28d4415e32997/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f6275676361636865722f6f70656e2d666561747572652d70756c756d692d6573632d70726f7669646572"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/d0c67874c1234b2a3d603746e1752b232ff930dba161d79f2fc7d325d73ae71d/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f6275676361636865722f6f70656e2d666561747572652d70756c756d692d6573632d70726f76696465723f7374796c653d736f6369616c"&gt;&lt;img alt="GitHub Stars" src="https://camo.githubusercontent.com/d0c67874c1234b2a3d603746e1752b232ff930dba161d79f2fc7d325d73ae71d/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f6275676361636865722f6f70656e2d666561747572652d70756c756d692d6573632d70726f76696465723f7374796c653d736f6369616c"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;An &lt;a href="https://openfeature.dev/docs/reference/intro#what-is-openfeature" rel="nofollow noopener noreferrer"&gt;OpenFeature&lt;/a&gt; provider written in Go for securely accessing &lt;strong&gt;secrets and configuration values&lt;/strong&gt; from &lt;a href="https://www.pulumi.com/esc/" rel="nofollow noopener noreferrer"&gt;Pulumi ESC&lt;/a&gt;. This &lt;a href="https://openfeature.dev/docs/reference/concepts/provider" rel="nofollow noopener noreferrer"&gt;provider&lt;/a&gt; allows your application to retrieve values like API keys, DB URLs, feature flags, and more — in a typed, structured, and cloud-agnostic way.&lt;/p&gt;

&lt;p&gt;Using &lt;strong&gt;Pulumi ESC&lt;/strong&gt; as the source of truth and &lt;strong&gt;OpenFeature&lt;/strong&gt; as the standard interface, this tool simplifies environment configuration and makes it effortless to manage secrets across multiple cloud providers.&lt;/p&gt;




&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Features&lt;/h2&gt;
&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Strongly-typed config access (&lt;code&gt;string&lt;/code&gt;, &lt;code&gt;bool&lt;/code&gt;, &lt;code&gt;int&lt;/code&gt;, &lt;code&gt;float&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Built-in support for default fallback values&lt;/li&gt;
&lt;li&gt;Fetch secrets/configs from AWS, GCP, Azure or any other cloud vendor (via Pulumi ESC)&lt;/li&gt;
&lt;li&gt;Minimal setup using Pulumi ESC with OIDC authentication&lt;/li&gt;
&lt;li&gt;Fully compatible with the OpenFeature SDK in Go&lt;/li&gt;
&lt;/ul&gt;




&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Installation&lt;/h2&gt;
&lt;/div&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;go get github.com/bugcacher/open-feature-pulumi-esc-provider&lt;/pre&gt;

&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Pulumi ESC Setup&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;You must configure a Pulumi ESC environment with the secrets and configuration values you want to expose. Here's…&lt;/p&gt;
&lt;/div&gt;


&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/bugcacher/open-feature-pulumi-esc-provider" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;h2&gt;
  
  
  My Journey
&lt;/h2&gt;

&lt;p&gt;When I came across the Pulumi ESC challenge, I realized there was a missing piece in the ecosystem: there was no OpenFeature provider for Pulumi ESC.&lt;/p&gt;

&lt;p&gt;OpenFeature was originally built to manage feature flags, but its &lt;a href="https://openfeature.dev/docs/reference/concepts/provider" rel="noopener noreferrer"&gt;provider model&lt;/a&gt; and typed API make it a perfect fit for general configuration and secrets management too. That’s when it clicked — why not treat Pulumi ESC like a configuration backend for OpenFeature?&lt;/p&gt;

&lt;p&gt;By building this provider, I extended OpenFeature into a broader use case:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Securely fetch configuration values and secrets&lt;/li&gt;
&lt;li&gt;From multiple sources — including cloud secret managers (like AWS Secrets Manager and Parameter Store), static configs, or encrypted values in ESC&lt;/li&gt;
&lt;li&gt;With typed access and support for fallbacks, defaults, and environments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One thing that made this approach especially powerful is Pulumi ESC's support for multiple cloud integrations. You can define AWS Secrets, GCP Secret Manager, Azure Key Vault — all in the same ESC environment. This means, by using just one OpenFeature provider, you get the benefits of multiple cloud-native OpenFeature providers — without writing any extra integration logic or using multiple SDKs.&lt;/p&gt;

&lt;p&gt;This pattern works seamlessly across environments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Local development&lt;/li&gt;
&lt;li&gt;✅ Cloud deployments&lt;/li&gt;
&lt;li&gt;✅ Serverless apps&lt;/li&gt;
&lt;li&gt;✅ Kubernetes or VM-based setups&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For developers already using OpenFeature, this provider becomes a drop-in solution that replaces .env files and makes secret/config access unified, secure, and version-controlled — with zero cloud SDKs and full type safety.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using Pulumi ESC
&lt;/h2&gt;

&lt;p&gt;When building this provider, Pulumi ESC turned out to be an ideal backend for securely managing configs and secrets across environments.&lt;/p&gt;

&lt;p&gt;I used Pulumi ESC's YAML-based configuration to define dynamic providers like aws-secrets and aws-parameter-store, alongside static configs and encrypted secrets. The declarative nature made it easy to describe how each value should be fetched — and from where — whether it was AWS, Pulumi-native, or elsewhere.&lt;/p&gt;

&lt;p&gt;What made it even smoother was Pulumi AI (Copilot) — which I used extensively to learn and implement parts of the Pulumi ESC Go SDK. Some of the key prompts I used were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"How to read an individual property from a Pulumi ESC environment using Go?"&lt;/li&gt;
&lt;li&gt;"How to configure OIDC-based login to AWS in Pulumi ESC?"&lt;/li&gt;
&lt;li&gt;"How to pull secrets dynamically from AWS Secrets Manager in Pulumi ESC?"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of these helped me shape the provider to dynamically resolve and return values without hardcoding any logic — everything flows through Pulumi ESC and its cloud-specific integrations.&lt;/p&gt;

&lt;p&gt;The result?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔒 Secrets never touch code&lt;/li&gt;
&lt;li&gt;📦 Configs are version-controlled and environment-specific&lt;/li&gt;
&lt;li&gt;🔁 And switching cloud backends or secret sources requires no change in application logic — just the ESC config&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This strong separation of concern, powered by Pulumi ESC + OpenFeature, turns configuration and secret management into a first-class citizen of your delivery pipeline.&lt;/p&gt;




&lt;p&gt;Thanks for reading! If you're using — or planning to use — Pulumi ESC for environment variable or secret management, do check out my &lt;a href="https://github.com/bugcacher/open-feature-pulumi-esc-provider" rel="noopener noreferrer"&gt;OpenFeature Pulumi ESC Provider&lt;/a&gt; on GitHub. Contributions, feedback, and ⭐️s are welcome!&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>pulumichallenge</category>
      <category>webdev</category>
      <category>cloud</category>
    </item>
  </channel>
</rss>
