{"id":13483799,"url":"https://github.com/jwoertink/fez","last_synced_at":"2025-07-28T06:09:13.731Z","repository":{"id":42879589,"uuid":"64077797","full_name":"jwoertink/fez","owner":"jwoertink","description":"A Kemal application generator","archived":false,"fork":false,"pushed_at":"2021-09-22T14:53:03.000Z","size":198,"stargazers_count":49,"open_issues_count":2,"forks_count":10,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-06-06T00:04:26.717Z","etag":null,"topics":["crystal","kemal","shard"],"latest_commit_sha":null,"homepage":"","language":"Crystal","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/jwoertink.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":"2016-07-24T17:41:52.000Z","updated_at":"2024-02-15T20:38:00.000Z","dependencies_parsed_at":"2022-07-09T02:01:04.313Z","dependency_job_id":null,"html_url":"https://github.com/jwoertink/fez","commit_stats":null,"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/jwoertink/fez","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwoertink%2Ffez","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwoertink%2Ffez/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwoertink%2Ffez/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwoertink%2Ffez/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jwoertink","download_url":"https://codeload.github.com/jwoertink/fez/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwoertink%2Ffez/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267470062,"owners_count":24092352,"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-28T02:00:09.689Z","response_time":68,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","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":["crystal","kemal","shard"],"created_at":"2024-07-31T17:01:15.389Z","updated_at":"2025-07-28T06:09:13.706Z","avatar_url":"https://github.com/jwoertink.png","language":"Crystal","funding_links":[],"categories":["Project Generators"],"sub_categories":[],"readme":"# fez [![Build Status](https://travis-ci.com/jwoertink/fez.svg?branch=master)](https://travis-ci.com/jwoertink/fez)\n\nFez is an application generator for projects with [Kemal](http://kemalcr.com/).\n\nSetting up a Kemal app is super simple, but if the app you're building is a little more than \"super simple\", there's a bit of things you'll end up doing each time you start a project. Why not have a mini generator that will do it for you?\n\nThis generator will generate a somewhat opinionated version of:\n\n* Simple app with assets and views (customizable between ECR and Slang) setup\n* Simple API with api versioning\n* Simple app backed by a database (not implemented)\n\n## Installation\n\nSince this is an application generator, there's no need to include it as a dependency, or shard. Just install it locally, and build the executable.\n\n```text\n$ git clone git@github.com:jwoertink/fez.git\n$ cd fez/\n$ make\n```\nYou should now have a `bin/fez` file to run. You can symlink this to a more global location like `/usr/local/bin` to make it easier to use.\n\nOptionally, you can use [homebrew](http://brew.sh) to install.\n\n```text\nbrew tap jwoertink/fez\nbrew install fez\n```\n\n**NOTE** If you have issues running from homebrew, install from github, and report the error to [homebrew-fez](https://github.com/jwoertink/homebrew-fez)\n\n## Usage\n\nUsing fez is pretty easy. To see a help menu just run `fez -h`. You can see the version of fez you're running with `fez -v`\n\nTL;DR `fez yourappname`\n\n### Naming your app\n\nTo set the name of your application, you run fez with the name of the project. This is *required* in order to run.\n\nThis example will generate a `./my_cool_app/` folder.\n```text\n$ fez my_cool_app\n```\n\n### Specifying the directory name\n\nFez gives you the option to create a different name for the directory your app is in than the actual app name. You can do this with the `--directory` or `-d` flag. This flag is optional.\n\nThis example will generate an app called `my_cool_app` in a `myapp.cr` folder.\n\n```text\n$ fez my_cool_app -d ~/Projects/myapp.cr\n\nor\n\n$ fez my_cool_app --directory=~/Projects/myapp.cr\n```\n\nIf you don't specify a directory, fez will assume you want to use the current directory you're in.\n\n### Templates\n\nFez comes out of the box with several different templates:\n* Kemal with slang\n* Kemal with ECR\n* Kemal as an API\n* more coming later...\n\nBy default, fez uses Kemal with [Slang](https://github.com/jeromegn/slang) as the default template. If you would like to switch back to using Crystal's built in ECR, or build an api, you will use the `--template` or `-t` flag. This flag is optional.\n\n```text\n$ fez my_cool_app -t ecr\n\nor\n\n$ fez my_cool_app --template=ecr\n```\n\n### Generating an API only application\n\nIf you're building an API, and don't need HTML, CSS and JavaScript, you can use Fez to generate an API only app.\n\n```text\n$ fez my_api -t api\n```\n\nBy default a JSON API will be generated with route versioning. You can read up on [kave](https://github.com/jwoertink/kave) for more info about api customization.\n\n\n### Working with a fez generated app\n\nNow that you've generated your shiny new Kemal app, it's time to start doing development on it. The generated app will contain a `README.md` file that has all the instructions on how to start development.\n\nYour app will have 2 primary dependencies to run.\n* [Ruby](https://www.ruby-lang.org/)\n* [Crystal](https://crystal-lang.org/)\n\nIf you have those two installed, then your next step is to `cd` in to your new app's directory and run `make install`.\n\n```text\n$ cd ~/Projects\nProjects $ fez supertrain\nProjects $ cd supertrain\nProjects/supertrain $ make install\n```\n\nRunning `make install` will install the shard dependencies for your app (like Kemal, duh!), and then install the ruby gem dependencies. You may be asking yourself _why have ruby gem dependencies?_... Ruby has tools that work great like `guard` and `sass`. Plus, chances are, you came to Crystal from Ruby anyway, and if you're on a Mac, Ruby is installed by default.\n\nOk, now that your app dependencies are installed, you have 2 options to boot this baby.\n\n1. `make run` - This compiles your assets in to their natural form, and then boots kemal.\n2. `guard` - This will boot your kemal and then watch for any changes to the files.\n\nBoth of these options will boot a server on `localhost:3001`. The difference is that using guard allows you to do live-reloading.\n\nIf you need to use a console (REPL) for development, you can use the `make console` command. You will have access to whatever has been required in your app's `config.cr`\n\n```text\nProjects/supertrain $ make console\n =\u003e ok\nicr(0.19.1) \u003e Kemal\n =\u003e Kemal\nicr(0.19.1) \u003e\n```\n\nNow that you have a handle on developing your app, you will want to deploy it! There's a lot of different methods to deploying an app in to production, and fez takes the [Capistrano](http://capistranorb.com/) appraoch.\n\n1. Edit your `config/deploy.rb` file with the necessary changes.\n2. Edit your `config/deploy/production.rb` file with more necessary changes\n3. Run `cap production deploy`.\n4. Pray it all works!\n\nAlternitively, if you're looking to deploy to [Heroku](https://www.heroku.com/), you can use [Crystal Heroku Build Pack](https://github.com/crystal-lang/heroku-buildpack-crystal/) to deploy.\n\n## Development\n\nIf you'd like to help contribute, check out the Projects tab, or issues.\n\n\n## Contributing\n\n1. Fork it ( https://github.com/jwoertink/fez/fork )\n2. Create your feature branch (git checkout -b my-new-feature)\n3. Commit your changes (git commit -am 'Add some feature')\n4. Push to the branch (git push origin my-new-feature)\n5. Create a new Pull Request\n\n## Contributors\n\n- [jwoertink](https://github.com/jwoertink) Jeremy Woertink - creator, maintainer\n- [Other Brave Souls](https://github.com/jwoertink/fez/graphs/contributors)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjwoertink%2Ffez","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjwoertink%2Ffez","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjwoertink%2Ffez/lists"}