<?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: Front-Commerce</title>
    <description>The latest articles on DEV Community by Front-Commerce (@front-commerce).</description>
    <link>https://dev.to/front-commerce</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%2F6776%2Fafcd91bb-1309-4114-baf2-caa0eab40a97.jpg</url>
      <title>DEV Community: Front-Commerce</title>
      <link>https://dev.to/front-commerce</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/front-commerce"/>
    <language>en</language>
    <item>
      <title>Audits conducted in Front-Commerce for client projects</title>
      <dc:creator>Paul van Dyk</dc:creator>
      <pubDate>Fri, 11 Aug 2023 10:44:44 +0000</pubDate>
      <link>https://dev.to/front-commerce/audits-conducted-in-front-commerce-for-client-projects-o9b</link>
      <guid>https://dev.to/front-commerce/audits-conducted-in-front-commerce-for-client-projects-o9b</guid>
      <description>&lt;p&gt;When it comes to developing an e-commerce website, there are many different areas that require constant attention. Project teams may introduce performance issues or forget important features that could negatively impact the user experience. That's why audits are crucial to ensure that the website is meeting high standards and delivering a great user experience.&lt;/p&gt;

&lt;p&gt;At Front-Commerce, we conduct thorough audits on our client projects and provide recommendations to improve website performance and user experience. In this blog post, we will discuss the key points we measure during our audits.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 Performance
&lt;/h2&gt;

&lt;p&gt;Performance is a critical factor in the success of an e-commerce store. A slow website can lead to frustrated customers and lost sales. During our audits, we measure the performance of our client's websites in two key areas: server and webperfs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Server
&lt;/h3&gt;

&lt;p&gt;During our audits, we check if the website's server is performing well. We make sure that things like cache and data loaders are implemented correctly to improve server performance. We also verify if the cache strategies are properly implemented to &lt;a href="https://developers.front-commerce.com/blog/audit-optimization-number-of-external-requests"&gt;reduce the number of requests made to external services&lt;/a&gt;. Another thing we check is that the server-side rendering (SSR) is implemented properly to improve the TTFB. We also ensure that there are no memory leaks that can negatively impact the application's stability.&lt;/p&gt;

&lt;h3&gt;
  
  
  Webperfs
&lt;/h3&gt;

&lt;p&gt;
  Another important part of our performance audit is the webperfs analysis. webperfs measures the website speed, responsiveness, and overall user experience. This includes checking if the website's fonts and images are optimized for the store and if the JavaScript bundle size is at an optimal level. We also check if important pages are preloaded to improve the perceived performance for end users.
&lt;/p&gt;

&lt;h2&gt;
  
  
  🎨 Theme customization
&lt;/h2&gt;

&lt;p&gt;We understand that every e-commerce store has unique branding requirements. During our audits, we check if the website's theme has been customized to match the client's branding guidelines. We also ensure that any customizations do not negatively impact the website's performance or user experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  🦻 Accessibility
&lt;/h2&gt;

&lt;p&gt;We believe that all websites should be accessible to everyone, regardless of their abilities. During our audits, we check if the website meets accessibility standards, such as having proper alt tags for images, keyboard navigation support, and proper contrast ratios.&lt;/p&gt;

&lt;h2&gt;
  
  
  🖌️ Styleguide
&lt;/h2&gt;

&lt;p&gt;Consistency is key when it comes to creating a great user experience. During our audits, we check if the website's style guide is consistent throughout the website. We also ensure that the website's typography, colors, and spacing are in line with the client's branding guidelines.&lt;/p&gt;

&lt;h2&gt;
  
  
  📨 Links received by e-mail
&lt;/h2&gt;

&lt;p&gt;A customer journey extends beyond the web UI and encompasses email interactions. That is why we also check the links that are received by email, as it ensures that customers can access the correct pages of the website, leading to a better overall user experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔗 Audit broken links in the store
&lt;/h2&gt;

&lt;p&gt;In a project, developers could have forgotten to update a hardcoded link, or content writers may have contributed unfinished content or made typos. That's why during our audits, we perform a thorough check for broken links and provide recommendations to fix them, ensuring that the website's user experience and SEO are not negatively impacted.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔍 SEO
&lt;/h2&gt;

&lt;p&gt;Having good SEO is crucial to driving traffic to the website. During our audits, we check for the following:&lt;/p&gt;

&lt;h3&gt;
  
  
  404 &amp;amp; redirections
&lt;/h3&gt;

&lt;p&gt;We check for any 404 errors and ensure that the website has proper redirections in place. This is especially important when migrating to Front-Commerce from another platform, as the links may not be in the same format. This can cause 404 errors for any pages previously crawled by search engine robots, such as Google.&lt;/p&gt;

&lt;h3&gt;
  
  
  Robots.txt
&lt;/h3&gt;

&lt;p&gt;We ensure that the website's robots.txt file is properly configured to allow search engines to crawl the website's pages.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sitemap
&lt;/h3&gt;

&lt;p&gt;We check if the website has a sitemap.xml file and that it is correctly generated. More information about this can be found &lt;a href="https://developers.front-commerce.com/docs/2.x/advanced/production-ready/sitemap"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Meta tags and microdata
&lt;/h3&gt;

&lt;p&gt;We ensure that the website's meta tags and microdata are properly configured to improve the website's search engine rankings and visibility when sharing on social platforms.&lt;/p&gt;

&lt;h2&gt;
  
  
  📱 PWA (Progressive Web App)
&lt;/h2&gt;

&lt;p&gt;We ensure that the store meets the standards for a PWA. We provide recommendations to improve the website's PWA capabilities.&lt;/p&gt;

&lt;h2&gt;
  
  
  📈 Analytics
&lt;/h2&gt;

&lt;p&gt;During our audits, we check if the website has proper analytics tracking in place. This helps our clients to make data-driven decisions to improve their website's performance and user experience. More information about this can be found &lt;a href="https://developers.front-commerce.com/docs/2.x/category/analytics"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧑‍💻 Code quality audit
&lt;/h2&gt;

&lt;p&gt;Auditing code quality in a project is essential for several reasons. Firstly, it helps identify and rectify potential bugs, vulnerabilities, and performance issues, ensuring a more stable and secure application (as mentioned above).&lt;br&gt;
Secondly, it promotes maintainability and ensures that the project can be updated during its life. By adhering to Front-Commerce best practices, developers can upgrade to newer Front-Commerce versions more easily and with less risk of introducing bugs. Finally, our code quality audit encourages consistent coding standards and improves overall code readability. This leads to a more robust, efficient, and sustainable codebase.&lt;/p&gt;

&lt;h2&gt;
  
  
  🪄 Application stability
&lt;/h2&gt;

&lt;p&gt;Application stability is a crucial aspect of a composable architecture, like the one used by Front-Commerce. It refers to the website's ability to remain resilient to external systems outages, such as server downtime or configuration&lt;br&gt;
errors. Ensuring stability is essential for a front-end solution like Front-Commerce, as it directly impacts the user experience and the website's ability to drive sales. Front-Commerce conducts thorough audits to identify potential issues that could affect stability and provides recommendations to improve resilience and ensure a reliable website.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✨ Magic Button
&lt;/h2&gt;

&lt;p&gt;We believe in going above and beyond for our clients. During our audits, we look for opportunities to add additional features to the website that will improve the contribution experience and improve the merchant’s team productivity. Our&lt;br&gt;
&lt;code&gt;Magic Button&lt;/code&gt; feature allows contributors to seamlessly improve the content on the website with direct links to the content source. We ensure that the contribution mode activation is secure and that any custom content is wrapped with the &lt;code&gt;StorefrontContent&lt;/code&gt; component. More information about this can be found&lt;a href="https://developers.front-commerce.com/docs/2.x/category/magic-button"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  ☁️ Prod server &amp;amp; CI
&lt;/h2&gt;

&lt;p&gt;We check if the website is properly deployed to the production server and if the continuous integration (CI) process is working correctly. This ensures that the website is always up-to-date and running smoothly.&lt;/p&gt;

&lt;h2&gt;
  
  
  🗒️ Audit logs
&lt;/h2&gt;

&lt;p&gt;After conducting a thorough audit of the website, it's important to keep track of any bugs or issues that may arise once the site is live. While we analyze the codebase and test the application during the audit, we believe that analyzing&lt;br&gt;
application logs and monitoring metrics is also crucial once the site is live. This allows us to detect any smaller bugs or performance issues that may have been missed during testing. We follow up on our audits with log analysis a few days after the project is live to ensure that everything is running smoothly and to address any issues that may arise. By addressing these smaller issues, we can improve the overall quality of the application.&lt;/p&gt;

&lt;h2&gt;
  
  
  ☑️ Checklist before production
&lt;/h2&gt;

&lt;p&gt;Before we proceed with the audit, we have a checklist that should ideally be done by integrators in the project. This checklist includes items such as verifying that the environment is properly configured, that the data has been&lt;br&gt;
properly migrated, and that there are no broken links or missing assets. You can find a detailed checklist in our documentation &lt;a href="https://developers.front-commerce.com/docs/2.x/advanced/production-ready/checklist-before-production"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In summary, audits are essential for ensuring that e-commerce websites meet the high standards necessary to drive sales and provide an exceptional user experience. At Front-Commerce, we take great pride in conducting comprehensive audits and providing our clients with actionable recommendations to enhance their website's performance and user experience. By partnering with us, our clients can rest assured that their website is optimized for success and delivering the best possible experience for their customers.&lt;/p&gt;

