Is there a tool in the Cygwin package similar to apt-get
on Debian or yum
on redhat that allows me to install components from the command line?
9 Answers
Cygwin's setup accepts command-line arguments to install packages from the command-line.
e.g. setup-x86.exe -q -P packagename1,packagename2
to install packages without any GUI interaction ('unattended setup mode').
(Note that you need to use setup-x86.exe
or setup-x86_64.exe
as appropriate.)
See https://cygwin.com/packages/ for the package list.
-
6Nice! setup.exe is now called setup-x86.exe - or a variant depending on cpu bits. Also see here for the package list http://cygwin.com/packages/ – ErichBSchulz Jan 18 '14 at 06:43
-
3Also, to specify multiple packages, separate them with commas. e.g. in DOS, type `setup-x86_64 --packages="openssh,python"` – Michael Scheper Mar 19 '14 at 23:00
-
There doesn't seem to be a way of setting up specific versions. – CMCDragonkai May 26 '16 at 17:02
-
@jturney, Is this stable? – Pacerier Mar 04 '17 at 00:13
-
1@Pacerier, It's unclear what you are asking. This should be a feature of setup that it's safe to rely on. – jturney Mar 05 '17 at 14:22
-
1https://sourceware.org/git/?p=cygwin-setup.git;a=blob;f=package_meta.cc;h=1c6183c638d059a3236c76c18d5dc56d4be75e3c;hb=HEAD#l351 shows that -P accepts packageName=version pairs. And the feature announcement is at https://cygwin.com/pipermail/cygwin-announce/2021-April/010021.html – Mike Kaganski May 28 '21 at 16:09
-
1Just to be clear, `-P packagename=version` is a new feature. Just `-P packagename` has been accepted for a long time (and still is) ... – jturney Jun 10 '21 at 18:53
For a more convenient installer, you may want to use
apt-cyg
as your package manager. Its syntax similar to
apt-get
, which is a plus. For this, follow the above
steps and then use Cygwin Bash for the following steps
wget https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg
chmod +x apt-cyg
mv apt-cyg /usr/local/bin
Now that apt-cyg
is installed. Here are few examples of
installing some packages
apt-cyg install nano
apt-cyg install git
apt-cyg install ca-certificates
-
19Obviously use setup-x86_64.exe -q -P wget,tar,qawk,bzip2,subversion,vim for 64 bit windows. – Arun Dec 24 '13 at 16:46
-
4Needed to add --no-check-certificate to the wget command. Otherwise, superb. – akauppi Mar 20 '14 at 11:31
-
1
-
Just tried `wget` and it downloads `apt-cyg` without problems. At what point does the 404 appear? – sagunms Jul 30 '14 at 00:18
-
4wget is not installed by default with cygwin, meaning this needs to be bootstrapped with a manual and non-programmatic installation. – Jan 30 '15 at 11:43
-
`apt-cyg` now allows fallback to `lynx` out-of-the-box. You could then use `apt-cyg` to install `wget` if you need that or simply don't want to see the warnings about the fallback. – underscore_d Sep 24 '15 at 09:50
-
1`wget, lynx, setup-x86.exe, setup-x86_64.exe` **are not recognized as internal or external commands**. Now what? What is the first thing i should do after installing `cygwin` ? I'm super confused about all this steps. Any advice? – AIon Jul 24 '17 at 16:25
-
Re: akauppi's comment. Don't add `--no-check-certificate` unless you really know what you're doing. I would almost never recommend disabling certificate validation. It's a security risk. – ADJenks Aug 19 '22 at 19:18
-
apt-cyg does not seem to install dependencies. For example, if I install rsync it won't install libcyxxhash and it results in an error: `rsync.exe: error while loading shared libraries: cygxxhash-0.dll: cannot open shared object file: No such file or directory`. – szx Nov 07 '22 at 08:04
There is no tool specifically in the 'setup.exe' installer that offers the functionality of apt-get. There is, however, a command-line package installer for Cygwin that can be downloaded separately, but it is not entirely stable and relies on workarounds.
apt-cyg: http://github.com/transcode-open/apt-cyg
Check out the issues tab for the project to see the known problems.

