<?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: Shayan</title>
    <description>The latest articles on DEV Community by Shayan (@codeideal).</description>
    <link>https://dev.to/codeideal</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%2F3259876%2F4dad300e-95c9-4bcc-8ad1-bfe6bf0568a0.jpeg</url>
      <title>DEV Community: Shayan</title>
      <link>https://dev.to/codeideal</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/codeideal"/>
    <language>en</language>
    <item>
      <title>MotionKit just got better! The goto animation tool in 2026</title>
      <dc:creator>Shayan</dc:creator>
      <pubDate>Fri, 20 Feb 2026 12:33:24 +0000</pubDate>
      <link>https://dev.to/codeideal/motionkit-just-got-better-the-goto-animation-tool-in-2026-4m86</link>
      <guid>https://dev.to/codeideal/motionkit-just-got-better-the-goto-animation-tool-in-2026-4m86</guid>
      <description>&lt;p&gt;MotionKit is great, not just because of its great features,&lt;br&gt;
Also because it's generously 100% free, allows you to render &amp;amp; export any animation to Mp4/Gif/Png &amp;amp; even lottie. No hidden paywalls! This makes the whole motion design process FREE and even brings non-figma users into Figma, because Figma is also mostly Free and you can even create social media or product videos using MotionKit without spending a penny!&lt;/p&gt;

&lt;h2&gt;
  
  
  Previously it already had great features:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Timeline with strong record, allowing to animiate and interpolate everything inside figma.&lt;/li&gt;
&lt;li&gt;Frame By Frame animation with Onion Skinning &lt;/li&gt;
&lt;li&gt;Nested Animations via nested artboards&lt;/li&gt;
&lt;li&gt;Free forever&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But now it just updated to the new version, version 2+ and it got even better. The new stuff added:&lt;/p&gt;

&lt;h2&gt;
  
  
  Modifiers
&lt;/h2&gt;

&lt;p&gt;Now it's truly a mini blender inside Figma, using modifiers you can now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stroke Path tracing, animate any element on another vector path&lt;/li&gt;
&lt;li&gt;Type writer Effect for texts! &lt;/li&gt;
&lt;li&gt;Loop modifier for any Layer&lt;/li&gt;
&lt;li&gt;Copy Animations from other layers
and ...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Modifiers open so many opportunities and architecture, allows to headlessly build and plug-in more modifiers in future. &lt;/p&gt;

&lt;h2&gt;
  
  
  Timeline Markers
&lt;/h2&gt;

&lt;p&gt;Now by default if you hit "M" in the timeline ( You can customize the shortcut from settings, just like any other shortcut key ), it places a Marker on that time, and you can label them or give them any color as you wish.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bug fixes, UX Improvements
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Transform system refactored so properties like Morphing, Rotation, transform and ... perform together much better.&lt;/li&gt;
&lt;li&gt;Layer List now supports drag drop sorting, and reparenting.&lt;/li&gt;
&lt;li&gt;Animation Can happen now for any fill property ( Solid Colors, Gradients, Pattern, and Image properties like contras, brightness and ... )&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Download the plugin
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.figma.com/community/plugin/1602896408819057835/motionkit-free-animation-motion-design-inside-figma" rel="noopener noreferrer"&gt;Download from Figma Community&lt;/a&gt; || &lt;a href="https://github.com/novincode/motionkit/releases/latest/" rel="noopener noreferrer"&gt;Download From Github&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;if you found MotionKit helpful, you can always &lt;a href="https://motionkit.codeideal.com/support" rel="noopener noreferrer"&gt;donate &amp;amp; sponsor&lt;/a&gt; the dev team to keep this tool alive &amp;amp; free for everyone.&lt;/p&gt;

&lt;p&gt;Let me know in the comments how you think :)&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Animation &amp; Motion Design INSIDE FIGMA 2026</title>
      <dc:creator>Shayan</dc:creator>
      <pubDate>Sun, 15 Feb 2026 07:11:04 +0000</pubDate>
      <link>https://dev.to/codeideal/animation-motion-design-inside-figma-2026-omf</link>
      <guid>https://dev.to/codeideal/animation-motion-design-inside-figma-2026-omf</guid>
      <description>&lt;p&gt;I always enjoyed designing inside Figma, But when it comes to animation, then we have to either go with After Effects or Davinci Resolve which they're not as comfortable as Figma.&lt;/p&gt;

&lt;p&gt;That's why I started making one of my most ambitious projects, MotionKit.&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%2F8x5fgvvro7aldg5qkvon.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%2F8x5fgvvro7aldg5qkvon.png" alt="MotionKit - Free animation inside Figma" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  MotionKit Super Powers
&lt;/h2&gt;

&lt;p&gt;You can turn ANY Figma frame ( artboard ) into:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Timeline Animation
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Powerful Record Mode ( Morphing, Text Animation, Colors, Everything! )&lt;/li&gt;
&lt;li&gt;Blender Inspired Timeline&lt;/li&gt;
&lt;li&gt;Presets Manager ( Default presets + Define your own custom presets )&lt;/li&gt;
&lt;li&gt;Modifiers ( GAME CHANGER ) - can be anything! like stroke path tracing or Type writer effect or maybe even particle effects!
&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%2F964p5js0s9090g25yhfe.png" alt="MotionKit - Animation inside figma" width="800" height="450"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Frame By Frame Animation
&lt;/h2&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%2F5fql1q3au52flmsgdmjl.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%2F5fql1q3au52flmsgdmjl.png" alt="Frame by frame animation inside figma" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Onion Skinning ( Customizable )&lt;/li&gt;
&lt;li&gt;Compatible with Figma Draw mode&lt;/li&gt;
&lt;li&gt;NEW: Mirror selection to select that layer from all FBF frames&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Nested Animations!
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;have multiple nested frames with different animations&lt;/li&gt;
&lt;li&gt;They can have different frame rates, and duration and looping mode&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Render without paywalls!
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Render as Mp4 - Gif - PNG Sequence&lt;/li&gt;
&lt;li&gt;Export as Lottie animation&lt;/li&gt;
&lt;/ul&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%2Fztbkjx6cp72795cz36q7.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%2Fztbkjx6cp72795cz36q7.png" alt="Figma Animation Free Render &amp;amp; export as video" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This plugin is TOTALLY Free. I didn't wanna make it a SaaS and lock some features, I wanted to help more designers.&lt;/p&gt;

&lt;p&gt;But if you end up using it and found it helpful, You can always support me:&lt;br&gt;
&lt;a href="https://buymeacoffee.com/codeideal" rel="noopener noreferrer"&gt;BuyMeACoffee&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/sponsors/novincode" rel="noopener noreferrer"&gt;Sponsor in Github&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Links to this project:&lt;br&gt;
&lt;a href="https://www.figma.com/community/plugin/1602896408819057835/motionkit-free-animation-motion-design-inside-figma" rel="noopener noreferrer"&gt;Figma Community page (INSTALL HERE)&lt;/a&gt;&lt;br&gt;
&lt;a href="https://motionkit.codeideal.com/" rel="noopener noreferrer"&gt;MotionKit Official Website&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/novincode/motionkit" rel="noopener noreferrer"&gt;Github&lt;/a&gt;&lt;/p&gt;

