<?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>Forem: Ali Khalouf</title>
    <description>The latest articles on Forem by Ali Khalouf (@itsalimanuel).</description>
    <link>https://forem.com/itsalimanuel</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%2F368644%2F455f4ad4-e8c6-4e16-a261-f13a1d829298.jpg</url>
      <title>Forem: Ali Khalouf</title>
      <link>https://forem.com/itsalimanuel</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/itsalimanuel"/>
    <language>en</language>
    <item>
      <title>TON Wallet Integration with ton-ui-vue for vue/nuxt</title>
      <dc:creator>Ali Khalouf</dc:creator>
      <pubDate>Sun, 11 Aug 2024 12:18:24 +0000</pubDate>
      <link>https://forem.com/itsalimanuel/ton-wallet-integration-with-ton-ui-vue-for-vuenuxt-5h4c</link>
      <guid>https://forem.com/itsalimanuel/ton-wallet-integration-with-ton-ui-vue-for-vuenuxt-5h4c</guid>
      <description>&lt;p&gt;As blockchain technology continues to grow, integrating TON wallets into web applications is becoming increasingly important. For Vue.js and Nuxt.js developers, &lt;strong&gt;ton-ui-vue&lt;/strong&gt; offers a powerful solution for seamlessly connecting TON wallets with your projects. This guide will walk you through the setup, usage, and advanced features of ton-ui-vue, ensuring you can leverage its full potential.&lt;/p&gt;

&lt;h4&gt;
  
  
  Why Use ton-ui-vue?
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;ton-ui-vue&lt;/strong&gt; is designed to simplify the process of integrating TON wallets into your Vue.js applications. It provides a set of pre-built components, hooks, and customizable interfaces that make it easy to add wallet functionality without dealing with the complexities of blockchain technology. The package is also fully compatible with Nuxt.js, allowing you to maintain wallet connections in server-side rendered applications.&lt;/p&gt;

&lt;h4&gt;
  
  
  Getting Started with ton-ui-vue
&lt;/h4&gt;

&lt;h5&gt;
  
  
  Installation
&lt;/h5&gt;

&lt;p&gt;To begin using ton-ui-vue, install it using npm or yarn:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;ton-ui-vue @tonconnect/ui
&lt;span class="c"&gt;# or&lt;/span&gt;
yarn add ton-ui-vue @tonconnect/ui
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  Basic Setup
&lt;/h5&gt;

&lt;p&gt;Once installed, create the &lt;code&gt;TonConnectUIProvider&lt;/code&gt; in your &lt;code&gt;main.ts&lt;/code&gt; file to provide the necessary contexts for your app:&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;createApp&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="s1"&gt;vue&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="nx"&gt;App&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./App.vue&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;createTonConnectUIProvider&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;TonConnectUIContext&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;TonConnectUIOptionsContext&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="s1"&gt;ton-ui-vue&lt;/span&gt;&lt;span class="dl"&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;tonConnectUI&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setOptions&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createTonConnectUIProvider&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;manifestUrl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://your-manifest-url&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;provide&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;TonConnectUIContext&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;tonConnectUI&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;provide&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;TonConnectUIOptionsContext&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setOptions&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#app&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This setup enables your application to easily connect with TON wallets using the provided context.&lt;/p&gt;

&lt;h5&gt;
  
  
  Using the Connect Button
&lt;/h5&gt;

&lt;p&gt;Adding a connect button to your application is straightforward with the &lt;code&gt;TonConnectButton&lt;/code&gt; component:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight vue"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;TonConnectButton&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt; &lt;span class="na"&gt;setup&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"ts"&lt;/span&gt;&lt;span class="nt"&gt;&amp;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;TonConnectButton&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="s1"&gt;ton-ui-vue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This button allows users to connect their TON wallets to your application with a simple click, providing a seamless experience.&lt;/p&gt;

&lt;h4&gt;
  
  
  Advanced Features with Hooks
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;ton-ui-vue&lt;/strong&gt; provides several powerful hooks that offer more control over the TON wallet integration. These hooks enable you to manage wallet connections, handle transactions, and listen to specific wallet events, making your application more dynamic and interactive.&lt;/p&gt;

&lt;h5&gt;
  
  
  Key Hooks and Composables
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;useTonAddress&lt;/code&gt;&lt;/strong&gt;: Retrieves and manages the connected wallet address.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;useTonWallet&lt;/code&gt;&lt;/strong&gt;: Provides access to detailed wallet information, including the address and balance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;useTonConnectModal&lt;/code&gt;&lt;/strong&gt;: Controls the TonConnect modal, allowing users to connect their wallets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;useSendTransaction&lt;/code&gt;&lt;/strong&gt;: Creates and sends transactions to both wallet and contract addresses, with support for multiple messages.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These hooks make it easy to build complex, feature-rich applications that fully integrate TON wallets.&lt;/p&gt;

