{"id":25063688,"url":"https://github.com/ldm-org/ldm","last_synced_at":"2026-02-26T17:03:21.786Z","repository":{"id":275874344,"uuid":"927437768","full_name":"ldm-org/ldm","owner":"ldm-org","description":"Wire-up fragmented codes and files from various sources with a single command.","archived":false,"fork":false,"pushed_at":"2025-04-03T00:23:16.000Z","size":607,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-08-23T12:09:35.736Z","etag":null,"topics":["automation","cd","ci","dependency","dx","github","jsdelivr","ldm","loose-dependency-manager","manager"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/loose-dependency-manager","language":"TypeScript","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/ldm-org.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-02-05T00:29:15.000Z","updated_at":"2025-05-14T08:49:36.000Z","dependencies_parsed_at":null,"dependency_job_id":"4ffc6dcf-df30-431a-86c6-2879acf561df","html_url":"https://github.com/ldm-org/ldm","commit_stats":null,"previous_names":["ldm-org/ldm"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/ldm-org/ldm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ldm-org%2Fldm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ldm-org%2Fldm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ldm-org%2Fldm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ldm-org%2Fldm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ldm-org","download_url":"https://codeload.github.com/ldm-org/ldm/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ldm-org%2Fldm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29865414,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-26T16:38:37.846Z","status":"ssl_error","status_checked_at":"2026-02-26T16:37:58.932Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["automation","cd","ci","dependency","dx","github","jsdelivr","ldm","loose-dependency-manager","manager"],"created_at":"2025-02-06T18:44:50.212Z","updated_at":"2026-02-26T17:03:21.742Z","avatar_url":"https://github.com/ldm-org.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n\u003ca href=\"#\"\u003e\n\u003cimg src=\"https://raw.githubusercontent.com/ldm-org/ldm/refs/heads/master/assets/logo.png\" height=\"150\"\u003e\n\u003c/a\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003e\nLoose Dependency Manager\n\u003c/h1\u003e\n\u003cp align=\"center\"\u003e\nWire-up fragmented codes and files from various sources with a single command.\n\u003cp\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://www.npmjs.com/package/loose-dependency-manager\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/loose-dependency-manager?color=729B1B\u0026label=\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/ldm-org/ldm/actions/workflows/test.yml\"\u003e\u003cimg src=\"https://github.com/ldm-org/ldm/actions/workflows/test.yml/badge.svg?branch=release-please--branches--master\" alt=\"test status\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/ldm-org/ldm/blob/master/.github/CONTRIBUTING.md\"\u003e\u003cimg src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\" alt=\"PRs welcome\"\u003e\u003c/img\u003e\u003c/a\u003e\n\u003cp\u003e\n\n\u003cp align=\"center\"\u003e\n \u003ca href=\"#documentation\"\u003eDocumentation\u003c/a\u003e | \u003ca href=\"#quick-start\"\u003eGetting Started\u003c/a\u003e | \u003ca href=\"#examples\"\u003eExamples\u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n\u003ca href=\"#what-is-loose-dependency-manager\"\u003eWhat is loose dependency manager?\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cbr\u003e\n\u003cbr\u003e\n\n## What is loose dependency manager?\n\nLoose Dependency Manager (`ldm`) is a tool that helps you manage dependencies from various sources in a single file.\n\nYou can think of it as a sophisticated form of [scp](https://en.wikipedia.org/wiki/Secure_copy_protocol) command\nthat can be configured with a single specification file (`ldm.yaml`) \nand that supports versioning (if the remote source supports it) and locking mechanism.\n\nCurrently, it supports the following sources:\n\n| Provider | Versioning Support | Can Download | URI Format |\n| --- | --- | --- | --- |\n| HTTP(S) | ❌ | only files | HTTP(S) URL |\n| [GitHub](https://github.com/) | ✅ | files \u0026 directories | `\u003cgithub-source-id\u003e:///path/to/file` |\n| [JSDelivr (npm)](https://www.jsdelivr.com/) | ✅ | files \u0026 directories | `\u003cjsdelivr-npm-source-id\u003e://default` or `\u003cjsdelivr-npm-source-id\u003e:///path/to/file` |\n| [JSDelivr (github)](https://www.jsdelivr.com/?docs=gh) | ✅ | files \u0026 directories | `\u003cjsdelivr-github-source-id\u003e:///path/to/file` |\n\n## Installation\n\nBefore installing `ldm`, you need to have [Node.js](https://nodejs.org/en/download) installed.\n\n```sh\nnpm install -g loose-dependency-manager\n```\n\n## Quick Start\n\n### Write a dependency specification file\n\nYou write a dependency specification file named `ldm.yaml`. \n\n\u003e [!IMPORTANT]\n\u003e **It is stronlgly recommended to set `auth.token` with personal access token**\n\u003e **when using GitHub as a source provider (even if you're using for public repositories).**\n\u003e Github API imposes a harsh rate limit of 60 requests per hour for unauthenticated requests, \n\u003e so you may run into rate limit issues without a token.\n\n```yaml\nversion: \"1\"\n\ndependencies:\n  primitive.ts:\n    uri: \"@ts-essentials/ts-essentials:///lib/primitive/index.ts\"\n    version: latest\n    destination: src/types/primitive.ts\n  camel-case:\n    uri: \"@ts-essentials/ts-essentials:///lib/camel-case\"\n    version: latest\n    destination: src/types/camel-case\n  jquery:\n    uri: jquery://default\n    version: ^3.6.4\n    destinations:\n      - src/core.min.js\n      - public/js/core.min.js\n  reset.css:\n    uri: https://meyerweb.com/eric/tools/css/reset/reset200802.css\n    destination: public/css/reset.css\n  pico.css:\n    uri: \"@picocss/pico:///css/pico.min.css\"\n    version: ^2.0.0\n    destination: public/css/pico.min.css\n\nsources:\n  \"@ts-essentials/ts-essentials\":\n    provider: github\n    uri: ts-essentials/ts-essentials\n    auth:\n      token: ${GITHUB_TOKEN}\n  jquery:\n    provider: jsdelivr:npm\n    uri: jquery\n  \"@picocss/pico\":\n    provider: jsdelivr:npm\n    uri: \"@picocss/pico\"\n\nconfig:\n  envFile: .env\n  deleteFilesOnRemove: true\n```\n\n#### YAML Validation for VSCode\n\nFor better editing experience, \nYAML validation is supported thanks to JSON schema and [YAML VSCode Extension (by RedHat)](https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml). \n\nTo enable YAML validation,\n\n- Install [YAML VSCode Extension (by RedHat)](https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml)\n- Add the following configuration to your `.vscode/settings.json` file.\n  ```json\n  {\n    \"yaml.schemas\": {\n      \"https://raw.githubusercontent.com/ldm-org/ldm/refs/heads/master/schema.json\": \"**/ldm.yaml\"\n    }\n  }\n  ```\n\n\n### Install dependencies\n\nThen in terminal, run the following command.\n\n```sh\nldm install\n```\n\nThis will produce the following file sturcture, \nassuming that `ldm.yaml` is the only file in the directory.\n\n```\n|- ldm.yaml\n|- ldm-lock.yaml\n|--- src/\n|----- core.min.js\n|----- types/\n|------- primitive.ts\n|------- camel-case/\n|--------- index.ts\n|--------- README.md\n|--- public/\n|----- css/\n|------- reset.css\n|------- pico.min.css\n|----- js/\n|------- core.min.js\n```\n\nThe example above can be summarized as following diagram.\n\n![example](./assets/diagram.png)\n\n## Documentation\n\nDocumentation is not written yet.\nI'll try my best to write it as soon as possible.\n\n## Examples\n\nYou can find examples at e2e test scenarios.\n\nCompare `given` and `expected` directory in each scenario\nto see what the execution of `scenario.ts#scenario.command` will produce.\n\n- [install](./tests/install/scenarios)\n- [upgrade](./tests/upgrade/scenarios)\n\n## Contribution\n\nSee [Contributing Guide](./.github/CONTRIBUTING.md)\n\n## License\n\n[MIT](./LICENSE) License © 2025-Present [Joseph Hwang](https://github.com/01Joseph-Hwang10)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fldm-org%2Fldm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fldm-org%2Fldm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fldm-org%2Fldm/lists"}