<?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: Streamline</title>
    <description>The latest articles on DEV Community by Streamline (@streamline-hq).</description>
    <link>https://dev.to/streamline-hq</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%2Forganization%2Fprofile_image%2F10915%2F4f089c22-558a-4252-b89c-1d27f204f23a.png</url>
      <title>DEV Community: Streamline</title>
      <link>https://dev.to/streamline-hq</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/streamline-hq"/>
    <language>en</language>
    <item>
      <title>How We Built a Visual Studio Code Plugin in just 3 Weeks Using an Iframe</title>
      <dc:creator>Anderson Laverde</dc:creator>
      <pubDate>Tue, 27 May 2025 14:18:42 +0000</pubDate>
      <link>https://dev.to/streamline-hq/how-we-built-a-visual-studio-plugin-in-just-3-weeks-using-an-iframe-4f2m</link>
      <guid>https://dev.to/streamline-hq/how-we-built-a-visual-studio-plugin-in-just-3-weeks-using-an-iframe-4f2m</guid>
      <description>&lt;h2&gt;
  
  
  Why a Visual Studio Code Plugin?
&lt;/h2&gt;

&lt;p&gt;At Streamline, we aim to make creators’ workflows as smooth as possible. That’s why we’ve built plugins for platforms like Figma, Framer, Lucid, Desktop, and Web. But let’s face it—&lt;strong&gt;as developers, we’re also creators&lt;/strong&gt;, and more often than not, we have to deal with icons for our frontends.&lt;/p&gt;

&lt;p&gt;Even with JSX support, I often found myself stuck in a repetitive cycle just to use our own icons in code:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Go to &lt;a href="https://streamlinehq.com" rel="noopener noreferrer"&gt;StreamlineHQ.com&lt;/a&gt; → Download the icon SVG → Open the Downloads folder → Move the file to &lt;code&gt;/assets&lt;/code&gt; → Import it → Want to change it? Go back to step one.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So we decided it was time to show some love to our dev community by bringing the power of Streamline to your favorite code editor: &lt;strong&gt;Visual Studio Code&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why an Icons Plugin &lt;em&gt;inside&lt;/em&gt; a Code Editor?
&lt;/h2&gt;

&lt;p&gt;You might be thinking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“I’m fine manually downloading and importing icons. Why would I need a plugin for that?”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We’re not here to replace your workflow—but to make it faster, more enjoyable, and the best part: &lt;strong&gt;you never have to leave VS Code&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;We built this plugin based on real developer needs when working with design assets.&lt;/p&gt;

&lt;h3&gt;
  
  
  🧲 Drag and Drop
&lt;/h3&gt;

&lt;p&gt;Who doesn’t love dragging and dropping things? It just &lt;em&gt;feels&lt;/em&gt; like magic. That’s why we implemented this feature: search for the icon you need, drag it directly into your code file, and boom—you’re done.&lt;/p&gt;

&lt;p&gt;This is by far my favorite feature 😍  &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%2F7mlvd54ktt8igxmbq8wf.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%2F7mlvd54ktt8igxmbq8wf.gif" alt="Drag_and_drop" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  💾 Download to Local Folder
&lt;/h3&gt;

&lt;p&gt;Prefer to download the SVG to your project instead of using inline code? We’ve got you. The plugin lets you download the asset directly to your preferred &lt;code&gt;/assets&lt;/code&gt; folder. You can even customize the path in the plugin settings.&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%2Fopo3nywpfwvmrpcqq6n3.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%2Fopo3nywpfwvmrpcqq6n3.gif" alt="Download demo" width="760" height="475"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why We Didn’t Code a Native Plugin
&lt;/h2&gt;

