Arri CLI

February 2, 2026 ยท View on GitHub

Command line interface for ARRI-RPC

Table of Contents

Commands

Run arri --help to get a full list of commands

CmdDescription
buildUse the currently registered server plugin to build your arri server and run the code generators
devRun the currently registered server plugin in dev mode (basically watches for changes and rebuilds the server and reruns code generators as needed)
codegen [input-file]Run generate clients specified in the arri.config.ts. See here for details.
export [format] [input-file]Export AppDefinition to various formats. See here for details.
init [dir]Scaffold an arri app/library
listList available arri versions
use [version]Update arri dependencies to a specific version (checks recursively for package.json, pubspec.yaml, cargo.toml, etc)
versionPrint current CLI version

Usage with an Arri server

The Arri CLI will automatically rerun code generators on hot-reload during development, and when building for production.

Register your server plugin

// arri.config.ts
import { defineConfig, servers } from 'arri';

// registering the typescript server plugin
export default defineConfig({
    server: servers.tsServer({
        srcDir: 'src',
        entry: 'app.ts',
        port: 3000,
    }),
    generators: [
        // client generators go here
    ],
});

// registering the go server plugin
export default defineConfig({
    server: servers.goServer({}),
    generators: [
        // client generators go here
    ],
});

Start developing your server

arri dev
arri build

You can also skip codegen during build

arri build --skip-codegen

Usage with an App Definition

arri codegen gives you the ability to run code generators against an already generated Arri App Definition. This is useful in cases where you don't have access to the backend but do have access to an App Definition file. So basically if you have multiple separate frontend teams, this allows you to distribute your __definition.json file to them and they will be able to generate type-safe client(s). (You could also make it available as an HTTP endpoint on the server if you are okay exposing that data publicly)

Before running codegen you need to setup a valid Arri Config

// arri.config.ts
import { defineConfig, generators } from 'arri';

export default defineConfig({
    generators: [
        generators.dartClient({
            clientName: 'Client',
            outputPath: '<some-output-file>',
        }),
        generators.typescriptClient({
            clientName: 'Client',
            outputPath: '<some-output-file>',
        }),
        // etc...
    ],
});

Run the codegen command

# run generators from an app definition file
# app definition files can be TS, JS, or JSON
arri codegen AppDefinition.ts
arri codegen AppDefinition.json

# run generators from an app definition JSON http endpoint
arri codegen https://example.com/__definition

Codegen Flags

FlagAliasesDescription
--config-cPath to an arri config. Default is arri.config.ts
--watch-wWatch an app definition file for changes. Only works on files. It will throw an error if invoked against an HTTP endpoint

Exporting JSON Schema

arri export json-schema allows you to export your AppDefinition types as a JSON Schema file. This is useful for:

  • Editor support - YAML/JSON files using Arri-defined schemas can get autocomplete in VS Code, IntelliJ, etc.
  • Interoperability - Integration with tools that consume JSON Schema (OpenAPI, documentation generators, etc.)
  • Configuration validation - Users defining config files can reference a JSON Schema URL for validation

Basic Usage

# Export from a local file
arri export json-schema ./path/to/AppDefinition.json

# Export from a TS/JS file
arri export json-schema ./path/to/definitions.ts

# Export from an HTTP endpoint
arri export json-schema https://example.com/__definition

Export Flags

FlagAliasesDescription
--output-oOutput file path for JSON Schema. Default is ./schema.json
--id$id to use in the JSON Schema
--titleTitle for the JSON Schema
--descriptionDescription for the JSON Schema

Example

arri export json-schema ./AppDefinition.json -o ./schemas/api.schema.json --id "https://example.com/schemas/api.json" --title "My API Schema" --description "API type definitions"

This will generate a JSON Schema file with all your type definitions in the $defs section, which can then be used for validation and editor support.