</description>
      <category>design</category>
      <category>showdev</category>
      <category>tooling</category>
      <category>ui</category>
    </item>
    <item>
      <title>I built a FREE animation plugin for Figma: MotionKit</title>
      <dc:creator>Shayan</dc:creator>
      <pubDate>Sat, 14 Feb 2026 16:58:13 +0000</pubDate>
      <link>https://dev.to/codeideal/i-built-a-free-animation-plugin-for-figma-motionkit-1k74</link>
      <guid>https://dev.to/codeideal/i-built-a-free-animation-plugin-for-figma-motionkit-1k74</guid>
      <description>&lt;p&gt;So here's the thing — I've been building stuff in Figma for years, and the one thing that always bugged me was animation. You'd design something beautiful, then have to export frames, jump into After Effects or some other tool, and basically rebuild everything from scratch.&lt;/p&gt;

&lt;p&gt;It felt... broken? Like we had all this power for design but then hit a wall when we wanted things to &lt;em&gt;move&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is MotionKit?
&lt;/h2&gt;

&lt;p&gt;MotionKit is a &lt;strong&gt;completely free&lt;/strong&gt; Figma plugin that brings real animation tools directly into Figma. Not prototypes. Not fake transitions. Actual keyframe animation, frame-by-frame workflows, morphing, text animation, and direct MP4/GIF export.&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%2F7bmuvhgf1d4j5z10w6yj.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%2F7bmuvhgf1d4j5z10w6yj.png" alt="MotionKit - Animation inside Figma" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No subscriptions, no premium tiers, no "upgrade to unlock" nonsense. Just free.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.figma.com/files/team/1410821600472406077/resources/community/plugin/1602896408819057835/motionkit-free-animation-motion-design-inside-figma?fuid=1410821598138053005" rel="noopener noreferrer"&gt;Try it on Figma Community →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The stuff that actually matters
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Timeline Mode – Record Everything
&lt;/h3&gt;

&lt;p&gt;You know how in After Effects you can just move stuff and keyframes appear? That's what Record mode does. Enable it, scrub the playhead, modify your layers in Figma, and boom — keyframes appear automatically. No clicking through menus, no manual keyframe placement for every single property.&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%2F902i00psd29vehymv2yq.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%2F902i00psd29vehymv2yq.png" alt="Motion Design for Figma" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
It records position, scale, rotation, opacity, blur, shadows, corner radius, fills, strokes... basically everything.&lt;/p&gt;

&lt;h3&gt;
  
  
  Frame-by-Frame Mode – Classic Animation
&lt;/h3&gt;

&lt;p&gt;For those who like drawing things frame by frame (or just prefer that level of control), there's a full cel animation workflow with onion skinning. You can scrub through frames, reference previous frames as translucent overlays, and time each frame individually.&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%2Fr3etyz8fwbd71ub35p8y.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%2Fr3etyz8fwbd71ub35p8y.png" alt="Frame By Frame animation inside Figma" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Nested Frames (this one's wild)
&lt;/h3&gt;

&lt;p&gt;Here's where it gets interesting — you can nest animations inside each other. Timeline inside frame-by-frame. Frame-by-frame inside timeline. Each with its own FPS. They all render correctly.&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%2F6ah91nc03mgddd4jqkss.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%2F6ah91nc03mgddd4jqkss.png" alt="Nested Frames - MotionKit" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
This unlocks so many possibilities for complex animations that I'm still discovering new ways to use it myself.&lt;/p&gt;

&lt;h3&gt;
  
  
  Morphing &amp;amp; Text Animation
&lt;/h3&gt;

&lt;p&gt;Real SVG path morphing between different shapes. And text animation isn't just "fade in" — you can animate per-character, per-segment, with control over font size, color, spacing, line height, all independently keyframed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Export to MP4, GIF, PNG
&lt;/h3&gt;

&lt;p&gt;No external tools. Render directly to &lt;strong&gt;MP4&lt;/strong&gt; (H.264), &lt;strong&gt;GIF&lt;/strong&gt;, or &lt;strong&gt;PNG sequence&lt;/strong&gt; at 1x–4x scale. Just hit render and you're done.&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%2Fw4x78ozc5ldzl1nrej3l.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%2Fw4x78ozc5ldzl1nrej3l.png" alt="Figma Animation with Free Render video" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Blender-Inspired Shortcuts
&lt;/h3&gt;

&lt;p&gt;All keyboard shortcuts are customizable. Default shortcuts feel a bit like Blender — select keyframes and hit &lt;strong&gt;G&lt;/strong&gt; to grab/move them or &lt;strong&gt;S&lt;/strong&gt; to scale. If you've used Blender, you'll feel right at home.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why free? (aka the awkward money talk)
&lt;/h2&gt;

&lt;p&gt;Look, I could've gone the SaaS route. Monthly subscriptions, freemium tiers, all that. But honestly? I just wanted this to exist. I wanted designers to have proper animation tools without hitting paywalls or dealing with export workflows that waste hours.&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%2Fjhz6jvp44ap2hkrljph9.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%2Fjhz6jvp44ap2hkrljph9.gif" alt="MotionKit Gif Logo - Figma Animation" width="256" height="256"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That said... this takes a &lt;em&gt;lot&lt;/em&gt; of time to build and maintain. So if you use it and it saves you time (or you just think it's neat), &lt;strong&gt;any support helps&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/sponsors/novincode" rel="noopener noreferrer"&gt;GitHub Sponsors&lt;/a&gt;&lt;/strong&gt; – ongoing support&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://buymeacoffee.com/codeideal" rel="noopener noreferrer"&gt;Buy Me a Coffee&lt;/a&gt;&lt;/strong&gt; – one-time thing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Can't donate? That's totally fine. Just &lt;strong&gt;tell someone about it&lt;/strong&gt;. Tweet, post, share, whatever. The more people know about it, the more likely it keeps existing.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next?
&lt;/h2&gt;

&lt;p&gt;The plan is to eventually open-source this once it's mature enough. Right now it's free to use, but I want to clean up the code, add better docs, and make sure it's solid before opening it up fully.&lt;/p&gt;

&lt;p&gt;Also working on more features, fixing bugs, and generally making it better based on feedback.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Website&lt;/strong&gt;: &lt;a href="https://motionkit.codeideal.com" rel="noopener noreferrer"&gt;motionkit.codeideal.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Figma Plugin&lt;/strong&gt;: &lt;a href="https://www.figma.com/community/plugin/1602896408819057835/motionkit-free-animation-motion-design-inside-figma" rel="noopener noreferrer"&gt;Install here&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href="https://github.com/novincode/motionkit" rel="noopener noreferrer"&gt;novincode/motionkit&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docs&lt;/strong&gt;: &lt;a href="https://motionkit.codeideal.com/docs" rel="noopener noreferrer"&gt;motionkit.codeideal.com/docs&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you build something cool with it, I'd love to see it. Or if you find bugs (and there probably are some), &lt;a href="https://github.com/novincode/motionkit/issues" rel="noopener noreferrer"&gt;open an issue&lt;/a&gt; or just email me at &lt;a href="mailto:ideyenovin@gmail.com"&gt;ideyenovin@gmail.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Thanks for reading ✌️&lt;/p&gt;

