This tutorial describes how to setup your development environment for building the Dojo CLI by detailing the prerequisites and dependencies needed.
## Technologies
The cli is built using [NodeJS](https://nodejs.org/en/) and [NPM](https://www.npmjs.com/).
The programming language used is [Typescript](https://www.typescriptlang.org/) v5.
## Prerequisites
In order to build the cli you will need the following tools:
-[NodeJS](https://nodejs.org/en/)(version 18 or higher)
-[NPM](https://www.npmjs.com/)(version 10 or higher)
Install NodeJS and NPM by following the instructions on the [official website](https://nodejs.org/en/download/package-manager).
Or via Node Version Manager (NVM) by following the instructions on the [official website](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm).
## Dependencies
The CLI is packaged using [pkg](https://www.npmjs.com/package/pkg).
This means that all the dependencies are bundled in the final binary.
Here are the main dependencies used by the cli (you don't need to install them manually or globally on your system):
-[Axios](https://www.npmjs.com/package/axios): a promise-based HTTP client for the browser and Node.js. It is
used to make HTTP(S) requests to the Dojo backend and Gitlab.
-[Boxen](https://www.npmjs.com/package/boxen): used to display messages in a box in the terminal.
-[Chalk](https://www.npmjs.com/package/chalk): used to add colors to the messages in the terminal.
-[Commander.js](https://www.npmjs.com/package/commander): a library to write command-line interfaces.
-[Dotenv](https://www.npmjs.com/package/dotenv): used to load environment variables from a .env file.
-[Dotenv-vault](https://www.npmjs.com/package/dotenv-vault): a CLI to sync .env files across machines,
environments, and team members.
-[Inquirer](https://www.npmjs.com/package/inquirer): used to ask perform to the interactive command line user interfaces.
-[JsonWebToken](https://www.npmjs.com/package/jsonwebtoken): used to generate and validate [JSON Web Tokens](https://jwt.io/).
-[ora](https://www.npmjs.com/package/ora): used to display elegantly in the terminal.
-[zod](https://www.npmjs.com/package/zod): a TypeScript-first schema validation with static type inference. Used
in the projet to validate json files created by the user.