Beginning in Insider Build 17063, we’re introducing two command-line tools to the Windows toolchain: curl and bsdtar. It’s been a long time coming, I know. We’d like to give credit to the folks who’ve created and maintain bsdtar and curl—awesome open-source tools used by millions of humans every day. Let’s take a look at two impactful ways these tools will make developing on Windows an even better experience.
1. Developers! Developers! Developers!
Tar and curl are staples in a developer’s toolbox; beginning today, you’ll find these tools are available from the command-line for all SKUs of Windows. And yes, they’re the same tools you’ve come to know and love! If you’re unfamiliar with these tools, here’s an overview of what they do:
- Tar: A command line tool that allows a user to extract files and create archives. Outside of PowerShell or the installation of third party software, there was no way to extract a file from cmd.exe. We’re correcting this behavior 🙂 The implementation we’re shipping in Windows uses libarchive.
- Curl: Another command line tool that allows for transferring of files to and from servers (so you can, say, now download a file from the internet).
Now not only will you be able to perform file transfers from the command line, you’ll also be able to extract files in formats in addition to .zip (like .tar.gz, for example). PowerShell does already offer similar functionality (it has curl and it’s own file extraction utilities), but we recognize that there might be instances where PowerShell is not readily available or the user wants to stay in cmd.
2. The Containers Experience
Now that we’re shipping these tools inbox, you no longer need to worry about using a separate container image as the builder when targeting nanoserver-based containers. Instead, we can invoke the tools like so:
Background
We offer two base images for our containers: windowsservercore and nanoserver. The servercore image is the larger of the two and has support for such things as the full .NET framework. On the opposite end of the spectrum is nanoserver, which is built to be lightweight with as minimal a memory footprint as possible. It’s capable of running .NET core but, in keeping with the minimalism, we’ve tried to slim down the image size as much as possible. We threw out all components we felt were not mission-critical for the container image.
PowerShell was one of the components that was put on the chopping block for our nanoserver image. PowerShell is a whopping 56 Mb (given that the total size of the nanoserver image is 200 Mb…that’s quite the savings!) But the consequence of removing PowerShell meant there was no way to pull down a package and unzip it from within the container.
If you’re familiar with writing dockerfiles, you’ll know that it’s common practice to pull in all the packages (node, mongo, etc.) you need and install them. Instead, users would have to rely on using a separate image with PowerShell as the “builder” image to accomplish constructing an image. This is clearly not the experience we want our users to have when targeting nanoserver—they’d end up having to download the much larger servercore image.
This is all resolved with the addition of curl and tar. You can call these tools from servercore images as well.
We want your Feedback!
Are there other developer tools you would like to see added to the command-line? Drop a comment below with your thoughts! In the mean time, go grab Insider Build 17063 and get busy curl’ing an tar’ing to your heart’s desire.


