<?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: Dmytro Maslov</title>
    <description>The latest articles on DEV Community by Dmytro Maslov (@etc088).</description>
    <link>https://dev.to/etc088</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%2F774414%2Ff9d812a2-e7b6-43dc-af4a-8bd93158209b.jpeg</url>
      <title>DEV Community: Dmytro Maslov</title>
      <link>https://dev.to/etc088</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/etc088"/>
    <language>en</language>
    <item>
      <title>macOS Tools and Apps for Development in 2022</title>
      <dc:creator>Dmytro Maslov</dc:creator>
      <pubDate>Thu, 10 Feb 2022 15:43:13 +0000</pubDate>
      <link>https://dev.to/etc088/macos-tools-and-apps-for-development-in-2022-51pb</link>
      <guid>https://dev.to/etc088/macos-tools-and-apps-for-development-in-2022-51pb</guid>
      <description>&lt;p&gt;For along of my dev career I tried to ease my every day routine. I tried lots of tools and apps, different approaches that I found in numerous articles and sources. Not all of them were really useful. Some of them made my routine even more time consuming. &lt;/p&gt;

&lt;p&gt;So, today I want to share those tools whitch was really effective to me. Let’s begin.&lt;/p&gt;




&lt;h2&gt;
  
  
  Terminal Tools
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://brew.sh"&gt;Homebrew&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;The Package Manager for macOS. Homebrew installs  &lt;a href="https://formulae.brew.sh/formula/"&gt;the stuff you need&lt;/a&gt; that Apple (or your Linux system) didn’t. It’s similar to &lt;a href="https://help.ubuntu.com/community/AptGet/Howto"&gt;apt-get&lt;/a&gt; for Ubuntu (any Debian based) Linux.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;a href="https://iterm2.com"&gt;iTerm2&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;iTerm2 is a replacement for default macOS’s Terminal.app. iTerm2 brings the terminal into the modern age with &lt;a href="https://iterm2.com/features.html"&gt;features&lt;/a&gt; you never knew you always wanted. I like that the app has a lot of customization inside. And also check this awesome smooth show/hide effect.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fci79yj4t6v5z1bpgut6s.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fci79yj4t6v5z1bpgut6s.gif" alt="iTerm2 interface" width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

not so smooth on 10fps GIF, yeah? 😂







&lt;h3&gt;
  
  
  &lt;a href="https://zsh.sourceforge.io"&gt;ZSH&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;The Z shell (also known as &lt;code&gt;zsh&lt;/code&gt;) is a Unix shell that is built on top of bash (the default shell for macOS) with additional features. ZSH designed for interactive use, although it is also a powerful scripting language.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;a href="https://ohmyz.sh"&gt;Oh My ZSH!&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Oh My Zsh is a delightful, open source, community-driven framework for managing your Zsh configuration. It comes bundled with thousands of helpful functions, helpers, plugins, themes, and a few things that make you shout.. It has an impressive &lt;a href="https://github.com/ohmyzsh/ohmyzsh/wiki/Plugins"&gt;list&lt;/a&gt; of plugins, and nice look &lt;a href="https://github.com/ohmyzsh/ohmyzsh/wiki/Themes"&gt;themes&lt;/a&gt;. As for me, I use the &lt;a href="https://github.com/romkatv/powerlevel10k"&gt;powerlevel10k&lt;/a&gt; theme.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fttbd24js2detkr8q0tlg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fttbd24js2detkr8q0tlg.png" alt="powerlevel10k theme look " width="800" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

powerlevel10k theme look



 




&lt;h3&gt;
  
  
  &lt;a href="http://fig.io"&gt;Fig&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Fig adds VSCode-style autocomplete to your existing terminal.  Just look at the gif bellow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8phrhw4ff3udtknpljvh.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8phrhw4ff3udtknpljvh.gif" alt="Fig in action" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

image source &lt;a href="https://fig.io"&gt;Fig.io&lt;/a&gt;




&lt;p&gt;It has common shortcusts (for git, etc). It’s possible to create &lt;a href="https://fig.io/docs/guides/project-shortcuts"&gt;project shortcuts&lt;/a&gt; (To create them, all you need to do is init a &lt;code&gt;.fig&lt;/code&gt; folder in your project and then create a &lt;code&gt;_shortcuts.ts&lt;/code&gt; completion spec).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjxejtoeuhwejv6wppnue.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjxejtoeuhwejv6wppnue.png" alt="Fig autocompete" width="800" height="507"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
image source &lt;a href="https://fig.io"&gt;Fig.io&lt;/a&gt;&lt;br&gt;

 &lt;/p&gt;

