{"id":13707042,"url":"https://github.com/dl-tg/scaffolder","last_synced_at":"2026-01-14T22:24:53.185Z","repository":{"id":182780589,"uuid":"669051942","full_name":"dl-tg/scaffolder","owner":"dl-tg","description":"CLI tool to instantly generate skeleton project structure with boilerplate code, that's taken from configurable YAML file, to quickly kick-start your project ","archived":false,"fork":false,"pushed_at":"2024-02-12T21:52:17.000Z","size":1880,"stargazers_count":122,"open_issues_count":0,"forks_count":7,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-05-05T23:37:42.817Z","etag":null,"topics":["directory-utilities","folder-tooling","go","go-cli","golang","golang-cli","yaml","yaml-files","yaml-parser"],"latest_commit_sha":null,"homepage":"","language":"Go","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/dl-tg.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","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},"funding":{"github":["cemister"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"lfx_crowdfunding":null,"custom":null}},"created_at":"2023-07-21T08:22:42.000Z","updated_at":"2025-04-18T10:09:12.000Z","dependencies_parsed_at":null,"dependency_job_id":"5fee215c-30ca-4ae3-8d11-0040c09d1b41","html_url":"https://github.com/dl-tg/scaffolder","commit_stats":null,"previous_names":["cemister/scaffolder","dl-tg/scaffolder"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/dl-tg/scaffolder","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dl-tg%2Fscaffolder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dl-tg%2Fscaffolder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dl-tg%2Fscaffolder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dl-tg%2Fscaffolder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dl-tg","download_url":"https://codeload.github.com/dl-tg/scaffolder/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dl-tg%2Fscaffolder/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28436307,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T21:32:52.117Z","status":"ssl_error","status_checked_at":"2026-01-14T21:32:33.442Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":["directory-utilities","folder-tooling","go","go-cli","golang","golang-cli","yaml","yaml-files","yaml-parser"],"created_at":"2024-08-02T22:01:16.393Z","updated_at":"2026-01-14T22:24:53.165Z","avatar_url":"https://github.com/dl-tg.png","language":"Go","funding_links":["https://github.com/sponsors/cemister"],"categories":["yaml","Go"],"sub_categories":[],"readme":"# Scaffolder\n\nScaffolder is a powerful command-line interface tool written in Golang designed to automate the tedious task of creating barebones for your projects. It allows you to define the necessary directory structure in a reusable config YAML file, making it easy for both humans and parsers to work with.\n\n### TODO\n- [ ] Specify default variables in YAML like `$var: 1`\n      \n## Features\n\n  - Automate project scaffolding with a YAML config file\n  - Supports creating folders and files with custom content using simple YAML syntax\n  - Define and use variables in the YAML file for flexible project generation\n  - Remembers custom config directories using the --remember flag for added convenience\n\n### Quick Example\n\nSuppose we have the following YAML config file named test.yaml:\n\n```yaml\n\nhello1: # Folder name\n  hello.txt: | # File name\n    Hello World # File content\n  hello1.txt: # File name (empty)\n  hello2.txt: # File name (empty)\nhello2: # Folder name\n  hello22.txt: # File name (empty)\n```\nWe can scaffold a project named \"hello\" using this config:\n\n```bash\n\n$ scaffold --name hello --yaml test\n```\nThe resulting directory structure will be:\n\n```\nhello\n├── hello1\n│   ├── hello.txt\n│   ├── hello1.txt\n│   └── hello2.txt\n└── hello2\n    └── hello22.txt\n```\nThe content of hello.txt will be:\n```\nHello World\n```\n\n## Installation\n\n### Linux / MacOS\n\n1. Change your directory to the home directory:\n\n```bash\n\n$ cd ~\n```\n2. Create a folder for Scaffolder and navigate there:\n\n```bash\n\n$ mkdir scaffolder\n$ cd scaffolder\n```\n3. Download the latest release:\n\n```bash\n\n# Linux:\n$ wget -q -O scaffold https://github.com/cemister/scaffolder/releases/download/v1.1.9/scaffolder_linux\n# MacOS:\n$ curl -s -o scaffold https://github.com/cemister/scaffolder/releases/download/v1.1.9/scaffolder_macos\n```\n4. Make the file executable:\n\n```bash\n\n$ chmod +x scaffold\n```\n5. Add the executable to your PATH:\n\n```bash\n\n$ echo 'export PATH=\"$HOME/scaffolder:$PATH\"' \u003e\u003e ~/.bashrc\n$ source ~/.bashrc\n```\n### Windows\n\n1. Open Command Prompt (cmd) or PowerShell and change the directory to the user's home directory:\n\n```bash\n\n# cmd:\ncd %userprofile%\n\n# PowerShell:\ncd $env:userprofile\n```\n2. Create a folder named \"scaffolder\" and change the current directory to it:\n\n```bash\n\nmkdir scaffolder\ncd scaffolder\n```\n3. Download the latest Scaffolder Windows release:\n\n```bash\n\ncurl -s -o scaffold.exe https://github.com/cemister/scaffolder/releases/download/v1.1.9/scaffolder_win.exe\n```\nAdd the executable to the PATH in Windows:\n\n  1. Press Win + S to open the Windows search bar\n  2. Search for \"Environment Variables\" and select \"Edit the system environment variables\"\n  3. In the System Properties window, click the \"Environment Variables\" button\n  4. In the Environment Variables window, find the \"Path\" variable under \"User variables\" and click \"Edit\"\n  5. Click \"New,\" then enter the full path to the \"scaffolder\" folder (e.g., C:\\Users\\YourUsername\\scaffolder) and click \"OK\" to add it to the PATH\n\nNote: Make sure to replace YourUsername with your actual Windows username.\n\n## Building from Source\n\nTo build Scaffolder from source, ensure you have Golang installed:\n\n1. Clone the repository (Git should be installed):\n```bash\n$ git clone https://github.com/dl-tg/scaffolder.git\n```\n\n2. Navigate to the project directory:\n\n```bash\n$ cd scaffolder\n```\n3. Build the project:\n\n```bash\n$ go build\n```\n\n## Usage\n\nUse the following command to scaffold a project:\n\n```bash\n$ scaffold --name? \u003cproject_name\u003e --yaml \u003cconfig_name\u003e --configdir? \u003cpath_to_custom_config_folder_if_exists\u003e --git? \u003ctrue/false\u003e --remember? \u003ctrue/false\u003e --variables? \u003ck:v\u003e\n```\nNote: remember flag specifies whether to remember custom path specified in configdir, avoiding the need to specify it each time\nOn 1.1.9 version and above, name flag is optional now and if not specified, it will scaffold in current directory.\n\n### YAML Config Syntax\n\nTo create a file inside the parent (project's) directory, use a \".\" collection:\n\n```yaml\n\n.:\n  main.txt:\n```\nTo create a subdirectory (folder inside a folder), create a new collection with its name as the name of the parent folder, followed by the name of the needed folder separated by a slash (/):\n\n```yaml\n\nhello1:\n  hello.txt:\n  hello1.txt:\n  hello2.txt:\nhello2:\n  hello22.txt:\nhello2/hello3:\n  hello33.txt:\n```\nTo create an empty folder, create an empty collection without values:\n\n```yaml\n\nhelloempty:\n```\n### Variables\nVariables were added in 1.1.7. Here's how to use them:\n\nAssume we have the following YAML config named cpp.yaml:\n\n```yaml\n\nsrc:\n  main.cpp: |\n    #include \u003ciostream\u003e\n\n    int main() {\n        std::cout \u003c\u003c \"Hello, {name}!\" \u003c\u003c std::endl;\n        return 0;\n    }\n```\nIn this example, we've defined a variable {name} within the main.cpp file, which will be replaced with the actual value when we scaffold the project.\n\nNow, let's scaffold a C++ project named \"hello-cpp\" using this config and provide a value for the {name} variable:\n\n```bash\n\n$ scaffold --name hello-cpp --yaml cpp --variables name:John\n```\nThe resulting directory structure will be:\n\n```\nhello-cpp\n└── src\n    └── main.cpp\n```\nThe content of main.cpp will be:\n\n```cpp\n\n#include \u003ciostream\u003e\n\nint main() {\n    std::cout \u003c\u003c \"Hello, John!\" \u003c\u003c std::endl;\n    return 0;\n}\n```\n\nAs you can see, the {name} variable was replaced with \"John\" in the final project files. This allows you to customize the generated code or any other content based on the values you provide during scaffolding.\n\nAs of 1.1.8, support for variables in folder or file names was added. Just wrap it in double quotes like `\"{var}\": ...` if using in folder/filenames.\n\n## Contributing\n\nIf you want to contribute but are unsure how, refer to the official GitHub guide on Contributing to projects.\n\n## License\n\nThis project is licensed under the MIT license. See the [LICENSE](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdl-tg%2Fscaffolder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdl-tg%2Fscaffolder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdl-tg%2Fscaffolder/lists"}