</description>
      <category>design</category>
      <category>showdev</category>
      <category>sideprojects</category>
      <category>tooling</category>
    </item>
    <item>
      <title>DLMan :: the download manager I always wanted</title>
      <dc:creator>Shayan</dc:creator>
      <pubDate>Thu, 08 Jan 2026 12:30:57 +0000</pubDate>
      <link>https://dev.to/codeideal/dlman-the-download-manager-i-always-wanted-5bi2</link>
      <guid>https://dev.to/codeideal/dlman-the-download-manager-i-always-wanted-5bi2</guid>
      <description>&lt;p&gt;As a Mac user, I always felt this gap.&lt;br&gt;
Windows users have IDM and a bunch of other solid download managers, but most of them are ancient, paid, or both. Meanwhile on Mac? Not much to choose from.&lt;/p&gt;

&lt;p&gt;So I did what any frustrated developer would do; I built my own.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing DLMan
&lt;/h2&gt;

&lt;p&gt;DLMan is a &lt;strong&gt;modern, open source download manager&lt;/strong&gt;, built with &lt;strong&gt;Rust (Tauri)&lt;/strong&gt; and &lt;strong&gt;React&lt;/strong&gt;.&lt;br&gt;
It’s fast, lightweight, and actually works the same on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Windows&lt;/li&gt;
&lt;li&gt;macOS&lt;/li&gt;
&lt;li&gt;Linux&lt;/li&gt;
&lt;/ul&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%2Fvtb1qgx7a0pwlj2qxgq7.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%2Fvtb1qgx7a0pwlj2qxgq7.png" alt="DLMan" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why is it great?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Multi-segment downloads with stable &lt;strong&gt;pause / resume&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Queues, schedules, and post actions
(yes, including &lt;em&gt;shut down my computer when finished&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;Batch import + drag &amp;amp; drop (single or multiple links)&lt;/li&gt;
&lt;li&gt;Super lightweight (~5MB)&lt;/li&gt;
&lt;li&gt;Modern architecture, fully cross-platform&lt;/li&gt;
&lt;li&gt;Browser extensions&lt;/li&gt;
&lt;li&gt;100% open source&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Download
&lt;/h2&gt;

&lt;p&gt;You can grab it from GitHub:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/novincode/dlman" rel="noopener noreferrer"&gt;GitHub Repo&lt;/a&gt;&lt;br&gt;
👉 &lt;a href="https://github.com/novincode/dlman/releases/tag/v1.8.2" rel="noopener noreferrer"&gt;Latest Release&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Final words from the creator
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;I genuinely love what I’m doing.&lt;br&gt;
I love building open source tools and sharing them with the world.&lt;/p&gt;

&lt;p&gt;But yeah — making a living this way isn’t easy.&lt;br&gt;
Open source survives because of the community behind it ❤️&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  How you can support DLMan
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Use it and report issues
(&lt;a href="https://github.com/novincode/dlman/issues" rel="noopener noreferrer"&gt;right here&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Share it with friends&lt;/li&gt;
&lt;li&gt;Star the repo ⭐&lt;/li&gt;
&lt;li&gt;Feeling generous? ☕ &lt;a href="https://buymeacoffee.com/codeideal" rel="noopener noreferrer"&gt;Buy me a coffee&lt;/a&gt; || &lt;a href="https://github.com/sponsors/novincode" rel="noopener noreferrer"&gt;sponsor the project&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I really want to put more time into DLMan and make it even better.&lt;br&gt;
I &lt;strong&gt;do&lt;/strong&gt; read issues, and I &lt;strong&gt;do&lt;/strong&gt; try to fix them.&lt;/p&gt;

&lt;p&gt;Thanks for being part of this...&lt;/p&gt;

</description>
      <category>programming</category>
      <category>opensource</category>
      <category>rust</category>
      <category>tauri</category>
    </item>
    <item>
      <title>I Built DLMan, the Modern Download Manager I always needed!</title>
      <dc:creator>Shayan</dc:creator>
      <pubDate>Tue, 06 Jan 2026 14:36:42 +0000</pubDate>
      <link>https://dev.to/codeideal/i-built-dlman-the-modern-download-manager-i-always-needed-27li</link>
      <guid>https://dev.to/codeideal/i-built-dlman-the-modern-download-manager-i-always-needed-27li</guid>
      <description>&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;For years, I've been jealous of Windows users having IDM (Internet Download Manager). As someone who switches between Mac, Linux, and occasionally Windows, I wanted something that just &lt;em&gt;works&lt;/em&gt; everywhere. Something fast, reliable, and doesn't cost $30.&lt;/p&gt;

&lt;p&gt;I tried the free alternatives out there. None of them really clicked with me—either too bloated, missing features, or just didn't feel right. So I did what any developer would do: spent way too many nights building my own 😅&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing DLMan
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;DLMan&lt;/strong&gt; is the open-source download manager I always dreamed of. Built with Rust (Tauri) and React, it's fast, lightweight, and actually works across all platforms.&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%2Fukshvsfmgvm36oa5jaif.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%2Fukshvsfmgvm36oa5jaif.png" alt="DLMan Download Manager" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I'm Excited About It
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ⚡ It's Actually Fast
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Multi-segment downloads (split files into 1-32 parts)&lt;/li&gt;
&lt;li&gt;Downloads happen in parallel segments, maxing out your bandwidth&lt;/li&gt;
&lt;li&gt;Real-time monitoring so you can see exactly what's happening&lt;/li&gt;
&lt;li&gt;Lightweight: ~6MB on Mac, ~4MB on Windows (no Electron!)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔄 It Won't Let You Down
&lt;/h3&gt;

&lt;p&gt;Here's the thing—I hate when downloads fail halfway through a 5GB file. DLMan uses SQLite to persist everything, so even if your computer crashes, your downloads are safe. Just resume when you're back.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pause and resume anytime&lt;/li&gt;
&lt;li&gt;Auto-resume after crashes or restarts&lt;/li&gt;
&lt;li&gt;Automatic retries for failed segments&lt;/li&gt;
&lt;li&gt;No corrupted half-downloaded files&lt;/li&gt;
&lt;/ul&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%2Fauxn651e99d2ha3g5rq7.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%2Fauxn651e99d2ha3g5rq7.png" alt="Queue &amp;amp; Schedule Manager in DLman" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🗂️ Smart Organization
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Queue management with priorities&lt;/li&gt;
&lt;li&gt;Schedule downloads for later (great for overnight downloads)&lt;/li&gt;
&lt;li&gt;Batch import multiple URLs at once&lt;/li&gt;
&lt;li&gt;Categories with custom folders&lt;/li&gt;
&lt;li&gt;Post-download actions: shutdown, sleep, or run custom commands&lt;/li&gt;
&lt;/ul&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%2Fg0hhi6gy2a9elwfop0g3.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%2Fg0hhi6gy2a9elwfop0g3.png" alt="Organized Categories - DLMan" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🎨 Clean Interface
&lt;/h3&gt;

&lt;p&gt;I wanted something that doesn't look like it's from 2005. Modern UI with dark/light themes, drag-and-drop support, and real-time visualization of download segments.&lt;/p&gt;

&lt;h2&gt;
  
  
  Browser Extensions
&lt;/h2&gt;

&lt;p&gt;Because manually copying URLs is annoying:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chrome, Edge, Brave&lt;/li&gt;
&lt;li&gt;Firefox&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Just install the extension and downloads get captured automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  There's a CLI Too!
&lt;/h2&gt;

&lt;p&gt;For the terminal lovers (like me), there's a full-featured CLI:&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="c"&gt;# Quick download&lt;/span&gt;
dlman add https://example.com/bigfile.zip

&lt;span class="c"&gt;# Custom segments and output folder&lt;/span&gt;
dlman add https://example.com/file.zip &lt;span class="nt"&gt;-o&lt;/span&gt; ~/Downloads &lt;span class="nt"&gt;-s&lt;/span&gt; 8

&lt;span class="c"&gt;# List all downloads&lt;/span&gt;
dlman list

&lt;span class="c"&gt;# Pause/resume/cancel&lt;/span&gt;
dlman pause &amp;lt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
dlman resume &amp;lt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The CLI shares the same core engine as the desktop app, so you get feature parity. Perfect for automation and scripts.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Tech Stack
&lt;/h2&gt;

&lt;p&gt;I chose Rust + Tauri for a reason:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rust backend&lt;/strong&gt;: Native performance, memory safety, no crashes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tauri v2&lt;/strong&gt;: Way lighter than Electron (seriously, check the file sizes)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SQLite&lt;/strong&gt;: Crash-safe persistence&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;React + TypeScript&lt;/strong&gt;: Modern, reactive UI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tokio + Reqwest&lt;/strong&gt;: Async downloads done right&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Cross-Platform Done Right
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Downloads&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Windows&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;.msi&lt;/code&gt;, &lt;code&gt;.exe&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;macOS (Intel)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;.dmg&lt;/code&gt; (x64)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;macOS (Apple Silicon)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;.dmg&lt;/code&gt; (aarch64)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Linux&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;.deb&lt;/code&gt;, &lt;code&gt;.rpm&lt;/code&gt;, &lt;code&gt;.AppImage&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Download from: &lt;a href="https://github.com/novincode/dlman/releases/latest" rel="noopener noreferrer"&gt;GitHub Releases&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/novincode/dlman/releases/latest" rel="noopener noreferrer"&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%2Fmc31lg6i14xqx1pici3h.png" alt="DLMan App" width="64" height="64"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  It's Free. Forever.
&lt;/h2&gt;

&lt;p&gt;DLMan is MIT licensed and 100% open source. No premium tiers, no locked features, no tracking. Just a solid download manager that respects your privacy and freedom.&lt;/p&gt;

&lt;p&gt;But here's the thing—open source projects only survive with community support. If you find DLMan useful:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;⭐ Star the repo on &lt;a href="https://github.com/novincode/dlman" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🐛 Report bugs or suggest features&lt;/li&gt;
&lt;li&gt;🤝 Contribute code, docs, or translations&lt;/li&gt;
&lt;li&gt;☕ &lt;a href="https://buymeacoffee.com/codeideal" rel="noopener noreferrer"&gt;Buy me a coffee&lt;/a&gt; if you're feeling generous&lt;/li&gt;
&lt;li&gt;💬 Spread the word!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every bit helps keep this project alive and improving.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It Out
&lt;/h2&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/novincode/dlman" rel="noopener noreferrer"&gt;github.com/novincode/dlman&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Installation docs, CLI guide, and architecture details are all in the repo.&lt;/p&gt;




&lt;p&gt;I’d love to hear your thoughts. Feel free to drop a comment or feedback.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>I Fixed Blender's Render Output Paths ( Because it SUCKS! )</title>
      <dc:creator>Shayan</dc:creator>
      <pubDate>Mon, 15 Dec 2025 05:37:42 +0000</pubDate>
      <link>https://dev.to/codeideal/i-fixed-blenders-render-output-paths-because-it-sucks--djm</link>
      <guid>https://dev.to/codeideal/i-fixed-blenders-render-output-paths-because-it-sucks--djm</guid>
      <description>&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Blender's render output? Just a text field. No variables, no organization, no help.&lt;/p&gt;

&lt;p&gt;You end up with &lt;code&gt;untitled.png&lt;/code&gt;, &lt;code&gt;untitled0001.png&lt;/code&gt;, &lt;code&gt;final_final_ACTUAL.png&lt;/code&gt;. I searched for a solution. Found nothing. AI suggested some janky script. I wasn't having it.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;RenderNames&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&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%2F28bfl0qg8ip29nvivgm3.png" alt="RenderNames Cover | Auto Naming output paths in blender" width="800" height="450"&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;p&gt;Write a template once:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{{blend_file}}/{{date}}/{{scene}}_{{camera}}_
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;my_project/2025-01-15/Scene_Camera_0001.png
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Blender adds frame numbers. You handle the smart naming. Done.&lt;/p&gt;




&lt;h2&gt;
  
  
  What You Get
&lt;/h2&gt;

&lt;p&gt;✅ &lt;strong&gt;Live preview&lt;/strong&gt; — See your output path as you type&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Template variables&lt;/strong&gt; — &lt;code&gt;{{scene}}&lt;/code&gt;, &lt;code&gt;{{camera}}&lt;/code&gt;, &lt;code&gt;{{date}}&lt;/code&gt;, &lt;code&gt;{{time}}&lt;/code&gt;, &lt;code&gt;{{resolution}}&lt;/code&gt;, &lt;code&gt;{{engine}}&lt;/code&gt;, and more&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Auto-folders&lt;/strong&gt; — Organize by date, scene, camera&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Presets&lt;/strong&gt; — Save and share with your team&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Native Blender&lt;/strong&gt; — Lives in Output Properties, no weird UI  &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%2Fz80n2v7lhiw811imq9zp.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%2Fz80n2v7lhiw811imq9zp.png" alt="RenderNames Plugin Features" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Install (Literally 2 Minutes)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Download &lt;code&gt;.zip&lt;/code&gt; from &lt;a href="https://github.com/novincode/rendernames/releases" rel="noopener noreferrer"&gt;Releases&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Blender: &lt;code&gt;Edit → Preferences → Extensions → Install from Disk&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Enable it, go to Output Properties, start templating&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Support RenderNames
&lt;/h2&gt;

&lt;p&gt;If this saves you time, here's how you can help:&lt;/p&gt;

&lt;p&gt;⭐ &lt;strong&gt;Star on GitHub&lt;/strong&gt; — &lt;a href="https://github.com/novincode/rendernames" rel="noopener noreferrer"&gt;github.com/novincode/rendernames&lt;/a&gt;&lt;br&gt;&lt;br&gt;
💙 &lt;strong&gt;Sponsor&lt;/strong&gt; — &lt;a href="https://github.com/sponsors/novincode" rel="noopener noreferrer"&gt;github.com/sponsors/novincode&lt;/a&gt;&lt;br&gt;&lt;br&gt;
🐛 &lt;strong&gt;Report bugs&lt;/strong&gt; — &lt;a href="https://github.com/novincode/rendernames/issues" rel="noopener noreferrer"&gt;Issues&lt;/a&gt;  &lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Blender 4.2+&lt;/strong&gt; | Open source (GPL-3.0)&lt;/p&gt;

</description>
      <category>blender</category>
      <category>opensource</category>
      <category>showdev</category>
    </item>
    <item>
      <title>I Built OpenFields ( Free Alternative to ACF for WP )</title>
      <dc:creator>Shayan</dc:creator>
      <pubDate>Thu, 11 Dec 2025 19:16:43 +0000</pubDate>
      <link>https://dev.to/codeideal/i-built-openfields-free-alternative-to-acf-for-wp--3dae</link>
      <guid>https://dev.to/codeideal/i-built-openfields-free-alternative-to-acf-for-wp--3dae</guid>
      <description>&lt;p&gt;You know that moment when you're building a WordPress site and think, "I &lt;em&gt;really&lt;/em&gt; don't want to pay for ACF Pro"? Yeah, me too.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;OpenFields&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It's a modern, completely free custom fields plugin for WordPress that does everything ACF does – without the price tag or vendor lock-in. And honestly? It's been way more fun building this than I expected.&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%2Fhws3wb0q6s9gd8lga1q2.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%2Fhws3wb0q6s9gd8lga1q2.png" alt="OpenFields Cover Image" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem I Was Solving
&lt;/h2&gt;

&lt;p&gt;Custom fields are essential for WordPress development. But if you want repeaters, conditional logic, or anything beyond the basics, you're looking at ACF's pricing model. Nothing wrong with ACF – it's solid. But I wanted something that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Is 100% free (no premium tiers hiding behind paywalls)&lt;/li&gt;
&lt;li&gt;✅ Is open source (you own your tool, not the other way around)&lt;/li&gt;
&lt;li&gt;✅ Uses an API that feels familiar if you've used ACF&lt;/li&gt;
&lt;li&gt;✅ Actually feels modern to build with&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So yeah, I decided to build it myself.&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%2F4596ok923pyaxup2u6fe.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%2F4596ok923pyaxup2u6fe.png" alt="OpenFields Plugin for Wordpress" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Visual Builder
&lt;/h3&gt;

&lt;p&gt;Drag and drop fieldsets together. No code needed. Add fields, organize them, set rules – all in a beautiful React interface. It's the kind of UX that makes you actually &lt;em&gt;want&lt;/em&gt; to use it.&lt;/p&gt;

&lt;h3&gt;
  
  
  All the Field Types
&lt;/h3&gt;

&lt;p&gt;Text, textarea, select, radio, checkbox, switch, repeater, groups, relationships... I could list them all but you get it. The important ones are all there.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conditional Logic That Actually Works
&lt;/h3&gt;

&lt;p&gt;Show or hide fields based on other field values. Set it up in the UI, it just works. No "I configured this but it's acting weird" nonsense.&lt;/p&gt;

&lt;h3&gt;
  
  
  Location Rules
&lt;/h3&gt;

&lt;p&gt;Display your fieldsets exactly where you need them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On specific post types&lt;/li&gt;
&lt;li&gt;For certain user roles
&lt;/li&gt;
&lt;li&gt;On taxonomies&lt;/li&gt;
&lt;li&gt;Custom conditions&lt;/li&gt;
&lt;/ul&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%2F83vpwv55s99y8n8y5twb.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%2F83vpwv55s99y8n8y5twb.png" alt="Custom Location Rules on OpenFields" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The API (Yes, It's Familiar)
&lt;/h3&gt;

&lt;p&gt;If you've used ACF, you already know how to use OpenFields. Same functions, same logic:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Get a field value&lt;/span&gt;
&lt;span class="nv"&gt;$price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;get_field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'price'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Loop through repeater rows&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;have_rows&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'team_members'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;have_rows&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'team_members'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;the_row&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nf"&gt;get_sub_field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'name'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No learning curve. Just works.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started (Right Now)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Download&lt;/strong&gt; from &lt;a href="https://github.com/novincode/openfields/releases" rel="noopener noreferrer"&gt;GitHub Releases&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Upload&lt;/strong&gt; to WordPress (Plugins → Add New → Upload)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Activate&lt;/strong&gt; and go to Tools → OpenFields&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build&lt;/strong&gt; your first fieldset&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Seriously, you'll be up and running in 5 minutes.&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%2Fqz4s6ygra7zc6es7qfw7.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%2Fqz4s6ygra7zc6es7qfw7.png" alt="Open Source ACF Alternative" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Join In
&lt;/h2&gt;

&lt;p&gt;This is an open source project. If you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Find bugs → &lt;a href="https://github.com/novincode/openfields/issues" rel="noopener noreferrer"&gt;Report them&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Have ideas → &lt;a href="https://github.com/novincode/openfields/discussions" rel="noopener noreferrer"&gt;Discuss them&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Want to contribute → &lt;a href="https://github.com/novincode/openfields" rel="noopener noreferrer"&gt;Pull requests welcome&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The WordPress community is better when we build things together.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href="https://github.com/novincode/openfields" rel="noopener noreferrer"&gt;novincode/openfields&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentation&lt;/strong&gt;: &lt;a href="https://openfields.codeideal.com/docs" rel="noopener noreferrer"&gt;openfields.codeideal.com/docs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Download&lt;/strong&gt;: &lt;a href="https://wordpress.org/plugins/codeideal-open-fields/" rel="noopener noreferrer"&gt;Install from Wordpress&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;That's it. OpenFields is free, open source, and ready to use. No credit card required, no lock-in, no nonsense.&lt;/p&gt;

&lt;p&gt;Give it a shot. I think you'll like it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;For those who want to support this mission: &lt;a href="https://github.com/novincode/openfields" rel="noopener noreferrer"&gt;⭐ Star on Github ⭐&lt;/a&gt; | &lt;a href="https://github.com/sponsors/novincode" rel="noopener noreferrer"&gt; ☕ Buy Me a Coffee ☕&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://wordpress.org/plugins/codeideal-open-fields/" rel="noopener noreferrer"&gt;Install From Wordpress&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/novincode/openfields/releases" rel="noopener noreferrer"&gt;Download OpenFields&lt;/a&gt;&lt;/strong&gt; · &lt;a href="https://github.com/novincode/openfields" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>tooling</category>
      <category>showdev</category>
      <category>opensource</category>
    </item>
    <item>
      <title>I made Lexkit ( Rich Text Editor I wish existed !)</title>
      <dc:creator>Shayan</dc:creator>
      <pubDate>Sun, 02 Nov 2025 17:29:11 +0000</pubDate>
      <link>https://dev.to/codeideal/i-made-lexkit-rich-text-editor-i-wish-existed--1o3n</link>
      <guid>https://dev.to/codeideal/i-made-lexkit-rich-text-editor-i-wish-existed--1o3n</guid>
      <description>&lt;p&gt;Hi fokls, &lt;br&gt;
I'm here to share a story, my story on rich text editors and finally making my own.&lt;br&gt;
I’ve always had trouble using rich text editors.&lt;br&gt;
they were all either too basic, or too heavy, or too complex, or too expensive.&lt;br&gt;
I used tiptap in a few projects, it had great options, but it was still a bit heavy, and I didn’t like its core (ProseMirror).&lt;/p&gt;

&lt;p&gt;Then I heard that Meta had built a new RTE called Lexical.&lt;br&gt;
This was MUCH BETTER than Tiptap.&lt;br&gt;
But the DX and learning curve of Lexical were tough.&lt;br&gt;
You have to deal with low-level code ; and I wanted something that felt more like React and TypeScript, not JS from 2010! 😅&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;So I decided to build my own Layer on top of Lexical, &lt;br&gt;
and tried to keep everything headless,and scalable. &lt;/p&gt;
&lt;/blockquote&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%2F2box57iox4a85w1stn6g.jpg" 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%2F2box57iox4a85w1stn6g.jpg" alt="Lexkit Rich Text Editor" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I won’t talk too much here (I won’t blow your head with BS 😅).&lt;br&gt;
I've documented everything here: &lt;a href="https://lexkit.dev/docs" rel="noopener noreferrer"&gt;Lexkit Docs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Live Demo is here: &lt;a href="https://lexkit.dev/demo" rel="noopener noreferrer"&gt;Lexkit Demo&lt;/a&gt;&lt;br&gt;
and we have a &lt;a href="https://lexkit.dev/demo/shadcn" rel="noopener noreferrer"&gt;Shadcn Based Demo&lt;/a&gt; too. &lt;a href="https://lexkit.dev/docs/templates/shadcn" rel="noopener noreferrer"&gt;with its docs&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;To support this project, &lt;a href="//github.com/novincode/lexkit"&gt;STAR this repo here&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Thanks for your time, Let me know what you think and what to improve ;)&lt;/p&gt;

</description>
    </item>
    <item>
      <title>I Created CFMan, Cloudflare Wrangler Multi Account Manager</title>
      <dc:creator>Shayan</dc:creator>
      <pubDate>Sun, 12 Oct 2025 04:36:05 +0000</pubDate>
      <link>https://dev.to/codeideal/i-created-cfman-cloudflare-wrangler-multi-account-manager-11mh</link>
      <guid>https://dev.to/codeideal/i-created-cfman-cloudflare-wrangler-multi-account-manager-11mh</guid>
      <description>&lt;p&gt;Hey folks 👋&lt;br&gt;
So… I built a little thing called &lt;strong&gt;CFMan&lt;/strong&gt; — short for &lt;em&gt;Cloudflare Manager&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;If you’ve ever juggled multiple Cloudflare accounts, workers, or pages, you &lt;em&gt;know&lt;/em&gt; the pain.&lt;br&gt;
Switching tokens manually, exporting env vars, praying Wrangler doesn’t mix accounts… 😩&lt;br&gt;
Yeah, been there.&lt;/p&gt;

&lt;p&gt;That’s why I made &lt;strong&gt;CFMan&lt;/strong&gt; — a beautiful, colorful, emoji-filled CLI that makes it dead simple to manage multiple Cloudflare accounts and deploy Workers or Pages from one place.&lt;/p&gt;


&lt;h3&gt;
  
  
  🪄 What It Does
&lt;/h3&gt;

&lt;p&gt;CFMan basically wraps around &lt;strong&gt;Wrangler&lt;/strong&gt;, but smarter.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔐 &lt;strong&gt;Manages multiple API tokens&lt;/strong&gt; — securely stored, encrypted, per-account&lt;/li&gt;
&lt;li&gt;🚀 &lt;strong&gt;Deploys Workers/Pages&lt;/strong&gt; with a single clean command&lt;/li&gt;
&lt;li&gt;⚡ &lt;strong&gt;Runs any Wrangler command&lt;/strong&gt; but with &lt;code&gt;--account&lt;/code&gt; flag&lt;/li&gt;
&lt;li&gt;🧠 &lt;strong&gt;Automatically uses &lt;code&gt;npx wrangler&lt;/code&gt;&lt;/strong&gt; if Wrangler isn’t installed globally&lt;/li&gt;
&lt;li&gt;🎨 &lt;strong&gt;Pretty CLI output&lt;/strong&gt; (because yes, even your terminal deserves good design)&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;
  
  
  🖼️ Here’s What It Looks Like
&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%2Fomcitr1r9qee2v9m4epz.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%2Fomcitr1r9qee2v9m4epz.png" alt=" " width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That’s literally &lt;code&gt;npx cfman --help&lt;/code&gt;.&lt;br&gt;
It gives you colors, emojis, examples, and everything you actually need to &lt;em&gt;remember how your tool works&lt;/em&gt;. 😅&lt;/p&gt;


&lt;h3&gt;
  
  
  🚀 Quick Start
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# install globally (recommended)&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; cfman

&lt;span class="c"&gt;# or just try it&lt;/span&gt;
npx cfman &lt;span class="nt"&gt;--help&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Now add your first account:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cfman token add &lt;span class="nt"&gt;--name&lt;/span&gt; production &lt;span class="nt"&gt;--token&lt;/span&gt; cf_xxx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check what’s going on:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cfman status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And deploy anything:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cfman wrangler &lt;span class="nt"&gt;--account&lt;/span&gt; production pages deploy out
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s it.&lt;br&gt;
No more exporting tokens or switching profiles like a maniac.&lt;/p&gt;


&lt;h3&gt;
  
  
  💡 Before CFMan vs After CFMan
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Before:&lt;/strong&gt;&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="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;CLOUDFLARE_API_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;cf_token_for_client_a
wrangler deploy &lt;span class="nt"&gt;--env&lt;/span&gt; production

&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;CLOUDFLARE_API_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;cf_token_for_client_b
wrangler pages deploy out
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;After:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cfman wrangler &lt;span class="nt"&gt;--account&lt;/span&gt; client-a deploy &lt;span class="nt"&gt;--env&lt;/span&gt; production
cfman wrangler &lt;span class="nt"&gt;--account&lt;/span&gt; client-b pages deploy out
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s the whole magic.&lt;br&gt;
You keep your sanity, your tokens are isolated, and your deployments stay clean.&lt;/p&gt;


&lt;h3&gt;
  
  
  🧰 Under the Hood
&lt;/h3&gt;

&lt;p&gt;Built entirely in &lt;strong&gt;TypeScript&lt;/strong&gt;, bundled with &lt;strong&gt;tsup&lt;/strong&gt;, and designed to be fast, tiny, and safe.&lt;br&gt;
CFMan stores your tokens locally under:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;macOS/Linux → &lt;code&gt;~/.config/cfman/tokens.json&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Windows → &lt;code&gt;%APPDATA%/cfman/tokens.json&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All with file permissions set to 600 (so only you can read/write them).&lt;/p&gt;

&lt;p&gt;And starting v0.4.0 → CFMan supports &lt;strong&gt;Package Provenance&lt;/strong&gt;, meaning you can cryptographically verify the npm package comes straight from &lt;a href="https://github.com/novincode/cfman" rel="noopener noreferrer"&gt;GitHub source&lt;/a&gt;.&lt;br&gt;
No shady npm nonsense. 🛡️&lt;/p&gt;


&lt;h3&gt;
  
  
  📦 Wrangler Integration
&lt;/h3&gt;

&lt;p&gt;You can literally run &lt;em&gt;any&lt;/em&gt; Wrangler command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cfman wrangler &lt;span class="nt"&gt;--account&lt;/span&gt; prod d1 list
cfman wrangler &lt;span class="nt"&gt;--account&lt;/span&gt; staging pages project list
cfman wrangler &lt;span class="nt"&gt;--account&lt;/span&gt; demo kv namespace create &lt;span class="nb"&gt;test&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Even if Wrangler isn’t installed globally.&lt;br&gt;
CFMan falls back to &lt;code&gt;npx wrangler&lt;/code&gt; automatically.&lt;/p&gt;


&lt;h3&gt;
  
  
  ⚙️ Setup Wizard
&lt;/h3&gt;

&lt;p&gt;If you’re new, just run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cfman setup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It walks you through everything interactively — adding tokens, naming accounts, verifying access, etc.&lt;br&gt;
Like a friendly little terminal assistant.&lt;/p&gt;


&lt;h3&gt;
  
  
  🧠 Why I Built It
&lt;/h3&gt;

&lt;p&gt;Honestly, I got tired of exporting tokens, messing up deployments, and switching environments like some kind of Cloudflare juggler.&lt;br&gt;
There had to be a clean, &lt;em&gt;developer-friendly&lt;/em&gt; way to handle all accounts — and make it look nice while doing it.&lt;/p&gt;

&lt;p&gt;So here we are.&lt;br&gt;
CFMan. It’s open-source, MIT licensed, and you can grab it here:&lt;br&gt;
👉 &lt;a href="https://github.com/novincode/cfman" rel="noopener noreferrer"&gt;github.com/novincode/cfman&lt;/a&gt;&lt;/p&gt;


&lt;h3&gt;
  
  
  💬 Final Thoughts
&lt;/h3&gt;

&lt;p&gt;If you work with Cloudflare Workers or Pages and have multiple accounts (clients, staging, production, whatever), this tool will literally save your life.&lt;/p&gt;

&lt;p&gt;Give it a try:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx cfman &lt;span class="nt"&gt;--help&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And if you like it, drop a ⭐ on the repo — it helps a ton 💜&lt;br&gt;
Let’s make Cloudflare dev experience a little more magical ✨&lt;/p&gt;

</description>
      <category>serverless</category>
      <category>cli</category>
      <category>showdev</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Why I chose Lexical over Tiptap</title>
      <dc:creator>Shayan</dc:creator>
      <pubDate>Wed, 24 Sep 2025 16:28:36 +0000</pubDate>
      <link>https://dev.to/codeideal/why-i-chose-lexical-over-tiptap-38nd</link>
      <guid>https://dev.to/codeideal/why-i-chose-lexical-over-tiptap-38nd</guid>
      <description>&lt;p&gt;So… confession. I was a &lt;strong&gt;tiptap fan boy&lt;/strong&gt;. Like really. install → write 2 lines → editor works. nice. done. 👏&lt;/p&gt;

&lt;p&gt;Then I saw &lt;strong&gt;Lexical&lt;/strong&gt;… and omg its &lt;strong&gt;fast as hell&lt;/strong&gt;. Also its made by Meta (yeah fb guys), same people who made React. And I was like, okay okay let’s try this baby.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tiptap vs Lexical
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Tiptap&lt;/th&gt;
&lt;th&gt;Lexical&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Bundle Size&lt;/td&gt;
&lt;td&gt;~110kb+ (depends what you add)&lt;/td&gt;
&lt;td&gt;~25kb core only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DX (developer experince lol)&lt;/td&gt;
&lt;td&gt;super easy, ready 2 go&lt;/td&gt;
&lt;td&gt;low level, you build more urself&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Performance&lt;/td&gt;
&lt;td&gt;decent, but bigger&lt;/td&gt;
&lt;td&gt;ultra fast &amp;amp; light&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Community&lt;/td&gt;
&lt;td&gt;huge, lot of examples&lt;/td&gt;
&lt;td&gt;growing, meta support&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Out-of-the-box&lt;/td&gt;
&lt;td&gt;✅ many features plug n play&lt;/td&gt;
&lt;td&gt;❌ nope, u add stuff ( Unless you use Lexkit )&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  My experince
&lt;/h2&gt;

&lt;p&gt;Tiptap = feels like plug socket, u just connect ur charger.&lt;br&gt;
Lexical = feels like buying wires &amp;amp; making ur own charger 😅 but once u do, its lighter &amp;amp; faster.&lt;/p&gt;

&lt;p&gt;And yeah, first time I tried lexical, I was like&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“bruh where is bold button?? why i must code bold my self??”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;then boom 💥 I found &lt;strong&gt;LexKit&lt;/strong&gt; → open source layer on top of Lexical.&lt;br&gt;
It’s like… same vibes as shadcn on radix. u get the raw power + nice developer experince. Honestly saved me.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Tiptap = 🍕 ready pizza, eat now.&lt;/li&gt;
&lt;li&gt;Lexical = 🥦 raw veggies, u cook but more healthy.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And with LexKit → feels like u got a chef who preps the veggies for u 😂&lt;/p&gt;

&lt;p&gt;So yeah, that’s why I kinda moved. Not saying tiptap bad… I still love it. But lexical is lighter, and I like fast things.&lt;/p&gt;

&lt;p&gt;What u think? You on team tiptap or lexical? Or still lost in contenteditable hell lol&lt;br&gt;
Thanks for the time, feel free to comment down below :)&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>tooling</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Building a Type-Safe Rich Text Editor in Next.js (with Lexical &amp; Lexkit)</title>
      <dc:creator>Shayan</dc:creator>
      <pubDate>Wed, 24 Sep 2025 03:31:17 +0000</pubDate>
      <link>https://dev.to/codeideal/building-a-type-safe-rich-text-editor-in-nextjs-with-lexical-lexkit-4np1</link>
      <guid>https://dev.to/codeideal/building-a-type-safe-rich-text-editor-in-nextjs-with-lexical-lexkit-4np1</guid>
      <description>&lt;p&gt;So… I’ve always hated building editors. Either they’re &lt;strong&gt;too basic&lt;/strong&gt; or just way too complex.&lt;br&gt;&lt;br&gt;