&lt;p&gt;Also fig can catch your project’s &lt;code&gt;npm scripts&lt;/code&gt;  up automatically. Or you’re able to create a separated list of autocompletes by adding fig object to &lt;code&gt;package.json&lt;/code&gt; file. &lt;br&gt;
Dropdown with commands may look as fancy as bellow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7s03au6b1vruoxtax7p0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7s03au6b1vruoxtax7p0.png" alt="Fig npm scripts" width="800" height="573"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
image source &lt;a href="https://fig.io"&gt;Fig.io&lt;/a&gt;&lt;br&gt;

 &lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;a href="https://volta.sh"&gt;Volta&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Volta is a hassle-free way to manage your JavaScript command-line tools. Think about it like “A better NVM”. For example.&lt;br&gt;
Volta's command &lt;code&gt;volta pin node@12&lt;/code&gt; will save the exact version of the Node engine in your &lt;code&gt;package.json&lt;/code&gt; so you can commit your selection to git. From that point on, every time you run Node inside your project directory, Volta automatically switches to that same version of Node you chose. Similarly, all your collaborators can do the same by installing Volta on their development machine.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;a href="https://ngrok.com"&gt;Ngrok&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Ngrok allows you to expose a web server running on your local machine to the internet. It’s good for situations when your project is still under development (wasn’t deployed yet):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Demo your web project without deploying&lt;/li&gt;
&lt;li&gt;Build webhook consumers on your dev machine&lt;/li&gt;
&lt;li&gt;Test mobile apps connected to your locally running backend&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The ngrok console UI looks like this.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm6f1jtsd2jk1jvwd0pe4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm6f1jtsd2jk1jvwd0pe4.png" alt="ngrok console UI" width="800" height="473"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
image source &lt;a href="https://ngrok.com"&gt;ngrok.com&lt;/a&gt;&lt;br&gt;

 &lt;/p&gt;




&lt;h2&gt;
  
  
  Desktop Apps
&lt;/h2&gt;

&lt;h3&gt;
  
  
  VS Code + plugins
&lt;/h3&gt;

&lt;p&gt;VS Code is the most popular editor based on latest (2020) &lt;a href="https://2020.stateofjs.com/en-US/other-tools/#text_editors"&gt;State of JS&lt;/a&gt; &lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F81eq3ohcyg7jfat11jyr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F81eq3ohcyg7jfat11jyr.png" alt="state of js chart" width="800" height="357"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
image source &lt;a href="https://2020.stateofjs.com/en-US/other-tools/#text_editors"&gt;2020.stateofjs.com&lt;/a&gt;&lt;br&gt;

 &lt;/p&gt;

&lt;p&gt;My list of VS Code plugins (not all, just most helpful):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-close-tag"&gt;Auto Close Tag&lt;/a&gt; - Automatically add HTML/XML close tag, same as Visual Studio IDE or Sublime Text does.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-rename-tag"&gt;Auto Rename Tag&lt;/a&gt; - Automatically rename paired HTML/XML tag, same as Visual Studio IDE does.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=jomeinaster.bracket-peek"&gt;Bracket Peek&lt;/a&gt; - This extensions helps you to view the line of code containing an opening bracket when inspecting the matching closing bracket.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens"&gt;GitLens&lt;/a&gt; - It supercharges the Git capabilities built into Visual Studio Code. It helps you to visualize code authorship at a glance via Git blame annotations and code lens, seamlessly navigate and explore Git repositories, gain valuable insights via powerful comparison commands, and so much more.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=wix.vscode-import-cost"&gt;Import Cost&lt;/a&gt; - This extension will display inline in the editor the size of the imported package.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=oderwat.indent-rainbow"&gt;Indent-Rainbow&lt;/a&gt; - A simple extension to make indentation more readable.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=christian-kohler.path-intellisense"&gt;Path Intellisense&lt;/a&gt; - A plugin that autocompletes filenames.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=alefragnani.project-manager"&gt;Project Manager&lt;/a&gt; - It helps you to easily access your projects, no matter where they are located.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=jerrygoyal.shortcut-menu-bar"&gt;Shortcut Menu Bar&lt;/a&gt; - Add 35+ handy buttons like beautify, show opened files, save, toggle terminal, activity bar, Find replace etc to the editor menu bar in VSCode. You can also create your own buttons with custom commands.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=rangav.vscode-thunder-client"&gt;Thunder Client&lt;/a&gt; - It’s a lightweight Rest API Client Extension&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=shardulm94.trailing-spaces"&gt;Trailing Spaces&lt;/a&gt; - An extension that allows you to highlight trailing spaces and delete them in a flash!&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=ChakrounAnas.turbo-console-log"&gt;Turbo Console Log&lt;/a&gt; - This extension make debugging much easier by automating the operation of writing meaningful log message.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  &lt;a href="https://www.gitkraken.com"&gt;GitKraken&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;GitKraken is a git GUI tool like Atlassian’s &lt;a href="https://www.sourcetreeapp.com"&gt;Sourcetree&lt;/a&gt;, but more powerful and fancy. I like this tool for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;easy to use drag-n-drop in my routine operations like merging branches.&lt;/li&gt;
&lt;li&gt;It has awesome Soloing mode, where you can see history of certain branch. &lt;/li&gt;
&lt;li&gt;It has an integrated search by branch name, issues panel, PR creation and managing, etc. Everything in one tool.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjgdjunpyed8s72ob9wuh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjgdjunpyed8s72ob9wuh.png" alt="GitKraken interface" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