</description>
      <category>performance</category>
      <category>audits</category>
      <category>webperf</category>
      <category>developer</category>
    </item>
    <item>
      <title>Why do we check the number of external API calls in our audits?</title>
      <dc:creator>Damien Pobel</dc:creator>
      <pubDate>Wed, 12 Jul 2023 07:27:19 +0000</pubDate>
      <link>https://dev.to/front-commerce/why-do-we-check-the-number-of-external-api-calls-in-our-audits--4o3</link>
      <guid>https://dev.to/front-commerce/why-do-we-check-the-number-of-external-api-calls-in-our-audits--4o3</guid>
      <description>&lt;p&gt;On most of the projects built with Front-Commerce, we perform an audit. Without surprise, these audits are conducted on the basis of a checklist. The first part is devoted to performance and the very first criterion is to evaluate the number of external requests necessary to build the most visited pages when everything is cached. The point is to target zero external request to generate those pages. Maybe you wonder why we check that or why we give it so much importance.&lt;/p&gt;

&lt;p&gt;This &lt;em&gt;Performance&lt;/em&gt; section is introduced with the following sentence:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Performance is essential to improve user experience, but also to reduce server load and thus increase the site's traffic capacity.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So the point of the whole section is not only to increase the performances i.e. in that case, the time it takes to generate a page but also to increase the scalability of the application i.e. &lt;a href="https://en.wikipedia.org/wiki/Scalability"&gt;according to Wikipedia&lt;/a&gt;, &lt;q&gt;the property of [the application] to handle a growing amount of work&lt;/q&gt;.&lt;/p&gt;

&lt;p&gt;To measure the number of external requests, you can use &lt;a href="https://developers.front-commerce.com/docs/2.x/reference/environment-variables#debugging"&gt;one of our debug flags&lt;/a&gt;. For instance, here I'll use a very basic setup where Front-Commerce is connected only to a Magento2 instance, so I can add &lt;code&gt;DEBUG=axios&lt;/code&gt; in the environment to have some information about external requests. Depending on your actual setup, you might need other values to also count requests to Prismic or any other external service.&lt;/p&gt;

&lt;p&gt;Also, we are mainly interested in the most popular pages of the site. Commonly, the homepage is most visited page. By default, we also check the category and the product pages. Depending on your project, this list can be slightly different.&lt;/p&gt;

&lt;h2&gt;
  
  
  Number of external API calls versus performance
&lt;/h2&gt;

&lt;p&gt;Note: &lt;em&gt;Performance&lt;/em&gt; is a very wide topic. By &lt;em&gt;performance&lt;/em&gt; here, we are looking at the time needed to generate a page server side. This is very easy to measure with a &lt;code&gt;curl&lt;/code&gt; based command:&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="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;time &lt;/span&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; http://example.com/my/url &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /dev/null
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On a Front-Commerce setup configured without cache and connected to a Magento2 instance, 27 requests to Magento2 APIs are needed to generate a category page. Each of these requests takes a significant amount of time, sometimes several hundred of milliseconds. While when caches are enabled, if everything is in cache, no external request is made.&lt;/p&gt;

&lt;p&gt;Without surprise, the time needed to generate the page is completely different:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;without cache, on my local setup, it took between 5 and 6 seconds;&lt;/li&gt;
&lt;li&gt;with everything already cached, it took between 200 and 300 milliseconds.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's 20 times faster! The example is a bit extreme, but I guess you get the point. Also, without external requests, the response time is somehow similar to any external API call. This means that if on a page you have one external API request left, getting rid of it might divide the response time by two. Worth a try, don't you think?&lt;/p&gt;

&lt;h2&gt;
  
  
  Number of external API calls versus scalability
&lt;/h2&gt;

&lt;p&gt;Measuring the scalability is harder. It is done with load tests that involves running some scenarios to simulate traffic peaks (usually inspired by past events) in a production like environment. That's definitely not something you can do reliably on your local environment in 10 minutes. That being said, we always see a clear correlation between the number of external requests and the scalability of the application.&lt;/p&gt;

&lt;p&gt;Commonly, the target of those external requests (the Magento2 instance in my previous example) becomes the bottleneck of the application especially if some popular pages requires several API requests to the same service i.e. one page generated by Front-Commerce entails &lt;code&gt;n&lt;/code&gt; requests to one external service.&lt;/p&gt;

&lt;p&gt;Depending on how Front-Commerce is hosted, it can also be the bottleneck because it will be &lt;em&gt;busy&lt;/em&gt; waiting for some APIs to reply 😀.&lt;/p&gt;




&lt;p&gt;The conclusion is simple: &lt;strong&gt;when it comes to external request, the less the better&lt;/strong&gt;. After having said that, it remains the hard work of optimizing the application and the recipe is classic:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;is the external request strictly needed ? In some case, it might be an opportunity to discover useless code or to discuss feature;&lt;/li&gt;
&lt;li&gt;if it is strictly needed then you need to add more cache to the application either &lt;a href="https://developers.front-commerce.com/docs/2.x/advanced/graphql/dataloaders-and-cache-invalidation#what-are-dataloaders"&gt;by leveraging the dataloader mechanism&lt;/a&gt; or by using &lt;a href="https://developers.front-commerce.com/docs/2.x/prismic/resolver-cache"&gt;the cache at resolver level if your project embeds content from Prismic&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>frontcommerce</category>
      <category>performance</category>
      <category>scalability</category>
      <category>magento</category>
    </item>
    <item>
      <title>VSCode Remote Development: Setup and usage</title>
      <dc:creator>Gaetan Flament</dc:creator>
      <pubDate>Fri, 05 May 2023 08:05:00 +0000</pubDate>
      <link>https://dev.to/front-commerce/vscode-remote-development-setup-and-usage-4pdp</link>
      <guid>https://dev.to/front-commerce/vscode-remote-development-setup-and-usage-4pdp</guid>
      <description>&lt;p&gt;Every developer has their own preferences for their setup, whether it be software or hardware. I’ve been a remote developer since 2018, and since then I’ve tried various ways to organize my workspace at home, that would fit both my work and personal times.&lt;/p&gt;

&lt;p&gt;A typical remote developer kit will often include a laptop and one or more monitors. In my case, because I already had a multi-monitor setup for my personal desktop PC, all I needed was to come up with a way to homogenize and make it work with the company’s provided laptop.&lt;/p&gt;

&lt;h2&gt;
  
  
  My current setup: &lt;strong&gt;VS Code Remote Development&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is it ?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://code.visualstudio.com/docs/remote/remote-overview"&gt;VS Code Remote Development&lt;/a&gt; is an extension pack for Microsoft’s widely used IDE VS Code. It allows developers to “use a container, remote machine, or the Windows Subsystem for Linux (WSL) as a full-featured development environment”. What it means, is that you will have your source code located on a single place, and you will be able to update it seamlessly from another system using VS Code.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: see our &lt;a href="https://developers.front-commerce.com/blog/wsl-development-environment"&gt;blog post on installing a WSL development environment&lt;/a&gt; if you're interested.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The requirements are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For the client, pretty much anything capable of running VS Code &lt;em&gt;(with special   needs for containers for Microsoft Windows due to Docker’s own requirements)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;For the host, a wide range of systems are supported. If you’re not using a   “mainstream” OS or distribution, you might want to check the requirements section of the &lt;a href="https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack"&gt;extension pack’s Marketplace page&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this blog post, we’ll only talk about the SSH connections, so you will need to ensure that your host has an SSH Host set up. If you don’t, you can follow &lt;a href="https://code.visualstudio.com/docs/remote/troubleshooting#_installing-a-supported-ssh-server"&gt;Microsoft’s guide on how to setup one&lt;/a&gt;.&lt;br&gt;
For example, on Ubuntu, you can the command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt-get install openssh-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Installation
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Note: At the time of writing, this guides uses screenshots and instructions for VS Code 1.78.0 and Remote Development 0.24.0.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That’s where this method shines.&lt;/p&gt;

&lt;p&gt;The package installation on the client side is really simple: you’ll only have to install the &lt;strong&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack"&gt;Remote Development&lt;/a&gt;&lt;/strong&gt; extension pack from Visual Studio Marketplace on your local machine’s VS Code. This will provide your IDE with all needed extensions to work on your remote&lt;br&gt;
environment.&lt;/p&gt;

&lt;p&gt;Once that’s done, you will notice two new icons&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One in your Activity Bar (the vertical bar on the left of VS Code) which is the “Remote Explorer”. Clicking on it will reveal the explorer’s sidebar, in which where you will be able to see your different connections.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iLpkyYXp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/efwgza3cnb77om1oemct.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iLpkyYXp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/efwgza3cnb77om1oemct.png" alt="Remote Explorer" width="340" height="639"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One in the left of your Status bar (the horizontal bar at the very bottom of VS Code’s window), which will display what host the current window is “attached” to.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yEUo5Iqq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zn1d0rpo6f1x94uwdz0h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yEUo5Iqq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zn1d0rpo6f1x94uwdz0h.png" alt="Remote Development icon" width="69" height="59"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In our case, we’ll create a new SSH connection by clicking on the icon in the Status bar, and select “Connect Current Window to Host…” in the popup that appears:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6Y58lRgp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0r0aricxwa358wvhxwhj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6Y58lRgp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0r0aricxwa358wvhxwhj.png" alt="Remote connection selection" width="633" height="261"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then, select “Add New SSH Host…”, and type in the ssh command you’d normally use to connect to your host machine; typically:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ssh &amp;lt;my_user&amp;gt;@&amp;lt;my_host&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You might be asked to enter your host user’s password, and then VS Code will install all the necessary packages on your host machine (you will notice a notification stating “Setting up SSH Host on …”).&lt;/p&gt;

&lt;p&gt;And that’s it! Hopefully once that is done, you'll already be set to develop on your host from your local machine. You’ll notice the icon in your Status bar is now showing the host you’re connected to, and you’ll be able to see the new connection in the Remote Explorer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Password-less connection with VS Code Remote Development
&lt;/h3&gt;

&lt;p&gt;One thing that might get tiring using VS Code Remote, is that you might need to type your password each time you open a new VS Code window or each time your it gets disconnected from your host, if your internet or local network connection has hiccups for example. To solve this issue, I configured the SSH connection so that is uses a RSA key I created for this purpose. Here’s how it is done:&lt;/p&gt;

&lt;h4&gt;
  
  
  Create a new key
&lt;/h4&gt;

