{"id":13527581,"url":"https://github.com/skpm/skpm","last_synced_at":"2026-06-02T04:01:10.677Z","repository":{"id":41394757,"uuid":"74605350","full_name":"skpm/skpm","owner":"skpm","description":"💎📦  A utility to build and publish Sketch plugins","archived":false,"fork":false,"pushed_at":"2023-10-10T10:41:35.000Z","size":1887,"stargazers_count":963,"open_issues_count":31,"forks_count":80,"subscribers_count":14,"default_branch":"master","last_synced_at":"2025-08-09T03:57:34.321Z","etag":null,"topics":["manager","plugin","registry","sketch","sketch-plugin","skpm","webpack"],"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/skpm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null},"funding":{"github":["mathieudutour"]}},"created_at":"2016-11-23T18:55:11.000Z","updated_at":"2025-07-24T11:54:38.000Z","dependencies_parsed_at":"2022-08-10T02:07:17.937Z","dependency_job_id":"8dfb3329-50d4-4666-b173-3a0c4121f69d","html_url":"https://github.com/skpm/skpm","commit_stats":{"total_commits":525,"total_committers":43,"mean_commits":"12.209302325581396","dds":0.2533333333333333,"last_synced_commit":"8edce5094e72af7716d2489c30855fccc231c3b6"},"previous_names":["mathieudutour/sketch-builder"],"tags_count":23,"template":false,"template_full_name":null,"purl":"pkg:github/skpm/skpm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skpm%2Fskpm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skpm%2Fskpm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skpm%2Fskpm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skpm%2Fskpm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/skpm","download_url":"https://codeload.github.com/skpm/skpm/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skpm%2Fskpm/sbom","scorecard":{"id":624515,"data":{"date":"2025-08-11","repo":{"name":"github.com/skpm/skpm","commit":"84a93890c82eb01d2fe473b9170ad74d0398169a"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.4,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":3,"reason":"Found 8/22 approved changesets -- score normalized to 3","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 16 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-21T06:02:09.694Z","repository_id":41394757,"created_at":"2025-08-21T06:02:09.694Z","updated_at":"2025-08-21T06:02:09.694Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33805341,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-02T02:00:07.132Z","response_time":109,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["manager","plugin","registry","sketch","sketch-plugin","skpm","webpack"],"created_at":"2024-08-01T06:01:52.586Z","updated_at":"2026-06-02T04:01:10.644Z","avatar_url":"https://github.com/skpm.png","language":"JavaScript","funding_links":["https://github.com/sponsors/mathieudutour"],"categories":["JavaScript","Sketch"],"sub_categories":["Development"],"readme":"\u003ch1 align=\"center\"\u003eskpm - Sketch Plugin Manager\u003c/h1\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://avatars0.githubusercontent.com/u/24660874?v=3\u0026s=200\" /\u003e\n\u003c/div\u003e\n\u003cbr /\u003e\n\u003cdiv align=\"center\"\u003e\n  \u003cstrong\u003eA utility to create, build and publish \u003ca href=\"https://www.sketchapp.com/\"\u003esketch\u003c/a\u003e plugins.\u003c/strong\u003e\n\u003c/div\u003e\n\n## Installation\n\n\u003e Important: [Node.js](https://nodejs.org/en/download/) \u003e V6.x is a minimum requirement. You also need the [command line tools](http://osxdaily.com/2014/02/12/install-command-line-tools-mac-os-x/) installed.\n\n```bash\nnpm install -g skpm\n```\n\n## Usage\n\n```bash\nskpm create my-plugin\n```\n\nThe above command pulls the template from [skpm/skpm](https://github.com/skpm/skpm/tree/master/template), prompts for some information, and generates the project at ./my-plugin/.\n\n* [Create a new plugin](#create-a-new-plugin)\n* [Build the plugin](#build-the-plugin)\n* [View the plugin's log](#view-the-plugins-log)\n* [Publish the plugin on the registry](#publish-the-plugin-on-the-registry)\n\n#### Create a new plugin\n\n```bash\nskpm create \u003cplugin-name\u003e\n\n--name        The plugin display name.\n--cwd         A directory to use instead of $PWD.\n--force       Force option to create the directory for the new app. [boolean] [default: false]\n--template    The repository hosting the template to start from.    [string]  [default: skpm/skpm]\n--git         Initialize version control using git.                 [boolean] [default: true]\n--install     Installs dependencies.                                [boolean] [default: true]\n```\n\n\u003e ##### A note on templates\n\u003e\n\u003e The purpose of official skpm plugin templates are to provide opinionated development tooling setups so that users can get started with actual plugin code as fast as possible. However, these templates are un-opinionated in terms of how you structure your plugin code and what libraries you use in addition to skpm.\n\u003e\n\u003e Current available official templates include:\n\u003e\n\u003e * [`skpm/skpm`](https://github.com/skpm/skpm/tree/master/template) - The simplest possible plugin setup. (_default_)\n\u003e * [`skpm/with-prettier`](https://github.com/skpm/with-prettier) - A plugin setup featuring linting with ESLint and code formatting with Prettier.\n\u003e * [`skpm/with-datasupplier`](https://github.com/skpm/with-datasupplier) - A template to create DataSupplier plugins (check [our blog](https://blog.sketchapp.com/do-more-with-data-2b765e870e4f) for more info)\n\u003e * [`skpm/with-webview`](https://github.com/skpm/with-webview) - A template to create plugins displaying some rich UI in a WebView (check [sketch-module-web-view](https://github.com/skpm/sketch-module-web-view) for more info)\n\u003e * [`skpm/with-actions`](https://github.com/skpm/with-actions) - A template to create plugins using the [Actions API](https://developer.sketch.com/plugins/actions).\n\n\u003e\n\u003e \u003e 💁 Tip: Any Github repo with a 'template' folder can be used as a custom template:\n\u003e \u003e `skpm create \u003cproject-name\u003e --template=\u003cusername\u003e/\u003crepository\u003e`\n\n#### Build the plugin\n\nOnce the installation is done, you can run some commands inside the project folder:\n\n```bash\nnpm run build\n```\n\nTo watch for changes:\n\n```bash\nnpm run watch\n```\n\nAdditionally, if you wish to run the plugin every time it is built:\n\n```bash\nnpm run start\n```\n\n#### View the plugin's log\n\nTo view the output of your `console.log`, you have a few different options:\n\n* Use the [`sketch-dev-tools`](https://github.com/skpm/sketch-dev-tools)\n* Open `Console.app` and look for the sketch logs\n* Look at the `~/Library/Logs/com.bohemiancoding.sketch3/Plugin Output.log` file\n\nSkpm provides a convenient way to do the latter:\n\n```bash\nskpm log\n\n  -f, -F        The `-f` option causes tail to not stop when end of file is\n                reached, but rather to wait for additional data to be appended\n                to the input.                       [boolean] [default: \"false\"]\n  --number, -n  Shows `number` lines of the logs.                       [number]\n```\n\n#### Publish the plugin on the registry\n\nTo publish a new version of the plugin to the registry:\n\n```bash\nskpm publish \u003cnew-version\u003e | major | minor | patch | premajor | preminor | prepatch | prerelease\n\n  --repo-url          Specify the repository URL (default to the one specified\n                      in package.json).                                 [string]\n  --skip-release      Do not create a release on GitHub.com.           [boolean]\n  --open-release, -o  Open the newly created release on GitHub.com.    [boolean]\n  --skip-registry     Do not publish to the plugins registry if not already\n                      present.                                         [boolean]\n  --download-url      Specify the new version's download URL (default to the\n                      asset of the release created on GitHub.com).      [string]\n```\n\nThe exact order of execution (without options) is as follows:\n\n* Run the `preversion` script\n* Bump `version` in package.json as requested (`patch`, `minor`, `major`, etc).\n* Run the `version` script\n* Commit and tag\n* Run the `postversion` script.\n* Run the `prepublish` or `build` script\n* Zip the folder specified in the `main` field\n* Create a draft release on GitHub\n* Upload the zip to GitHub\n* Publish the release\n* Remove the zip\n* Check the [sketchplugins/plugin-directory](https://github.com/sketchplugins/plugin-directory) repo to see if the plugin is already there. If not, open a PR to add it.\n\n## License\n\n[MIT](https://tldrlegal.com/license/mit-license)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskpm%2Fskpm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fskpm%2Fskpm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskpm%2Fskpm/lists"}