image source &lt;a href="https://www.gitkraken.com"&gt;gitkraken.com&lt;/a&gt;




&lt;ul&gt;
&lt;li&gt; And the killer feature for me is integrated Merge Conflict Resolution (like in WebStorm IDE). No more ugly or expensive separated tools for conflict resolving, everything is out of the box. 😎&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fscswbc8j14nixc1pqquv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fscswbc8j14nixc1pqquv.png" alt="GitKraken resolve conflict tool" width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

image source &lt;a href="https://www.gitkraken.com"&gt;gitkraken.com&lt;/a&gt;




&lt;ul&gt;
&lt;li&gt;And, of course, 1 click undo for checkout, commit, discard, delete branch, remove remote and reset branch to a commit.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fynv13m85yk9mj9jg80pa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fynv13m85yk9mj9jg80pa.png" alt="GitKraken undo" width="800" height="314"&gt;&lt;/a&gt;&lt;/p&gt;

image source &lt;a href="https://www.gitkraken.com"&gt;gitkraken.com&lt;/a&gt;







&lt;h3&gt;
  
  
  &lt;a href="https://responsively.app"&gt;ResponsivelyApp&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;ResponsivelyApp is a very helpful application to check how your web app looks in different dimensions. It’s easy to develop you app with this tool, because you’re able to see how your code changes affects view on different screens.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fshn2yb06vq6ftoktib3x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fshn2yb06vq6ftoktib3x.png" alt="ResponsivelyApp interface" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
image source &lt;a href="https://responsively.app"&gt;responsively.app&lt;/a&gt;&lt;br&gt;

 &lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;a href="https://runjs.app"&gt;RunJS&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;RunJS is a JavaScript playground for your desktop. You can explore and experiment with JavaScript and TypeScript, visualise your ideas and get instant feedback as you type. It’s a very helpful tool for testing some JavaScript code which is longer than 1 line, or creating code snippet, etc. It’s more comfortable to do such operations in this tool than in browser’s DevTools.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foqdyzxe5drpmswchjf07.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foqdyzxe5drpmswchjf07.gif" alt="runJS interface" width="1109" height="629"&gt;&lt;/a&gt;&lt;/p&gt;

image source &lt;a href="https://runjs.app"&gt;runjs.app&lt;/a&gt;







&lt;h3&gt;
  
  
  &lt;a href="https://altair.sirmuel.design"&gt;Altair GraphQL Client&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Altair helps you debug GraphQL queries and implementations - taking care of the hard part so you can focus on actually getting things done.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F73p98jxq96msyp41yddf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F73p98jxq96msyp41yddf.png" alt="Altair interface" width="800" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

image source &lt;a href="https://altair.sirmuel.design"&gt;altair.sirmuel.design&lt;/a&gt;







