Architect

License .github/workflows/rust.yml codecov Latest Release

Architect is a straightforward and technology-agnostic project scaffolding tool.

This means you can prepare templates for projects using any technology and Architect will spit out a perfect new project.

For its templating Architect uses the Handlebars templating language. Please check the documentation for more information.

>> 📚 Documentation <<

TL;DR

Architect uses Handlebars and Git to create proper projects from template repositories.

  1. Add any file to your template repository and add Handlebars expressions to it. (docs)
  2. Add an .architect.json configuration file with your questions (docs)
  3. Download the architect executable for your platform from the latest Release.
  4. Execute architect <PATH-TO-REPO> in your desired local directory, answer user-defined questions, et voila, you got a fully functional project created from a template. (docs)

Sample .architect.json

{
  "name": "My Awesome Microservice Template",
  "version": "1.0",
  "questions": [
    {
      "name": "author.name",
      "type": "Text",
      "pretty": "What's your name?"
    },
    {
      "name": "author.email",
      "type": "Text",
      "pretty": "What's your email address?"
    },
    {
      "name": "project.package",
      "type": "Identifier",
      "pretty": "What should be the root package for your Kotlin sources?",
      "default": "com.github.example"
    },
    {
      "name": "project.features",
      "type": "Selection",
      "pretty": "Which features would you like to use?",
      "items": [
        "jdbc",
        "kafka",
        "redis",
        "mySpecialLibrary"
      ],
      "default": [
        "jdbc",
        "mySpecialLibrary"
      ],
      "multi": true
    },
    {
      "name": "project.tests",
      "type": "Option",
      "pretty": "Do you want to generate test stubs?"
    },
    {
      "name": "current.time",
      "type": "Custom",
      "format": "^\\d\\d:\\d\\d$",
      "pretty": "What's the current time?"
    }
  ],
  "filters": {
    "conditionalFiles": [
      {
        "condition": "project.features.mySpecialLibrary",
        "matcher": "libs/mySpecialLibrary-*.jar"
      }
    ],
    "includeHidden": [
      ".github/**",
      ".gitignore"
    ],
    "nonTemplates": [
      "**/*.{gradle.kts,jar}"
    ]
  }
}

License and Contributions

Architect is provided under the terms of the BSD 3-Clause License.

Contributions are welcome, but you must have all rights to the contributed material and agree to provide it under the terms of the aforementioned BSD 3-Clause License.

A good idea would be to check out the Architect 1.0 project, it tracks all the work needed to get Architect to 1.0.