&lt;p&gt;You can use &lt;code&gt;ssh-keygen&lt;/code&gt; to create one. it is available on most Linux subsystems, and on Windows Powershell.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-keygen &lt;span class="nt"&gt;-q&lt;/span&gt; &lt;span class="nt"&gt;-b&lt;/span&gt; 2048  &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="s2"&gt;"./&amp;lt;myhost&amp;gt;_rsa"&lt;/span&gt; &lt;span class="nt"&gt;-t&lt;/span&gt; rsa
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will create two files: &lt;code&gt;&amp;lt;myhost&amp;gt;_rsa&lt;/code&gt; (the private key) and&lt;br&gt;
&lt;code&gt;&amp;lt;myhost&amp;gt;_rsa.pub&lt;/code&gt; (the public key). The private key will stay on your client (typically in the &lt;code&gt;~/.ssh/&lt;/code&gt; folder on Linux subsystems)&lt;/p&gt;

&lt;p&gt;The public key will need to be copied onto your host. On Linux systems you will need to add the content of the public key to the end of the &lt;code&gt;~/.ssh/authorized_keys&lt;/code&gt; file. If the file doesn’t exist, copy your public key in &lt;code&gt;~/.ssh/&lt;/code&gt;, rename the file to &lt;code&gt;authorized_keys&lt;/code&gt; and give it a permission of 600:&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;chmod &lt;/span&gt;600 ~/.ssh/authorized_keys
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Make VS Code use the key
&lt;/h4&gt;

&lt;p&gt;On your client IDE, go to the Remote Explorer, and click the cog icon next to the SSH section, and then open the config file shown in the popup by clicking on it:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--H0t3MHgi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mzket1o1ty5i0aywcldo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--H0t3MHgi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mzket1o1ty5i0aywcldo.png" alt="SSH setting icon" width="759" height="504"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this file, you’ll find the connection you set up and its configuration. In order to make VSCode use the key you created, add these lines to the configuration section:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Host &amp;lt;my_host&amp;gt;
  HostName &amp;lt;my_host&amp;gt;
  User &amp;lt;my_user&amp;gt;
  Port 22
  PreferredAuthentications publickey
  IdentityFile &lt;span class="s2"&gt;"~/.ssh/&amp;lt;my_host&amp;gt;_rsa"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After this, VS Code should not ask for your user's password again!&lt;/p&gt;

&lt;h2&gt;
  
  
  Pros and cons
&lt;/h2&gt;

&lt;p&gt;Every method has its own advantages and disadvantages, and using this one certainly does not make any exception to this rule.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pros
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Ease of use
&lt;/h4&gt;

&lt;p&gt;As stated in during the installation part, one of the most convenient points of this method is the ease of use. Installation is really easy and well documented on VS Code docs, and within VS Code itself. Configuring it on a brand new machine should not take more than a few minutes, and you will immediately have access to all of your host’s installed extension without needing to authenticate to your Microsoft of Visual Studio account.&lt;/p&gt;

&lt;h4&gt;
  
  
  Connectivity
&lt;/h4&gt;

&lt;p&gt;Similarly, any terminal opened on the client will actually be an ssh connection on your host, and VS Code is (most of the time) able to analyze your local app’s log to automatically forward the right port on your local machine, which means you will be able still connect to &lt;code&gt;localhost:XXXX&lt;/code&gt; on your local machine during development, without any server running locally. If VS Code does not detect the local port correctly, you will only have to add it quickly through the Command Palette &lt;code&gt;"Forward a Port"&lt;/code&gt; command.&lt;/p&gt;

&lt;h4&gt;
  
  
  Portability
&lt;/h4&gt;

&lt;p&gt;On the hardware side, my host (laptop, in my case) still stays as portable as ever, as I would only have to put in in my bag and I’ll still be able to develop on-the-go the same way I do on my desktop, without having to unplug anything (beside the laptop’s charger). And once I’m back, I can reuse my home setup.&lt;/p&gt;

&lt;h4&gt;
  
  
  Development and tests
&lt;/h4&gt;

&lt;p&gt;Finally, having such a setup with two machines is also an advantage for development. Two machines means potentially two OSs, and it can become handy to test some code on two completely different, yet very “real” environments. In my case, My desktop runs on Windows and my laptop on Ubuntu, meaning I can easily test OS-specific features if the need arises (it used to be really useful for Internet Explorer, luckily gone are those days! 😅), while keeping the Linux CLI environment I prefer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cons
&lt;/h3&gt;

&lt;p&gt;Here’s a catch though: two machines, also means two &lt;em&gt;running&lt;/em&gt; machines, which in turn means more energy consumption as well. This is definitely not an environment friendly method!&lt;/p&gt;

&lt;p&gt;During specific use cases, I sometimes encounter issues with port forwarding that force me to get back to my laptop’s keyboard, for example when using &lt;a href="https://www.docker.com/"&gt;Docker&lt;/a&gt; with &lt;a href="https://traefik.io/traefik/"&gt;Traefik&lt;/a&gt;, VS Code is sometimes confused about what port to forward and where to forward it&lt;br&gt;
to.&lt;/p&gt;

&lt;p&gt;On the hardware side, this method renders your laptop (or host) a bit less useful, as most of the time you’ll work at home you won’t touch it much, besides turning it on or off. We will see in the next part other methods I tried that actually uses both machines actively.&lt;/p&gt;

&lt;p&gt;On the management side, depending on how you manage your local machine, and how (if) you use it outside of work, you’ll have to take extra care of not mixing work and personal things, which can be extra tricky for some, especially if you’re pretty new to working at home.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comparison with other methods I have tried
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Why not use a dock ?
&lt;/h3&gt;

&lt;p&gt;Most docks are really great at what they are meant to do. Unfortunately, this doesn’t include sharing peripherals between devices, which was my goal here. I still use my dock, however in my current setup, because I use the same keyboard / mouse for both my machines, it would mean plugging / unplugging those everyday&lt;br&gt;
which is kind of painful.&lt;/p&gt;

&lt;h3&gt;
  
  
  Using both machine efficiently: Synergy / Barrier
&lt;/h3&gt;

&lt;p&gt;This was by far my most preferred method. &lt;a href="https://symless.com/synergy"&gt;Synergy&lt;/a&gt; (and its open source clone &lt;a href="https://github.com/debauchee/barrier"&gt;Barrier&lt;/a&gt;) is a keyboard and mouse sharing software, that enable a single pair of peripherals to work on many different machines at the same time. Unlike VS Code remote (or SSH) only, using Synergy you are able to actually use every device’s UI as well, and coupled to VS Code Remote, you can basically use “any” number of machines the same way you’ll be using one.&lt;/p&gt;

&lt;p&gt;Unfortunately, I had a bug on Ubuntu using Barrier that made me stop using this method some times ago as I couldn’t find a solution. If this issue was to be fixed however, I would hop in the Barrier train any day!&lt;/p&gt;

&lt;h3&gt;
  
  
  Another point of view: the Virtual Machine way, and Tmux
&lt;/h3&gt;

&lt;p&gt;That’s a solution that requires a bit more setup, and isn’t really compatible with VS Code either, but might be interesting for Vi / Vim and terminal power users out there. Tmux is a terminal multiplexer, a software capable of running multiple terminal session in a single windows. This also allows terminal session to be “saved” and accessed from another device, meaning using terminal based editors, your could pickup your work right where you left it seamlessly, from pretty much any terminal on OSs supporting tmux (even from your phone!). Coupling Tmux with a Virtual-machine hosted source code, it would be one of the best method I can think of in terms of accessibility and portability (given you always have an internet connection where you go, which is not a hard requirement to satisfy in 2023).&lt;/p&gt;

&lt;p&gt;However, because I’m not yet accustomed to terminal based IDEs, I only used this method for very small tasks and personal projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;My current setup is not definitive, nor perfect. I keep updating and tweaking it as time goes on. For example, another solution I might look up in the future is &lt;a href="https://symless.com/guides/share-keyboard-mouse#usb-kvm-switches"&gt;KVMs&lt;/a&gt;, a physical interface that connect peripherals to devices, the same way as Synergy does on the software side. Those have been out for a while, but compatibility was not great for a long time.&lt;/p&gt;

&lt;p&gt;I think every developer should invest a bit of their time to think about their setup from time to time. A lot of time is spend at our desks, and we now have all kind of tools, whether they be software or hardware, to make our lives better, so let’s take advantage of them!&lt;/p&gt;

&lt;p&gt;I hope you enjoyed this quick tour of my own setup, and if you want to learn more about other topics related to development, please tune in for more blog posts!&lt;/p&gt;

</description>
      <category>vscode</category>
    </item>
    <item>
      <title>Reduce friction by rediscovering your keyboard</title>
      <dc:creator>Pierre Martin 💿</dc:creator>
      <pubDate>Fri, 07 Apr 2023 03:27:00 +0000</pubDate>
      <link>https://dev.to/front-commerce/reduce-friction-by-rediscovering-your-keyboard-4i10</link>
      <guid>https://dev.to/front-commerce/reduce-friction-by-rediscovering-your-keyboard-4i10</guid>
      <description>&lt;p&gt;Hey there! In this post, we'll talk about some awesome benefits that you can enjoy when you start using keyboard shortcuts and the terminal.&lt;/p&gt;

&lt;p&gt;It can really help you navigate in an application or switch between different applications and contexts without any friction. We'll also illustrate the Unix philosophy, and provide tips for gradually adopting these practices.&lt;/p&gt;

&lt;p&gt;I hope you find this helpful!&lt;/p&gt;

&lt;h2&gt;
  
  
  Why using your keyboard more?
&lt;/h2&gt;

&lt;p&gt;As developers, we spend a lot of time typing on our keyboard. For typing code of course, but also for searching, documentation (issue tracker, wiki…) and communicating with others (Slack, Teams, Discord, emails…).&lt;/p&gt;

&lt;p&gt;Now, think about how you switch context between different applications.&lt;/p&gt;