&lt;p&gt;In the past, each Streamline plugin lived in its own separate repo. While that worked for some use cases, it created serious friction for our product team:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🐌 &lt;strong&gt;Slow development&lt;/strong&gt; when building new plugins or rolling out shared features.&lt;/li&gt;
&lt;li&gt;🧩 &lt;strong&gt;Poor maintainability&lt;/strong&gt;, with the same logic implemented multiple times across repos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So we asked ourselves:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;How can we develop new plugins in less than a month?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We’re a team of only 3 developers maintaining several apps and launching new ones in parallel. To stay fast, we needed to &lt;strong&gt;reuse as much code as possible&lt;/strong&gt; and deliver the full Streamline experience without reinventing the wheel.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ Our Winning Recipe: Next.js + Iframe + Shared Components
&lt;/h2&gt;

&lt;p&gt;We’ll dive deeper into our monorepo setup in a future post—but for now, here’s how we built the VS Code plugin architecture:&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%2Fres.craft.do%2Fuser%2Ffull%2F84aefa70-036c-a6e1-79b1-440cc9cbad43%2Fdoc%2Fa6fadd4f-983b-48b9-b0f3-f86f772459fe%2F0e19c64c-6912-4dd9-bc74-db9bf82efb66" 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%2Fres.craft.do%2Fuser%2Ffull%2F84aefa70-036c-a6e1-79b1-440cc9cbad43%2Fdoc%2Fa6fadd4f-983b-48b9-b0f3-f86f772459fe%2F0e19c64c-6912-4dd9-bc74-db9bf82efb66" alt="Architecture" width="1262" height="1084"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🧩 VS Code Native Container
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Opens a &lt;strong&gt;WebView&lt;/strong&gt; to display the UI hosted on Vercel.&lt;/li&gt;
&lt;li&gt;Acts as a bridge between the Iframe and the VS Code API.&lt;/li&gt;
&lt;li&gt;Forwards events like file downloads or path updates.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🧱 Streamline Iframe (Plugin UI)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Built with &lt;strong&gt;Next.js&lt;/strong&gt;, rendered inside the WebView.&lt;/li&gt;
&lt;li&gt;Uses our &lt;strong&gt;shared component library and store&lt;/strong&gt;, the same ones we use across all plugins.&lt;/li&gt;
&lt;li&gt;This means we can ship features like search, icon previews, and settings with just a few imports—like building with LEGO bricks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We use &lt;strong&gt;Redux + RTK Query&lt;/strong&gt; to manage state across all our frontends. With shared hooks and components, spinning up a new plugin UI feels effortless.&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚙️ VS Code API Integration
&lt;/h3&gt;

&lt;p&gt;We interact with the official API for tasks like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Downloading files to local folders&lt;/li&gt;
&lt;li&gt;Setting the default assets path&lt;/li&gt;
&lt;li&gt;Triggering actions from the WebView&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Result
&lt;/h2&gt;

&lt;p&gt;You can try the plugin today and add Streamline icons to your projects without ever leaving VS Code. It's fast, simple, and free.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://res.craft.do/user/full/84aefa70-036c-a6e1-79b1-440cc9cbad43/doc/a6fadd4f-983b-48b9-b0f3-f86f772459fe/ce0252fb-ea7f-489d-8841-9f32c69eff7b" rel="noopener noreferrer"&gt;Install from Streamline Icons Marketplace&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%2Frly04rxdi8tknhks1ynn.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%2Frly04rxdi8tknhks1ynn.png" alt="Streamline Plugin on VS code store" width="800" height="282"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We’d love to hear your feedback! Whether it's bug reports, feature requests, or just good vibes—drop us a message.&lt;/p&gt;




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

&lt;p&gt;In our next post, I’ll share how we unified our plugin architecture using a &lt;strong&gt;monorepo and shared libraries&lt;/strong&gt;, and how we now reuse &lt;strong&gt;90%+&lt;/strong&gt; of our frontend code across platforms.&lt;/p&gt;

&lt;p&gt;Thanks for reading, see you in the next one!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>vscode</category>
      <category>design</category>
      <category>nextjs</category>
    </item>
  </channel>
</rss>
