An open API service indexing awesome lists of open source software.

https://github.com/joggrdocs/kidd

An opinionated CLI framework for Node.js. Convention over configuration, end-to-end type safety.
https://github.com/joggrdocs/kidd

Last synced: 2 months ago
JSON representation

An opinionated CLI framework for Node.js. Convention over configuration, end-to-end type safety.

Awesome Lists containing this project

README

          


kidd

An opinionated CLI framework for Node.js. Convention over configuration, end-to-end type safety.

CI
npm version
License

๐Ÿ“– Documentation ย ย ย ยทย ย ย  ๐Ÿ› Issues

## Features

- ๐Ÿงฐ **Batteries included** โ€” Config, auth, prompts, logging, output, and middleware built in
- ๐Ÿ“ **File-system autoloading** โ€” Drop a file in `commands/`, get a command
- โšก **Build and compile** โ€” Bundle your command tree or produce cross-platform standalone binaries
- ๐Ÿš€ **Two files to a full CLI** โ€” Define a schema, write a handler, done
- ๐Ÿ› ๏ธ **Developer experience** โ€” Scaffolding, hot reload, route inspection, and diagnostics out of the box

## Install

```bash
npm install @kidd-cli/core
```

## Usage

### Define your CLI

```ts
// index.ts
import { cli } from '@kidd-cli/core'
import { z } from 'zod'

await cli({
name: 'deploy',
version: '0.1.0',
config: {
schema: z.object({
registry: z.string().url(),
region: z.enum(['us-east-1', 'eu-west-1']),
}),
},
})
```

### Add a command

```ts
// commands/deploy.ts
import { command } from '@kidd-cli/core'
import { z } from 'zod'

export default command({
description: 'Deploy to the configured registry',
args: z.object({
tag: z.string().describe('Image tag to deploy'),
dry: z.boolean().default(false).describe('Dry run'),
}),
handler: async (ctx) => {
ctx.log.info(`Deploying ${ctx.args.tag} to ${ctx.config.region}`)
},
})
```

### Add a screen

```tsx
// commands/dashboard.tsx
import { screen, Box, Text, useScreenContext } from '@kidd-cli/core/ui'
import { z } from 'zod'

function Dashboard({ env }: { env: string }) {
const ctx = useScreenContext()
return (

Dashboard โ€” {env}
Region: {ctx.config.region}

)
}

export default screen({
description: 'Launch an interactive dashboard',
options: z.object({
env: z.string().default('staging').describe('Target environment'),
}),
render: Dashboard,
})
```

### Run it

```bash
kidd dev -- deploy --tag v1.2.3 # dev mode
kidd build # bundle
kidd compile # standalone binary
```

## License

[MIT](LICENSE)