{"id":13566243,"url":"https://github.com/ffizer/ffizer","last_synced_at":"2025-04-03T23:31:27.383Z","repository":{"id":34179454,"uuid":"156519817","full_name":"ffizer/ffizer","owner":"ffizer","description":"ffizer is a files and folders initializer / generator. Create any kind (or part) of project from template.","archived":false,"fork":false,"pushed_at":"2025-04-01T13:42:04.000Z","size":4559,"stargazers_count":113,"open_issues_count":36,"forks_count":10,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-01T14:37:56.114Z","etag":null,"topics":["crates","hacktoberfest","rust","scaffolding","template-project"],"latest_commit_sha":null,"homepage":"https://ffizer.github.io/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc0-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ffizer.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.txt","code_of_conduct":null,"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},"funding":{"github":"davidB","patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2018-11-07T09:11:30.000Z","updated_at":"2025-04-01T13:42:07.000Z","dependencies_parsed_at":"2023-10-29T15:29:29.760Z","dependency_job_id":"a8621f60-def9-49a0-a0db-183820a01ea9","html_url":"https://github.com/ffizer/ffizer","commit_stats":{"total_commits":1022,"total_committers":9,"mean_commits":"113.55555555555556","dds":"0.43737769080234834","last_synced_commit":"c998f6732cfb3108d8df001714fed87b7768ed86"},"previous_names":[],"tags_count":73,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ffizer%2Fffizer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ffizer%2Fffizer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ffizer%2Fffizer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ffizer%2Fffizer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ffizer","download_url":"https://codeload.github.com/ffizer/ffizer/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247097876,"owners_count":20883125,"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":["crates","hacktoberfest","rust","scaffolding","template-project"],"created_at":"2024-08-01T13:02:05.312Z","updated_at":"2025-04-03T23:31:22.374Z","avatar_url":"https://github.com/ffizer.png","language":"Rust","funding_links":["https://github.com/sponsors/davidB"],"categories":["Rust"],"sub_categories":[],"readme":"# ![ffizer](https://raw.githubusercontent.com/ffizer/ffizer/master/docs/src/images/logo.svg?raw=true) \u003c!-- omit in toc --\u003e\n\n\u003c!-- copy badges from:\n- [`repostatus.org`](https://www.repostatus.org/#active)\n- [`Shields.io`: Quality metadata badges for open source projects](https://shields.io/#/)\n--\u003e\n\n[![crates license](https://img.shields.io/crates/l/ffizer.svg)](http://creativecommons.org/publicdomain/zero/1.0/)\n[![crate version](https://img.shields.io/crates/v/ffizer.svg)](https://crates.io/crates/ffizer)\n\n[![Project Status: Active – The project has reached a stable, usable state and is being actively developed.](https://www.repostatus.org/badges/latest/active.svg)](https://www.repostatus.org/#active)\n[![Actions Status](https://github.com/ffizer/ffizer/workflows/ci-flow/badge.svg)](https://github.com/ffizer/ffizer/actions)\n[![test coverage](https://codecov.io/gh/ffizer/ffizer/branch/master/graph/badge.svg)](https://codecov.io/gh/ffizer/ffizer)\n\n[![crates download](https://img.shields.io/crates/d/ffizer.svg)](https://crates.io/crates/ffizer)\n![GitHub All Releases](https://img.shields.io/github/downloads/ffizer/ffizer/total.svg)\n\n`ffizer` is a **f**iles and **f**olders initial**izer** / generator. It creates or updates any kind (or part) of project from template(s).\n\nkeywords: file generator, project template, project scaffolding, quick start, project bootstrap, project skeleton\n\n[![asciicast: ffizer demo](https://raw.githubusercontent.com/ffizer/ffizer/master/docs/src/images/demo.gif)](https://asciinema.org/a/gIMUwo4H9X0EK0t6xhZ6ce6WZ)\n\n- [Features](#features)\n- [Usages](#usages)\n  - [Install](#install)\n    - [via homebrew (MacOs \\\u0026 Linux)](#via-homebrew-macos--linux)\n    - [via cargo](#via-cargo)\n  - [Run](#run)\n    - [Apply a template (to create or update)](#apply-a-template-to-create-or-update)\n  - [Authoring a template](#authoring-a-template)\n- [Few templates](#few-templates)\n- [Build](#build)\n\n## Features\n\n- _Create or update_ files and folder from one (or several) template(s).\n- A native executable (cli)\n  - Install via download a standalone single file on system (no requirements like `python`, `ruby`, `nodejs`, `java`, ...).\n  - Run as fast enough project generator.\n  - Run with dry mode (useful to test).\n- A rust library\n  - Can be included into other tool\n- Templates Authoring\n  - Can be used for any file \u0026 folder generation (no specialization to one ecosystem).\n  - Can start as simple as a folder to copy \"as is\".\n  - Can use the [Handlebars](https://handlebarsjs.com/guide/) template syntax for file content, extended with functions:\n    - To transform strings (toUpperCase, toLowerCase, Capitalize,...)\n    - To retrieve content via http get (like `.gitignore` from [`gitignore.io`](https://gitignore.io), license from spdx)\n    - ...\n  - Can replace variables part in file and folder's name\n  - Can be composed of other templates (applied as layer)\n  - Can ignore file / folder under conditions\n  - Can store the content at the root of the folder or under the sub-folder `template`\n- Templates Hosting\n  - On a local folder\n  - On a hosted git repository (public / private, `github` / `bitbucket`/ `gitlab` / ...)\n    - At the root of the repository\n    - In a sub-folder of the repository\n    - In any revision (branch, tag, commit)\n\n[Suggestions are welcomes](https://github.com/ffizer/ffizer/issues/) ;-)\n\nA list of alternatives is available on the [wiki](https://github.com/ffizer/ffizer/wiki/Alternatives), feel free to complete / correct.\n\n## Usages\n\n### Install\n\n```sh\ncurl https://raw.githubusercontent.com/ffizer/ffizer/master/scripts/getLatest.sh | bash\n```\n\nOr download the binary for your platform from [github releases](https://github.com/ffizer/ffizer/releases), then un-archive it and place it your PATH.\n\n#### via homebrew (MacOs \u0026 Linux)\n\n```sh\nbrew install ffizer/ffizer/ffizer-bin\nffizer upgrade\n```\n\n#### via cargo\n\n```sh\n# install pre-build binary via cargo-binstall\ncargo binstall ffizer\n\n# install from source\ncargo install ffizer --force --features cli\n```\n\n### Run\n\n```txt\n❯ ffizer --help\n\nffizer is a files and folders initializer / generator.\nIt creates or updates any kind (or part) of project from template(s)\n\nUsage: ffizer [OPTIONS] \u003cCOMMAND\u003e\n\nCommands:\n  apply             Apply a template into a target directory\n  inspect           Inspect configuration, caches,... (wip)\n  show-json-schema  Show the json schema of the .ffizer.yaml files\n  test-samples      test a template against its samples\n  help              Print this message or the help of the given subcommand(s)\n\nOptions:\n  -v, --verbose...  Verbose mode (-v, -vv (very verbose / level debug), -vvv) print on stderr\n  -h, --help        Print help information\n  -V, --version     Print version information\n\nhttps://ffizer.github.io/ffizer/book/\n```\n\n#### Apply a template (to create or update)\n\n```sh\n❯ ffizer apply --help\n\nApply a template into a target directory\n\nUsage: ffizer apply [OPTIONS] --source \u003cURI\u003e --destination \u003cFOLDER\u003e\n\nOptions:\n      --confirm \u003cCONFIRM\u003e          ask for plan confirmation [default: Never] [possible values: auto, always, never]\n      --update-mode \u003cUPDATE_MODE\u003e  mode to update existing file [default: Ask] [possible values: ask, keep, override, update-as-remote, current-as-local, show-diff, merge]\n  -y, --no-interaction             should not ask for confirmation (to use default value, to apply plan, to override, to run script,...)\n      --offline                    in offline, only local templates or cached templates are used\n  -s, --source \u003cURI\u003e               uri / path of the template\n      --rev \u003cREV\u003e                  git revision of the template [default: master]\n      --source-subfolder \u003cFOLDER\u003e  path of the folder under the source uri to use for template\n  -d, --destination \u003cFOLDER\u003e       destination folder (created if doesn't exist)\n  -v, --variables \u003cKEY_VALUE\u003e      set variable's value from cli (\"key=value\")\n  -h, --help                       Print help information\n  -V, --version                    Print version information\n\n```\n\n- use a local folder as template\n\n  ```sh\n  ffizer apply --source $HOME/my_templates/tmpl0 --destination my_project\n  ```\n\n- use a remote git repository as template\n\n  ```sh\n  ffizer apply --source https://github.com/ffizer/template_sample.git --destination my_project\n  ```\n\n  output\n\n  ```sh\n  Configure variables\n\n  ✔ project_name · my-project\n  ✔ package_name · my_project\n\n\n  Plan to execute\n\n    - make dir        my_project\n    - make dir         ├─dir_1\n    - add file         │  └─file_1_1.txt\n    - make dir         ├─dir_2_my-project\n    - add file         │  └─file_1_2.txt\n    - add file         ├─file_1.txt\n    - add file         ├─file_2.txt\n    - add file         ├─file_3.txt\n    - add file         ├─file_4_my_project.txt\n    - add file         ├─file_5_my-project.txt\n    - add file         └─file_6.hbs\n  ```\n\n### Authoring a template\n\nStart with [Template Authoring Tutorial](https://ffizer.github.io/ffizer/book/authoring_tutorial.html)\n\n## Few templates\n\n- Any git repositories (in this case ffizer is like `git clone ... \u0026\u0026 cd ... \u0026\u0026 rm -Rf .git`)\n- Any local folder (in this case ffizer is like `cp -R ... ...`)\n- Parametrized (with variables) templates:\n  - [`ffizer/templates_default`: the default collections of templates for ffizer](https://github.com/ffizer/templates_default) (WIP)\n  - [`davidB31 / cg-starter-multi-rust` · GitLab](https://gitlab.com/davidB31/cg-starter-multi-rust) Project template for Multi-Bot in Rust on CodinGame.\n  - [`davidB/templates`: repository to host the my collections of templates to used with ffizer.](https://github.com/davidB/templates)\n  - github repo tagged [`ffizer-template`](https://github.com/topics/ffizer-template)\n  - samples (used for test, demo)\n    templates_default)\n    - [`ffizer/template_sample`: a simple template for ffizer used for demo and test](https://github.com/ffizer/template_sample)\n    - [`ffizer/tests/data` at master · ffizer/ffizer](https://github.com/ffizer/ffizer/tree/master/tests/data)\n\n## Build\n\n```sh\ncargo install cargo-make --force\ncargo make ci-flow\n```\n\nUpdate [`CHANGELOG.md`](./CHANGELOG.md)\n\n```sh\ncargo make update-changelog\ngit add CHANGELOG.md\ngit commit -m ':memo: (CHANGELOG) update'\n```\n\nRelease a new version by bump `patch` (or `minor`or `major`)\n\n```sh\ncargo make publish patch # dry-run\ncargo make publish --execute patch\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fffizer%2Fffizer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fffizer%2Fffizer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fffizer%2Fffizer/lists"}