&lt;p&gt;You’re writing code in a text editor, but want to ask a question to a teammate on Slack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;do you leave your keyboard to fetch your mouse (or trackpad)?&lt;/li&gt;
&lt;li&gt;do you use “Alt + Tab”?&lt;/li&gt;
&lt;li&gt;do you switch to a different virtual desktop? (using the keyboard)?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When on Slack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;do you use your mouse to select the person or channel you want to write to?&lt;/li&gt;
&lt;li&gt;do you use “Ctrl + K” (or “Cmd + K) to navigate there?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Try both approaches: with your mouse, and with your keyboard.&lt;br&gt;
How long does it take between the last character you typed in the editor and the first one you typed in Slack’s message input?&lt;/p&gt;

&lt;p&gt;In this example, you might find that navigating to this new context without removing your fingers from the keyboard leads to a smoother experience. &lt;strong&gt;It removes friction.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When your brain thinks about asking on Slack, within a few keystrokes you’re ready to type your message, and a few keystrokes later you’re back in your text editor, ready to type the next line of code.&lt;br&gt;
Context switching has been reduced to its minimum, helping you to focus on the task at hand.&lt;/p&gt;

&lt;p&gt;This is just an example of context switching, but be aware of it and you’ll see that it happens all day long:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;going back and forth between our code editor and our browser&lt;/li&gt;
&lt;li&gt;searching for information on the internet&lt;/li&gt;
&lt;li&gt;navigating in our emails or issue tracker&lt;/li&gt;
&lt;li&gt;committing our code changes and pushing them to the repository to open a Pull Request&lt;/li&gt;
&lt;li&gt;searching content in a file or a tree of files&lt;/li&gt;
&lt;li&gt;switching to a different project, or directory&lt;/li&gt;
&lt;li&gt;etc…&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;By rediscovering the keyboard shortcuts for each application you use, you can significantly reduce the time it takes to switch between contexts.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most applications have a variety of keyboard shortcuts that allow you to navigate and perform actions quickly and efficiently.&lt;br&gt;
By taking the time to learn these shortcuts and incorporating them into your workflow, you can streamline your work and reduce friction throughout your day.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why using your terminal more?
&lt;/h2&gt;

&lt;p&gt;I find it important to learn shortcuts for the applications you’re using the major part of your day.&lt;/p&gt;

&lt;p&gt;For developers, these applications would be something like: a text editor, a browser, an instant messaging app and of course (don’t underestimate it) your operating system!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;During your career, you’ll change the applications you use.&lt;/strong&gt;&lt;br&gt;
Your team could switch from Slack to Teams, you’ll move away from WebStorm to VSCode, you change job and the new company uses Linear instead of Jira, Outlook instead of Gmail…&lt;/p&gt;

&lt;p&gt;Every time, it will mean that you will have to learn new shortcuts again. &lt;strong&gt;These changes don’t occur very often, so it is acceptable.&lt;/strong&gt; After all, you spend most of your day using these applications so the investment on learning how to use them efficiently is worth it.&lt;/p&gt;

&lt;p&gt;There are however a lot of tasks (you may not yet realize it) you can perform outside those applications.&lt;/p&gt;

&lt;p&gt;What if I told you that you can invest time in learning how to reduce friction:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;for your most common tasks&lt;/li&gt;
&lt;li&gt;in a way that is gradually adoptable in your current workflow&lt;/li&gt;
&lt;li&gt;with the ability to improve continuously without ever restarting from scratch&lt;/li&gt;
&lt;li&gt;… for the rest of your career (and your life)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;This is exactly what your terminal allows.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You’ll be able to achieve a wide range of tasks thanks to the ecosystem of tools embracing a simple yet powerful philosophy: &lt;strong&gt;the Unix philosophy!&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  The Unix philosophy
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Write programs that do one thing and do it well.&lt;br&gt;
Write programs to work together.&lt;br&gt;
Write programs to handle text streams, because that is a universal interface.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The &lt;a href="https://en.wikipedia.org/wiki/Unix_philosophy"&gt;Unix philosophy&lt;/a&gt; is a set of guidelines that emphasizes simplicity, modularity, and the use of small, specialized tools that can be combined to perform complex tasks.&lt;br&gt;
It encourages the use of plain text for data storage and communication, and favors the use of pipes and filters to process data.&lt;/p&gt;

&lt;p&gt;It offers a number of benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;flexibility&lt;/strong&gt;: text streams can be manipulated in many different ways. It removes the barrier of what you can do. You’ll be able to combine small simple programs together, in order to achieve exactly what you want to do, and make it more complex if needed. A “pipeline” of commands is also more resilient to changes: if data, source or process change you can adapt by changing only one “step”&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;improved efficiency&lt;/strong&gt;: automate things or find information by typing a command in your terminal is often faster than navigating in an application and going through several screens and forms&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;greater control over your data&lt;/strong&gt;: manipulating text allows you to interact with lots of systems and APIs, you’re not locked-in a specific vendor and can create bridges between most of your tools… as soon as you can get data in a textual format (i.e: output a list of files, get data from an API call, output Git history as text…)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;portability&lt;/strong&gt;: these tools are widely available on different systems. Your skills and knowledge are valid in different contexts: you can use them on servers, on your current laptop… and the next ones.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By focusing on small, specialized tools that can be combined in different ways, you can tailor your daily environment to your specific needs and preferences.&lt;/p&gt;

&lt;p&gt;Over time, you’ll bring new tools or change some of them without having to learn everything again.&lt;/p&gt;

&lt;p&gt;You’ll improve your environment and adapt practices &lt;strong&gt;incrementally and continuously&lt;/strong&gt;, as you make complex tasks easier to perform or automate repetitive processes. Weeks after weeks, you’ll work more efficiently.&lt;/p&gt;
&lt;h2&gt;
  
  
  OK, I’m sold! What’s next?
&lt;/h2&gt;

