# Depot: A Javascript devtool orchestrator
Depot (formerly Graco) is a tool for orchestrating other Javascript devtools. As an analogy:
* Depot is like [Cargo], but for Javascript.
* Depot is like [create-react-app], but for people who like software engineering.
* Depot is like the [`"scripts"` field of package.json][package.json], but with more power and flexibility.
Depot works on Javascript workspaces that have been created by Depot, specifically those using the [model JS workspace] format. Depot supports the following commands:
* `depot new` - creates a new workspace or package with devtools preinstalled
* `depot init` - installs workspace dependencies with [pnpm]
* `depot build` - type-checks with [Typescript], lints with [Biome], and:
* For libraries, transpiles with [Typescript]
* For scripts and websites, bundles with [Vite]
* `depot test` - runs tests with [Vitest]
* `depot fmt` - formats source files with [Biome]
* `depot doc` - generates documentation with [Typedoc]
A few benefits of using Depot:
* Depot works with either browser or Node packages.
* Depot automatically runs command dependencies. For example, `depot test` will run `depot build`, and `depot build` will run `depot init`.
* Depot provides an interactive terminal interface for showing the running output of processes when building in watch mode.
## Installation
As prerequisites, you must have [NodeJS][node-install] (≥20) and [pnpm][pnpm-install] (≥9.9) installed on your computer.
The [install script] will download a prebuilt binary if possible. Run the script as follows:
```
curl https://raw.githubusercontent.com/cognitive-engineering-lab/depot/main/scripts/install.sh | sh
```
Alternatively, you can follow one of these installation methods:
### From crates.io
```
cargo install depot-js --locked
depot setup
```
### From source
```
git clone https://github.com/cognitive-engineering-lab/depot
cd depot
cargo install --path crates/depot --locked
depot setup
```
## Usage
To get started, create a new package:
```
depot new my-lib
```
You can specify `--target ` to indicate that the package is a library (a Javascript package used by other packages), a website (an HTML site that uses Javascript), or a script (a Javascript program that would be either run on the CLI or included as a `