Skip to content


Repository files navigation

emanate Build Status PyPI OpenSSF Best Practices

Symlink files from one directory into another directory.

Inspired by effuse and stow.


$ pip3 install emanate

Or find the latest release and grab the emanate-<version>.pyz file. This should work as a standalone executable. If it doesn't, try python3 emanate-<version>.pyz.

Emanate version numbers follow the semantic versioning convention. A PEP 440 version specification for compatible releases, like ~= 7.0, is the recommended way to select appropriate versions.


~$ cat ~/.bashrc
cat: /home/pup/.bashrc: No such file or directory
~$ pip3 install emanate
~$ cd ~/dotfiles
~/dotfiles$ ls -al
drwxr-xr-x.  9 pup pup 4096 Jun  3 12:06 ./
drwx------. 74 pup pup 4096 Jun  3 12:06 ../
drwxr-xr-x.  2 pup pup 4096 Jun  3 11:59 bin/
drwxr-xr-x.  6 pup pup 4096 Jun  3 11:59 .config/
drwxr-xr-x.  8 pup pup 4096 Jun  3 12:10 .git/
-rw-r--r--.  1 pup pup  486 Jun  3 11:59 .bash_aliases
-rw-r--r--.  1 pup pup   78 Jun  3 11:59 .bash_env
-rw-r--r--.  1 pup pup 1987 Jun  3 11:59 .bashrc
-rw-r--r--.  1 pup pup  163 Jun  3 12:06
~/dotfiles$ cat .bashrc
# TODO: Write .bashrc.
~/dotfiles$ echo '{"ignore": [""]}' > emanate.json
~/dotfiles$ emanate
~/dotfiles$ cat ~/.bashrc
# TODO: Write .bashrc.


Bug reports and pull requests are welcome on GitHub at Please report security problems to the normal issue tracker.

When adding new functionality, please add tests. Mention @duckinator if you need assistance with adding tests.


The project is available as open source under the terms of the MIT License.

Code of Conduct

Everyone interacting in the emanate project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.