<?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: Vildan Bina</title>
    <description>The latest articles on DEV Community by Vildan Bina (@vildanbina).</description>
    <link>https://dev.to/vildanbina</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2906114%2Fa6195fdd-8c15-476c-9aaf-1c6cf9d82a86.jpg</url>
      <title>DEV Community: Vildan Bina</title>
      <link>https://dev.to/vildanbina</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vildanbina"/>
    <language>en</language>
    <item>
      <title>Bursora, a tool that blocks AI spend before the call, not after the bill</title>
      <dc:creator>Vildan Bina</dc:creator>
      <pubDate>Sun, 05 Jul 2026 19:36:25 +0000</pubDate>
      <link>https://dev.to/vildanbina/i-built-a-tool-that-blocks-ai-spend-before-the-call-not-after-the-bill-2ll1</link>
      <guid>https://dev.to/vildanbina/i-built-a-tool-that-blocks-ai-spend-before-the-call-not-after-the-bill-2ll1</guid>
      <description>&lt;p&gt;One of my AI features got stuck in a loop and spent way more than it should have. I found out the next morning, from the provider dashboard.&lt;/p&gt;

&lt;p&gt;That's the problem with every cost tool I tried. Helicone, Langfuse, the provider dashboards. They all show you the bill after it's already spent.&lt;/p&gt;

&lt;p&gt;I wanted one that says no &lt;em&gt;before&lt;/em&gt; the call goes out. So I built it and made it open source. It's called Bursora.&lt;/p&gt;

&lt;h2&gt;
  
  
  The idea
&lt;/h2&gt;

&lt;p&gt;Check the budget first. If the call would go over your limit, block it. If not, let it through and record what it cost.&lt;/p&gt;

&lt;p&gt;A traffic light, not a speed camera.&lt;/p&gt;

&lt;h2&gt;
  
  
  The whole setup
&lt;/h2&gt;

&lt;p&gt;Install it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm i @bursora/sdk openai
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Wrap your client once:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// lib/openai.ts&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;OpenAI&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;openai&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;wrap&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;@bursora/sdk&lt;/span&gt;&lt;span class="dl"&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;const&lt;/span&gt; &lt;span class="nx"&gt;openai&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;wrap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;BURSORA_API_KEY&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;endpoint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;BURSORA_ENDPOINT&lt;/span&gt;&lt;span class="o"&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;That's it. You still call the API the same way you always did:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gpt-4o-mini&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hi&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each call asks "can I spend this?" first. On yes, it goes straight to OpenAI. No proxy. Your traffic never touches my servers. After the call, it reports the real token cost back.&lt;/p&gt;

&lt;h2&gt;
  
  
  When you hit a limit
&lt;/h2&gt;

&lt;p&gt;The call throws before it ever reaches the provider:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;BudgetExceededError&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;@bursora/sdk&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="cm"&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;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt; &lt;span class="k"&gt;instanceof&lt;/span&gt; &lt;span class="nx"&gt;BudgetExceededError&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// handle it your way&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="nx"&gt;err&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;So a runaway loop stops itself instead of billing you for 10,000 calls.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding who spent it
&lt;/h2&gt;

&lt;p&gt;One big number tells you nothing. Tag your calls, and spend gets grouped by customer, agent, or workflow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;withTags&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;@bursora/sdk&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;withTags&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;tenant_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;acme&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;agent_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;support-bot&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gpt-4o-mini&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hi&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="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now a spike has a name.&lt;/p&gt;

&lt;h2&gt;
  
  
  If Bursora is down
&lt;/h2&gt;

&lt;p&gt;Your call still goes through. I never want this to be the reason your app can't reach OpenAI. It just misses tracking that one call.&lt;/p&gt;

&lt;h2&gt;
  
  
  The license
&lt;/h2&gt;

&lt;p&gt;The dashboard is Apache-2.0, the SDK is MIT. You can self-host all of it on your own Postgres, no feature gates. One billing module is under a separate commercial license, but self-hosters don't need it and the open build leaves it out. Saying that plainly so nobody feels tricked when they read the tree.&lt;/p&gt;

&lt;h2&gt;
  
  
  Still rough
&lt;/h2&gt;

&lt;p&gt;Pricing sync only covers the big providers right now. For a smaller model you might have to set the token cost by hand for now.&lt;/p&gt;

&lt;p&gt;Self-host it: &lt;a href="https://github.com/bursora/core" rel="noopener noreferrer"&gt;https://github.com/bursora/core&lt;/a&gt;&lt;br&gt;
Docs: &lt;a href="https://bursora.com/docs" rel="noopener noreferrer"&gt;https://bursora.com/docs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you've been hit by a surprise AI bill, I'd like to hear how you found out.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>ai</category>
      <category>opensource</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Passmuse: AI-Powered Passwords You’ll Actually Remember</title>
      <dc:creator>Vildan Bina</dc:creator>
      <pubDate>Sun, 27 Jul 2025 15:11:56 +0000</pubDate>
      <link>https://dev.to/vildanbina/passmuse-ai-powered-passwords-youll-actually-remember-11ci</link>
      <guid>https://dev.to/vildanbina/passmuse-ai-powered-passwords-youll-actually-remember-11ci</guid>
      <description>&lt;h2&gt;
  
  
  What’s the Real Cost of “Forgot Password?”
&lt;/h2&gt;

&lt;p&gt;Every developer and every user, knows the drill:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Hit “Forgot Password?”&lt;/li&gt;
&lt;li&gt;Check email.&lt;/li&gt;
&lt;li&gt;Create a new one.&lt;/li&gt;
&lt;li&gt;Repeat in 2–4 weeks.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Organizations spend &lt;strong&gt;millions&lt;/strong&gt; annually on support tickets, password resets, and driving users toward insecure hacks like “Password123” or “Fluffy2025!”. Meanwhile, your users are frustrated, unproductive, and more likely to nickel and dime around security best practices.&lt;/p&gt;




