{"id":13578441,"url":"https://github.com/facebook/dotslash","last_synced_at":"2026-04-10T01:30:21.234Z","repository":{"id":221104060,"uuid":"753431230","full_name":"facebook/dotslash","owner":"facebook","description":"Simplified executable deployment","archived":false,"fork":false,"pushed_at":"2025-05-14T00:11:45.000Z","size":2755,"stargazers_count":688,"open_issues_count":19,"forks_count":25,"subscribers_count":16,"default_branch":"main","last_synced_at":"2025-05-14T02:15:49.567Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://dotslash-cli.com","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/facebook.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE-APACHE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-02-06T05:21:56.000Z","updated_at":"2025-05-14T00:11:48.000Z","dependencies_parsed_at":"2024-03-06T00:23:49.819Z","dependency_job_id":"ac2ab267-a9b1-4a5d-b396-57eb097aa2f7","html_url":"https://github.com/facebook/dotslash","commit_stats":{"total_commits":109,"total_committers":39,"mean_commits":"2.7948717948717947","dds":0.6513761467889908,"last_synced_commit":"e1dc5ff1d08aa11cf3ed43922db44fdf93984679"},"previous_names":["facebook/dotslash"],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/facebook%2Fdotslash","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/facebook%2Fdotslash/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/facebook%2Fdotslash/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/facebook%2Fdotslash/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/facebook","download_url":"https://codeload.github.com/facebook/dotslash/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254092798,"owners_count":22013292,"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":[],"created_at":"2024-08-01T15:01:30.670Z","updated_at":"2026-04-10T01:30:21.206Z","avatar_url":"https://github.com/facebook.png","language":"Rust","funding_links":[],"categories":["Rust","others"],"sub_categories":[],"readme":"\u003cdiv class=\"title-block\" style=\"text-align: center;\" align=\"center\"\u003e\n\n# DotSlash: simplified executable deployment\n\n![License] [![Build Status]][CI]\n\n[License]:\n  https://img.shields.io/badge/license-MIT%20OR%20Apache--2.0-blueviolet.svg\n[Build Status]:\n  https://github.com/facebook/dotslash/actions/workflows/build.yml/badge.svg?branch=main\n[CI]: https://github.com/facebook/dotslash/actions/workflows/build.yml\n\n\u003c/div\u003e\n\nDotSlash (`dotslash`) is a command-line tool that lets you represent a set of\nplatform-specific, heavyweight executables with an equivalent small,\neasy-to-read text file. In turn, this makes it efficient to store executables in\nsource control without hurting repository size. This paves the way for checking\nbuild toolchains and other tools directly into the repo, reducing dependencies\non the host environment and thereby facilitating reproducible builds.\n\nWe will illustrate this with\n[an example taken from the DotSlash website](https://dotslash-cli.com/docs/).\nTraditionally, if you want to vendor a specific version of Node.js into your\nproject and you want to support both macOS and Linux, you likely need at least\ntwo binaries (one for macOS and one for Linux) as well as a shell script like\nthis:\n\n```shell\n#!/bin/bash\n\n# Copied from https://stackoverflow.com/a/246128.\nDIR=\"$( cd -- \"$( dirname -- \"${BASH_SOURCE[0]}\" )\" \u0026\u003e /dev/null \u0026\u0026 pwd )\"\n\nif [ \"$(uname)\" == \"Darwin\" ]; then\n  # In this example, assume node-mac-v18.16.0 is a universal macOS binary.\n  \"$DIR/node-mac-v18.16.0\" \"$@\"\nelse\n  \"$DIR/node-linux-v18.16.0\" \"$@\"\nfi\n\nexit $?\n```\n\nWith DotSlash, the shell script and the binaries can be replaced with a single\nfile named `node`:\n\n```jsonc\n#!/usr/bin/env dotslash\n\n// The URLs in this file were taken from https://nodejs.org/dist/v18.19.0/\n\n{\n  \"name\": \"node-v18.19.0\",\n  \"platforms\": {\n    \"macos-aarch64\": {\n      \"size\": 40660307,\n      \"hash\": \"blake3\",\n      \"digest\": \"6e2ca33951e586e7670016dd9e503d028454bf9249d5ff556347c3d98c347c34\",\n      \"format\": \"tar.gz\",\n      \"path\": \"node-v18.19.0-darwin-arm64/bin/node\",\n      \"providers\": [\n        {\n          \"url\": \"https://nodejs.org/dist/v18.19.0/node-v18.19.0-darwin-arm64.tar.gz\"\n        }\n      ]\n    },\n    // Note that with DotSlash, it is straightforward to specify separate\n    // binaries for different platforms, such as x86 vs. arm64 on macOS.\n    \"macos-x86_64\": {\n      \"size\": 42202872,\n      \"hash\": \"blake3\",\n      \"digest\": \"37521058114e7f71e0de3fe8042c8fa7908305e9115488c6c29b514f9cd2a24c\",\n      \"format\": \"tar.gz\",\n      \"path\": \"node-v18.19.0-darwin-x64/bin/node\",\n      \"providers\": [\n        {\n          \"url\": \"https://nodejs.org/dist/v18.19.0/node-v18.19.0-darwin-x64.tar.gz\"\n        }\n      ]\n    },\n    \"linux-x86_64\": {\n      \"size\": 44694523,\n      \"hash\": \"blake3\",\n      \"digest\": \"72b81fc3a30b7bedc1a09a3fafc4478a1b02e5ebf0ad04ea15d23b3e9dc89212\",\n      \"format\": \"tar.gz\",\n      \"path\": \"node-v18.19.0-linux-x64/bin/node\",\n      \"providers\": [\n        {\n          \"url\": \"https://nodejs.org/dist/v18.19.0/node-v18.19.0-linux-x64.tar.gz\"\n        }\n      ]\n    }\n  }\n}\n```\n\nAssuming `dotslash` is on your `$PATH` and you remembered to `chmod +x node` to\nmark it as executable, you can now run your Node.js wrapper exactly as you did\nbefore:\n\n```shell\n$ ./node --version\nv18.16.0\n```\n\nThe first time you run `./node --version`, you will likely experience a small\ndelay while DotSlash fetches, decompresses, and verifies the appropriate\n`.tar.gz`, but subsequent invocations should be instantaneous.\n\nTo understand what is happening under the hood, read the article on\n[how DotSlash works](https://dotslash-cli.com/docs/execution/).\n\n## Installing DotSlash\n\nSee the [installation instructions](https://dotslash-cli.com/docs/installation/)\non the DotSlash website.\n\n## License\n\nDotSlash is licensed under both the MIT license and Apache-2.0 license; the\nexact terms can be found in the [LICENSE-MIT](LICENSE-MIT) and\n[LICENSE-APACHE](LICENSE-APACHE) files, respectively.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffacebook%2Fdotslash","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffacebook%2Fdotslash","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffacebook%2Fdotslash/lists"}