{"id":15712474,"url":"https://github.com/olaoluwam/scaffy","last_synced_at":"2025-07-22T18:35:53.296Z","repository":{"id":41866593,"uuid":"456124222","full_name":"OlaoluwaM/scaffy","owner":"OlaoluwaM","description":"A CLI tool for boostrapping your favourite tools with your custom configurations","archived":false,"fork":false,"pushed_at":"2022-07-16T10:04:39.000Z","size":7583,"stargazers_count":5,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-20T17:09:17.514Z","etag":null,"topics":["cli","typescript"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/@olaolum/scaffy","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/OlaoluwaM.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-02-06T10:55:39.000Z","updated_at":"2024-09-30T13:38:56.000Z","dependencies_parsed_at":"2022-09-18T22:50:57.375Z","dependency_job_id":null,"html_url":"https://github.com/OlaoluwaM/scaffy","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/OlaoluwaM/scaffy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OlaoluwaM%2Fscaffy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OlaoluwaM%2Fscaffy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OlaoluwaM%2Fscaffy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OlaoluwaM%2Fscaffy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OlaoluwaM","download_url":"https://codeload.github.com/OlaoluwaM/scaffy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OlaoluwaM%2Fscaffy/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266552761,"owners_count":23947184,"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","status":"online","status_checked_at":"2025-07-22T02:00:09.085Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"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":["cli","typescript"],"created_at":"2024-10-03T21:16:20.655Z","updated_at":"2025-07-22T18:35:53.248Z","avatar_url":"https://github.com/OlaoluwaM.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- #### CFPB Open Source Project Template Instructions\n\n1. Create a new project.\n2. [Copy these files into the new project](#installation)\n3. Update the README, replacing the contents below as prescribed.\n4. Add any libraries, assets, or hard dependencies whose source code will be included in\n   the project's repository to the _Exceptions_ section in the [TERMS](TERMS.md).\n\n- If no exceptions are needed, remove that section from TERMS.\n\n5. If working with an existing code base, answer the questions on the\n   [open source checklist](opensource-checklist.md)\n6. Delete these instructions and everything up to the _Project Title_ from the README.\n7. Write some great software and tell people about it.\n\n\u003e Keep the README fresh! It's the first thing people see and will make the initial\n\u003e impression.\n\n## Installation\n\nTo install all of the template files, run the following script from the root of your\nproject's directory:\n\n```\nbash -c \"$(curl -s https://raw.githubusercontent.com/CFPB/development/main/open-source-template.sh)\"\n```\n\n--- --\u003e\n\n# Scaffy\n\n\u003ca href=\"https://www.producthunt.com/posts/scaffy?utm_source=badge-featured\u0026utm_medium=badge\u0026utm_souce=badge-scaffy\" target=\"_blank\"\u003e\u003cimg src=\"https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=345971\u0026theme=dark\" alt=\"Scaffy - Aggregated\u0026#0032;custom\u0026#0032;configs\u0026#0032;with\u0026#0032;dependencies | Product Hunt\" style=\"width: 250px; height: 54px;\" width=\"250\" height=\"54\" /\u003e\u003c/a\u003e\n\n![Logo](demo/logo_transparent.png)\n\n- [Scaffy](#scaffy)\n  - [Description](#description)\n    - [Built with :boxing_glove:](#built-with-boxing_glove)\n  - [Perquisites](#perquisites)\n  - [Installation](#installation)\n  - [Configuration](#configuration)\n  - [Usage](#usage)\n  - [LICENSE](#license)\n\n## Description\n\n\u003c!-- Put a meaningful, short, plain-language description of what\nthis project is trying to accomplish and why it matters.\nDescribe the problem(s) this project solves.\nDescribe how this software can improve the lives of its audience. --\u003e\n\nConfiguring tools can suck. That's why we customize them once, then store them in some\nrepo for reuse. This works, but most tools require a set of dependencies, alongside your\ncustom configurations, to work. This can be a pain, but scaffy is here to help.\n\nI built scaffy because I didn't enjoy constantly browsing for the right combination of\ndependencies to get my configurations to work. Furthermore, I'd sometimes use other\npeople's configs but they would almost always get buried in my abyss of Github\nstars/bookmarks which would make searching for them such a hassle.\n\nBut with scaffy, I can aggregate all related dependencies and configurations under an\nalias and, with that alias, bootstrap my projects with a single command.\n\n\u003c!-- **Screenshot**: If the software has visual components, place a screenshot after the\ndescription; e.g.,\n--\u003e\n\n\u003c!-- TODO Add video demo here --\u003e\n\n![Demo](demo/scaffy.demo.gif)\n\n### Built with :boxing_glove:\n\n\u003c!-- **Technology stack**: Indicate the technological nature of the software, including\n  primary programming language(s) and whether the software is intended as standalone or as\n  a module in a framework or other ecosystem. --\u003e\n\nScaffy is built with Typescript and it is meant to be used as a standalone CLI utility\n\n\u003c!-- - **Links to production or demo instances**\n- Describe what sets this apart from related-projects. Linking to another doc or page is\n  OK if this can't be expressed in a sentence or two. --\u003e\n\n## Perquisites\n\n\u003c!-- Describe any dependencies that must be installed for this software to work. This includes\nprogramming languages, databases or other storage mechanisms, build tools, frameworks, and\nso forth. If specific versions of other software are required, or known not to work, call\nthat out. --\u003e\n\nScaffy doesn't ask much :smile:. All it needs is for node (v16+) and npm to be installed\n\n## Installation\n\n\u003c!-- Detailed instructions on how to install, configure, and get the project running. This\nshould be frequently tested to ensure reliability. Alternatively, link to a separate\n[INSTALL](INSTALL.md) document. --\u003e\n\n```bash\n  npm i -g @olaolum/scaffy\n```\n\n## Configuration\n\n\u003c!-- If the software is configurable, describe it in detail, either here or in other\ndocumentation to which you link. --\u003e\n\nTaking inspiration from the tsconfig.json, any json file that ends in **.scaffy.json** is\na valid configuration file.\n\nScaffy will search the root of your project directory for a your configuration file. If it\nstumbles upon many, it will give you the option to choose.\n\nThe schema for the configuration file is as follows:\n\n```typescript\ninterface ConfigSchema {\n  [name: string]: {\n    readonly extends:\n      | string\n      | {\n          readonly from: string;\n          readonly merge: (\n            | 'depNames'\n            | 'devDepNames'\n            | 'remoteConfigurationUrls'\n            | 'localConfigurationPaths'\n          )[];\n        };\n    depNames?: string[];\n    devDepNames?: string[];\n    remoteConfigurationUrls?: string[];\n    localConfigurationPaths?: string[];\n  };\n}\n```\n\nThe schema above states that each entry in the scaffy configuration file must be given a\nname. This name can be anything you desire, literally `anything-you-desire`. The names are\nnaught but a means by which scaffy groups dependencies and configuration files.\n\nAll entry members are optional, but at least one member must be valid for the entry to not\nbe ignored.\n\nHere is an example scaffy config entry\n\n```json\n{\n  \"some-other-config\": {\n    \"devDepNames\": [\"eslint@latest\", \"eslint-config-prettier@1.0.0\"]\n  },\n  \"cra-eslint\": {\n    \"extends\": \"some-other-config\",\n    \"devDepNames\": [\"eslint-plugin-better-styled-components\", \"eslint-plugin-prettier\"],\n    \"remoteConfigurationUrls\": [\n      \"https://raw.githubusercontent.com/OlaoluwaM/planets-facts-challenge/main/.eslintrc.js\",\n      \"https://raw.githubusercontent.com/OlaoluwaM/planets-facts-challenge/main/.prettierrc\"\n    ]\n  }\n}\n```\n\nYou can also add version information like `@latest` or specific version number like\n`@7.3.0` to any of the dependencies listed in the `depNames` or `devDepNames` options\n\nAdditionally, in the spirit of DRY, scaffy allows you to extend other configs in whole or\nin part. When extending one entry from another, a merge will occur with all properties of\nthe entries involved (excluding the merging of the `extends` property of course).\n\nTo have an entry extend from another, simply add an `extends` key to the extending entry\nwith the value being the name of the entry to be extended from. An example has been\nprovided above\n\nFor more specific extensions, where you only wish to extend part of an entry, scaffy's got\nyour back with that too! Here is an example\n\n```json\n{\n  \"sample-parent\": {\n    \"devDepNames\": [\"eslint\", \"jest\"],\n    \"remoteConfigurationUrls\": [\n      \"https://raw.githubusercontent.com/OlaoluwaM/configs-deperacated-/master/jsconfig.json\"\n    ]\n  },\n\n  \"extending-entry\": {\n    \"extends\": {\n      \"from\": \"sample-parent\",\n      \"merge\": [\"devDepNames\", \"remoteConfigurationUrls\"]\n    },\n    \"devDepNames\": [\"zod\"],\n    \"depNames\": [\"eslint-plugin-react\", \"emotion\", \"yup\"],\n    \"remoteConfigurationUrls\": [\n      \"https://raw.githubusercontent.com/OlaoluwaM/configs/old-do-not-delete/typescript/.eslintrc.js\"\n    ],\n    \"localConfigurationPaths\": [\"../local-configs/.prettierrc\"]\n  }\n}\n```\n\nHere, we have the entry `extending-entry` extending only the `devDepNames` and\n`remoteConfigurationUrls` from the `sample-parent` entry\n\n## Usage\n\n\u003c!-- Show users how to use the software. Be specific. Use appropriate formatting when showing\ncode snippets. --\u003e\n\nWith the example configuration above, here is how scaffy is used\n\n```bash\n  # To bootstrap cra-eslint we can do\n  scaffy bootstrap cra-eslint\n\n  # If we feel cra-eslint doesn't do what we want we can remove it using\n  scaffy remove cra-eslint\n\n  # For the version\n  scaffy -v\n\n  # You can also specify a config file with the following option\n  scaffy bootstrap cra-eslint -c ./example.scaffy.json\n\n  # You can get more info run\n  scaffy -h\n```\n\n\u003c!-- ## How to test the software\n\nIf the software includes automated tests, detail how to run those tests. --\u003e\n\n\u003c!-- ## Known issues\n\nDocument any known significant shortcomings with the software.\n\n## Getting help\n\nInstruct users how to get help with this software; this might include links to an issue\ntracker, wiki, mailing list, etc.\n\n**Example**\n\nIf you have questions, concerns, bug reports, etc, please file an issue in this\nrepository's Issue Tracker.\n\n## Getting involved\n\nThis section should detail why people should get involved and describe key areas you are\ncurrently focusing on; e.g., trying to get feedback on features, fixing certain bugs,\nbuilding important pieces, etc.\n\nGeneral instructions on _how_ to contribute should be stated with a link to\n[CONTRIBUTING](CONTRIBUTING.md). --\u003e\n\n## LICENSE\n\nCopyright © 2022 Olaoluwa Mustapha Released under the MIT license.\n\n\u003c!-- ## Credits and references\n\n1. Projects that inspired you\n2. Related projects\n3. Books, papers, talks, or other sources that have meaningful impact or influence on this\n   project --\u003e\n\n\u003c!-- ## To Do\n\n- Yarn support --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Folaoluwam%2Fscaffy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Folaoluwam%2Fscaffy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Folaoluwam%2Fscaffy/lists"}