&lt;h2&gt;
  
  
  Introducing &lt;a href="https://passmuse.com" rel="noopener noreferrer"&gt;Passmuse&lt;/a&gt;: The AI-Powered Password Muse
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Passmuse&lt;/strong&gt; solves the core tension between &lt;strong&gt;memorability&lt;/strong&gt; and &lt;strong&gt;security&lt;/strong&gt; with a simple promise:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Passwords as memorable stories, not random gibberish.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Context Aware&lt;/strong&gt;: Every character ties back to something only you know.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cryptographically Strong&lt;/strong&gt;: 80+ bits of entropy, NIST-compliant.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero Storage&lt;/strong&gt;: We never persist your passwords in plaintext.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instant Copy &amp;amp; Go&lt;/strong&gt;: No SDKs, no redirects, just generate and paste.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whether you’re a freelancer juggling 30+ logins or an enterprise rolling out thousands of credentials, Passmuse makes strong passwords feel effortless.&lt;/p&gt;




&lt;h2&gt;
  
  
  3 Generation Modes to Fit Your Workflow
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Wizard Mode (🧙‍♂️)
&lt;/h3&gt;

&lt;p&gt;A 7-step guided experience that takes you from “I need a password” to “I’ll never forget this.”&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Choose a mood&lt;/strong&gt;: Cozy campfire, midnight coding, beach sunrise.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Select secret triggers&lt;/strong&gt;: Your first pet’s nickname, a milestone year.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Watch AI weave it&lt;/strong&gt; into a mini story every word hints at a character.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Personal Mode (✨)
&lt;/h3&gt;

&lt;p&gt;Fast and focused: feed Passmuse a handful of personal cues, and get back a password you inherently remember.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Favorite movie title&lt;/li&gt;
&lt;li&gt;Childhood street name&lt;/li&gt;
&lt;li&gt;Lucky number&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Custom Mode (🎨)
&lt;/h3&gt;

&lt;p&gt;For creatives and power users: describe any scene, feeling, or concept.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“A rainy afternoon painting neon cityscapes.”&lt;br&gt;
AI crafts a password that encapsulates that image.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Why Developers Love Passmuse
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Slash Support Tickets&lt;/strong&gt;
Users remember their own passwords, no more “Forgot Password?” tickets clogging your help desk.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enforce Enterprise Grade Security&lt;/strong&gt;
Built-in entropy checks ensure compliance with PCI, HIPAA, and NIST guidelines.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Seamless Integration&lt;/strong&gt;
Share a single link or embed our lightweight widget. No backend changes, no heavy SDKs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Privacy by Design&lt;/strong&gt;
Personal cues are encrypted on your device. Only you ever see the full password.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Real-World Wins
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“I haven’t reset a password in 6 months!”&lt;/strong&gt;&lt;br&gt;
– Jane D., Full-Stack Engineer&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Our onboarding time dropped 40%.”&lt;/strong&gt;&lt;br&gt;
– CTO, Fintech Startup&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Whether it’s a one person shop or a 10,000 seat enterprise, Passmuse scales with your needs.&lt;/p&gt;




&lt;h2&gt;
  
  
  How It Works (In a Nutshell)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;You choose&lt;/strong&gt; Wizard, Personal, or Custom mode.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI generates&lt;/strong&gt; a contextual story + password.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You copy&lt;/strong&gt; the password once, no storage on our servers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You remember&lt;/strong&gt; the story, not a random string.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Ready to Tell Your Password’s Story?
&lt;/h2&gt;

&lt;p&gt;What’s the funniest or most meaningful password you’ve ever used? Drop a comment below or share your memory hack in the thread, let’s spark a conversation about making security both strong and human.&lt;/p&gt;

</description>
      <category>productlaunch</category>
      <category>passwordmanagement</category>
      <category>ai</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Upgrade All Your Composer Dependencies with a Single Command!</title>
      <dc:creator>Vildan Bina</dc:creator>
      <pubDate>Sun, 02 Mar 2025 02:05:27 +0000</pubDate>
      <link>https://dev.to/vildanbina/upgrade-all-your-composer-dependencies-with-a-single-command-19m1</link>
      <guid>https://dev.to/vildanbina/upgrade-all-your-composer-dependencies-with-a-single-command-19m1</guid>
      <description>&lt;p&gt;Hey PHP community,&lt;/p&gt;

&lt;p&gt;I'm excited to introduce &lt;strong&gt;Composer Upgrader v1.0.0&lt;/strong&gt; — a new Composer plugin that streamlines your dependency management. With just one command, &lt;code&gt;composer upgrade-all&lt;/code&gt;, you can upgrade patch, minor, major, or even specific packages effortlessly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why You'll Love It:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Simplicity:&lt;/strong&gt; No more juggling multiple commands. One command, all dependencies upgraded.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexibility:&lt;/strong&gt; Choose to upgrade all packages or target specific ones.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Efficiency:&lt;/strong&gt; Keeps your projects up-to-date with minimal effort.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Getting Started is Easy:&lt;/strong&gt;&lt;br&gt;
Install it using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer global require vildanbina/composer-upgrader
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Give it a try and let me know your thoughts. Happy coding!&lt;/p&gt;

&lt;p&gt;Check out the full details and contribute on &lt;a href="https://github.com/vildanbina/composer-upgrader" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>php</category>
      <category>composer</category>
      <category>dependencies</category>
      <category>upgrade</category>
    </item>
  </channel>
</rss>