Then I was like: why not build my own? And that’s how &lt;strong&gt;LexKit&lt;/strong&gt; happened ⚡️&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%2Frqtnptxmzpeo72sekryu.jpg" 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%2Frqtnptxmzpeo72sekryu.jpg" alt="Lexkit Rich Text Editor" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It’s a React-first, type-safe, DX-friendly editor system built on top of &lt;a href="https://lexical.dev/" rel="noopener noreferrer"&gt;Lexical&lt;/a&gt;.&lt;br&gt;&lt;br&gt;
Perfect for Next.js apps if you want something lightweight but not boring.&lt;/p&gt;


&lt;h2&gt;
  
  
  Getting Started (Basic Example)
&lt;/h2&gt;

&lt;p&gt;Here’s literally the simplest editor you can make with LexKit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;use client&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;createEditorSystem&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;boldExtension&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;italicExtension&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;listExtension&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;linkExtension&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;historyExtension&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;RichText&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@lexkit/editor&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./basic-editor.css&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// 1. Define your extensions (for features like bold, lists, etc)&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;extensions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="nx"&gt;boldExtension&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;italicExtension&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;listExtension&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;linkExtension&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;historyExtension&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// 2. Create typed editor system&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Provider&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useEditor&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;createEditorSystem&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;extensions&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s the “engine.”&lt;br&gt;
Now let’s add a &lt;strong&gt;toolbar&lt;/strong&gt; so you can actually click stuff:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Toolbar&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;commands&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;activeStates&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useEditor&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"basic-toolbar"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;commands&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toggleBold&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;activeStates&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bold&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;active&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        Bold
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;commands&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toggleItalic&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;activeStates&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;italic&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;active&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        Italic
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;commands&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toggleUnorderedList&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;• List&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;commands&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toggleOrderedList&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;1. List&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;commands&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;undo&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;disabled&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;activeStates&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;canUndo&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Undo&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;commands&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;redo&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;disabled&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;activeStates&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;canRedo&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Redo&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And the &lt;strong&gt;editor itself&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Editor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"basic-editor"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Toolbar&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;RichText&lt;/span&gt;
        &lt;span class="na"&gt;placeholder&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Start writing your content here..."&lt;/span&gt;
        &lt;span class="na"&gt;classNames&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;container&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;basic-editor-container&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;contentEditable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;basic-content&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;placeholder&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;basic-placeholder&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;BasicEditorExample&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Provider&lt;/span&gt; &lt;span class="na"&gt;extensions&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;extensions&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Editor&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Provider&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Boom 💥 you got a working editor in Next.js with bold, italic, lists, undo/redo.&lt;br&gt;