&lt;h5&gt;
  
  
  Example: Using &lt;code&gt;useSendTransaction&lt;/code&gt;
&lt;/h5&gt;

&lt;p&gt;The &lt;code&gt;useSendTransaction&lt;/code&gt; composable is a powerful tool for handling transactions in your application. Here’s how you can use it to send transactions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight vue"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;v-if=&lt;/span&gt;&lt;span class="s"&gt;"address"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Connected Address: &lt;span class="si"&gt;{{&lt;/span&gt; &lt;span class="nx"&gt;address&lt;/span&gt; &lt;span class="si"&gt;}}&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;TonConnectButton&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;v-if=&lt;/span&gt;&lt;span class="s"&gt;"!sending"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;click=&lt;/span&gt;&lt;span class="s"&gt;"sendTransaction"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Send Transaction&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;v-if=&lt;/span&gt;&lt;span class="s"&gt;"error"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{{&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="si"&gt;}}&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt; &lt;span class="na"&gt;setup&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"ts"&lt;/span&gt;&lt;span class="nt"&gt;&amp;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;useTonAddress&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useSendTransaction&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="s1"&gt;ton-ui-vue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;address&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useTonAddress&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;sendTransaction&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;addMessage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;sending&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useSendTransaction&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Add a message for a wallet address&lt;/span&gt;
&lt;span class="nf"&gt;addMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0:b2a1ecf5545e076cd36ae516ea7ebdf32aea008caa2b84af9866becb208895ad&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="s2"&gt;100000000&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Add another message for a contract address&lt;/span&gt;
&lt;span class="nf"&gt;addMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0:a1b2c3d4e5f678901234567890abcdef1234567890abcdef1234567890abcdef&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="s2"&gt;500000000&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, you can dynamically add messages and send them as transactions to either wallet or contract addresses, all while managing the transaction state and handling any errors that occur.&lt;/p&gt;

&lt;h4&gt;
  
  
  Conclusion
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;ton-ui-vue&lt;/strong&gt; is an essential tool for Vue.js and Nuxt.js developers looking to integrate TON wallets into their applications. Its comprehensive set of components, hooks, and customizability make it easy to create secure, efficient, and user-friendly blockchain-based applications.&lt;/p&gt;

&lt;p&gt;To explore all the available hooks and learn more about their usage, visit the official &lt;a href="https://ui-vue-five.vercel.app/hooks.html" rel="noopener noreferrer"&gt;ton-ui-vue documentation&lt;/a&gt;. Start integrating TON wallets into your Vue.js projects today and take your application to the next level with blockchain technology!&lt;/p&gt;

</description>
      <category>vue</category>
      <category>nuxt</category>
      <category>opensource</category>
      <category>blockchain</category>
    </item>
    <item>
      <title>Simplify Your Package Management with OneLinePackages</title>
      <dc:creator>Ali Khalouf</dc:creator>
      <pubDate>Sat, 25 Mar 2023 10:57:04 +0000</pubDate>
      <link>https://forem.com/itsalimanuel/simplify-your-package-management-with-onelinepackages-3blm</link>
      <guid>https://forem.com/itsalimanuel/simplify-your-package-management-with-onelinepackages-3blm</guid>
      <description>&lt;p&gt;OneLinePackages is a convenient and user-friendly website that offers a simple solution to retrieve all of your installed packages from the NPM registry API. With just one line of code, users can quickly and easily access a list of all their installed packages, making it easy to manage and keep track of dependencies. The website is designed to streamline the process of retrieving package information, providing developers with a hassle-free experience. Whether you are a seasoned developer or just starting out, OneLinePackages is a valuable tool for simplifying the management of your packages.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/c3Gs8jOq17c"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.onelinepackages.xyz/"&gt;https://www.onelinepackages.xyz/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>npm</category>
      <category>devs</category>
    </item>
    <item>
      <title>Why You Should Consider Using PNPM for Your Next JavaScript Project ?</title>
      <dc:creator>Ali Khalouf</dc:creator>
      <pubDate>Mon, 13 Mar 2023 11:18:12 +0000</pubDate>
      <link>https://forem.com/itsalimanuel/why-you-should-consider-using-pnpm-for-your-next-javascript-project-35f5</link>
      <guid>https://forem.com/itsalimanuel/why-you-should-consider-using-pnpm-for-your-next-javascript-project-35f5</guid>
      <description>&lt;p&gt;As a JavaScript developer, you're probably familiar with package managers like npm and Yarn. However, there's a new kid on the block that's been gaining popularity recently - pnpm. In this article, we'll discuss why you should consider using pnpm for your next JavaScript project.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TghCh1fx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/742efsrh7r58o9e2c2ab.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TghCh1fx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/742efsrh7r58o9e2c2ab.jpg" alt="Image description" width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;pnpm is a fast, disk space efficient package manager for Node.js. It was created to address some of the problems that npm and Yarn have, particularly around disk space usage and package duplication. With pnpm, packages are shared between projects, which means that you don't need to download and install the same package multiple times. This not only saves disk space but also speeds up installation times.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why use pnpm?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt; Faster installation times&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One of the biggest advantages of pnpm over npm and Yarn is its installation speed. Because packages are shared between projects, pnpm only needs to install each package once, which means that subsequent installations are much faster. This can be particularly useful if you're working on a large project with lots of dependencies.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SacHEvJq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4zbjfw4t5e29kd47ddpo.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SacHEvJq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4zbjfw4t5e29kd47ddpo.jpg" alt="Image description" width="300" height="319"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reduced disk space usage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As mentioned earlier, pnpm only downloads each package once and then shares it between projects. This means that you can save a significant amount of disk space, especially if you're working on multiple projects that use the same packages.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multiple versions of the same package&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Another useful feature of pnpm is its ability to support multiple versions of the same package. This can be particularly useful if you're working on a project that requires specific versions of packages or if you need to test different versions of a package.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Easy migration from npm or Yarn&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're already using npm or Yarn, migrating to pnpm is relatively easy. pnpm uses the same package.json file as npm and Yarn, so you don't need to make any significant changes to your project. You can simply install pnpm globally and then use it in place of npm or Yarn.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Community support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While pnpm is a relatively new package manager, it has a growing community of users and contributors. There are a number of plugins and integrations available for pnpm, including support for popular build tools like webpack and rollup.&lt;/p&gt;

