<?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: Théo</title>
    <description>The latest articles on DEV Community by Théo (@theola).</description>
    <link>https://dev.to/theola</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F484693%2F65fd8c72-2fa8-4802-a4cc-5e2baf8eb7e4.png</url>
      <title>DEV Community: Théo</title>
      <link>https://dev.to/theola</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/theola"/>
    <language>en</language>
    <item>
      <title>From contributor to maintainer - any tips or advice?</title>
      <dc:creator>Théo</dc:creator>
      <pubDate>Wed, 20 Oct 2021 12:46:25 +0000</pubDate>
      <link>https://dev.to/theola/my-hacktoberfest-journey-from-contributor-to-maintainer-any-tips-or-advice-1km0</link>
      <guid>https://dev.to/theola/my-hacktoberfest-journey-from-contributor-to-maintainer-any-tips-or-advice-1km0</guid>
      <description>&lt;h3&gt;
  
  
  👋  Hello fellow devs!
&lt;/h3&gt;

&lt;p&gt;For my 3rd Hacktoberfest challenge, I finally decided to participate mainly as a maintainer and I would like to share and discuss with you the benefits (and difficulties! 😬) of it!&lt;/p&gt;




&lt;h3&gt;
  
  
  👀  My background
&lt;/h3&gt;

&lt;p&gt;Coding and contributing to projects are only side activities for me. Still, I always loved the spirit behind open source projects and I wanted to be part of it!&lt;/p&gt;




&lt;h3&gt;
  
  
  🎯  Goals
&lt;/h3&gt;

&lt;p&gt;I used to participate in the Hacktoberfest challenge as a contributor as it was for me a great opportunity to gain experience and to understand how things worked. &lt;/p&gt;

&lt;p&gt;But I am also a maintainer of the &lt;a href="https://aliceandbob.io" rel="noopener noreferrer"&gt;aliceandbob.io&lt;/a&gt; project on Github.&lt;/p&gt;

&lt;h4&gt;
  
  
  It was then a good opportunity for me to change my approach: I decided that I would open issues on this project for contributors to work on. ✨
&lt;/h4&gt;

&lt;p&gt;I wanted to offer some really easy-to-resolve issues, more to understand how to contribute rather than actually coding - in short, &lt;strong&gt;everything that I wanted to find when I was a first-time contributor to the hacktoberfest!&lt;/strong&gt; - which was for me a good way to start smoothly as a maintainer.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&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%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/aliceandbob-io" rel="noopener noreferrer"&gt;
        aliceandbob-io
      &lt;/a&gt; / &lt;a href="https://github.com/aliceandbob-io/aliceandbob" rel="noopener noreferrer"&gt;
        aliceandbob
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      🔐 A free, light and easy to use client-side tool to generate PGP key pairs, encrypt and decrypt messages.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;aliceandbob.io 🌐🔐&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;A free, light and easy to use client-side tool to generate PGP key pairs, encrypt and decrypt messages.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Check it out! 🔥&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://aliceandbob.io/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Faliceandbob-io%2Ffiles%2Fmain%2Fscreenshot-online-pgp-tool_v2.png" alt="Screenshot1" width="100%"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Features ✨&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;🗝️ Generate PGP key pairs&lt;/li&gt;
&lt;li&gt;🔒 Encrypt messages with the public PGP key of the receiver&lt;/li&gt;
&lt;li&gt;🔓 Decrypt messages with your private PGP key&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Tech 🔧&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;HTML/CSS&lt;/li&gt;
&lt;li&gt;Ruby (v2.6.5)&lt;/li&gt;
&lt;li&gt;Rails (v6.0.3.2)&lt;/li&gt;
&lt;li&gt;Stimulus JS (v1.1.1)&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Library 📚&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;OpenPGP.js (v5.3.0), a JavaScript implementation of the OpenPGP protocol. Find out more on &lt;a href="https://openpgpjs.org/" rel="nofollow noopener noreferrer"&gt;openpgpjs.org&lt;/a&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Contributing 🍰&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Please contribute using &lt;a href="https://guides.github.com/introduction/flow" rel="noopener noreferrer"&gt;GitHub Flow&lt;/a&gt;. Refer first to the open issues then create a branch, add commits, and open a pull request!&lt;/p&gt;
&lt;p&gt;You can also read the &lt;a href="https://github.com/aliceandbob-io/aliceandbobCODE_OF_CONDUCT.md" rel="noopener noreferrer"&gt;&lt;code&gt;CODE OF CONDUCT&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;When forking and cloning the repo, don't forget to do the following:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;yarn install --check-files&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bundle install&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Duplicate the &lt;code&gt;database.yml.template&lt;/code&gt; file and rename it &lt;code&gt;database.yml&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Update the &lt;code&gt;database.yml&lt;/code&gt; file as needed to match your configuration&lt;/li&gt;
&lt;li&gt;Then, &lt;code&gt;rails db:setup&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="markdown-heading"&gt;…&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/aliceandbob-io/aliceandbob" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
 


&lt;h3&gt;
  
  
  🚧  The journey
&lt;/h3&gt;

&lt;p&gt;I started by opening begginer-friendly issues such as this one:&lt;/p&gt;


&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/aliceandbob-io/aliceandbob/issues/39" rel="noopener noreferrer"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg"&gt;
      &lt;span class="issue-title"&gt;
        docs: update of the landing page 
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#39&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/aliceandbob-io" rel="noopener noreferrer"&gt;
        &lt;img class="github-liquid-tag-img" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Favatars.githubusercontent.com%2Fu%2F71557418%3Fv%3D4" alt="aliceandbob-io avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/aliceandbob-io" rel="noopener noreferrer"&gt;aliceandbob-io&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/aliceandbob-io/aliceandbob/issues/39" rel="noopener noreferrer"&gt;&lt;time&gt;Oct 05, 2021&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      &lt;p&gt;The screenshot that appears in the &lt;code&gt;/app/views/pages/_section_webapp.html.erb&lt;/code&gt; page needs to be replaced.
The new screenshot may be found &lt;a href="https://github.com/aliceandbob-io/files" rel="noopener noreferrer"&gt;here&lt;/a&gt; and is named &lt;code&gt;screenshot-online-pgp-tool_v2.png&lt;/code&gt;.&lt;/p&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/aliceandbob-io/aliceandbob/issues/39" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;By doing so I was able to follow the work of potential contributors, to answer them and to guide them if needed. It was also the opportunity for me to understand the &lt;strong&gt;role of a maintainer and a reviewer&lt;/strong&gt;, to &lt;strong&gt;assign properly issues&lt;/strong&gt; and to make sure that contributors would follow the &lt;strong&gt;guide of conduct and the Git and Github concepts&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;So far so good I must say! I am learning a lot as a maintainer, which is not always as easy as I would have thought! 😅&lt;/p&gt;