I think it should read “Developers! Developers! Developers!” instead of just “Developers. Developers. Developers.”. It gives it an entirely different vibe.
Fair enough. We’re equally excited about it so why not 🙂
I feel like this is a throwback to this moment in MS’ history: https://www.youtube.com/watch?v=Vhh_GeBPOhs
Is there a way to start using these tools on Windows 10 without Insider Build 17063?
If you visit the original authors’ websites (links at the top of the post), you will see that they’ve published windows binaries which you can install for yourself. Otherwise, you’ll have to wait for the next major Windows update.
Unable to find the binaries? which link?
curl : https://curl.haxx.se/ — I can use this curl on windows 7 as well.
tar : couldn’t find a windows binary. Can someone search deeper ?
Does this mean the curl alias in powershell will be removed?
No, we don’t want to break existing scripts users may have which rely on the behavior of curl being aliased to Invoke-WebRequest. You can invoke the curl executable in PS via “curl.exe”
Soooo excited y’all – you are killing it. Any chance you’re planning to add the git suite as a native pre-installed tool?
We’ll be continuing to look at the dev experience. Thanks for the recommendation. Git is definitely a top-notch tool and would be handy to have in a dev’s toolbox.
So currently PowerShell doesn’t really have curl; it just links to an equivalent cmdlet that kind of works the same (but not exactly).
Should plans made to remove that link so we can use the _actual_ curl from PowerShell? I think it would be nice.
Hey Justin, existing PS scripts depend on the alias existing the way it does. If you do want to use the new curl tool we’ve put inbox, you can still do that from PS by doing “curl.exe “
Ditch Windows scripting and just make WSL bash the default scripting environment for Windows. And change the path separator to “/” once and for all, “\” in all languages is for escaping characters.
We developers waste so much time writing scripts specific to Windows as opposite to all the other OS.
This is an unreasonable demand. Most software depends on Windows scripting being present.
I’ll keep my PowerShell scripting, TVM.
in Powershell you can use ‘/’ instead of ‘\’ in paths since quite a long ago.
bash is inferior comparing with Powershell and this is obvious for anyone who spent at least couple of weeks developing for both
Very nice! This is a great start in simply having the common unix toolset available on the command line without any additional qualifiers (“it’s there, but you have to use the linux subsystem”, “it’s not there, but you can install msys”, “you can manually compile them and put them in windows/system32”). Looking forward to seeing the rest of the command set soon enough so that all these tools we use as devs don’t need to bundle msys/cygwin installations anymore.
“tar -cvzf files.zip *.c”
🤔
Any plans to port rsync over as well?
MS need to change Windows kernel to BSD or Linux!!! This will solve all issues.
Indeed if there was a custom windows 10 dev editions that have a linux , and unix binary support as default and bash or Z shell is the default cmd , with gnu C/C++ compilers for both windows and linux and etc , it’s just to add some extended features actually , that may make things harder and take much time but it will be awesome work , if they support multipule Desktop env’s coming from microsoft repositories as upstream , will be amazing work i guess , but it will be hard to put the things togather and make it all run without troubles
Cool! Please, also consider integrating vim/nano or making Notepad better (full utf8/unix endlines support etc.). Thanks!
i use vim from both powershell and cmd now a days lol XD , to make small edites from the console on my C# apps that runs within the dotnet core
Notepad++?
Okay , it’s nice work to add it and you might add some nice features too ?
its previously mentioned in the comments here , full utf-8/unix endlines support and etc stuff
and to honest , microsot and the team is doing well and the things got better
and , by the way
if you dont mind to ask this blog developers team to add just this simple hardcoded javascript lines
var btn = document.querySelector(“a.add-comment-button”);
btn.addEventListener(‘click’,function(){
document.querySelector(“#comment”).focus();
});
it helps to make a focus on the text field immediatly after pressing the button
tested it with scratch bad on firefox dev edition and , just did the thing : )
I found using the development branches to be toooo dangerous. Is this in the latest officially released version.
I see that the “curl” command is indeed there; but the “tar” command is MIA
C:\Users\bovy>curl –help
Usage: curl [options…]
Options: (H) means HTTP/HTTPS only, (F) means FTP only
C:\Users\bovy>tar
‘tar’ is not recognized as an internal or external command,
operable program or batch file.
You need to be on an insider build for the .exes to be present–minimum build of 17063. Otherwise, you’ll have to wait until the next release of Windows this Spring.
It’s great to see tools like this officially ported into Windows. The more like this, the better! When do we get grep or find?
I was curious to see how these new tools fared with files containing non-ASCII characters in their names, as most other WIN32 ports of Unix tools available on the Internet fail miserably with them. (I’m very sensitive to that, having a non-ASCII ç in my first name!)
And the good news is that this tar stores them correctly in the archive. 🙂
One thing that could be improved is that it only lists their names correctly if they’re part of the current console code page. This is improvable, as the console can display any Unicode character independently of the current console code page. (Provided that you have a suitable font.) cmd.exe internal dir command does this very well.
To help others write C programs that use UTF-8 internally, and display non-ASCII strings optimally in all cases, without having to bother with the complexities of the Windows console and code pages, I’ve created a C library extending the MS C library, and handling all such text output transparently: https://github.com/JFLarvoire/SysToolsLib/tree/master/C/MsvcLibX
On the same GitHub repository, you’ll find several C tools using that library, and demonstrating these capabilities. For example tools to do side-by-side directory comparison, of for piping data from and to the clipboard. All these display any Unicode string correctly in any code page.
Correction: After switching to code page 65001, French characters still display correctly, but Russian characters don’t. This will be a serious issue for Russian users!
Hi,
I have one question for Windows Command Line regarding this new curl: where should I put my .curlrc file?
For cygiwn based curl, it’s as easy as just creating it in home folder. But Microsoft’s curl is not respecting my .curlrc directives on my home fodler.
According to curl’s manpages, it checks a few places. Have you set a CURL_HOME env var that points to where your .curlrc file is? The man pages state that it also checks APPDATA, with a final fallback to look for the .curlrc is in the same directory as where the executable resides.