{"id":13679517,"url":"https://github.com/numandev1/mtsl","last_synced_at":"2025-06-18T00:34:45.769Z","repository":{"id":57304675,"uuid":"275235336","full_name":"numandev1/mtsl","owner":"numandev1","description":"Tangible symlinks using cokidar (CLI)","archived":false,"fork":false,"pushed_at":"2022-10-02T19:24:46.000Z","size":1697,"stargazers_count":23,"open_issues_count":0,"forks_count":6,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-06-04T11:34:59.803Z","etag":null,"topics":["chokidar","cli","symlinks","tangible","watchman"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/numandev1.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null},"funding":{"github":"nomi9995","patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":"http://buymeacoffee.com/numan.dev"}},"created_at":"2020-06-26T19:47:32.000Z","updated_at":"2025-05-15T02:14:53.000Z","dependencies_parsed_at":"2023-01-19T02:30:19.747Z","dependency_job_id":null,"html_url":"https://github.com/numandev1/mtsl","commit_stats":null,"previous_names":["nomi9995/mtsl"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/numandev1/mtsl","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/numandev1%2Fmtsl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/numandev1%2Fmtsl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/numandev1%2Fmtsl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/numandev1%2Fmtsl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/numandev1","download_url":"https://codeload.github.com/numandev1/mtsl/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/numandev1%2Fmtsl/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260462607,"owners_count":23013144,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chokidar","cli","symlinks","tangible","watchman"],"created_at":"2024-08-02T13:01:06.404Z","updated_at":"2025-06-18T00:34:40.758Z","avatar_url":"https://github.com/numandev1.png","language":"JavaScript","funding_links":["https://github.com/sponsors/nomi9995","http://buymeacoffee.com/numan.dev","https://www.buymeacoffee.com/numan.dev"],"categories":["JavaScript"],"sub_categories":[],"readme":"### Would you like to support me?\n\n\u003cdiv align=\"center\"\u003e\n\u003ca href=\"https://github.com/numandev1?tab=followers\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/followers/numandev1?label=Follow%20%40numandev1\u0026style=social\" height=\"36\" /\u003e\n\u003c/a\u003e\n\u003ca href=\"https://www.youtube.com/channel/UCYCUspfN7ZevgCj3W5GlFAw\"\u003e\u003cimg src=\"https://img.shields.io/youtube/channel/subscribers/UCYCUspfN7ZevgCj3W5GlFAw?style=social\" height=\"36\" /\u003e\u003ca/\u003e\n\u003c/br\u003e\n\u003ca href=\"https://www.buymeacoffee.com/numan.dev\" target=\"_blank\"\u003e\u003cimg src=\"https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png\" alt=\"Buy Me A Coffee\" style=\"height: auto !important;width: auto !important;\" \u003e\u003c/a\u003e\n\u003c/div\u003e\n\n---\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"/media/demo.gif\" height=\"450\"/\u003e\n\u003c/p\u003e\n\n\u003e Make Tangible symlinks\n\nMtsl listens to changes in some folder (using [Chokidar](https://www.npmjs.com/package/chokidar)) and copies changed files into another folder.\n\n## Working\nActually, it is watcher **CLI** that copy files from source to destination\n\n## Why Mtsl not other packages?\nThere are other tangible symlink packages available but every package has so many bugs. famous package is [wml](https://github.com/wix/wml) but that have many bugs. This package is working as required\n\nLet's face it, sometimes symbolic links just aren't enough. Github has more than [80K issues](https://github.com/search?utf8=✓\u0026q=support+for+symlinks\u0026type=Issues) with the words \"support for symlinks\" in them. \n\n\nMtsl 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 \u003clinkId\u003e`) to start listening. link index can be get from `mtsl list` That's it!\n\nNote that since Mtsl is based on Chokidar it **does not support symlinks**. lol.\n\n## Install\n\n```sh\nnpm install -g mtsl\n```\n\n## Usage\n\n```sh\n# add the link to mtsl using `mtsl add -s \u003csrc\u003e -d \u003cdest\u003e`\nmtsl add -s ~/source-dir -d ~/User/destination-dir\n```\n###### output\nAdded link: (0) /Users/username/source-dir -\u003e /Users/username/User/destination-dir\n```\n# above command will give you link id what will use to start watching link that is added\nmtsl start 0\n```\n## OR\n make start symlink without add link\n```sh\n# it is same as `mtsl start` but it starts to make symlink without adding the link\nmtsl startwithoutadd -s \u003csrc\u003e -d \u003cdest\u003e\n````\n\n## Commands\n\n#### add\n\n`mtsl add -s \u003csrc\u003e -d \u003cdest\u003e` \n(or `mtsl add -s \u003csrc\u003e -d \u003cdest\u003e -skip-prompt`)\n\nAdds a link.\n\nmtsl will not start listening to changes until you start it by running `mtsl start \u003clinkId\u003e`.\n\nEach link is given an unique id, you can see all links and their ids by running `mtsl list`.\nLinks are saved to `src/links.json` in your `mtsl` install directory, meaning that \nyour configuration is specific to that `mtsl` install.\n\n#### remove\n\n`mtsl remove \u003clinkId\u003e`\n\nRemoves a link.\n\n#### remove all\n\n`mtsl removeall`\n\nRemoves all link that made by using `mtsl add`.\n\n#### start\n\n`mtsl start \u003clinkId\u003e`\n\nStarts mtsl.\n\nIt first copies all watched files from source to destination folder and then waits for new changes to happen.\n\n#### startwithoutadd\n\n`mtsl startwithoutadd -s \u003csrc\u003e -d \u003cdest\u003e`\n\nStarts mtsl without add link.\n\nit is same as `mtsl start` but it starts to make symlink without adding the link.\n\n#### list\n\n`mtsl list`\n\nLists all links.\n\nShows each link's id and source/destination folders.\n\n## Miscellaneous\n\n#### Ignored folders\n\nWhen 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.\n\nIf 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](https://en.wikipedia.org/wiki/Create,_read,_update_and_delete) from source to destination.\n\nIn the following example we are ignoring the \".git\" and \"node_modules\" folders:\n\n```json\n{\n    \"ignore_dirs\": [\n        \".git\",\n        \"node_modules\"\n    ]\n}\n```\n\n## Contributing\n\nSee the [Contributing page](CONTRIBUTING.md).\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore --\u003e\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/nomi9995\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/36044436?s=460\u0026u=c7471cd9ccec793c7a0fccc7db475a577ff7969d\u0026v=4\" width=\"100px;\" alt=\"Numan\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eNuman\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#infra-Numan\" title=\"Infrastructure (Hosting, Build-Tools, etc)\"\u003e🚇\u003c/a\u003e \u003ca href=\"https://github.com/nomi9995/mtsl/commits?author=nomi9995\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\n## License\n\nCopyright (c) 2020 Nomi9995. Licensed under the MIT license.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnumandev1%2Fmtsl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnumandev1%2Fmtsl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnumandev1%2Fmtsl/lists"}