&lt;h3&gt;
  
  
  🔥  Next steps!
&lt;/h3&gt;

&lt;p&gt;My Hacktoberfest 2021 experience as a first-time maintainer is really exciting and I will definitly participate next year as I am learning a lot. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But now, I would like to be able to open several and complicated issues at the same time, dealing with multiple pull requests and struggling with merge conflicts 🤯 In short, going a step further in open-sourcing the project!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I was then wondering what was your experience of it, both as maintainer and as contributor. What makes a good maintainer? What are the biggest issues you are dealing with? Are you sometimes overwhelmed with inputs from contributors? etc.&lt;/p&gt;

&lt;p&gt;I would love to read from you all! 🙏&lt;/p&gt;

&lt;p&gt;Thanks a lot for reading and for your comments! &lt;/p&gt;




&lt;p&gt;Happy Hacktoberfest to all of you! 🎃&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Electron app with Webpack, Bootstrap, FontAwesome and JQuery - A complete guide</title>
      <dc:creator>Théo</dc:creator>
      <pubDate>Mon, 15 Feb 2021 11:29:42 +0000</pubDate>
      <link>https://dev.to/theola/electron-app-with-webpack-bootstrap-fontawesome-and-jquery-a-complete-guide-54k2</link>
      <guid>https://dev.to/theola/electron-app-with-webpack-bootstrap-fontawesome-and-jquery-a-complete-guide-54k2</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;tl;dr&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A step-by-step tutorial to build from scratch an &lt;a href="https://www.electronjs.org/" rel="noopener noreferrer"&gt;electron app&lt;/a&gt; together with &lt;a href="https://getbootstrap.com/" rel="noopener noreferrer"&gt;Bootstrap&lt;/a&gt;, &lt;a href="https://fontawesome.com/" rel="noopener noreferrer"&gt;FontAwesome&lt;/a&gt;, &lt;a href="https://jquery.com/" rel="noopener noreferrer"&gt;JQuery&lt;/a&gt; and bundled with &lt;a href="https://webpack.js.org/" rel="noopener noreferrer"&gt;Webpack&lt;/a&gt;! 🎉&lt;/p&gt;




&lt;h1&gt;
  
  
  ⚓ Introduction
&lt;/h1&gt;

&lt;p&gt;As I was building an electron app for a &lt;a href="https://aliceandbob.io" rel="noopener noreferrer"&gt;project&lt;/a&gt;, I though it might be useful for other to share my work. It is not always easy to understand (Webpack can be sometimes complicated..) and I ran into a lot of issues! So I wrote this tutorial in order to help you to start building your own electron app and configuring Webpack together with Bootstrap, FontAwesome and JQuery.&lt;/p&gt;

&lt;p&gt;I hope this tutorial will be a good basis for you to start with! 😊&lt;/p&gt;

&lt;p&gt;👀 Already wanna see the final result? Or a production ready app built with the process described below? Go and check &lt;a href="https://aliceandbob.io" rel="noopener noreferrer"&gt;aliceandbob.io&lt;/a&gt; or head to the &lt;a href="https://github.com/aliceandbob-io/aliceandbob-desktop" rel="noopener noreferrer"&gt;GitHub's page&lt;/a&gt; of the project. &lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&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%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/aliceandbob-io" rel="noopener noreferrer"&gt;
        aliceandbob-io
      &lt;/a&gt; / &lt;a href="https://github.com/aliceandbob-io/aliceandbob-desktop" rel="noopener noreferrer"&gt;
        aliceandbob-desktop
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      🔐 A free, light and easy to use desktop tool to generate PGP key pairs, encrypt and decrypt messages.
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;For the repository of the sample app we will build together, go, fork and star the repo below:&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&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%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/theolazian" rel="noopener noreferrer"&gt;
        theolazian
      &lt;/a&gt; / &lt;a href="https://github.com/theolazian/electron-webpack-bootstrap-fontawesome-jquery" rel="noopener noreferrer"&gt;
        electron-webpack-bootstrap-fontawesome-jquery
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      🤓💻 A sample electron app built with Webpack, Bootstrap, FontAwesome and JQuery 
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;As you may have seen, I chose a quite descriptive name for this app 😉&lt;/p&gt;




&lt;h1&gt;
  
  
  🗺️ Our objectives
&lt;/h1&gt;

&lt;p&gt;For this tuto, we will create an electron app from scratch. Electron allows us to build cross-platform desktop apps with JavaScript, HTML, and CSS.&lt;/p&gt;

&lt;p&gt;We will also add:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bootstrap 5, &lt;/li&gt;
&lt;li&gt;FontAwesome 5, &lt;/li&gt;
&lt;li&gt;JQuery, as well as &lt;/li&gt;
&lt;li&gt;Custom &lt;code&gt;scss&lt;/code&gt; and &lt;code&gt;js&lt;/code&gt; files to our project. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The whole project will be bundled with &lt;a href="https://webpack.js.org/" rel="noopener noreferrer"&gt;Webpack&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;For that, we will need to configure Webpack and add loaders to it in order to process our images, &lt;code&gt;js&lt;/code&gt; and &lt;code&gt;scss&lt;/code&gt; files. I'll explain everything later on!&lt;/p&gt;

&lt;p&gt;Finally, we will bundle our app with Webpack and build it for Windows, MacOs or Linux.&lt;/p&gt;

&lt;p&gt;There are plenty of tutos on the Internet, but I tried to reach a clean process of doing things in order not to get (too much) lost. 😉&lt;/p&gt;




&lt;h1&gt;
  
  
  ⚙️ Prerequisites
&lt;/h1&gt;

&lt;p&gt;Depending on your system, starting an electron app might be a bit complicated and you may need to install packages and dependencies in order to make it run. But not worries, it's worth it! &lt;/p&gt;

&lt;p&gt;I am on Windows and I use WSL (version 2), which runs Ubuntu-20.04. I will show you a few tips for people in the same situation along the way.&lt;/p&gt;

