<?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: Mahdi Bagheri</title>
    <description>The latest articles on DEV Community by Mahdi Bagheri (@mhbdev).</description>
    <link>https://dev.to/mhbdev</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%2F1377668%2F30a89cdb-7da5-463c-934c-43552ae1a96b.jpeg</url>
      <title>DEV Community: Mahdi Bagheri</title>
      <link>https://dev.to/mhbdev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mhbdev"/>
    <language>en</language>
    <item>
      <title>[Boost]</title>
      <dc:creator>Mahdi Bagheri</dc:creator>
      <pubDate>Fri, 02 Oct 2026 00:52:10 +0000</pubDate>
      <link>https://dev.to/mhbdev/-emd</link>
      <guid>https://dev.to/mhbdev/-emd</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/mhbdev/openrive-a-local-first-editor-for-rive-animations-2m9b" class="crayons-story__hidden-navigation-link"&gt;OpenRive: A local-first editor for Rive animations&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/mhbdev" class="crayons-avatar  crayons-avatar--l  "&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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1377668%2F30a89cdb-7da5-463c-934c-43552ae1a96b.jpeg" alt="mhbdev profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/mhbdev" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Mahdi Bagheri
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Mahdi Bagheri
                
                
              
              &lt;div id="story-author-preview-content-4784887" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/mhbdev" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1377668%2F30a89cdb-7da5-463c-934c-43552ae1a96b.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Mahdi Bagheri&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/mhbdev/openrive-a-local-first-editor-for-rive-animations-2m9b" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Oct 2&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/mhbdev/openrive-a-local-first-editor-for-rive-animations-2m9b" id="article-link-4784887"&gt;
          OpenRive: A local-first editor for Rive animations
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/opensource"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;opensource&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/animation"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;animation&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/rive"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;rive&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/node"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;node&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/mhbdev/openrive-a-local-first-editor-for-rive-animations-2m9b" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;3&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/mhbdev/openrive-a-local-first-editor-for-rive-animations-2m9b#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            2 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>OpenRive: A local-first editor for Rive animations</title>
      <dc:creator>Mahdi Bagheri</dc:creator>
      <pubDate>Fri, 02 Oct 2026 00:44:20 +0000</pubDate>
      <link>https://dev.to/mhbdev/openrive-a-local-first-editor-for-rive-animations-2m9b</link>
      <guid>https://dev.to/mhbdev/openrive-a-local-first-editor-for-rive-animations-2m9b</guid>
      <description>&lt;h1&gt;
  
  
  OpenRive: a local-first editor for Rive animations
&lt;/h1&gt;

&lt;p&gt;Rive is a powerful format for interactive motion, but the editing workflow is usually tied to a hosted product. I wanted an editor that could run locally, work without an account, and remain useful to both people and automation.&lt;/p&gt;

&lt;p&gt;That project is &lt;a href="https://github.com/UpstandPlatform/OpenRive" rel="noopener noreferrer"&gt;OpenRive&lt;/a&gt;: an open-source editor for Rive &lt;code&gt;.riv&lt;/code&gt; files.&lt;/p&gt;

&lt;h2&gt;
  
  
  What OpenRive provides
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A browser editor with design and animation workflows&lt;/li&gt;
&lt;li&gt;Desktop builds for macOS, Windows, and Linux&lt;/li&gt;
&lt;li&gt;A CLI and terminal UI for scripted workflows&lt;/li&gt;
&lt;li&gt;An MCP server so AI assistants can create and edit animations&lt;/li&gt;
&lt;li&gt;A REST API for integrations&lt;/li&gt;
&lt;li&gt;Self-hosting with Docker and PostgreSQL&lt;/li&gt;
&lt;li&gt;Offline-friendly, local-first operation with no required login&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The editor is designed around the Rive file format rather than a separate proprietary document model. That makes round-tripping and interoperability important: files that are opened and saved should remain usable by the wider Rive ecosystem.&lt;/p&gt;

&lt;h2&gt;
  
  
  One editing core, multiple interfaces
&lt;/h2&gt;

&lt;p&gt;OpenRive is a Bun workspace and Turborepo monorepo. The format and editing core lives in a DOM-free package, while the web UI, CLI, MCP server, and desktop app share the same editing API.&lt;/p&gt;

&lt;p&gt;That architecture means an operation added to the core can be exposed consistently in the UI and automation layers. It also gives contributors clear places to work: format support in &lt;code&gt;packages/rive&lt;/code&gt;, editor behavior in &lt;code&gt;apps/web&lt;/code&gt;, automation in &lt;code&gt;apps/cli&lt;/code&gt;, and shared validation in &lt;code&gt;packages/shared&lt;/code&gt;.&lt;/p&gt;

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

&lt;p&gt;The quickest path is the hosted demo at &lt;a href="https://openrive.upstand.dev/" rel="noopener noreferrer"&gt;openrive.upstand.dev&lt;/a&gt;. To run the project yourself, clone the repository and run &lt;code&gt;bun install&lt;/code&gt;, then start it with &lt;code&gt;bun run dev&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;git clone https://github.com/UpstandPlatform/OpenRive.git&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cd OpenRive&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bun install&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bun run dev&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then open &lt;code&gt;http://localhost:3000&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why make it open source?
&lt;/h2&gt;

&lt;p&gt;Animation tools benefit from experimentation. A local-first editor makes it easier to inspect files, build integrations, run automation in a private environment, and contribute support for the parts of the Rive format that matter to you.&lt;/p&gt;

&lt;p&gt;The repository includes development, testing, self-hosting, CLI, MCP, and architecture guides. There are also beginner-friendly documentation tasks open for contributors, including refreshing the contributor quick start and auditing the keyboard-shortcut documentation.&lt;/p&gt;

&lt;p&gt;If you work with Rive files, build creative tooling, or want to explore animation workflows with AI agents, I would love feedback on &lt;a href="https://github.com/UpstandPlatform/OpenRive" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>animation</category>
      <category>rive</category>
      <category>node</category>
    </item>
  </channel>
</rss>