&lt;h2&gt;
  
  
  Extra Tools
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://manytricks.com/moom/"&gt;Moom&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Moom makes window management as easy as clicking a mouse button—or using a keyboard shortcut, if you’re one of those types of people.&lt;br&gt;
With Moom, you can easily move and zoom windows to half screen, quarter screen, or fill the screen; set custom sizes and locations, and save layouts of opened windows for one-click positioning. Once you’ve tried Moom, you’ll wonder how you used your Mac without it.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6fsugwh8pjo8nqxzrtjw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6fsugwh8pjo8nqxzrtjw.png" alt="Moom interface" width="700" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

image source &lt;a href="https://manytricks.com/moom/"&gt;manytricks.com/moom&lt;/a&gt;







&lt;h3&gt;
  
  
  &lt;a href="https://cleanshot.com"&gt;CleanShot X&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;CleanShot X provides over &lt;a href="https://cleanshot.com/features"&gt;50 features&lt;/a&gt;  making it the ultimate screen capturing tool. It feels like 7 apps in one.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faro95laqcv7vzq2sbuzi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faro95laqcv7vzq2sbuzi.png" alt="CleanShot X interface" width="800" height="596"&gt;&lt;/a&gt;&lt;/p&gt;

image source &lt;a href="https://cleanshot.com"&gt;cleanshot.com&lt;/a&gt;







&lt;h3&gt;
  
  
  &lt;a href="https://sli.dev"&gt;Sli.dev&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Sli.dev is a tool for creating presentations. Slidev aims to provide the flexibility and interactivity for developers to make their presentations even more interesting, expressive, and attractive by using the tools and technologies they are already familiar with. It’s not a desktop app like &lt;a href="https://www.microsoft.com/en-us/microsoft-365/powerpoint"&gt;PowerPoint&lt;/a&gt;, or &lt;a href="https://www.apple.com/keynote/"&gt;Keynote&lt;/a&gt;. You need to write the &lt;a href="https://www.markdownguide.org"&gt;markdown&lt;/a&gt;, or html + css code by yourself (or even &lt;a href="https://vuejs.org"&gt;Vue.js&lt;/a&gt; components if you want). With such frameworks you’re able to control almost every aspect of your presentation like transitions, styles, views, texts, etc. Also it’s a fun to work with this tool for me as a developer. I tried a lot of similar to Sli.dev tools, like &lt;a href="https://formidable.com/open-source/spectacle/"&gt;spectacle&lt;/a&gt;, &lt;a href="https://revealjs.com"&gt;revealJS&lt;/a&gt;, &lt;a href="https://impress.js.org/#/bored"&gt;ImpressJS&lt;/a&gt;, but I like &lt;a href="https://windicss.org"&gt;Windi CSS&lt;/a&gt; and want to create stuff with this framework (actually I love the &lt;a href="https://tailwindcss.com"&gt;TailwindCSS&lt;/a&gt;, but Windi gives me the same experience).&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1v0dofx0obgr8bqdeblv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1v0dofx0obgr8bqdeblv.png" alt="Sli.dev example" width="800" height="487"&gt;&lt;/a&gt;&lt;/p&gt;

image source &lt;a href="https://sli.dev"&gt;sli.dev&lt;/a&gt;







&lt;h3&gt;
  
  
  &lt;a href="https://notion.so"&gt;Notion&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Notion is a multi database for your everything, that can be notated. It’s more than a doc, or a table. You’re able to customize Notion to work the way you do. It has a lot of templates for every need, supports Kanban, or Timeline View, tables with relations and calculated fields, team collaborations and much more.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff2u7qjnevcl5p5vcvtk8.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff2u7qjnevcl5p5vcvtk8.gif" alt="Notion interface" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

image source &lt;a href="https://notion.so"&gt;notion.so&lt;/a&gt;







&lt;p&gt;That’s it. Thanks for reading. Let me know in comments what tools do you use in your daily dev routine. 👇&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
    <item>
      <title>Monorepos. 2022</title>
      <dc:creator>Dmytro Maslov</dc:creator>
      <pubDate>Wed, 26 Jan 2022 16:00:57 +0000</pubDate>
      <link>https://dev.to/etc088/monorepos-2022-1408</link>
      <guid>https://dev.to/etc088/monorepos-2022-1408</guid>
      <description>&lt;p&gt;When was the last time when you were thinking about “What’s going on with monorepos now”? Is &lt;a href="http://lerna.js.org"&gt;Lerna&lt;/a&gt; still the best choice or just &lt;a href="https://classic.yarnpkg.com/lang/en/docs/workspaces/"&gt;Yarn Workspaces&lt;/a&gt; could be enough?&lt;/p&gt;