No crazy config, no vendor lock-in.&lt;/p&gt;




&lt;h2&gt;
  
  
  Features that just &lt;em&gt;work&lt;/em&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Type-safe extensions&lt;/strong&gt; → autocomplete knows what commands exist.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Next.js Ready&lt;/strong&gt; → works out-of-the-box with &lt;code&gt;use client&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Theming?&lt;/strong&gt; yep → the &lt;code&gt;DefaultTemplate&lt;/code&gt; plays nice with next-themes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production-ready&lt;/strong&gt; → images, tables, markdown, html import/export, history, you name it.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;Rich text editors suck less when you can actually &lt;strong&gt;understand the code&lt;/strong&gt;.&lt;br&gt;
LexKit is my attempt to make editors &lt;strong&gt;fun&lt;/strong&gt; (and honestly DX-friendly).&lt;/p&gt;

&lt;p&gt;If you’re already playing in the Next.js world → give it a spin.&lt;br&gt;
Docs are here 👉 &lt;a href="https://lexkit.dev" rel="noopener noreferrer"&gt;lexkit.dev&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;PS: if this helped, smash the ❤️ or drop a comment. Makes me feel less like I’m coding into the void 😂&lt;/em&gt;&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%2Fpd1yh3exmdp17oca15a4.jpg" 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%2Fpd1yh3exmdp17oca15a4.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Lexkit is open source, free and under MIT license. I love to develop it and push it forward. But like every other open source project, it's only possible with your supports. whether it's a github star⭐, a comment or even a small donation. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To support this project check &lt;a href="https://github.com/novincode/lexkit" rel="noopener noreferrer"&gt;Github Repo&lt;/a&gt;&lt;br&gt;
Thanks for your time, try it out and report any issues or bugs.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>ShadCN Rich Text Editor with Lexical + Lexkit</title>
      <dc:creator>Shayan</dc:creator>
      <pubDate>Tue, 23 Sep 2025 00:35:22 +0000</pubDate>
      <link>https://dev.to/codeideal/shadcn-rich-text-editor-with-lexical-lexkit-4gnm</link>
      <guid>https://dev.to/codeideal/shadcn-rich-text-editor-with-lexical-lexkit-4gnm</guid>
      <description>&lt;p&gt;So, in my last post I was ranting about my struggles with building rich text editors…&lt;br&gt;&lt;br&gt;
