DEV Community

Cover image for Make Tangible symlinks  (npm)

Make Tangible symlinks (npm)

nomi9995 profile image Numan Updated on ・3 min read

I have made CLI for make Tangible symlinks.

Make Tangible symlinks

Mtsl listens to changes in some folder (using Chokidar) and copies changed files into another folder.


Actually, it is watcher CLI that copy files from source to destination

Why Mtsl not other packages?

There are other tangible symlink packages available but every package has so many bugs. famous package is wml but that have many bugs. This package is working as required

Let's face it, sometimes symbolic links just aren't enough. Github has more than 80K issues with the words "support for symlinks" in them.

Mtsl is a CLI tool that works pretty much like ln -s [src] [dest]. You first set up your links by using the mtsl add -s [src] -d [dest] command and then run the mtsl service (mtsl start <linkId>) to start listening. link index can be get from mtsl list That's it!

Note that since Mtsl is based on Chokidar it does not support symlinks. lol.


npm install -g mtsl


# add the link to mtsl using `mtsl add -s <src> -d <dest>`
mtsl add -s ~/source-dir -d ~/User/destination-dir

Added link: (0) /Users/username/source-dir -> /Users/username/User/destination-dir

# above command will give you link id what will use to start watching link that is added
mtsl start 0


make start symlink without add link

# it is same as `mtsl start` but it starts to make symlink without adding the link
mtsl startwithoutadd -s <src> -d <dest>




mtsl add -s <src> -d <dest>
(or mtsl add -s <src> -d <dest> -skip-prompt)

Adds a link.

mtsl will not start listening to changes until you start it by running mtsl start <linkId>.

Each link is given an unique id, you can see all links and their ids by running mtsl list.
Links are saved to src/links.json in your mtsl install directory, meaning that
your configuration is specific to that mtsl install.


mtsl remove <linkId>

Removes a link.

remove all

mtsl removeall

Removes all link that made by using mtsl add.


mtsl start <linkId>

Starts mtsl.

It first copies all watched files from source to destination folder and then waits for new changes to happen.


mtsl startwithoutadd -s <src> -d <dest>

Starts mtsl without add link.

it is same as mtsl start but it starts to make symlink without adding the link.


mtsl list

Lists all links.

Shows each link's id and source/destination folders.


Ignored folders

When adding a new link Mtsl will try to detect if your source folder is a git repository or an npm package, it will then offer to ignore the ".git" and "node_modules" folders for you.

If you want to add more folders to your ignored folders first create a file named .mtslconfig.json in your source folder, this file should contain ignore directories for this folder which will not CRUD from source to destination.

In the following example we are ignoring the ".git" and "node_modules" folders:

"ignore_dirs": [


See the Contributing page.

Discussion (0)

Editor guide