CLI development framework specifically designed for Bun runtime with complete toolchain for building, testing, and distributing command-line applications.
npx @tessl/cli install tessl/npm-bunli@0.1.0Bunli is a comprehensive CLI development framework specifically designed for Bun runtime. It provides a complete toolchain for building, testing, and distributing command-line applications with type-safe command definitions, development tools with hot reloading, and compilation to standalone binaries for multiple platforms.
bun add bunli or npm install bunliimport { defineConfig, loadConfig, findEntry, type BunliConfig } from 'bunli';For CommonJS:
const { defineConfig, loadConfig, findEntry } = require('bunli');// bunli.config.ts
import { defineConfig } from 'bunli';
export default defineConfig({
name: 'my-cli',
version: '1.0.0',
build: {
entry: 'src/cli.ts',
targets: ['native']
},
dev: {
watch: true
}
});
// Using programmatic API
import { loadConfig, findEntry } from 'bunli';
const config = await loadConfig();
const entryPoint = await findEntry();Bunli is built around several key components:
Type-safe configuration system for defining project settings, build options, and development preferences.
/**
* Type-safe helper for defining bunli configuration files
* @param config - Configuration object following BunliConfig schema
* @returns The same configuration object with type validation
*/
function defineConfig(config: BunliConfig): BunliConfig;
/**
* Loads bunli configuration from config files
* @param cwd - Current working directory to search for config files (defaults to process.cwd())
* @returns Promise resolving to the loaded configuration
*/
function loadConfig(cwd?: string): Promise<BunliConfig>;
interface BunliConfig {
name?: string;
version?: string;
description?: string;
commands?: {
manifest?: string;
directory?: string;
};
build?: BuildConfig;
dev?: DevConfig;
test?: TestConfig;
release?: ReleaseConfig;
workspace?: WorkspaceConfig;
}Utilities for project introspection and file discovery.
/**
* Auto-detects entry point files for CLI projects
* @param cwd - Current working directory to search (defaults to process.cwd())
* @returns Promise resolving to detected entry file path or undefined if none found
*/
function findEntry(cwd?: string): Promise<string | undefined>;Complete command-line interface for development, building, testing, and releasing CLI applications.
# Development
bunli dev [options] # Run CLI in development mode with hot reload
bunli build [options] # Build CLI for production
bunli test [options] # Run tests for CLI
# Project Management
bunli init [options] [name] # Initialize new Bunli CLI project
bunli release [options] # Create a release of CLI
# Global Options
bunli --help # Show help information
bunli --version # Show version informationinterface BuildConfig {
entry?: string | string[];
outdir?: string;
targets?: string[];
compress?: boolean;
external?: string[];
minify?: boolean;
sourcemap?: boolean;
}
interface DevConfig {
watch?: boolean;
inspect?: boolean;
port?: number;
}
interface TestConfig {
pattern?: string | string[];
coverage?: boolean;
watch?: boolean;
}
interface ReleaseConfig {
npm?: boolean;
github?: boolean;
tagFormat?: string;
conventionalCommits?: boolean;
}
interface WorkspaceConfig {
packages?: string[];
shared?: any;
versionStrategy?: 'fixed' | 'independent';
}