- 1,211
- 1
- 10
- 9
-
-
-
4@vy32: because you didn't help to make them mature? :) They can't write themselves. Someone have to work on them. And since their usability is quite limited (to overwrite files currently in use on Windows you have to close Cygwin first, so it's not possible to execute any package manager in closed Cygwin :), there isn't many people interested. – David Ferenczy Rogožan Apr 17 '14 at 20:01
-
15From another answer: `setup-x86.exe -q -P packagename1,packagename2`. Not as fancy as `apt-get` or even `apt-cyg` but it does the trick in most cases. And you can also run this from `cmd.exe` (after closing Cygwin). – the Jun 02 '15 at 16:40
-
2@Steve , the answer by Dawid says it moved to "sage". http://stackoverflow.com/a/23143997/80772 – eel ghEEz Feb 05 '16 at 17:29
-
3Since the original project is dead, I suggest looking at this (as of the time of this comment) active fork: https://github.com/kou1okada/apt-cyg – Vladimir Panteleev Aug 19 '17 at 17:37
-
@VladimirPanteleev Wow, wasn't aware of this and I've been using the transcode version for years - thanks! – Hashim Aziz Mar 24 '19 at 23:55
There exist some scripts, which can be used as simple package managers for Cygwin. But it’s important to know, that they always will be quite limited, because of...ehm...Windows.
Installing or removing packages is fine, each package manager for Cygwin can do that. But updating is a pain since Windows doesn’t allow you to overwrite an executable, which is currently running. So you can’t update e.g. Cygwin DLL or any package which contains the currently running executable from the Cygwin itself. There is also this note on the Cygwin Installation page:
"The basic reason for not having a more full-featured package manager is that such a program would need full access to all of Cygwin’s POSIX functionality. That is, however, difficult to provide in a Cygwin-free environment, such as exists on first installation. Additionally, Windows does not easily allow overwriting of in-use executables so installing a new version of the Cygwin DLL while a package manager is using the DLL is problematic."
Cygwin’s setup uses Windows registry to overwrite executables which are in use
and this method requires a reboot of Windows. Therefore, it’s better to close
all Cygwin processes before updating packages, so you don’t have to reboot
your computer to actually apply the changes. Installation of a new package
should be completely without any hassles. I don’t think any of package managers
except of Cygwin’s setup.exe
implements any method to overwrite files in use,
so it would simply fail if it cannot overwrite them.
Some package managers for Cygwin:
apt-cyg
Update: the repository was disabled recently due to copyright issues (DMCA takedown). It looks like the owner of the repository issued the DMCA takedown on his own repository and created a new project called Sage (see bellow).
The best one for me. Simply because it’s one of the most recent. It doesn’t use Cygwin’s setup.exe
, it rather re-implements, what setup.exe
does. It works correctly for both platforms - x86 as well as x86_64. There are a lot of forks with more or less additional features. For example, the kou1okada fork is one of the improved versions, which is really great.
apt-cyg is just a shell script, there is no installation. Just download it (or clone the repository), make it executable and copy it somewhere to the PATH:
chmod +x apt-cyg # set executable bit
mv apt-cyg /usr/local/bin # move somewhere to PATH
# ...and use it:
apt-cyg install vim
There is also bunch of forks with different features.
sage
Another package manager implemented as a shell script. I didn't try it but it actually looks good.
It can search for packages in a repository, list packages in a category, check dependencies, list package files, and more. It has features which other package managers don't have.
cyg-apt
Fork of abandoned original cyg-apt with improvements and bugfixes. It has quite a lot of features and it's implemented in Python. Installation is made using make
.
Chocolatey’s cyg-get
If you used Chocolatey to install Cygwin, you can install the package cyg-get, which is actually a simple wrapper around Cygwin’s setup.exe
written in PowerShell.
Cygwin’s setup.exe
It also has a command line mode. Moreover, it allows you to upgrade all installed packages at once (as apt-get upgrade
does on Debian based Linux).
Example use:
setup-x86_64.exe -q --packages=bash,vim
You can create an alias for easier use, for example:
alias cyg-get="/cygdrive/d/path/to/cygwin/setup-x86_64.exe -q -P"
Then you can, for example, install Vim package with:
cyg-get vim

- 1,317
- 2
- 15
- 30

- 23,966
- 9
- 79
- 68
-
5`sage` is a fork of `apt-cyg` by its most active contributors over the past year or two (Steven Penny). It appears that earlier this year he had some disagreement with the original `apt-cyg` author (Stephen Jungels) and issued the DMCA takedown when he forked the project. Since Jungels (aka Transcode) is verifiably the original author of the project, GitHub restored the original project soon after. Currently, both projects are available – though the original project hasn't had any new code updates since the split. It’s a messy situation, really. – Anthony Geoghegan Dec 09 '16 at 13:26
-
setup-x86_64.exe -q --packages=bash,vim. This approach has helped me in the past. Just run it from command line and it works smoothly. – TheWalkingData Jan 11 '17 at 21:13
-
The sage project is no longer hosted on GitHub, at least not at that URL. I've submitted an edit which replaces it with an archive URL, but I don't know whether the project still exists at a different location or not. – AJM May 05 '22 at 12:05
First, download installer at: https://cygwin.com/setup-x86_64.exe (Windows 64bit), then:
# move installer to cygwin folder
mv C:/Users/<you>/Downloads/setup-x86_64.exe C:/cygwin64/
# add alias to bash_aliases
echo "alias cygwin='C:/cygwin64/setup-x86_64.exe -q -P'" >> ~/.bash_aliases
source ~/.bash_aliases
# add bash_aliases to bashrc if missing
echo "source ~/.bash_aliases" >> ~/.profile
e.g.
# install vim
cygwin vim
# see other options
cygwin --help

- 1,974
- 24
- 19
-
I'm using a method very similar to this and it's working really well for me, providing you know the names of the packages you want to install beforehand that is ;-) – Gary Doublé Feb 21 '19 at 12:20
-
-
I wanted a solution for this similar to apt-get --print-uris
, but unfortunately apt-cyg doesn't do this. The following is a solution that allowed me to download only the packages I needed, with their dependencies, and copy them to the target for installation. Here is a bash script that parses the output of apt-cyg
into a list of URIs:
#!/usr/bin/bash
package=$1
depends=$( \
apt-cyg depends $package \
| perl -ne 'while ($x = /> ([^>\s]+)/g) { print "$1\n"; }' \
| sort \
| uniq)
depends=$(echo -e "$depends\n$package")
for curpkg in $depends; do
if ! grep -q "^$curpkg " /etc/setup/installed.db; then
apt-cyg show $curpkg \
| perl -ne '
if ($x = /install: ([^\s]+)/) {
print "$1\n";
}
if (/\[prev\]/) {
exit;
}'
fi
done
The above will print out the paths of the packages that need downloading, relative to the cygwin mirror root, omitting any packages that are already installed. To download them, I wrote the output to a file cygwin-packages-list
and then used wget:
mirror=http://cygwin.mirror.constant.com/
uris=$(for line in $(cat cygwin-packages-list); do echo "$mirror$line"; done)
wget -x $uris
The installer can then be used to install from a local cache directory. Note that for this to work I needed to copy setup.ini
from a previous cygwin package cache to the directory with the downloaded files (otherwise the installer doesn't know what's what).

