<?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: Bhuminjay Soni</title>
    <description>The latest articles on DEV Community by Bhuminjay Soni (@11happy).</description>
    <link>https://dev.to/11happy</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%2F3730981%2Fc877b423-206b-4392-a31d-ad7a59e58069.png</url>
      <title>DEV Community: Bhuminjay Soni</title>
      <link>https://dev.to/11happy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/11happy"/>
    <language>en</language>
    <item>
      <title>cpx - a modern, faster replacement for cp (up to 5 faster)</title>
      <dc:creator>Bhuminjay Soni</dc:creator>
      <pubDate>Sun, 25 Jan 2026 07:59:55 +0000</pubDate>
      <link>https://dev.to/11happy/cpx-a-modern-faster-replacement-for-cp-up-to-5x-faster-533d</link>
      <guid>https://dev.to/11happy/cpx-a-modern-faster-replacement-for-cp-up-to-5x-faster-533d</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/11happy/cpx" rel="noopener noreferrer"&gt;cpx&lt;/a&gt;: a rust based &lt;code&gt;cp&lt;/code&gt; replacement that’s up to &lt;strong&gt;5× faster&lt;/strong&gt; &lt;a href="https://github.com/11happy/cpx/blob/main/docs/benchmarks.md" rel="noopener noreferrer"&gt;benchmarks&lt;/a&gt;.&lt;br&gt;
One thing that makes &lt;code&gt;cpx&lt;/code&gt; powerful is that it’s configurable.&lt;br&gt;
You can define excludes, parallelism, progress styles, and more.&lt;/p&gt;

&lt;p&gt;But first, here’s what copying actually looks like(some variants):&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqjksoemba072xc6svg8y.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqjksoemba072xc6svg8y.gif" alt=" " width="1836" height="208"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyc9sfz295vaxmxdmwyvd.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyc9sfz295vaxmxdmwyvd.gif" alt=" " width="1836" height="208"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's start with config, with &lt;code&gt;cpx config init&lt;/code&gt; it creates the config file , a sample config:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[exclude]&lt;/span&gt;
&lt;span class="py"&gt;patterns&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"*.tmp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"*.log"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"node_modules"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;".git"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="nn"&gt;[copy]&lt;/span&gt;
&lt;span class="py"&gt;parallel&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;

&lt;span class="nn"&gt;[preserve]&lt;/span&gt;
&lt;span class="py"&gt;mode&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"default"&lt;/span&gt;

&lt;span class="nn"&gt;[progress]&lt;/span&gt;
&lt;span class="py"&gt;style&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"detailed"&lt;/span&gt;

&lt;span class="nn"&gt;[reflink]&lt;/span&gt;
&lt;span class="py"&gt;mode&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"auto"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With a simple config file, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Exclude files and directories&lt;/li&gt;
&lt;li&gt;Control parallelism&lt;/li&gt;
&lt;li&gt;Customize progress bars&lt;/li&gt;
&lt;li&gt;Tune copy and preserve behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can safely interrupt a copy and resume it later.&lt;br&gt;
It’s checksum safe and automatically skips already copied files.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F947yqv6eslq9f39zdwn2.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F947yqv6eslq9f39zdwn2.gif" alt=" " width="1834" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I built it
&lt;/h2&gt;

&lt;p&gt;I am a firm believer of learn by doing philosophy. Last year after completing Google Summer of Code &lt;a href="https://github.com/11happy/langchain-openvino" rel="noopener noreferrer"&gt;langchain-openvino&lt;/a&gt;, I was interested to learn rust. I asked myself why? Part of it was genuine curiosity, and part of it was the hype rust gets on platforms like X. Generally its said in opensource its good practice &amp;amp; people do it for the projects they use, I do that too but I also contribute to learn and to solve interesting problems. This might not be the “correct” open source path, but it works for me.&lt;/p&gt;

&lt;p&gt;So I started with my first &lt;a href="https://github.com/astral-sh/ruff/issues/17412" rel="noopener noreferrer"&gt;issue&lt;/a&gt; on ruff &amp;amp; made the &lt;a href="https://github.com/astral-sh/ruff/pull/20051" rel="noopener noreferrer"&gt;PR&lt;/a&gt;, Since it was a tracking issue with many related problems, I kept digging deeper.&lt;br&gt;
Over time, that curiosity led to &lt;a href="https://github.com/astral-sh/ruff/pulls?q=is%3Apr+author%3A11happy+is%3Aclosed" rel="noopener noreferrer"&gt;20+ merged PRs&lt;/a&gt; in ruff.&lt;/p&gt;

&lt;p&gt;As I spent more time contributing, grew curious about the maintainers and their work. Digging through their profiles led me to tools like &lt;code&gt;fd&lt;/code&gt;, &lt;code&gt;bat&lt;/code&gt;, and &lt;code&gt;ripgrep&lt;/code&gt; rust based drop in replacements for traditional Unix utilities. Around this time to further strengthen my rust concepts I came to know about this &lt;a href="https://rust-exercises.com/100-exercises/" rel="noopener noreferrer"&gt;100 exercises to learn rust&lt;/a&gt; naturally it felt difficult for me to complete as opposing of my learn by doing however I did complete it somehow, but it's still better than tutorials, and an idea came why not work on a better version of cp with visual feedback, speed, &amp;amp; some other features so that's how it started to came to be.&lt;/p&gt;

&lt;p&gt;A little easter egg: the gifs I have attached are recursively copying the 100 exercises to learn rust as a small token of gratitude for helping me get comfortable with the language. I hope you enjoyed this blog, and will soon write a detailed technical architecture about the architecture of cpx the choices, design etc.&lt;/p&gt;

</description>
      <category>rust</category>
      <category>opensource</category>
      <category>cli</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