Every time I touched &lt;strong&gt;Lexical&lt;/strong&gt;, I loved the core idea but… the DX (developer experience) felt… meh.&lt;br&gt;&lt;br&gt;
I wanted something where I could &lt;strong&gt;just plug in extensions&lt;/strong&gt;, have &lt;strong&gt;full type-safety&lt;/strong&gt;, and not fight the damn thing every two lines of code.&lt;/p&gt;

&lt;p&gt;And guess what? I finally did it 🎉&lt;br&gt;&lt;br&gt;
I built &lt;strong&gt;LexKit&lt;/strong&gt; — my own little framework on top of Lexical.&lt;br&gt;&lt;br&gt;
DX-friendly, modular, and honestly the editor system I always wished existed.&lt;/p&gt;



&lt;p&gt;Here's a quick preview of the shadcn template that I've made.  &lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://lexkit.dev/demo/shadcn" rel="noopener noreferrer"&gt;Shadcn based editor ( See the demo )&lt;/a&gt;&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%2Fce902c0buc955qzppux7.jpg" 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%2Fce902c0buc955qzppux7.jpg" alt="Lexkit Editor Screenshot" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Lexkit RTE made on Lexical
&lt;/h2&gt;

&lt;p&gt;Lexkit Peerdeps on Lexical,&lt;br&gt;
To add this editor into your own React project:  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install lexkit
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install @lexkit/editor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;and Lexical Deps
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install lexical @lexical/react @lexical/html @lexical/markdown @lexical/list @lexical/rich-text @lexical/selection @lexical/utils
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;Then, check out the docs here to plug in the &lt;strong&gt;Shadcn template&lt;/strong&gt;:
&lt;a href="https://lexkit.dev/docs/templates/shadcn" rel="noopener noreferrer"&gt;Shadcn Based Template Docs&lt;/a&gt; | &lt;a href="https://github.com/novincode/lexkit/tree/main/apps/web/components/templates/shadcn" rel="noopener noreferrer"&gt;Source Code on Github&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That’s it. No magic. Just install, copy, paste, and boom → you’ve got a Shadcn flavored RTE.&lt;/p&gt;