&lt;p&gt;I did it a couple days ago and I have something to share with you. &lt;/p&gt;




&lt;h3&gt;
  
  
  So let’s get started.
&lt;/h3&gt;

&lt;p&gt;First of all, what does the &lt;code&gt;Monorepo&lt;/code&gt; mean?&lt;br&gt;
&lt;a href="https://en.wikipedia.org/wiki/Monorepo"&gt;Wikipedia says&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In version control systems, a monorepo (“mono” meaning ‘single’ and “repo” being short for ‘repository’) is a software development strategy where code for many projects is stored in the same repository&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  When you may need monorepos in your dev life?
&lt;/h3&gt;

&lt;p&gt;Imagine the situation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You have several libraries, projects, etc.&lt;/li&gt;
&lt;li&gt;All of them are stored in a separated git repos. &lt;/li&gt;
&lt;li&gt;Some of these packages should be as dependencies in your other packages.&lt;/li&gt;
&lt;li&gt;And you are still continue to develop your packages (some of them may not work correctly in integration with other, etc.) &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;So the ordinary dev’s reality&lt;/em&gt; :)&lt;/p&gt;




&lt;h3&gt;
  
  
  What could you do in such a case?
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;The worst scenario&lt;/em&gt; 👎&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can publish your “medium rare” packages. Include them in the package.json of your main project as dependencies. Then, when you fix something, you republish them, up the version in package.json, &lt;code&gt;yarn install&lt;/code&gt; again… Repeat as many times as you will find bugs.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If you ever thought about this workflow, keep reading, please&lt;/em&gt; 👉&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;Good scenario&lt;/em&gt; 👋&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can use &lt;a href="https://classic.yarnpkg.com/en/docs/cli/link"&gt;yarn link&lt;/a&gt;. In that case, you can test your packages working in integration, without publishing packages every time after you fixed bugs. &lt;br&gt;
What is the main issue here? If you have a lot of packages you can simply miss something. You also need to remember to do &lt;a href="https://classic.yarnpkg.com/en/docs/cli/unlink"&gt;yarn unlink&lt;/a&gt; after you are done with fixes and published your stuff. Also, you need to pay attention to what version do you use right now, published or linked one.. Yes, your editor may show you which package is linked right now in &lt;code&gt;node_modules&lt;/code&gt; , but still, it could be risky to miss something. It’s hard to manage everything when you have many packages and cross dependencies&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;The Best scenario (for my opinion)&lt;/em&gt; 👍&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can use the monorepos. All your packages will be stored in one git repository, with their own package.json’s, linked with each other, etc. It’s easy to develop, easy to manage. When your development is done,  all your stuff could be published at once or package-by-package. No need &lt;code&gt;yarn link/unlink&lt;/code&gt;, etc&lt;/p&gt;

&lt;p&gt;So in short. We may want to use monorepos when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We want  a bit simplest code base management&lt;/li&gt;
&lt;li&gt;We have a huge codebase with cross dependiences in packages&lt;/li&gt;
&lt;li&gt;We have several applications and the packages used inside every application&lt;/li&gt;
&lt;li&gt;We don’t want to deal with &lt;code&gt;yarn link&lt;/code&gt;, etc if we need to fix something inside our package&lt;/li&gt;
&lt;li&gt;We want flexible versioning, publishing, and changelog generation&lt;/li&gt;
&lt;li&gt;Just We can :)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Let’s see in short what projects we can use for monorepos in 2022
&lt;/h3&gt;