&lt;p&gt;First of all, you may want to install &lt;code&gt;node&lt;/code&gt; and &lt;code&gt;yarn&lt;/code&gt;, so head to the &lt;a href="https://nodejs.org/en/download/" rel="noopener noreferrer"&gt;download page&lt;/a&gt; of Node and install the version you need. &lt;/p&gt;

&lt;p&gt;Then, install &lt;code&gt;yarn&lt;/code&gt; as follows:&lt;/p&gt;

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

npm install --global yarn


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

&lt;/div&gt;

&lt;h1&gt;
  
  
  🌱 Step by Step initialization
&lt;/h1&gt;

&lt;p&gt;Lets's go step by step together through the process! &lt;/p&gt;
&lt;h2&gt;
  
  
  1️. Electron-forge
&lt;/h2&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%2Fi%2Ff3cslf4gua6jvfx6tpmu.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%2Fi%2Ff3cslf4gua6jvfx6tpmu.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.electronforge.io/" rel="noopener noreferrer"&gt;Electron-forge&lt;/a&gt; is a complete solution to package and build a ready-for-distribution Electron app. So let's use it!&lt;/p&gt;
&lt;h2&gt;
  
  
  2. Creating the app
&lt;/h2&gt;

&lt;p&gt;Initializing a new project with Electron-forge is quite straight forward. You only need to run &lt;code&gt;yarn create electron-app my-app&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;But remember&lt;/strong&gt;, we want to use Webpack and Electron-forge actually gives us a boilerplate for that. So do not hesitate and start your project by running the following command:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

yarn create electron-app my-new-app --template=webpack


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

&lt;/div&gt;
&lt;p&gt;You can replace &lt;code&gt;my-new-app&lt;/code&gt; by the name you want.&lt;/p&gt;

&lt;p&gt;Then, run &lt;code&gt;cd my-new-app&lt;/code&gt; to move into your project folder.&lt;/p&gt;
&lt;h2&gt;
  
  
  3. Running the project
&lt;/h2&gt;

&lt;p&gt;Here, you just need to run the following command to start running your first electron app! 🚀&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

npm start


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

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

yarn start


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

&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Hint&lt;/strong&gt;: On WSL, you may encountered a futex utility error. In that case, what works for me was installing electron specifically from the PowerShell command line tool like so:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Head to your project directory from the PowerShell command line tool &lt;code&gt;cd path/to/your/repo&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;npm install --save-dev electron&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;Go back to the WSL command line running Ubuntu and run again &lt;code&gt;yarn start&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You might have to do that everytime you install new packages to your electron app... Otherwise you can install packages through the PowerShell command, and do the rest of the work on WSL. A bit tiresome, I confess, but it works 😬&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now that we created an electron app with electron-forge webpack installer, the Webpack plugin has been added automatically to our app. Find this line in &lt;code&gt;package.json&lt;/code&gt;: &lt;code&gt;@electron-forge/plugin-webpack&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If not (which would be weird!), go ahead and install it by yourself:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

yarn add @electron-forge/plugin-webpack --dev


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

&lt;/div&gt;
&lt;p&gt;Thanks to this plugin, we can use the standard Webpack tooling to compile both your main process code and your renderer process code.&lt;/p&gt;

&lt;p&gt;As per the electron-forge documentation, your &lt;code&gt;main&lt;/code&gt; entry in your &lt;code&gt;package.json&lt;/code&gt; file needs to point at "./.webpack/main":&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 json
// package.json

{
  ...
  "main": "./.webpack/main",
  ...
}


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

&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;Note that you might need to add the "." at the begining of the line if not already done.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And we will add the following in our &lt;code&gt;main.js&lt;/code&gt; file:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="c1"&gt;// main.js&lt;/span&gt;

&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mainWindow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;BrowserWindow&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="c1"&gt;// add these 3 lines below&lt;/span&gt;
  &lt;span class="na"&gt;webPreferences&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;preload&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;MAIN_WINDOW_PRELOAD_WEBPACK_ENTRY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;


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

&lt;/div&gt;
&lt;p&gt;Now we're free to move on! 🐌&lt;/p&gt;


&lt;h1&gt;
  
  
  🗂️ Structuring the app
&lt;/h1&gt;

&lt;p&gt;At this point, your app tree should look like that:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 bash
📁 my-new-app
├── .git
├── .webpack
├── node_modules
├── src
│   ├── index.css
│   ├── index.html
│   ├── main.js
│   └── renderer.js
├── package-lock.json
├── package.json
├── webpack.main.config.js
├── webpack.renderer.config.js
├── webpack.rules.js
└── yarn.lock


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

&lt;/div&gt;
&lt;p&gt;The &lt;code&gt;.webpack&lt;/code&gt; folder will contain the bundle application and will be rebuild each time you run &lt;code&gt;yarn start&lt;/code&gt; and when building the app.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;src&lt;/code&gt; folder contains the css, html, js files and assets of your app &lt;em&gt;before&lt;/em&gt; being handled by Webpack.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;node_modules&lt;/code&gt; folder contains all the packages you will install as well as all the packages your app needs to run properly.&lt;/p&gt;

&lt;p&gt;The other files are basically config files and we will have to give a first look to them.&lt;/p&gt;

&lt;p&gt;What I like is moving the configuration of electron-forge to its own partial file and calling it into my &lt;code&gt;package.json&lt;/code&gt; file. It is clearer and cleaner.&lt;/p&gt;

&lt;p&gt;In &lt;code&gt;package.json&lt;/code&gt;, change the &lt;code&gt;config forge&lt;/code&gt; name value to the following: &lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 JSON
// package.json

{
  ...
  "config": {
      "forge": "./forge.config.js"
  },
  ...
}


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

&lt;/div&gt;
&lt;p&gt;Then create a &lt;code&gt;forge.config.js&lt;/code&gt; file in the root folder of your app and move the whole packager config, makers and plugins:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 JS
// forge.config.js

const path = require('path');

module.exports = {
  packagerConfig: {},
  makers: [
    {
      name: "@electron-forge/maker-squirrel",
      config: {}
    },
    {
      name: "@electron-forge/maker-zip",
      platforms: [
        "darwin"
      ]
    },
    {
      name: "@electron-forge/maker-deb",
      config: {}
    },
    {
      name: "@electron-forge/maker-rpm",
      config: {}
    }
  ],
  plugins: [
    [
      "@electron-forge/plugin-webpack",
      {
        mainConfig: "./webpack.main.config.js",
        renderer: {
          config: "./webpack.renderer.config.js",
          entryPoints: [
            {
              html: "./src/index.html",
              js: "./src/renderer.js",
              name: "main_window"
            }
          ]
        }
      }
    ]
  ]
}



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

