<?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: Bashiru Bukari</title>
    <description>The latest articles on DEV Community by Bashiru Bukari (@bashiru98).</description>
    <link>https://dev.to/bashiru98</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%2F446326%2F2d024262-af06-4413-9c7f-ff44e0613cde.png</url>
      <title>DEV Community: Bashiru Bukari</title>
      <link>https://dev.to/bashiru98</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bashiru98"/>
    <language>en</language>
    <item>
      <title>VentStream — open source CDC engine that syncs your database to search, cache, and AI agents in realtime</title>
      <dc:creator>Bashiru Bukari</dc:creator>
      <pubDate>Tue, 11 Aug 2026 18:21:56 +0000</pubDate>
      <link>https://dev.to/bashiru98/ventstream-open-source-cdc-engine-that-syncs-your-database-to-search-cache-and-ai-agents-in-23jl</link>
      <guid>https://dev.to/bashiru98/ventstream-open-source-cdc-engine-that-syncs-your-database-to-search-cache-and-ai-agents-in-23jl</guid>
      <description>&lt;p&gt;Keeping downstream systems in sync with a database is one of those problems every team ends up solving badly — cron jobs that miss deletes, sync scripts that drift, search indexes you can only trust after the nightly rebuild. The only time you find out something went wrong is when a user reports stale data.&lt;/p&gt;

&lt;p&gt;VentStream solves this by reading the database's change stream directly and keeping replicas in sync within milliseconds — including the hard parts: joined documents, delete propagation, and exactly-once delivery through deterministic document ids.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Sources:&lt;/strong&gt; Postgres, MySQL, MongoDB, Neo4j, Kafka&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sinks:&lt;/strong&gt; OpenSearch / Elasticsearch, Meilisearch, Redis&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Realtime:&lt;/strong&gt; GraphQL subscriptions and WebSocket fan-out with cursor resume — reconnect and pick up exactly where you left off&lt;/p&gt;

&lt;p&gt;You can declare joins once — an order embeds its customer and line items — and the engine keeps the composed documents in sync from the change stream. A delete on a child row updates the parent document in the index. No sync jobs, no invalidation code.&lt;/p&gt;

&lt;h2&gt;
  
  
  One thing we just shipped: an MCP server for AI agents
&lt;/h2&gt;

&lt;p&gt;The engine now includes a built-in MCP server, so AI agents (Claude Desktop, Claude Code, any MCP client) can query your synced data directly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agents get live answers without holding any database credentials&lt;/li&gt;
&lt;li&gt;Scoped access tokens per agent — an agent sees only the targets you allow&lt;/li&gt;
&lt;li&gt;The joins spec doubles as schema documentation the agent discovers by itself&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Point Claude at your replicas with one subcommand and it can answer "what's the status of order 4351?" from data that's milliseconds fresh.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;One line, macOS and Linux:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://ventstream.dev/install.sh | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Stream a MongoDB database into Elasticsearch — this is the whole setup:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;VS_ROLES&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;cdc &lt;span class="nv"&gt;VS_CDC_SOURCE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;mongodb &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nv"&gt;VS_MONGO_URI&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'mongodb+srv://user:pass@cluster.example.net/'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nv"&gt;VS_MONGO_DATABASE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;shop &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nv"&gt;VS_MONGO_STATE_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;./state &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nv"&gt;VS_MONGO_BOOTSTRAP_MODE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;snapshot &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nv"&gt;VS_OS_ENDPOINT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;http://localhost:9200 &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nv"&gt;VS_INDEX_TEMPLATE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'${header:ventstream.cdc.relation}'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
ventstream
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Docs: &lt;a href="https://ventstream.dev/docs" rel="noopener noreferrer"&gt;https://ventstream.dev/docs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/ventstream/ventstream" rel="noopener noreferrer"&gt;https://github.com/ventstream/ventstream&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Looking for testers and contributors
&lt;/h2&gt;

&lt;p&gt;The engine is running in production against sustained load, but real-world databases are where sync tools earn their keep — different schemas, different scales, different failure modes. If you run Postgres, MySQL, MongoDB, or Neo4j and have ever fought a sync pipeline, I'd genuinely like to hear what breaks or what's missing.&lt;/p&gt;

&lt;p&gt;Open to contributors as well — the connector surface (Typesense and ClickHouse sinks are on the list), the MCP tools, and docs are all good places to start. Issues and discussions are open on the repo.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>database</category>
      <category>rust</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