&lt;p&gt;While npm and Yarn are both popular and well-established package managers, pnpm offers some significant advantages, particularly around installation speed and disk space usage. If you're working on a JavaScript project and want to optimize your workflow, it's worth considering pnpm as a viable alternative. With its growing community and support for popular build tools, pnpm is a promising option for JavaScript developers looking to streamline their development process.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>frontend</category>
      <category>performance</category>
    </item>
    <item>
      <title>5 Reasons Why Vue 3 is the Best Framework for Modern Web Applications in 2023</title>
      <dc:creator>Ali Khalouf</dc:creator>
      <pubDate>Wed, 01 Mar 2023 09:56:09 +0000</pubDate>
      <link>https://forem.com/itsalimanuel/5-reasons-why-vue-3-is-the-best-framework-for-modern-web-applications-in-2023-5efp</link>
      <guid>https://forem.com/itsalimanuel/5-reasons-why-vue-3-is-the-best-framework-for-modern-web-applications-in-2023-5efp</guid>
      <description>&lt;p&gt;Vue.js is a popular JavaScript framework for building user interfaces, and the latest version, Vue 3, has made significant improvements over its predecessor.&lt;br&gt;
In 2023, Vue 3 is the best framework for building modern web applications. In this article, I will explore the reasons why Vue 3 is the best framework in 2023.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Improved Performance&lt;br&gt;
Vue 3 has improved performance compared to Vue 2. One of the biggest changes is the new reactive system that uses proxies instead of getters and setters. This change reduces the amount of code required to update a component, resulting in faster rendering times. Vue 3 also includes a new compiler that generates more efficient code, which further improves performance.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Composition API&lt;br&gt;
The Composition API is a new feature in Vue 3 that makes it easier to organize and reuse code. It allows developers to define component logic as reusable functions that can be easily imported and composed. This approach is more flexible than the Options API in Vue 2, which can become difficult to manage as components grow in complexity.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;TypeScript Support&lt;br&gt;
Vue 3 has better TypeScript support than Vue 2, making it easier to write type-safe code. TypeScript is a superset of JavaScript that adds static typing, which can help catch errors at compile-time instead of runtime. With Vue 3, developers can write components with TypeScript and take advantage of features like type inference and auto-completion.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Better Error Handling&lt;br&gt;
Vue 3 has improved error handling compared to Vue 2. When an error occurs in a component, Vue 3 provides more detailed error messages that make it easier to diagnose and fix the issue. Additionally, Vue 3 has a new error boundary component that can catch errors and prevent them from crashing the entire application.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scalability&lt;br&gt;
Vue 3 is designed to be more scalable than Vue 2. The reactive system has been redesigned to handle large-scale applications with hundreds or even thousands of components. Additionally, the Composition API makes it easier to organize and reuse code, which can help keep applications maintainable as they grow.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In conclusion, Vue 3 is the best framework in 2023 for building modern web applications. It offers improved performance, a flexible Composition API, better TypeScript support, improved error handling, and better scalability. If you are considering using a JavaScript framework for your next project, Vue 3 is definitely worth considering.&lt;/p&gt;

</description>
      <category>java</category>
      <category>softwaredevelopment</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
