#project #generator #template #skeleton

bin+lib ffizer

ffizer is a files and folders initializer / generator. It creates or updates any kind (or part) of project from template(s)

54 releases (32 stable)

2.8.0 Mar 5, 2023
2.7.0 Dec 25, 2022
2.6.1 Sep 11, 2022
2.5.1 Mar 22, 2022
0.6.0 Nov 25, 2018

#8 in Template engine

Download history 3/week @ 2022-11-27 10/week @ 2022-12-04 5/week @ 2022-12-11 54/week @ 2022-12-18 27/week @ 2022-12-25 10/week @ 2023-01-01 9/week @ 2023-01-08 7/week @ 2023-01-15 12/week @ 2023-01-22 61/week @ 2023-01-29 360/week @ 2023-02-05 193/week @ 2023-02-12 212/week @ 2023-02-19 3/week @ 2023-02-26 29/week @ 2023-03-05 17/week @ 2023-03-12

264 downloads per month

CC0 license



crates license crate version

Project Status: Active – The project has reached a stable, usable state and is being actively developed. Actions Status test coverage

crates download GitHub All Releases

ffizer is a files and folders initializer / generator. It creates or updates any kind (or part) of project from template(s).

keywords: file generator, project template, project scaffolding, quick start, project bootstrap, project skeleton

asciicast: ffizer demo


  • Create or update files and folder from one (or several) template(s).
  • A native executable (cli)
    • Install via download a standalone single file on system (no requirements like python, ruby, nodejs, java, ...).
    • Run as fast enough project generator.
    • Run with dry mode (useful to test).
    • Support self-upgrade.
  • A rust library
    • Can be included into other tool
  • Templates Authoring
    • Can be used for any file & folder generation (no specialization to one ecosystem).
    • Can start as simple as a folder to copy "as is".
    • Can use the Handlebars template syntax for file content, extended with functions:
      • To transform strings (toUpperCase, toLowerCase, Capitalize,...)
      • To retrieve content via http get (like .gitignore from gitignore.io, license from spdx)
      • ...
    • Can replace variables part in file and folder's name
    • Can be composed of other templates (applied as layer)
    • Can ignore file / folder under conditions
    • Can store the content at the root of the folder or under the sub-folder template
  • Templates Hosting
    • On a local folder
    • On a hosted git repository (public / private, github / bitbucket/ gitlab / ...)
      • At the root of the repository
      • In a sub-folder of the repository
      • In any revision (branch, tag, commit)

Suggestions are welcomes ;-)

A list of alternatives is available on the wiki, feel free to complete / correct.



curl https://raw.githubusercontent.com/ffizer/ffizer/master/scripts/getLatest.sh | bash

Or download the binary for your platform from github releases, then un-archive it and place it your PATH.

via homebrew (MacOs & Linux)

brew install ffizer/ffizer/ffizer-bin
ffizer upgrade

via cargo

# install pre-build binary via cargo-binstall
cargo binstall ffizer

# install from source
cargo install ffizer --force --features cli


❯ ffizer --help

ffizer is a files and folders initializer / generator.
It creates or updates any kind (or part) of project from template(s)

Usage: ffizer [OPTIONS] <COMMAND>

  apply             Apply a template into a target directory
  upgrade           Self upgrade ffizer executable
  inspect           Inspect configuration, caches,... (wip)
  show-json-schema  Show the json schema of the .ffizer.yaml files
  test-samples      test a template against its samples
  help              Print this message or the help of the given subcommand(s)

  -v, --verbose...  Verbose mode (-v, -vv (very verbose / level debug), -vvv) print on stderr
  -h, --help        Print help information
  -V, --version     Print version information


Self upgrade the executable

 ffizer upgrade

Apply a template (to create or update)

 ffizer apply --help

Apply a template into a target directory

Usage: ffizer apply [OPTIONS] --source <URI> --destination <FOLDER>

      --confirm <CONFIRM>          ask for plan confirmation [default: Never] [possible values: auto, always, never]
      --update-mode <UPDATE_MODE>  mode to update existing file [default: Ask] [possible values: ask, keep, override, update-as-remote, current-as-local, show-diff, merge]
  -y, --no-interaction             should not ask for confirmation (to use default value, to apply plan, to override, to run script,...)
      --offline                    in offline, only local templates or cached templates are used
  -s, --source <URI>               uri / path of the template
      --rev <REV>                  git revision of the template [default: master]
      --source-subfolder <FOLDER>  path of the folder under the source uri to use for template
  -d, --destination <FOLDER>       destination folder (created if doesn't exist)
  -v, --variables <KEY_VALUE>      set variable's value from cli ("key=value")
  -h, --help                       Print help information
  -V, --version                    Print version information

  • use a local folder as template

    ffizer apply --source $HOME/my_templates/tmpl0 --destination my_project
  • use a remote git repository as template

    ffizer apply --source https://github.com/ffizer/template_sample.git --destination my_project


    Configure variables
     project_name · my-project
     package_name · my_project
    Plan to execute
      - make dir        my_project
      - make dir         ├─dir_1
      - add file         │  └─file_1_1.txt
      - make dir         ├─dir_2_my-project
      - add file         │  └─file_1_2.txt
      - add file         ├─file_1.txt
      - add file         ├─file_2.txt
      - add file         ├─file_3.txt
      - add file         ├─file_4_my_project.txt
      - add file         ├─file_5_my-project.txt
      - add file         └─file_6.hbs

Authoring a template

Start with Template Authoring Tutorial

Few templates


cargo install cargo-make --force
cargo make ci-flow


cargo make update-changelog
git add CHANGELOG.md
git commit -m ':memo: (CHANGELOG) update'

Release a new version by bump patch (or minoror major)

cargo make publish patch # dry-run
cargo make publish --execute patch


~586K SLoC