- 4,541
- 1
- 18
- 23
Old question, but still relevant. Here is what worked for me today (6/26/16).
From the bash shell:
lynx -source rawgit.com/transcode-open/apt-cyg/master/apt-cyg > apt-cyg
install apt-cyg /bin

- 254,901
- 44
- 429
- 631
-
1`wget` or `curl` is probably a better tool for this. (And personally, I'd install it in some other directory in my `$PATH` rather than in `/bin`.) – Keith Thompson Jul 22 '16 at 21:34
Dawid Ferenczy's answer is pretty complete but after I tried almost all of his options I've found that the Chocolatey’s cyg-get was the best (at least the only one that I could get to work).
I was wanting to install wget
, the steps was this:
choco install cyg-get
Then:
cyg-get wget

- 3,377
- 2
- 30
- 40

- 9,475
- 5
- 65
- 73
Usually before installing a package one has to know its exact name:
# define a string to search
export to_srch=perl
# get html output of search and pick only the cygwin package names
wget -qO- "https://cygwin.com/cgi-bin2/package-grep.cgi?grep=$to_srch&arch=x86_64" | \
perl -l -ne 'm!(.*?)<\/a>\s+\-(.*?)\:(.*?)<\/li>!;print $2'
# and install
# install multiple packages at once, note the
setup-x86_64.exe -q -s http://cygwin.mirror.constant.com -P "<<chosen_package_name>>"

- 5,114
- 1
- 56
- 53