&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;Note that I changed the config from a &lt;code&gt;.json&lt;/code&gt; file to a &lt;code&gt;.js&lt;/code&gt; file. This is the reason why I updated the file and deleting the &lt;code&gt;"name"&lt;/code&gt; quoting marks.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We will complete it later, depending on our makers and plugings. I'll explain all of that!&lt;/p&gt;

&lt;p&gt;Electron-forge did everything for us so that we don't have to do it! &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;main.js&lt;/code&gt; is where you put all the Electron app main process like the rendering of the window, the menus, etc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;renderer.js&lt;/code&gt; is where you gather and call all related styles, js, scss frameworks and libraries.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;webpack.main.config.js&lt;/code&gt; for the main logic of webpack&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;webpack.rules.js&lt;/code&gt; is where we will declare our loaders which will process js files for example&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;webpack.renderer.config.js&lt;/code&gt; for our loaders which will process scss and assets files&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now, to keep it clean, we wil create specific folders for styles, javascript and images files.&lt;/p&gt;

&lt;p&gt;Under the &lt;code&gt;src&lt;/code&gt; folder, let's create a &lt;code&gt;scss&lt;/code&gt;, &lt;code&gt;images&lt;/code&gt; and &lt;code&gt;js&lt;/code&gt; folders. &lt;/p&gt;

&lt;p&gt;We will move our &lt;code&gt;index.css&lt;/code&gt; to the &lt;code&gt;scss&lt;/code&gt; folder. For the moment, we do not change the file extension of our &lt;code&gt;index.css&lt;/code&gt;, we'll do it a bit later.&lt;/p&gt;

&lt;p&gt;Now, our tree looks like the following:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 bash
📁 my-new-app
├── .git
├── .webpack
├── node_modules
├── src
│   ├── images
│   ├── js
│   └── scss
│       └── index.css
│   ├── index.html
│   ├── main.js
│   └── renderer.js
├── forge.config.js
├── package-lock.json
├── package.json
├── webpack.main.config.js
├── webpack.renderer.config.js
├── webpack.rules.js
└── yarn.lock


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

&lt;/div&gt;

&lt;h1&gt;
  
  
  🌌 Installing and configuring loaders
&lt;/h1&gt;

&lt;p&gt;Because your app will use different file extensions and language formats, we need loaders which will compile those files into readable JavaScript and CSS. &lt;/p&gt;

&lt;p&gt;When compiling, Webpack will first call the loaders and then bundle all our compiled files into a single &lt;code&gt;.js&lt;/code&gt;, which is going to be added to our &lt;code&gt;index.html&lt;/code&gt; automatically.&lt;/p&gt;

&lt;p&gt;So, let's start! 🔥&lt;/p&gt;
&lt;h2&gt;
  
  
  1. Webpack
&lt;/h2&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%2Fi%2Fkpqbxdiin5w9qtiucfea.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%2Fi%2Fkpqbxdiin5w9qtiucfea.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Because we used the electron-forge template for Webpack, the latter is already installed. However, if you didn't use this template, you need to install it. For the purpose of this tuto, I use &lt;code&gt;webpack v4&lt;/code&gt;, which is the one installed by default by electron-forge at the moment:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

yarn add --dev webpack@4.44.2


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

&lt;/div&gt;
&lt;p&gt;I use specifically this version so that it meets all my loaders required dependencies. I do not use Webpack new v5 because it still raises errors with the electron-forge template.&lt;/p&gt;
&lt;h2&gt;
  
  
  2. JS files
&lt;/h2&gt;

&lt;p&gt;We need to tell webpack to handle all our &lt;code&gt;.js&lt;/code&gt; files. And for that we will add loaders to our webpack.rules.js. &lt;/p&gt;

&lt;p&gt;We will use &lt;a href="https://babeljs.io/" rel="noopener noreferrer"&gt;Babel&lt;/a&gt;, which is probably the main JavaScript compiler to convert ECMAScript 2015+ code into a compatible version of JavaScript for all browsers or environments. &lt;/p&gt;

&lt;p&gt;Let's install the necessary loaders and preset. The setup guide is available on the &lt;a href="https://babeljs.io/setup" rel="noopener noreferrer"&gt;babel page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Run the following command:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

yarn add --dev @babel/core @babel/preset-env babel-loader


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

&lt;/div&gt;
&lt;p&gt;And then, we add the necessary configuration like so:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 JS
// webpack.rules.js

...
{
    test: /\.m?js$/,
    exclude: /(node_modules)/,
    use: {
      loader: 'babel-loader',
      options: {
        presets: ['@babel/preset-env']
      }
    }
  },
...


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

&lt;/div&gt;
&lt;h2&gt;
  
  
  3. scss files
&lt;/h2&gt;

&lt;p&gt;We will do the same with style files.&lt;/p&gt;

&lt;p&gt;It is important to handle scss files because Bootstrap uses Node Sass to compile Sass source files into CSS files.&lt;/p&gt;

&lt;p&gt;So, as you may probably have understood, we will install sass and its loader. Here is the &lt;a href="https://github.com/webpack-contrib/sass-loader" rel="noopener noreferrer"&gt;GitHub's page&lt;/a&gt; of the sass-loader will all necessary information! &lt;/p&gt;

&lt;p&gt;Let's install everything:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

yarn add --dev sass sass-loader@10.1.1


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

&lt;/div&gt;
&lt;p&gt;Same as before, I use a specific version for the loader as the lastest version breaks with the electron-forge template we used.&lt;/p&gt;

&lt;p&gt;And now we can call sass in our webpack config file:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 JS
// webpack.renderer.config.js

const rules = require('./webpack.rules');

rules.push(
  {
    test: /\.(scss)$/, // all scss files will be handled
    // Use loaders in that specific reverse order
    use: [
      {
        loader: 'style-loader',
      },
      {
        loader: 'css-loader',
      },
      {
        loader: 'sass-loader'
      }
    ]
  },
);

module.exports = {
  // Put your normal webpack config below here
  module: {
    rules,
  },
};
...


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

&lt;/div&gt;
&lt;h2&gt;
  
  
  4. Images
&lt;/h2&gt;