&lt;h2&gt;
  
  
  Qucik Editor Example to see how things work
&lt;/h2&gt;

&lt;p&gt;Here’s a minimal editor setup using LexKit.&lt;br&gt;
Literally like 10 lines of code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { createEditorSystem, richTextExtension, boldExtension, italicExtension } from "@lexkit/editor"

const extensions = [
  richTextExtension,
  boldExtension,
  italicExtension,
] as const

const { Provider } = createEditorSystem&amp;lt;typeof extensions&amp;gt;()

export default function MyEditor() {
  return (
    &amp;lt;Provider extensions={extensions}&amp;gt;
      &amp;lt;div className="p-4 border rounded"&amp;gt;
        {/* RichText extension renders automatically */}
      &amp;lt;/div&amp;gt;
    &amp;lt;/Provider&amp;gt;
  )
}
&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%2Ffvpe7l3rb9y4tszl9818.jpg" 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%2Ffvpe7l3rb9y4tszl9818.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
That’s all. You can start typing right away.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why I built Lexkit?
&lt;/h2&gt;

&lt;p&gt;Because &lt;strong&gt;DX matters&lt;/strong&gt; to me a lot.&lt;br&gt;
I was sick of guessing types, fighting plugins, and patching random examples from GitHub gists.&lt;/p&gt;