&lt;p&gt;Great! I’m glad that you want to reduce friction in your daily activities.&lt;br&gt;
&lt;strong&gt;I suggest that you start now, with baby steps.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Be aware of your hand position at every time, and learn to detect when your fingers are about to leave your keyboard. &lt;strong&gt;That’s the trigger!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Whenever this trigger occurs, stop and start asking yourself:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what was I about to do?&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;is it possible to achieve this without leaving the keyboard?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;search in your application “Keyboard shortcuts” help page&lt;/li&gt;
&lt;li&gt;search on internet&lt;/li&gt;
&lt;li&gt;… or ask ChatGPT!
Here is a prompt you can use as a base:&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;I want you to act like a Unix user, and explain each tool individually.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q:&lt;/strong&gt; how would you get the content from a JSON URL (&lt;a href="https://dummyjson.com/users"&gt;https://dummyjson.com/users&lt;/a&gt;) and filter the first five "names" starting with a "S", sorting them alphabetically and outputting them as uppercased text in a file in the &lt;code&gt;/tmp&lt;/code&gt; directory.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A: let's think step by step&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;After a few trial/errors you could end up with this one-liner:&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://dummyjson.com/users | jq &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s1"&gt;'.users[] | select(.lastName | startswith("S")) | .lastName'&lt;/span&gt; | &lt;span class="nb"&gt;sort&lt;/span&gt; | &lt;span class="nb"&gt;tr&lt;/span&gt; &lt;span class="s1"&gt;'[:lower:]'&lt;/span&gt; &lt;span class="s1"&gt;'[:upper:]'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /tmp/names.txt
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;
&lt;li&gt;&lt;p&gt;try to do it with a shortcut or a command, and note it down to try to remember it next time. You can also use &lt;a href="https://quickref.me/"&gt;cheat sheets&lt;/a&gt; (I personally started with physically printed cheat sheets on my desk!).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You’ll be surprised to see how many shortcuts exist in the tools you already use, and you will start discovering terminal commands or new programs&lt;/p&gt;

&lt;p&gt;This article is already long enough. In a future article I’ll go through some of the shortcuts and commands I use on a daily (hourly?) basis.&lt;/p&gt;

&lt;p&gt;Follow this space!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Set up a WSL development environment.</title>
      <dc:creator>Paul van Dyk</dc:creator>
      <pubDate>Mon, 03 Apr 2023 12:50:39 +0000</pubDate>
      <link>https://dev.to/front-commerce/set-up-a-wsl-development-environment-44jk</link>
      <guid>https://dev.to/front-commerce/set-up-a-wsl-development-environment-44jk</guid>
      <description>&lt;p&gt;Looking to take your Windows development environment to the next level? Look no further than Windows Subsystem for Linux (WSL)! With this powerful tool, you can quickly and easily set up a Linux-based development environment on your Windows machine. This guide has everything you need to get started, from installing WSL to updating packages and setting up Windows Terminal. Plus, we'll show you how to install Node.js and Git, and give you tips for using Visual Studio Code, Zsh, and Oh My Zsh.&lt;/p&gt;

&lt;p&gt;You have two options for installation: you can either follow the full installation guide, or you can refer to the best practices for setup, which includes a step-by-step setup guide and explains important concepts such as File Storage.&lt;/p&gt;

&lt;h4&gt;
  
  
  Prerequisites
&lt;/h4&gt;

&lt;p&gt;To set up WSL in Windows, virtualization should be enabled, commonly referred to as SVM mode. Ensure that it is enabled in your BIOS, you can follow this guide to locate it (it will differ depending on your motherboard). Once enabled, proceed to Install WSL in Windows.&lt;/p&gt;




&lt;h2&gt;
  
  
  Install WSL (📑&lt;a href="https://docs.microsoft.com/en-gb/windows/wsl/setup/environment#get-started" rel="noopener noreferrer"&gt;docs&lt;/a&gt;)
&lt;/h2&gt;

&lt;p&gt;ℹ️ &lt;em&gt;If you have already followed the &lt;a href="https://docs.microsoft.com/en-gb/windows/wsl/install" rel="noopener noreferrer"&gt;full install guide&lt;/a&gt;, you can skip this step.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;To install Ubuntu, open PowerShell or Windows Command Prompt in &lt;strong&gt;administrator&lt;/strong&gt; mode by right-clicking and selecting "Run as administrator", then enter the &lt;code&gt;wsl --install&lt;/code&gt; command.&lt;/p&gt;

&lt;p&gt;After running the WSL install command and restarting, Ubuntu will be installed by default. You may change the distribution name by passing in a new name with the &lt;code&gt;-d&lt;/code&gt; flag: &lt;code&gt;wsl --install -d &amp;lt;Distribution Name&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;However, I suggest staying with Ubuntu. 🙂&lt;/p&gt;




&lt;h2&gt;
  
  
  Update and upgrade packages (📑&lt;a href="https://docs.microsoft.com/en-gb/windows/wsl/setup/environment#update-and-upgrade-packages" rel="noopener noreferrer"&gt;docs&lt;/a&gt;)
&lt;/h2&gt;

&lt;p&gt;When starting a new development project, updating your packages is always a good idea. After setting up your Unix account, you can simply run this one-liner to update the package manager:&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;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt upgrade


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;Resolving common connection errors&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you receive an error message saying &lt;code&gt;Temporary failure resolving ‘archive.ubuntu.com’&lt;/code&gt;, it is usually due to an invalid nameserver on the WSL installation. This can cause the WSL instance to be unable to connect to the internet.&lt;br&gt;
To confirm if this is the case, try to &lt;code&gt;ping www.google.com&lt;/code&gt;. If it cannot be pinged, this should confirm that the nameserver configuration is the issue. You can update your configurations to the following:&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /etc/wsl.conf
  &lt;span class="o"&gt;[&lt;/span&gt;network]
  generateResolvConf &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt; &lt;span class="c"&gt;# disables auto generation of resolv config&lt;/span&gt;
  generateHosts &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt; &lt;span class="c"&gt;# disables auto generation of hosts /etc/hosts&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /etc/resolv.conf
  nameserver 1.1.1.1


&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Finally, as a last step, you can protect the &lt;code&gt;resolv.conf&lt;/code&gt; file by forcing the overwrite to be disabled.&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nb"&gt;sudo &lt;/span&gt;chattr &lt;span class="nt"&gt;-f&lt;/span&gt; +i /etc/resolv.conf


&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Set up Windows Terminal (📑&lt;a href="https://docs.microsoft.com/en-gb/windows/wsl/setup/environment#set-up-windows-terminal" rel="noopener noreferrer"&gt;docs&lt;/a&gt;)
&lt;/h2&gt;

&lt;p&gt;You can install any terminal, but personally, I prefer using the Preview build because it ships features much faster than the normal version. For example, the GUI feature only arrived around a year later on the standard version, and I have never found it to be really stable.&lt;/p&gt;

&lt;p&gt;To install, visit the Microsoft Store Apps for either:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://apps.microsoft.com/store/detail/windows-terminal-preview/9N8G5RFZ9XK3?hl=en-us&amp;amp;gl=US" rel="noopener noreferrer"&gt;Windows Terminal Preview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apps.microsoft.com/store/detail/windows-terminal/9N0DX20HK701?hl=en-us&amp;amp;gl=US" rel="noopener noreferrer"&gt;Windows Terminal&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And as mentioned above, GUI is supported! That means you can &lt;a href="https://learn.microsoft.com/en-us/windows/wsl/tutorials/gui-apps" rel="noopener noreferrer"&gt;run Linux GUI apps on WSL&lt;/a&gt; 😇&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fsppqz6q78aehkkc03tot.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fsppqz6q78aehkkc03tot.png" alt="wsl gui"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  File storage (📑&lt;a href="https://docs.microsoft.com/en-gb/windows/wsl/setup/environment#file-storage" rel="noopener noreferrer"&gt;docs&lt;/a&gt;)
&lt;/h2&gt;

&lt;p&gt;To open your WSL project in Windows File Explorer, enter: &lt;code&gt;explorer.exe .&lt;/code&gt; Be sure to add the period at the end of the command to open the current directory.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;TIP&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For the fastest performance, &lt;a href="https://learn.microsoft.com/en-gb/windows/wsl/filesystems#file-storage-and-performance-across-file-systems" rel="noopener noreferrer"&gt;store your project files on the same operating system&lt;/a&gt; as the tools you plan to use. If you are working with Linux tools in a Linux command line (Ubuntu, OpenSUSE, etc), store your files in the WSL file system. If you're working with Windows tools in a Windows command line (PowerShell, Command Prompt), store your files in the Windows file system. Files can be accessed across operating systems, but doing so may significantly slow down performance.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Install Node.js on WSL&lt;/strong&gt; (📑&lt;a href="https://docs.microsoft.com/en-us/windows/dev-environment/javascript/nodejs-on-wsl" rel="noopener noreferrer"&gt;docs&lt;/a&gt;)
&lt;/h2&gt;

&lt;p&gt;We will be using Node Version Manager (&lt;code&gt;nvm&lt;/code&gt;). Follow these steps to install it on Ubuntu (or a similar distribution):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open your command line.&lt;/li&gt;
&lt;li&gt;Install cURL using the following command: &lt;code&gt;sudo apt-get install curl&lt;/code&gt;. cURL is a tool used for downloading content from the internet in the command-line.&lt;/li&gt;
&lt;li&gt;Go to the &lt;a href="https://github.com/nvm-sh/nvm/releases" rel="noopener noreferrer"&gt;nvm repository&lt;/a&gt; and find the latest release.&lt;/li&gt;
&lt;li&gt;Install nvm using the following command:
```bash
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;curl -o- &lt;a href="https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh" rel="noopener noreferrer"&gt;https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh&lt;/a&gt; | bash&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;---

## **Setting up your shell ([Zsh](https://www.zsh.org/) + [Oh My Zsh](https://ohmyz.sh/))**

This step is optional, but you may want to use Zsh and Oh My Zsh if you are looking for a more customizable and powerful shell experience.

### Installing zsh

To install zsh, open the Ubuntu app installed from the App Store and run the following command in the terminal:

```bash


sudo apt-get install zsh


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Once it's installed, type &lt;code&gt;zsh&lt;/code&gt; in the terminal. It will prompt you to choose some configuration options. We will do this later on while installing &lt;code&gt;oh-my-zsh&lt;/code&gt;, so choose option &lt;code&gt;0&lt;/code&gt; to create the config file and prevent this message from showing again.&lt;/p&gt;

&lt;h3&gt;
  
  
  Installing oh-my-zsh
&lt;/h3&gt;

&lt;p&gt;Before anything else, you need to have &lt;code&gt;git&lt;/code&gt; installed on your system. You can install it by running the following command in a terminal:&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;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;git


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;After installing &lt;code&gt;git&lt;/code&gt;, you can then use &lt;code&gt;curl&lt;/code&gt; to install oh-my-zsh.&lt;/p&gt;

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

sh &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; &amp;lt;https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh&amp;gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This command will clone the repository and replace the existing &lt;code&gt;~/.zshrc&lt;/code&gt; file with a template from &lt;code&gt;oh-my-zsh&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fx4mbqung0n4xdd7no83e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fx4mbqung0n4xdd7no83e.png" alt="install oh-my-zsh"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Installing OhMyZsh Plugins
&lt;/h2&gt;

&lt;p&gt;We can supercharge our command line by adding some oh-my-zsh plugins. First, open the zsh config by running &lt;code&gt;vim ~/.zshrc&lt;/code&gt;. Next, find the line &lt;code&gt;plugins=&lt;/code&gt; and add the desired plugins.&lt;/p&gt;

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

&lt;span class="nv"&gt;plugins&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;git nvm &lt;span class="nb"&gt;history &lt;/span&gt;zsh-autosuggestions jsontools command-not-found zsh-syntax-highlighting&lt;span class="o"&gt;)&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;I have listed my favorite plugins here, but feel free to use your own set based on your needs. You can find a list of plugins&lt;br&gt;
&lt;a href="https://github.com/ohmyzsh/ohmyzsh/wiki/Plugins" rel="noopener noreferrer"&gt;here&lt;/a&gt;. Additionally, I use 3rd party plugins that must be pulled separately:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/zsh-users/zsh-autosuggestions" rel="noopener noreferrer"&gt;https://github.com/zsh-users/zsh-autosuggestions&lt;/a&gt;
(&lt;a href="https://github.com/zsh-users/zsh-autosuggestions/blob/master/INSTALL.md#oh-my-zsh" rel="noopener noreferrer"&gt;installation instructions&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/zsh-users/zsh-syntax-highlighting" rel="noopener noreferrer"&gt;https://github.com/zsh-users/zsh-syntax-highlighting&lt;/a&gt;
(&lt;a href="https://github.com/zsh-users/zsh-syntax-highlighting/blob/master/INSTALL.md#oh-my-zsh" rel="noopener noreferrer"&gt;installation instructions&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Enable NVM autoload in zsh
&lt;/h3&gt;

&lt;p&gt;Enabling the nvm autoload plugin allows you to use the appropriate node version based on the specifications in a &lt;code&gt;.nvmrc&lt;/code&gt; file in any of your projects. This feature is especially helpful when working on multiple projects with different node versions, as it eliminates the need to switch between incompatible versions. With nvm autoload, you can easily switch between projects while ensuring you are using the correct node version.&lt;/p&gt;

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

zstyle &lt;span class="s1"&gt;':omz:plugins:nvm'&lt;/span&gt; autoload &lt;span class="nb"&gt;yes&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Useful gists for aliases
&lt;/h3&gt;

&lt;p&gt;To create an &lt;code&gt;.aliases&lt;/code&gt; file in your home directory, run the command &lt;code&gt;touch ~/.aliases&lt;/code&gt;. Then, ensure that it is sourced in your &lt;code&gt;.zshrc&lt;/code&gt; file by adding &lt;code&gt;source ~/.aliases&lt;/code&gt; to it.&lt;/p&gt;

&lt;p&gt;Next, you can add the aliases and configurations used in the terminal by following the instructions in &lt;a href="https://gist.github.com/paul-vd/c1ea26e19414bfcb66e7656ed7c22444" rel="noopener noreferrer"&gt;this link&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You will notice that there is an alias for &lt;code&gt;npm&lt;/code&gt;. This is to detect which package manager to use by searching for the nearest lock file. An alternative to this is &lt;a href="https://github.com/antfu/ni" rel="noopener noreferrer"&gt;ni&lt;/a&gt;, which is highly recommended.&lt;/p&gt;


&lt;h2&gt;
  
  
  Git Credential Manager setup (📑&lt;a href="https://docs.microsoft.com/en-us/windows/wsl/tutorials/wsl-git#git-credential-manager-setup" rel="noopener noreferrer"&gt;docs&lt;/a&gt;)
&lt;/h2&gt;

&lt;p&gt;The credential manager can assist with any HTTPS authentication, utilizing the &lt;a href="https://support.microsoft.com/help/4026814/windows-accessing-credential-manager" rel="noopener noreferrer"&gt;Windows Credential Manager&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To download the latest version, visit the repository at&lt;br&gt;
&lt;a href="https://github.com/GitCredentialManager/git-credential-manager/releases" rel="noopener noreferrer"&gt;https://github.com/GitCredentialManager/git-credential-manager/releases&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;After installation and configuration, you should also add it to your Linux shell.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

git config &lt;span class="nt"&gt;--global&lt;/span&gt; credential.helper &lt;span class="s2"&gt;"/mnt/c/Program&lt;/span&gt;&lt;span class="se"&gt;\ &lt;/span&gt;&lt;span class="s2"&gt;Files/Git/mingw64/bin/git-credential-manager-core.exe"&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;




&lt;h2&gt;
  
  
  VSCode (📑&lt;a href="https://docs.microsoft.com/en-gb/windows/wsl/tutorials/wsl-vscode" rel="noopener noreferrer"&gt;docs&lt;/a&gt;)
&lt;/h2&gt;

&lt;p&gt;To get started, &lt;a href="https://code.visualstudio.com/download" rel="noopener noreferrer"&gt;download and install VSCode&lt;/a&gt;. Then, add the remote &lt;a href="https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack" rel="noopener noreferrer"&gt;development extension&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;That's it you should be ready to start developing in WSL.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Tip&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If your WSL container resolves the &lt;code&gt;code&lt;/code&gt; path to an Ubuntu installation of VSCode, it can cause issues when you try to open a folder using a command like &lt;code&gt;code ./my-folder&lt;/code&gt;. If Git extensions crash at startup, create an alias for the &lt;code&gt;code&lt;/code&gt; command to point to your Windows installation of VSCode. Run &lt;code&gt;which code&lt;/code&gt;&lt;br&gt;
to detect which VSCode installation is being used.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;br&gt;
Add an alias for the &lt;code&gt;code&lt;/code&gt; command that points to your Windows installation by including it in your &lt;code&gt;.aliases&lt;/code&gt; file.&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;code&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"/mnt/c/Users/%userprofile%/AppData/Local/Programs/Microsoft&lt;/span&gt;&lt;span class="se"&gt;\ &lt;/span&gt;&lt;span class="s2"&gt;VS&lt;/span&gt;&lt;span class="se"&gt;\ &lt;/span&gt;&lt;span class="s2"&gt;Code/bin/code"&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Microsoft PowerToys: Utilities to customize Windows (📑&lt;a href="https://docs.microsoft.com/en-us/windows/powertoys/" rel="noopener noreferrer"&gt;docs&lt;/a&gt;)
&lt;/h2&gt;

&lt;p&gt;As you're setting up your Windows development environment, you might be interested in exploring some of the additional tools available to you. One of my personal favorites are the Microsoft PowerToys, a set of utilities designed to help streamline and customize your Windows experience for greater productivity. &lt;a href="https://docs.microsoft.com/en-us/windows/powertoys/install" rel="noopener noreferrer"&gt;Install Microsoft PowerToys&lt;/a&gt; to keep tweaking Windows!&lt;/p&gt;

&lt;p&gt;Here are a few PowerToys features that I find particularly useful:&lt;/p&gt;

&lt;h3&gt;
  
  
  FancyZones
&lt;/h3&gt;

&lt;p&gt;If you want to easily manage the position of each application window on your Windows desktop, check out &lt;a href="https://learn.microsoft.com/en-us/windows/powertoys/fancyzones" rel="noopener noreferrer"&gt;FancyZones&lt;/a&gt;. This tool allows you to customize the size and positioning of your snapping grid with efficient layouts that suit your needs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fnl6hgf7d4saywau2gpsc.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fnl6hgf7d4saywau2gpsc.gif" alt="FancyZones"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Keyboard Manager
&lt;/h3&gt;

&lt;p&gt;With the PowerToys Keyboard Manager, you can redefine keys and shortcut combinations on your keyboard. For instance, you can swap the A key for the B key. You can also swap Ctrl + C for ⊞ Win + C. This will copy text when ⊞ Win + C is pressed. If no specific application is targeted in the PowerToys Keyboard Manager, the changes will apply globally across Windows.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fn6l807suxupyjbwvt5lu.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fn6l807suxupyjbwvt5lu.gif" alt="KBM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  File Explorer Preview Pane
&lt;/h3&gt;

&lt;p&gt;The Preview Pane is an existing feature in Windows File Explorer that lets you see a preview of a file's contents in the view's reading pane. PowerToys enhances this feature by adding support for multiple file extensions, including Markdown, SVG, PDF, and G-code. It also adds support for source code files with more than 150 file extensions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fjyahf43yc25bmqxihnzr.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fjyahf43yc25bmqxihnzr.gif" alt="PreviewPane"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  ColorPicker
&lt;/h3&gt;

&lt;p&gt;This Windows color picker is a must-have tool for designers and themers. It allows you to easily select colors from any application and customize them to your liking. The interface is user-friendly and you can copy colors to your clipboard in different formats, including hexadecimal, RGB, and HSL. This tool simplifies color palette management and is lightweight. Download it today to improve your design work!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fbmsh4lg2hipdkl7cwou7.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fbmsh4lg2hipdkl7cwou7.gif" alt="ColorPicker"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Text Extractor utility
&lt;/h3&gt;

&lt;p&gt;Text Extractor allows you to copy text from anywhere on your screen, including&lt;br&gt;
inside images or videos.&lt;/p&gt;

&lt;p&gt;To activate the capture feature, use the shortcut (default: ⊞ Win + Shift +T). This will display an overlay on your screen. Click and hold your primary mouse button, then drag to capture the text. The captured text will be saved to your clipboard.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2F0wj7g1xlqv65gnqthv9t.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2F0wj7g1xlqv65gnqthv9t.gif" alt="PowerOCR"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Run Utility
&lt;/h3&gt;

&lt;p&gt;PowerToys Run is a quick launcher for power users that includes additional features without sacrificing performance. It is open source and modular, allowing for additional plugins to be added.&lt;/p&gt;

&lt;p&gt;To use PowerToys Run, simply press Alt + Space and start typing!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fqfcio7kxodef5fm6pmrw.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fqfcio7kxodef5fm6pmrw.gif" alt="Run"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Enable ‘God Mode’
&lt;/h2&gt;

&lt;p&gt;God Mode will give you access to all of Windows’ control panels from one folder. To enable it right-click on the desktop and select &lt;strong&gt;New &amp;gt; Folder&lt;/strong&gt;. Re-name the new folder with this bit of code:&lt;/p&gt;

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

GodMode.&lt;span class="o"&gt;{&lt;/span&gt;ED7BA470-8E54-465E-825C-99712043E01C&lt;span class="o"&gt;}&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Sharing SSH keys between Windows and WSL 2&lt;/strong&gt; (📑&lt;a href="https://devblogs.microsoft.com/commandline/sharing-ssh-keys-between-windows-and-wsl-2/" rel="noopener noreferrer"&gt;docs&lt;/a&gt;)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;If you have setup ssh in windows you can copy it to your linux&lt;/li&gt;
&lt;/ol&gt;

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

   &lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; /mnt/c/Users/&amp;lt;username&amp;gt;/.ssh ~/.ssh


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;Fix the permissions&lt;/li&gt;
&lt;/ol&gt;

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

   &lt;span class="nb"&gt;chmod &lt;/span&gt;600 ~/.ssh/id_rsa


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;Add keychain to linux&lt;/li&gt;
&lt;/ol&gt;

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

   &lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;keychain


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;Run the keychain every time you start a shell instance, you can append this to the top of your &lt;code&gt;.zshrc&lt;/code&gt; file.&lt;/li&gt;
&lt;/ol&gt;

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

   &lt;span class="nb"&gt;eval&lt;/span&gt; &lt;span class="sb"&gt;``&lt;/span&gt;keychain  &lt;span class="nt"&gt;--quiet&lt;/span&gt; &lt;span class="nt"&gt;--eval&lt;/span&gt; &lt;span class="nt"&gt;--agents&lt;/span&gt; ssh id_ed25519
   &lt;span class="nb"&gt;command &lt;/span&gt;clear &lt;span class="c"&gt;# this is why we add it to the top so that we can still se other outputs, I have not yet found a better way of silencing the keychain export messages&lt;/span&gt;
   &lt;span class="sb"&gt;```&lt;/span&gt;

&lt;span class="nt"&gt;---&lt;/span&gt;

&lt;span class="c"&gt;## Conclusion&lt;/span&gt;

You have just learned how to &lt;span class="nb"&gt;set &lt;/span&gt;up WSL on your Windows machine and create a powerful and efficient development environment. By following this guide, you have installed WSL and updated packages, &lt;span class="nb"&gt;set &lt;/span&gt;up Windows Terminal and installed Node.js and Git. These tools will &lt;span class="nb"&gt;help &lt;/span&gt;you code faster, easier, and more securely.

🥳 Congratulations on completing this guide! We hope you enjoyed it and found it useful. If you want to learn more about other topics related to development, stay tuned as our blog will be growing!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>tutorial</category>
      <category>windows</category>
      <category>wsl2</category>
      <category>setup</category>
    </item>
    <item>
      <title>Some challenges of being the editor of a software intended to be integrated</title>
      <dc:creator>Damien Pobel</dc:creator>
      <pubDate>Fri, 24 Mar 2023 08:00:00 +0000</pubDate>
      <link>https://dev.to/front-commerce/some-challenges-of-being-the-editor-of-a-software-intended-to-be-integrated-3dg7</link>
      <guid>https://dev.to/front-commerce/some-challenges-of-being-the-editor-of-a-software-intended-to-be-integrated-3dg7</guid>
      <description>&lt;p&gt;Essentially, Front-Commerce is a software meant to be integrated by developers so that a merchant can sell products to its customers in its own online store and even &lt;a href="https://www.front-commerce.com/e-commerce-replatforming-big-bang-or-progressive-migration/"&gt;without having to completely change an existing e-commerce stack&lt;/a&gt;. While this is probably the simplest definition of Front-Commerce (more or less the one I use to describe my job to my family and friends 😉), it hides some challenges we face every day.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three targets: developers, merchants and customers
&lt;/h2&gt;

&lt;p&gt;The first challenge is not really technical. As stated in the introduction, we try to address three main personas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the developers integrating our solution to create an online store for…&lt;/li&gt;
&lt;li&gt;a merchant willing to sell something to…&lt;/li&gt;
&lt;li&gt;a customer seeking a product.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Anybody having at least a small experience as a software editor knows that properly addressing one persona can already be challenging, so you can guess what it is like with three, even if they don’t necessarily want opposing features, more targets mean more constraints.&lt;/p&gt;

&lt;p&gt;Let’s take a deliberately extreme example 😃 They all want a performant store.&lt;/p&gt;

&lt;p&gt;The customer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I want a performant and great shopping experience even in the middle of nowhere with a low to average 3G connection.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The merchant:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can I have a great shopping experience for my customers? And also, I want to put very high quality photos and videos online. In addition, I want my pages to be always highly up to date with customer specific and very dynamic content. And next Friday is Black Friday! The website needs to scale, it’s the biggest selling event of the year.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The developers:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The merchant wants a performant and scalable website. Is your software doing that out of the box or can it be done by turning on a setting?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I guess you get the idea, each target adds a set of constraints. It’s no  surprise that pleasing  everyone is difficult but it’s also a stimulating challenge.&lt;/p&gt;

&lt;h2&gt;
  
  
  Extensibility
&lt;/h2&gt;

&lt;p&gt;As a software meant to be integrated by developers, Front-Commerce needs to be extensible so that it can serve different use cases. The most obvious reason is that each merchant wants its own customized store implementing a dedicated shopping experience.&lt;/p&gt;

&lt;p&gt;In addition, each project needs a specific set of features and while we try to support as many as possible out of the box, having an extensible architecture allows the developers to fill the gaps. As far as I’m concerned, it’s always a pleasure to see very unexpected or specific features nicely implemented even if I would never have imagined it could exist.&lt;/p&gt;

&lt;p&gt;It’s also worth mentioning that in the world of composable architectures and &lt;a href="https://www.front-commerce.com/what-is-headless-commerce/"&gt;headless commerce&lt;/a&gt;, extensibility is a key feature.&lt;/p&gt;

&lt;h2&gt;
  
  
  Backwards compatibility and &lt;em&gt;upgradability&lt;/em&gt;
&lt;/h2&gt;

&lt;p&gt;Being able to implement a project is nice but that’s only the very beginning of the story. At some point, new features and fixes for bugs will be needed. The challenge here is to be able to deliver those without breaking anything.&lt;/p&gt;

&lt;p&gt;On a practical level, that means we try to follow &lt;a href="https://semver.org/"&gt;semantic&lt;br&gt;
versioning&lt;/a&gt; by regularly providing patch releases containing only bug fixes and every six weeks, we release a minor version with new features. Those minor versions always have &lt;a href="https://developers.front-commerce.com/docs/appendices/migration-guides/"&gt;a migration guide&lt;/a&gt; to make the upgrade process as frictionless as possible. And what about a major version? In the last couple of years, we have not released any, but I’ve heard that something is cooking 😇&lt;/p&gt;

&lt;p&gt;In the code, this has a quite deep impact. When changing code, we have to keep in mind both existing projects using our software and new ones. We also have to think about how APIs are being used before we can make any changes to them. This forces us to carefully encapsulate our API’s to reduce their surface as much as possible. This has a tendency to limit the extensibility and the versatility so as usual when it comes to code, the key is to find the right trade-off.&lt;/p&gt;

&lt;h2&gt;
  
  
  Anything else?
&lt;/h2&gt;

&lt;p&gt;Oh yeah, I could have approached the support, the documentation, the developer experience or the dependency management to name a few. This will probably be the subject of another post…&lt;/p&gt;

&lt;p&gt;In any case, all this is a part of the context in which we build Front-Commerce and where we try find the best solutions or trade-off. As usual when it comes to our product, we are always seeking feedback, so don’t hesitate to contact us if you have any remarks or comments. This can only make the product better.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Front-Commerce is getting a Remix</title>
      <dc:creator>Pierre Martin 💿</dc:creator>
      <pubDate>Tue, 21 Mar 2023 10:24:00 +0000</pubDate>
      <link>https://dev.to/front-commerce/front-commerce-is-getting-a-remix-njh</link>
      <guid>https://dev.to/front-commerce/front-commerce-is-getting-a-remix-njh</guid>
      <description>&lt;p&gt;We are thrilled to announce that we’re &lt;em&gt;Remixing&lt;/em&gt; Front-Commerce!&lt;/p&gt;

&lt;p&gt;As you may already know, our goal for 2023 is to significantly enhance the developer experience and web performance of Front-Commerce projects. We aim to improve the Core Web Vitals of every storefront built with Front-Commerce and &lt;strong&gt;achieve the best performance in the market&lt;/strong&gt;. This will benefit both merchants and their customers.&lt;/p&gt;

&lt;p&gt;To achieve this, we have decided to adopt new foundations for our product. These foundations will be based on &lt;strong&gt;&lt;a href="https://remix.run/"&gt;Remix&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;We are excited about the possibilities this new version brings, and we hope you will love using it!&lt;/p&gt;

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

&lt;p&gt;Let’s start with the Remix homepage description:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Remix is a full stack web framework that lets you focus on the user interface and work back through web standards to deliver a fast, slick, and resilient user experience. People are gonna love using your stuff.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Remix is an open source framework created by Ryan Florence and Michael Jackson, well known in the React ecosystem for maintaining React Router, the most widely used routing library for React.&lt;/p&gt;

&lt;p&gt;The company supporting the Remix core team’s activities &lt;a href="https://shopify.engineering/remix-joins-shopify"&gt;was acquired in October 2022 by Shopify&lt;/a&gt;, and Remix is now used as foundations for Shopify’s Hydrogen framework. This acquisition and actions taken since the merger makes us confident in Remix’s open source future. We’re glad to be part of this community and contribute to the project too!&lt;/p&gt;

&lt;p&gt;As we write this announcement, Remix is only compatible with React. Based on React Router primitives, &lt;strong&gt;Remix adds support for everything involving a network request between a client and a server:&lt;/strong&gt; SSR, client side navigation, forms, sessions, cookies…&lt;/p&gt;

&lt;p&gt;It also provides a compiler and a development server aiming to provide a top-notch Developer Experience, fast builds and optimized production bundles.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Remix?
&lt;/h2&gt;

&lt;p&gt;We have been closely following the space of JS full-stack frameworks since our first version in 2016, and Front-Commerce's primitives were inspired by several of them. While Next.js has become the most widely used framework, we found that Remix is a simple yet efficient framework that aligns perfectly with our vision for web applications. Let me explain its most important features.&lt;/p&gt;

&lt;h3&gt;
  
  
  Web standards and progressive enhancement
&lt;/h3&gt;

&lt;p&gt;Remix is focused on web standards. It doesn’t reinvent them.&lt;/p&gt;

&lt;p&gt;This is a Progressive Web Application’s essence: to deliver a web application that works and leverage Web APIs to improve the user experience by making it reliable and more capable.&lt;br&gt;
Remix adheres to these principles and progressively enhances applications with JavaScript, while ensuring that idiomatic Remix applications can also work without any JavaScript executed in the browser!&lt;br&gt;
Front-Commerce will remain a SPA for now, but a side effect of using Remix is the ability to allow MPA use cases (without client-side Javascript) in the future.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Our vision with Front-Commerce is to ensure your frontend will last. Web APIs don’t change.&lt;/strong&gt; Being based on standard Web APIs means that we’re writing code that could last for decades. Even if Remix disappears, having APIs designed around standards ensures greater portability.&lt;/p&gt;

&lt;p&gt;We also believe that it improves the developer experience. The industry (cloud providers, frameworks, libraries) is moving towards shared primitives based on these standards. We are confident that, in the next few years, more and more people will be accustomed to the use of these standard APIs.&lt;br&gt;
Developers will thus more easily understand how to use Front-Commerce and could leverage a wider ecosystem of libraries in their applications.&lt;/p&gt;

&lt;p&gt;Ultimately, another benefit of this approach is that it leads to less code being shipped in the browser which greatly improves performance!&lt;/p&gt;

&lt;h3&gt;
  
  
  Simplicity
&lt;/h3&gt;

&lt;p&gt;One can learn Remix within a few hours. Its API is small, and already influenced several frameworks in our industry. We believe that most frontend developers will be familiar with the concept of &lt;em&gt;routes&lt;/em&gt;, &lt;em&gt;loaders&lt;/em&gt; and &lt;em&gt;actions&lt;/em&gt; in the future. With a better knowledge of web standards too, developers will feel at home when using Front-Commerce.&lt;/p&gt;

&lt;p&gt;We really hope that &lt;em&gt;Remixing&lt;/em&gt; Front-Commerce will make it &lt;strong&gt;a more natural and pleasant tool to use on a daily basis to build eCommerce projects&lt;/strong&gt;. We’re also taking this as an opportunity to rework some of our own APIs to embrace the Remix philosophy, and have simpler primitives where possible.&lt;/p&gt;

&lt;p&gt;Using Remix means that we can remove a lot of code from our codebase! With less code to maintain, and less stuff to document, we will have more time to focus on our core value proposition: &lt;strong&gt;enabling developers to build fully customized, composable storefronts leveraging every feature from best-of-breed technologies.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Edge-first
&lt;/h3&gt;

&lt;p&gt;Another advantage of Remix is that it is edge-first, yet server-agnostic.&lt;/p&gt;

&lt;p&gt;Front-Commerce has always been a node/express application, and Front-Commerce Remixed will remain focused on this environment in its first version.&lt;/p&gt;

&lt;p&gt;The web platform evolves, and so does the hosting ecosystem. Edge computing is gaining popularity for good reasons, and you can be sure that we’ll keep an eye (and more) on this. We’re excited to be able to investigate new deployment targets such as Deno Deploy, Architect, Cloudflare, Fastly, Netlify, Vercel, Fly.io among others.&lt;/p&gt;

&lt;p&gt;Using Remix as our new foundation will allow us to explore this area without breaking changes!&lt;/p&gt;

&lt;h3&gt;
  
  
  A (far) future without React?
&lt;/h3&gt;

&lt;p&gt;Remixing Front-Commerce allows us to remove many external dependencies from the client-side bundle. We were able to replace Formsy with Remix’s Form, Apollo Client with Remix’s loaders/actions and many more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;React is now the main external JS dependency of our bundle (in terms of size)&lt;/strong&gt;, and in our mission to provide the best web performance on the market we know that it could be our next bottleneck.&lt;/p&gt;

&lt;p&gt;Choosing Remix and betting on web standards allows us to reduce our dependency on React. While we still think that JSX is a good abstraction and are happy with the React library, we're also excited about innovations in frontend frameworks over the past few years.&lt;/p&gt;

&lt;p&gt;In a near future, &lt;a href="https://github.com/remix-run/remix/discussions/4562"&gt;Remix will very likely be compatible with Preact&lt;/a&gt; (a smaller and faster React alternative) and you can be sure that we’ll be one of the first to play with this.&lt;/p&gt;

&lt;p&gt;We aim for Front-Commerce projects to outlast frontend libraries. While it's impossible to predict which library will become "the next React", we see many promising technologies emerging, such as Qwik, Solid, Million, Lit, and WebC (among others). These technologies are challenging the current status quo.&lt;/p&gt;

&lt;p&gt;By choosing Remix as our new foundation, we can reduce our dependency on React (while Next.js is becoming even more tied to this library). This is a first step towards a possible future without React that is accessible to all Front-Commerce projects, without the need to throw years of work away!&lt;/p&gt;

&lt;h3&gt;
  
  
  A growing community
&lt;/h3&gt;

&lt;p&gt;Remix is an open source framework with a community of developers who are dedicated to web standards and simplicity.&lt;/p&gt;

&lt;p&gt;This community is friendly and supportive, and we want to contribute as much as we can to it. We’ll be happy to participate in conferences, make code contributions, engage with the community on Discord, and more. If you are part of this community, don’t hesitate to get in touch with us!&lt;/p&gt;

&lt;p&gt;The popularity of Remix is growing, with more and more developers using it to build their projects. We’re doing our best to ensure that Front-Commerce is an idiomatic Remix app that will make developers feel at home, and could also help to learn how to structure bigger apps with Remix.&lt;/p&gt;

&lt;p&gt;We also had discussions with our partners and teams interested in Front-Commerce over the past few months, and we have found that most (if not all) of them are excited about Remix and our choice.&lt;/p&gt;

&lt;h2&gt;
  
  
  What else does this new version bring?
&lt;/h2&gt;

&lt;p&gt;We will not go into too much detail in this article and will be publishing dedicated articles in the next few weeks about these topics.&lt;/p&gt;

&lt;p&gt;The key information to keep in mind is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Front-Commerce specific concepts (and code) remain unchanged.&lt;/li&gt;
&lt;li&gt;This version is focused only on technical aspects (such as "plumbing", Remix, better primitives...), and has feature parity (it won't add new features or remove any).&lt;/li&gt;
&lt;li&gt;We’ve taken this opportunity to remove code that has been deprecated since our latest major version (4 years ago!).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  GraphQL on the server
&lt;/h3&gt;

&lt;p&gt;Remix will replace Front-Commerce's "middle stack," including routing, server-side rendering (SSR), and HTTP interactions. This means that GraphQL queries and mutations will now take place only on the server, respectively in Remix's loaders and actions.&lt;/p&gt;

&lt;p&gt;This is great for web performance because it allows the removal of a major frontend dependency from the bundle: Apollo Client. By default, Front-Commerce will not use any client-side GraphQL queries and will instead use Remix loaders, actions, and fetchers.&lt;/p&gt;

&lt;p&gt;However, this does not mean we are giving up on GraphQL. In fact, &lt;strong&gt;GraphQL is great for composable commerce because it allows a unified view of all your data, independent of the platform or service used&lt;/strong&gt;. This enables progressive migration use cases and ensures that a Front-Commerce project can outlive many replatformings.&lt;/p&gt;

&lt;p&gt;Front-Commerce still allows you to expose your GraphQL API to the web if desired. Although it is not the default, it could be useful if you have other applications using it or want to migrate some parts of your application progressively at your own pace.&lt;/p&gt;

&lt;h3&gt;
  
  
  Full-stack typing with TypeScript
&lt;/h3&gt;

&lt;p&gt;Over the past few years, the JavaScript ecosystem has adopted TypeScript, and many tools have added first-class TypeScript support. This has led to massive improvements in developer experience (DX).&lt;/p&gt;

&lt;p&gt;In the Front-Commerce core, we have gradually introduced typing over the years (with JSDoc for backwards compatibility). With this new version, we are taking this to a whole new level.&lt;/p&gt;

&lt;p&gt;Front-Commerce combines Remix, &lt;a href="https://the-guild.dev/graphql/codegen"&gt;GraphQL Code Generator&lt;/a&gt;, and your custom GraphQL schema to provide a perfect setup that improves both the DX and safety of your applications.&lt;/p&gt;

&lt;p&gt;TypeScript has become a core component of a Front-Commerce project, but we want to ensure that it can be incrementally adopted. You can keep using &lt;code&gt;*.js&lt;/code&gt; (or &lt;code&gt;*.jsx&lt;/code&gt;) files or rename/create &lt;code&gt;*.ts&lt;/code&gt; (or &lt;code&gt;*.tsx&lt;/code&gt;) files to leverage this new feature.&lt;/p&gt;

&lt;h3&gt;
  
  
  Composability with a New Extension API
&lt;/h3&gt;

&lt;p&gt;Front-Commerce projects are modular by nature. Integrators can create applications by combining different features and integrations provided by Front-Commerce, allowing them to quickly get up to speed.&lt;/p&gt;

&lt;p&gt;Since 2016, we have consistently increased our feature coverage and supported services. We have added many extension points based on real use cases from our customers.&lt;/p&gt;

&lt;p&gt;Front-Commerce enhances Remix by providing a consolidated API that can be used to register extensions, which can improve your eCommerce project in many different ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GraphQL modules that extend or customize the GraphQL schema&lt;/li&gt;
&lt;li&gt;New routes, themes, and overrides&lt;/li&gt;
&lt;li&gt;Payment methods and components&lt;/li&gt;
&lt;li&gt;Analytics plugins&lt;/li&gt;
&lt;li&gt;...and many more&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We are also turning our core repository into a Monorepo and using this Extension API ourselves to distribute every &lt;code&gt;@front-commerce/*&lt;/code&gt; package as a Front-Commerce extension that can be added to a standard Remix app!&lt;/p&gt;

&lt;h2&gt;
  
  
  What About Existing Front-Commerce Projects?
&lt;/h2&gt;

&lt;p&gt;When we say that a Front-Commerce project will last, we are serious about it. The first Front-Commerce projects went live in 2018 and are regularly updated to our latest version. We want to keep it that way.&lt;/p&gt;

&lt;p&gt;We are not throwing away all of our codebase (or yours). We are only changing the foundations that we have maintained for you over the years.&lt;/p&gt;

&lt;p&gt;For this reason, the new version includes specific features that target existing Front-Commerce projects to ensure a smooth migration path:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Codemods that will automatically convert your code to remove most of the tedious work (new import paths, etc.)&lt;/li&gt;
&lt;li&gt;A &lt;code&gt;@front-commerce/compat&lt;/code&gt; extension that you can use if you have highly customized React components or pages that you do not want to rework immediately&lt;/li&gt;
&lt;li&gt;Dedicated documentation with a migration guide that will contain all the details&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Remixing your Front-Commerce application should take days, not weeks. We are accepting the challenge!&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Is it ready?
&lt;/h2&gt;

&lt;p&gt;We have been diligently iterating on this &lt;em&gt;remix&lt;/em&gt; over the past few months. We are now excited to share it with you as early as possible so that we can improve this new version based on &lt;strong&gt;feedback from the field&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The first alpha versions will be released very soon, and the first Front-Commerce Remixed projects will go into production in a few months.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your next Front-Commerce project can start with this new version, and you will be able to migrate your existing projects in production later this year.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We are thrilled to embark on this new journey with Remix! We invite all Front-Commerce developers to embrace this change with us and welcome new teams aboard.&lt;/p&gt;

&lt;p&gt;As always, we are available to discuss this further and will share more details with you over the next few months. Happy remixing!&lt;/p&gt;

</description>
      <category>react</category>
      <category>graphql</category>
      <category>typescript</category>
      <category>remix</category>
    </item>
  </channel>
</rss>