&lt;p&gt;If you want to add images, you should follow the same process.&lt;br&gt;
So first, we need the necessary loaders, and then, we configure Webpack.&lt;/p&gt;

&lt;p&gt;As for the loaders, we need file-loader. The file-loader resolves import/require() on a file into a url and emits the file into the output directory.&lt;/p&gt;

&lt;p&gt;Let's install it:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

yarn add --dev file-loader


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

&lt;/div&gt;
&lt;p&gt;And then, we configure Webpack:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="c1"&gt;// webbpack.renderer.config.js&lt;/span&gt;

&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;test&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\.(&lt;/span&gt;&lt;span class="sr"&gt;png|jpe&lt;/span&gt;&lt;span class="se"&gt;?&lt;/span&gt;&lt;span class="sr"&gt;g|gif|ico|svg&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="sr"&gt;$/&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// We will handle of these file extensions&lt;/span&gt;
    &lt;span class="nx"&gt;use&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;loader&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;file-loader&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;


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

&lt;/div&gt;
&lt;p&gt;Now we will be able to call a file as a background image for example and Webpack will handle it to render it when you start your app. We will try it in a moment!&lt;/p&gt;


&lt;h1&gt;
  
  
  🗂️🗂️ Some organization again!
&lt;/h1&gt;

&lt;p&gt;As you may have understand now, I like having my project folder clean. So I like organising my scss files as follows. It is also a good habit before adding bootstrap and other librairies.&lt;/p&gt;

&lt;p&gt;Under the &lt;code&gt;scss&lt;/code&gt; folder, we will rename our &lt;code&gt;index.css&lt;/code&gt; to &lt;code&gt;app.scss&lt;/code&gt;. As we installed the &lt;code&gt;sass-loader&lt;/code&gt;, there is no problem here anymore! This file gonna be the entry point of all our scss files. So it will call our files and then, it is itself called by our &lt;code&gt;renderer.js&lt;/code&gt;. So we need to tell Webpack about these changes!&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 JS
// renderer.js

console.log('👋 This message is being logged by "renderer.js", included via webpack');

import './scss/app.scss'; // just change this line here.


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

&lt;/div&gt;
&lt;p&gt;Then, from &lt;code&gt;app.scss&lt;/code&gt;, we can call any custom file we may create! So, for example, let's create a &lt;code&gt;_style.scss&lt;/code&gt; file in the &lt;code&gt;scss&lt;/code&gt; folder and move the existing style which lives in &lt;code&gt;app.scss&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note the &lt;code&gt;_&lt;/code&gt; at the begining.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 scss
// _style.scss

body {
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  margin: auto;
  max-width: 38rem;
  padding: 2rem;
  background-color: pink; // yeah, I like to add some flashy stuff like that just to make it clear if this file has been correctly handled when I will start the app!
}


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

&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;Don't forget to delete the body style in &lt;code&gt;app.scss&lt;/code&gt; then.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And now, we just have to call it in &lt;code&gt;app.scss&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 scss
// app.scss

@import "style"; // No _ here, type directly the name of the file


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

&lt;/div&gt;
&lt;p&gt;Now, if your run &lt;code&gt;yarn start&lt;/code&gt;, everything should perfectly work with a beautiful pink background!&lt;/p&gt;

&lt;p&gt;Remember that we also installed a &lt;code&gt;file-loader&lt;/code&gt; for our images? What about trying it now?!&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight scss"&gt;&lt;code&gt;

&lt;span class="c1"&gt;// _style.scss&lt;/span&gt;

&lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;apple-system&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;BlinkMacSystemFont&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"Segoe UI"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Roboto&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Helvetica&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Arial&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;38rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;pink&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Add the line below and don't forget to add an image in your images folder!&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sx"&gt;url('../images/electron-forge.png')&lt;/span&gt; &lt;span class="nb"&gt;no-repeat&lt;/span&gt; &lt;span class="nb"&gt;fixed&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;120px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


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

&lt;/div&gt;
&lt;p&gt;Let's run &lt;code&gt;yarn start&lt;/code&gt; and see the result! 👌&lt;/p&gt;

&lt;p&gt;We're almost there! Now everything is ready and we can install Bootstrap and FontAwesome. &lt;/p&gt;

&lt;p&gt;You will see that a few more configuration is needed for that, but we did the most important (and complicated!) work already! 💪&lt;/p&gt;


&lt;h1&gt;
  
  
  💜 Installing Bootstrap
&lt;/h1&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%2Fi%2Fd46a31csmbrbjavj26mq.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%2Fi%2Fd46a31csmbrbjavj26mq.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Whether you decide to install Bootstrap 5 or any other version, Bootstrap provides us with a &lt;a href="https://getbootstrap.com/docs/5.0/getting-started/webpack/" rel="noopener noreferrer"&gt;documentation&lt;/a&gt; to help us achieve so. So do not hesitate to give an eye to it.&lt;/p&gt;

&lt;p&gt;Let's add Bootstrap 5! ✨&lt;/p&gt;

&lt;p&gt;First, we need to install Bootstrap in our &lt;strong&gt;dependencies&lt;/strong&gt;, and not the devDependencies.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

yarn add bootstrap@next


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

&lt;/div&gt;
&lt;p&gt;In order to work, Bootstrap needs additional librairies called &lt;code&gt;Popper&lt;/code&gt;, &lt;a href="https://github.com/postcss/postcss" rel="noopener noreferrer"&gt;postcss and its loader&lt;/a&gt; as well as the &lt;code&gt;autoprefixer&lt;/code&gt; loader:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

yarn add @popperjs/core &amp;amp;&amp;amp; yarn add --dev autoprefixer postcss postcss-loader@4.2.0


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

&lt;/div&gt;
&lt;p&gt;As per the &lt;a href="https://getbootstrap.com/docs/5.0/getting-started/webpack/" rel="noopener noreferrer"&gt;Bootstrap documentation&lt;/a&gt;, the webpack &lt;code&gt;postcss-loader&lt;/code&gt; needs &lt;code&gt;autoprefixer&lt;/code&gt; we just installed. So let's add the necessary loader and options to our &lt;code&gt;webpack.renderer.config.js&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 js
// webpack.renderer.config.js

...
{
  loader: 'postcss-loader',
  options: {
    postcssOptions: {
      plugins: function () {
        return [
          require('autoprefixer')
        ];
      }
    }
  }
},
...


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

&lt;/div&gt;
&lt;p&gt;Then, import the Bootstrap JavaScript into your app by adding this line to your renderer.js:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="c1"&gt;// renderer.js &lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;bootstrap&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./scss/app.scss&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;


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

&lt;/div&gt;
&lt;p&gt;You also need to import the style files of Bootstrap. We will import it in our &lt;code&gt;app.scss&lt;/code&gt;. Remember? I told you that this file will call all our styles:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 scss
// app.scss

@import "~bootstrap/scss/bootstrap";
@import "style";


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

&lt;/div&gt;
&lt;p&gt;Lastly, let's integrate some Bootstrap components to our &lt;code&gt;index.html&lt;/code&gt; file in order to see if everything works fine:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;

// index.html

...
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"row"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"col-4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"list-group"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"list-tab"&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"tablist"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"list-group-item list-group-item-action active"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"list-electron-list"&lt;/span&gt; &lt;span class="na"&gt;data-bs-toggle=&lt;/span&gt;&lt;span class="s"&gt;"list"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#list-electron"&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"tab"&lt;/span&gt; &lt;span class="na"&gt;aria-controls=&lt;/span&gt;&lt;span class="s"&gt;"home"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Electron&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"list-group-item list-group-item-action"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"list-app-list"&lt;/span&gt; &lt;span class="na"&gt;data-bs-toggle=&lt;/span&gt;&lt;span class="s"&gt;"list"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#list-app"&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"tab"&lt;/span&gt; &lt;span class="na"&gt;aria-controls=&lt;/span&gt;&lt;span class="s"&gt;"profile"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;my-sample-app&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"list-group-item list-group-item-action"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"list-aliceandbob-list"&lt;/span&gt; &lt;span class="na"&gt;data-bs-toggle=&lt;/span&gt;&lt;span class="s"&gt;"list"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#list-aliceandbob"&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"tab"&lt;/span&gt; &lt;span class="na"&gt;aria-controls=&lt;/span&gt;&lt;span class="s"&gt;"messages"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;aliceandbob.io&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"list-group-item list-group-item-action"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"list-github-list"&lt;/span&gt; &lt;span class="na"&gt;data-bs-toggle=&lt;/span&gt;&lt;span class="s"&gt;"list"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#list-github"&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"tab"&lt;/span&gt; &lt;span class="na"&gt;aria-controls=&lt;/span&gt;&lt;span class="s"&gt;"settings"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;My Github&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"col-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"tab-content"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"nav-tabContent"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"tab-pane fade show active"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"list-electron"&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"tabpanel"&lt;/span&gt; &lt;span class="na"&gt;aria-labelledby=&lt;/span&gt;&lt;span class="s"&gt;"list-electron-list"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        Check &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://www.electronjs.org/"&lt;/span&gt; &lt;span class="na"&gt;target=&lt;/span&gt;&lt;span class="s"&gt;"_blank"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Electron website&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt; to discover even more about all the possibilities! 🙀
      &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"tab-pane fade"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"list-app"&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"tabpanel"&lt;/span&gt; &lt;span class="na"&gt;aria-labelledby=&lt;/span&gt;&lt;span class="s"&gt;"list-app-list"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        Here you can find the &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://github.com/theolazian/my-sample-app"&lt;/span&gt; &lt;span class="na"&gt;target=&lt;/span&gt;&lt;span class="s"&gt;"_blank"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;link&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt; to my-sample-app we just created thanks to the tutorial! 🤓
      &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"tab-pane fade"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"list-aliceandbob"&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"tabpanel"&lt;/span&gt; &lt;span class="na"&gt;aria-labelledby=&lt;/span&gt;&lt;span class="s"&gt;"list-aliceandbob-list"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        Wanna see a production ready application build with Electron? Go and check &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://aliceandbob.io/"&lt;/span&gt; &lt;span class="na"&gt;target=&lt;/span&gt;&lt;span class="s"&gt;"_blank"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;aliceandbob.io&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;! 🚀
      &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"tab-pane fade"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"list-github"&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"tabpanel"&lt;/span&gt; &lt;span class="na"&gt;aria-labelledby=&lt;/span&gt;&lt;span class="s"&gt;"list-github-list"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        and here is my &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://github.com/theolazian"&lt;/span&gt; &lt;span class="na"&gt;target=&lt;/span&gt;&lt;span class="s"&gt;"_blank"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Github&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt; page 🙏
      &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
...


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

&lt;/div&gt;
&lt;p&gt;Note that if you want to change the default variable of Bootstrap, you need to call your custom variables &lt;em&gt;before&lt;/em&gt; you import Bootstrap in our &lt;code&gt;app.scss&lt;/code&gt;. Let's see an example!&lt;/p&gt;

&lt;p&gt;First, create a &lt;code&gt;_custom_bootstrap.scss&lt;/code&gt; file in our &lt;code&gt;scss&lt;/code&gt; folder, and change some of Bootstrap variables:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 scss
// _custom_bootstrap.scss

$theme-colors: (
  "primary": #e5e619,
  "secondary": #ff468b,
  "info": #00e3ff
);


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

&lt;/div&gt;
&lt;p&gt;And then, import it in our &lt;code&gt;app.scss&lt;/code&gt; in order to add it to our bundle file:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 scss
// app.scss

@import "custom_bootstrap"; // Remember, without the "_"
@import "~bootstrap/scss/bootstrap";
@import "style";


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

&lt;/div&gt;
&lt;p&gt;Now, run &lt;code&gt;yarn start&lt;/code&gt; to see if everything works! 🎆🌟💫&lt;/p&gt;


&lt;h1&gt;
  
  
  🏁 Installing FontAwesome
&lt;/h1&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%2Fi%2F5c65t3kpzsmlmotbc95p.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%2Fi%2F5c65t3kpzsmlmotbc95p.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As per the &lt;a href="https://fontawesome.com/how-to-use/on-the-web/setup/using-package-managers" rel="noopener noreferrer"&gt;FontAwesome documentation&lt;/a&gt;, you need to install it in the &lt;strong&gt;dependencies&lt;/strong&gt; of your app. So, first, run the following command:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

yarn add @fortawesome/fontawesome-free


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

&lt;/div&gt;
&lt;p&gt;Once it is installed, you need to add it to your &lt;code&gt;renderer.js&lt;/code&gt; file to import it in your bundle file:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="c1"&gt;// renderer.js&lt;/span&gt;

&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;bootstrap&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./scss/app.scss&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@fortawesome/fontawesome-free/js/all&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;


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

&lt;/div&gt;
&lt;p&gt;Now, you can add FontAwesome icons to your html file! Let's try it now:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;

// index.html
...
&lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;💖 Hello World!&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&amp;lt;i&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"fas fa-atom"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/i&amp;gt;&lt;/span&gt; Welcome to your Electron application.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
...


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

&lt;/div&gt;
&lt;p&gt;And now, &lt;code&gt;yarn start&lt;/code&gt;, et voilà! 🎇👌&lt;/p&gt;


&lt;h1&gt;
  
  
  💲 Installing JQuery
&lt;/h1&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%2Fi%2F69vkpwggnj16mmy2p7g9.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%2Fi%2F69vkpwggnj16mmy2p7g9.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's say we want to use JQuery in our custom &lt;code&gt;js&lt;/code&gt; files. We will first need to add JQuery and then create our custom file to use it.&lt;/p&gt;

&lt;p&gt;In order to use JQuery, Webpack offers us a really simple solution. We just need to install JQuery in our dependencies and then use the Provide plugin of Webpack to easily being able to call JQuery everywhere in our app.&lt;/p&gt;

&lt;p&gt;First, run this command to install JQuery:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

yarn add jquery


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

&lt;/div&gt;
&lt;p&gt;And then, let's defined &lt;code&gt;webpack&lt;/code&gt; in our &lt;code&gt;webpack.renderer.config.js&lt;/code&gt; in order to use its ProvidePlugin and then to call it in the module.exports part:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="c1"&gt;// webpack.renderer.config.js&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;webpack&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;webpack&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;

&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Put your normal webpack config below here&lt;/span&gt;
  &lt;span class="na"&gt;module&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;webpack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ProvidePlugin&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;$&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;jquery&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;jQuery&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;jquery&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;


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

&lt;/div&gt;
&lt;p&gt;Now that it's done, we will create a custom js file in our &lt;code&gt;js&lt;/code&gt; folder and we will use a simple JQuery call:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="c1"&gt;// js/index.js&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;👋 This message is being logged by 'index.js', included via webpack&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Just to make sure when I start the app that the file has been correctly handled by Webpack;&lt;/span&gt;

&lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;body&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;addClass&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bg-info&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// We now change the background-color thanks to Bootstrap classes and JQuery&lt;/span&gt;


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

&lt;/div&gt;
&lt;p&gt;And of course, we need to tell Webpack to include this new file in the bundle. So for that, we need to add &lt;code&gt;index.js&lt;/code&gt; to &lt;code&gt;renderer.js&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="c1"&gt;// renderer.js&lt;/span&gt;

&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./js/index.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;


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

&lt;/div&gt;
&lt;p&gt;We now run &lt;code&gt;yarn start&lt;/code&gt;, and everything works great! 🤯&lt;/p&gt;


&lt;h1&gt;
  
  
  🏗️ Packaging and building our app
&lt;/h1&gt;

&lt;p&gt;We already did a lot!&lt;/p&gt;

&lt;p&gt;So what about packaging our app and building it in order make it installable to Windows, MacOs or Linux systems?&lt;/p&gt;

&lt;p&gt;Electron-forge provides us with a simple command to do so:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

yarn make


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

&lt;/div&gt;
&lt;p&gt;Here, you can also choose, the platform and the architecture:&lt;/p&gt;
&lt;h2&gt;
  
  
  Plateforms
&lt;/h2&gt;

&lt;p&gt;You can pass the following params to the &lt;code&gt;make&lt;/code&gt; command:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Windows: &lt;code&gt;--platform=win32&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;MacOs: &lt;code&gt;--platform=darwin&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Linux: &lt;code&gt;--platform=linux&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Architectures
&lt;/h2&gt;

&lt;p&gt;And depending on the architecture you want, you can pass either &lt;code&gt;--arch=ia32&lt;/code&gt; or &lt;code&gt;--arch=x64&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Other options are available. Look at the &lt;a href="https://electron.github.io/electron-packager/master/interfaces/electronpackager.options.html#arch" rel="noopener noreferrer"&gt;electron-packager API&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  A bit more configuration
&lt;/h2&gt;

&lt;p&gt;⚠️ You can get some errors and warning here! It's because you cannot build everything from any platforms. Let's say you want to build a &lt;code&gt;.app&lt;/code&gt; for MacOs, well, this can be done only from a MacOs system.. &lt;/p&gt;

&lt;p&gt;But no worries, you should be able to build plenty of apps! Just remember that depending on your machine, you may need to install packages and apps. &lt;/p&gt;

&lt;p&gt;You can also comment this post with your issue and people might come back to you with good pieces of advices! 🤝&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;👁️ I also recommend you to go on the &lt;a href="https://www.electronforge.io/config/makers" rel="noopener noreferrer"&gt;makers page&lt;/a&gt; of electron-forge to see the required tools.&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;I leave you here the link to this template, and also a link to a production ready app. Do not hesitate as there is a bit more configuration which can be useful for you, notably for the build process! &lt;/p&gt;

&lt;p&gt;You can go on &lt;a href="https://aliceandbob.io" rel="noopener noreferrer"&gt;aliceandbob.io&lt;/a&gt; or check to Github page below:&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&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%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/aliceandbob-io" rel="noopener noreferrer"&gt;
        aliceandbob-io
      &lt;/a&gt; / &lt;a href="https://github.com/aliceandbob-io/aliceandbob-desktop" rel="noopener noreferrer"&gt;
        aliceandbob-desktop
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      🔐 A free, light and easy to use desktop tool to generate PGP key pairs, encrypt and decrypt messages.
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;And if you want to fork the sample app we made all together, you can find it here:&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&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%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/theolazian" rel="noopener noreferrer"&gt;
        theolazian
      &lt;/a&gt; / &lt;a href="https://github.com/theolazian/electron-webpack-bootstrap-fontawesome-jquery" rel="noopener noreferrer"&gt;
        electron-webpack-bootstrap-fontawesome-jquery
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      🤓💻 A sample electron app built with Webpack, Bootstrap, FontAwesome and JQuery 
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;





&lt;p&gt;And here it is folks! I hope you didn't encountered (too many) issues! 😉 Otherwise, let me know in the comments below and I might update this tuto in accordance!&lt;/p&gt;

&lt;p&gt;If you liked it, don't hesitate to leave a comment or a like! 🙏&lt;/p&gt;

&lt;p&gt;Looking forward to seeing all your electron apps 😉&lt;/p&gt;

&lt;p&gt;Thanks for reading and congrats for your work! 🏆🎉&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>webpack</category>
      <category>tutorial</category>
      <category>javascript</category>
    </item>
    <item>
      <title>I created a light and easy to use PGP encryption tool 🔐</title>
      <dc:creator>Théo</dc:creator>
      <pubDate>Mon, 07 Dec 2020 08:49:34 +0000</pubDate>
      <link>https://dev.to/theola/aliceandbob-io-creating-a-light-and-easy-to-use-pgp-encryption-tool-158f</link>
      <guid>https://dev.to/theola/aliceandbob-io-creating-a-light-and-easy-to-use-pgp-encryption-tool-158f</guid>
      <description>&lt;h1&gt;
  
  
  &lt;strong&gt;&lt;a href="https://aliceandbob.io/" rel="noopener noreferrer"&gt;aliceandbob.io&lt;/a&gt;&lt;/strong&gt; - a PGP encryption tool
&lt;/h1&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&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%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/aliceandbob-io" rel="noopener noreferrer"&gt;
        aliceandbob-io
      &lt;/a&gt; / &lt;a href="https://github.com/aliceandbob-io/aliceandbob" rel="noopener noreferrer"&gt;
        aliceandbob
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      🔐 A free, light and easy to use client-side tool to generate PGP key pairs, encrypt and decrypt messages.
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;I once needed to generate a PGP key pair and I thought that I could maybe create my own tool in order to do so, so I made &lt;a href="https://aliceandbob.io/" rel="noopener noreferrer"&gt;aliceandbob.io&lt;/a&gt;! 🚀&lt;/p&gt;

&lt;p&gt;To make it short, &lt;a href="https://aliceandbob.io/" rel="noopener noreferrer"&gt;aliceandbob.io&lt;/a&gt; is a free, light and easy-to-use PGP encryption tool based on OpenPGP.js, an open source implementation of openPGP.&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%2Fraw.githubusercontent.com%2Faliceandbob-io%2Faliceandbob%2Fmaster%2Fpublic%2Fbrowser-screenshot-1.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%2Fraw.githubusercontent.com%2Faliceandbob-io%2Faliceandbob%2Fmaster%2Fpublic%2Fbrowser-screenshot-1.png" alt="aliceandbob.io screenshot"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Let's have a look to the available and upcoming features! ⤵️&lt;/p&gt;

&lt;h3&gt;
  
  
  🌌 Features currently available
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Encryption features
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;🗝️ generate PGP key pairs (&lt;a href="https://en.wikipedia.org/wiki/Elliptic-curve_cryptography" rel="noopener noreferrer"&gt;elliptic-curve cryptography(ECC)&lt;/a&gt;),&lt;/li&gt;
&lt;li&gt;🔒 encrypt messages with a public PGP key, and&lt;/li&gt;
&lt;li&gt;🔓 decrypt messages with your private key.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Available params for encryption
&lt;/h4&gt;

&lt;p&gt;Public keys are currently generated with the following params:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📧 your email, and&lt;/li&gt;
&lt;li&gt;🤐 your passphrase.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Additional features
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;📥 download your keys in &lt;code&gt;.txt&lt;/code&gt; format, and&lt;/li&gt;
&lt;li&gt;📎  copy/past your keys easily.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🛠️ Tech used
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;HTML &amp;amp; CSS - the basis of the web app&lt;/li&gt;
&lt;li&gt;Ruby &amp;amp; Ruby on rails - as I think it would be the easiest way to implement further back-end features and it is currently my favorite web-app framework &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://stimulusjs.org/" rel="noopener noreferrer"&gt;Stimulus.js&lt;/a&gt; - a great Javascript framework, simple and modern&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📚 Library
&lt;/h3&gt;

&lt;p&gt;For this project, I decided to rely on OpenPGP.js, a JavaScript implementation of the OpenPGP protocol. You can find out more on &lt;a href="https://openpgpjs.org/" rel="noopener noreferrer"&gt;openpgpjs.org&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  🌱 Future developments
&lt;/h3&gt;

&lt;p&gt;At this stage, no need to install anything, the tool is web-based and the encryption logic is fully client-side. ✌️&lt;/p&gt;

&lt;p&gt;Of course, at some point, a desktop implementation would be great as it stays the most secure way to generate PGP keys! &lt;/p&gt;

&lt;p&gt;The web app is regularly updated and the possibility to choose the type of elliptic curve for encryption will be soon added, as well as the possibility to upload your public keys to &lt;a href="https://en.wikipedia.org/wiki/Key_server_(cryptographic)" rel="noopener noreferrer"&gt;HKP servers&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  🍰 &lt;a href="https://aliceandbob.io/" rel="noopener noreferrer"&gt;aliceandbob.io&lt;/a&gt; is open source!
&lt;/h3&gt;

&lt;p&gt;This project is open source, so feel free to take a look at the Github repository, watch it, fork it, star it! 🌟&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&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%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/aliceandbob-io" rel="noopener noreferrer"&gt;
        aliceandbob-io
      &lt;/a&gt; / &lt;a href="https://github.com/aliceandbob-io/aliceandbob" rel="noopener noreferrer"&gt;
        aliceandbob
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      🔐 A free, light and easy to use client-side tool to generate PGP key pairs, encrypt and decrypt messages.
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  📣 Spread the word!
&lt;/h3&gt;

&lt;p&gt;Don't hesitate to talk about &lt;a href="https://aliceandbob.io/" rel="noopener noreferrer"&gt;aliceandbob.io&lt;/a&gt; around you, the more the merrier, don't you think!? 😉&lt;/p&gt;




&lt;p&gt;If you like the app and would like it to be improved, please consider &lt;a href="https://www.buymeacoffee.com/aliceandbobio" rel="noopener noreferrer"&gt;buying me a coffee&lt;/a&gt; ☕! It would help me a lot for the server and domain costs.&lt;/p&gt;

&lt;p&gt;I would also like to thanks &lt;a class="mentioned-user" href="https://dev.to/liyasthomas"&gt;@liyasthomas&lt;/a&gt; for his work. All his projects inspired me a lot when building this app. 💻🙏&lt;/p&gt;

&lt;p&gt;I hope you will like it and do not hesitate to let me know if you have any feedback or questions! &lt;/p&gt;

&lt;p&gt;Thank you all for reading! 😊&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
