# Depot: A Javascript devtool orchestrator Screen Shot 2023-07-18 at 11 26 06 AM 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 `