&lt;p&gt;With LexKit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;you get &lt;strong&gt;typed commands &amp;amp; state queries&lt;/strong&gt; out of the box&lt;/li&gt;
&lt;li&gt;extensions are &lt;strong&gt;composable and headless&lt;/strong&gt; (like lego blocks 🧱)&lt;/li&gt;
&lt;li&gt;it’s React-first, so no weird wrappers&lt;/li&gt;
&lt;li&gt;and yes… it actually works in production.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What’s Next?
&lt;/h2&gt;

&lt;p&gt;I'm working to add more extensions, more templates and demos and more docs.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Your supports will keep this project going. It can be a comment or Github Star, or suggesting features and reporting bugs, or even a small donation or sponsorship 🙈 &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;👉 &lt;a href="https://lexkit.dev/docs" rel="noopener noreferrer"&gt;Lexkit Docs&lt;/a&gt;&lt;br&gt;
👉 &lt;a href="https://github.com/novincode/lexkit" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&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%2Fv8x82d8m4fgh9xoq154i.jpg" 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%2Fv8x82d8m4fgh9xoq154i.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
That’s it. Hope this helps you if you’ve been lost in RTE hell like I was.&lt;br&gt;
And if you try it, let me know what breaks 😅&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>tooling</category>
      <category>showdev</category>
      <category>react</category>
    </item>
  </channel>
</rss>
