<!-- TITLE: Phovea Yeoman Generator --> The Phovea Yeoman generator located at https://github.com/phovea/generator-phovea is an extension to the [Yeoman](http://yeoman.io/) scaffolding tool. This generated was designed to support developed in daily tasks of their development. The generator can be installed using: ``` npm install -g yo generator-phovea ``` Following generators exists which can all be triggered using `yo phovea:<generator-name>` ## Plugin Creation (yo phovea) This generator supports the user in creating new plugins. Phovea differentiates the following plugin types: ### Application (app) An application is the end point of the TDP platform implementing an interface for the user. For example, Ordino is an application plugin. ### Frontend Library (lib) A frontend library is a collection of Typescript files without a direct user interface. It’s main purpose is to register new extensions to existing extension points that are queried by applications. See also the tutorial on [Create a new frontend library and register a view](../development/create/how-to-create-a-frontend-library) The source code of a frontend library (HTML, TypeScript and SCSS files) lives in the `/src` directory of a plugin (e.g. `tdp_core/src/`). From this place [webpack](https://webpack.js.org/) compiles and bundles all files into the frontend application. ### Backend Library (slib) A backend library is the corresponding counterpart on the backend side. Backend libraries are used for example to register new DB connectors. See also the tutorial on [Create a new backend library](../development/create/how-to-create-a-backend-library). A backend library has its Python source code inside a directory, which has the same name as the plugin itself (e.g. `tdp_core/tdp_core/`). ### Backend Service (service) A backend server is a special kind of backend library that result in an independent service. The phovea REST API server itself is implemented as a backend server. Another example for a service is the [Phovea Processing Queue](https://github.com/phovea/phovea_processing_queue) which provides a Celery based processing task queue. See also the tutorial on [Create a new backend service](../development/create/how-to-create-a-backend-service) ### Hybrid In addition to this four basic types hybrid types exist that allow developers to include both frontend and backend code in a single plugin. Hybrids include: app-slib, lib-slib, and app-service. ## Product Creation (yo phovea:init-product) Similarly to creating a new plugin, the generator support the user in creating new product configurations. During the wizard dialog the composition of plugins can be easily done. ## Setting up a workspace (yo phovea:setup-workspace <product>) This generator helps to setting up a developer workspace based on a given product. The required argument has to point to a valid Git repository. Several shortcuts are supported. All of ordino_product, Caleydo/ordino_product, https://github.com/Caleydo/ordino_product will use the same git repository. ## Updating a plugin/workspace (yo phovea:update) This generic utility generator helps to update a workspace setup when dependencies or cloned plugins have changed. In addition, it can be used to sync a plugin with the latest template configuration contained in the generator. The later is useful in cases in which dependencies or build scripts of plugins have changed. However, it should be used with caution. ## Adding an extension (yo phovea:add-extension) When executed within a plugin folder it provides a wizard to register new extensions on both frontend and backend side. See also the tutorial on [How to create a new view plugin](How-to-create-a-new-view-plugin). ## Installing additional frontend library (yo phovea:install <dependency>) This generator is a wrapper around `npm install` that takes care of both registering the dependency within a plugin and updating the workspace accordingly. [How to create a new view plugin](How-to-create-a-new-view-plugin).