&lt;h4&gt;
  
  
  yarn/npm Workspaces.
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://classic.yarnpkg.com/en/docs/cli/workspaces"&gt;yarn workspaces&lt;/a&gt; &lt;a href="https://docs.npmjs.com/cli/v7/using-npm/workspaces"&gt;npm workspaces&lt;/a&gt;&lt;br&gt;
It’s Low-level primitive used by other tools.  Actually, if you just need to link and install dependencies, it will be enough.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Link dependencies +&lt;/li&gt;
&lt;li&gt;Run commands across the packages +&lt;/li&gt;
&lt;li&gt;Automated packages publishing (we can run publish command one-by-one in each package, or write jour own automation) —&lt;/li&gt;
&lt;li&gt;Automated version managing —&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Lerna (⭐️ 31.4k)
&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://lerna.js.org"&gt;More info&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Link dependencies +&lt;/li&gt;
&lt;li&gt;Run commands across the packages +&lt;/li&gt;
&lt;li&gt;Automated packages publishing +&lt;/li&gt;
&lt;li&gt;Automated version managing +&lt;/li&gt;
&lt;li&gt;Caching —&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Turborepo (⭐️ 5.3k)
&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://turborepo.org"&gt;More info&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Link dependencies +&lt;/li&gt;
&lt;li&gt;Run commands across the packages +&lt;/li&gt;
&lt;li&gt;Automated packages publishing (can be done via &lt;a href="https://turborepo.org/docs/guides/complimentary-tools"&gt;complimentary tools&lt;/a&gt;) —&lt;/li&gt;
&lt;li&gt;Automated version managing (can be done via &lt;a href="https://turborepo.org/docs/guides/complimentary-tools"&gt;complimentary tools&lt;/a&gt;) —&lt;/li&gt;
&lt;li&gt;Caching +++&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  NX (⭐️ 10.3k)
&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://nx.dev"&gt;More info&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;More than just monorepo tool +&lt;/li&gt;
&lt;li&gt;Automated packages publishing —&lt;/li&gt;
&lt;li&gt;Automated version managing —&lt;/li&gt;
&lt;li&gt;Caching +++&lt;/li&gt;
&lt;li&gt;Not as easy as wanted —&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  BIT (⭐️ 14.6k)
&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://bit.dev"&gt;More info&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;More than just monorepo tool +&lt;/li&gt;
&lt;li&gt;Good for micro frontends +&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Before we go further I want you to give a try to NX.
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The project has a great codegen tool and provides consistent dev experience for any framework&lt;/li&gt;
&lt;li&gt;When you want to add a package to monorepo NX will ask you what should it be. For example, &lt;a href="https://reactjs.org"&gt;React&lt;/a&gt; application, React library, or React component. Based on choices NX will generate a proper config for each package inside your monorepo&lt;/li&gt;
&lt;li&gt;It works extremely fast&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I have a feeling that NX is something great! Maybe I just didn’t find use cases for such a multitool in my project and stopped to dive deeper. Also, it was a little hard to make my project work with NX. &lt;br&gt;
But it’s only my experience ;)&lt;/p&gt;




&lt;h3&gt;
  
  
  So, for me (and my project), the best tool is TURBOREPO
&lt;/h3&gt;

&lt;p&gt;Here is the list of benefits which are important for me (you may find the whole list in official &lt;a href="https://turborepo.org/docs"&gt;documentation&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Incremental builds&lt;/strong&gt;&lt;br&gt;
Building once is painful enough, Turborepo will remember what you’ve built and skip the stuff that’s already been computed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Content-aware hashing&lt;/strong&gt;&lt;br&gt;
Turborepo looks at the contents of your files, not timestamps to figure out what needs to be built.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Remote Caching&lt;/strong&gt;&lt;br&gt;
Share a remote build cache with your teammates and CI/CD for even faster builds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Parallel execution&lt;/strong&gt;&lt;br&gt;
Execute builds using every core at maximum parallelism without wasting idle CPUs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Task pipelines&lt;/strong&gt;&lt;br&gt;
Define the relationships between your tasks and then let Turborepo optimize what to build and when.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Profile in your browser&lt;/strong&gt;&lt;br&gt;
Generate build profiles and import them in Chrome or Edge to understand which tasks are taking the longest.&lt;/p&gt;




&lt;h3&gt;
  
  
  Finally, lets see the digits.
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Previously I used Lerna as a monorepo engine. So I will compare Lerna speed vs Turborepo&lt;/em&gt;&lt;br&gt;
&lt;em&gt;My monorepo contains one React application and 13 packages. One of the packages is the UI Library Kit which contains 102 React components&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;build-packages&lt;/code&gt;  —  &lt;em&gt;build all packages except the main application&lt;/em&gt;&lt;br&gt;
&lt;code&gt;build-app&lt;/code&gt;  — &lt;em&gt;build all packages and the main application&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8vl5bj9ulg0xmc21nbrp.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8vl5bj9ulg0xmc21nbrp.jpeg" alt="Lerna vs Turborepo speed" width="800" height="167"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Okay. It was a small description of what’s going on with monorepos in 2022 from my point of view. Hope the information was helpful for someone.&lt;br&gt;
Let me know what you guys think in the comments :)&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
