or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

cli-commands.mdframework-integration.mdindex.mdplugin-system.md
tile.json

index.mddocs/

ice.js

ice.js is a command line interface and builtin plugin system for the icejs React.js-based universal framework. It provides essential development commands and integrates multiple build plugins for various functionalities like authentication, routing, state management, server-side rendering, and multi-page applications. The tool serves as the core development toolchain for icejs applications, enabling developers to quickly scaffold, develop, and build React applications with built-in support for TypeScript, CSS modules, and modern JavaScript features.

Package Information

  • Package Name: ice.js
  • Package Type: npm
  • Language: JavaScript/TypeScript
  • Installation:
    npm install ice.js --save-dev

Core Imports

For programmatic usage (framework integration):

// Main module exports an anonymous function via module.exports
const createIceCli = require("ice.js");

ES Modules:

// ES module default import of the main function
import createIceCli from "ice.js";

For accessing the plugin system directly:

// getBuiltInPlugins uses CommonJS export = syntax
const getBuiltInPlugins = require("ice.js/lib/getBuiltInPlugins");

Basic Usage

CLI Usage

Most common usage is through the command line interface:

# Install ice.js as a dev dependency
npm install ice.js --save-dev

# Add scripts to package.json
{
  "scripts": {
    "start": "icejs start",
    "build": "icejs build",
    "test": "icejs test"
  }
}

# Run development server
npm start

# Build for production
npm run build

# Run tests
npm test

Programmatic Usage

For framework integration or custom tooling:

const createIceCli = require("ice.js");
const packageInfo = require("./package.json");

// Create CLI with custom framework name
createIceCli("my-framework", {
  packageInfo: packageInfo,
  extendCli: (program) => {
    // Add custom commands
    program
      .command("custom")
      .description("custom command")
      .action(() => {
        console.log("Custom command executed");
      });
  }
});

Architecture

ice.js is built around several key components:

  • CLI Interface: Commander.js-based command line interface with standard development commands
  • Plugin System: Extensible plugin architecture with builtin plugins for common functionality
  • Build Scripts Integration: Built on @alib/build-scripts for consistent build processes
  • Child Process Management: Fork-based process management for development server isolation
  • Configuration Management: Flexible configuration system supporting multiple formats

Capabilities

Command Line Interface

Core CLI functionality providing

start
,
build
, and
test
commands with configurable options and plugin integration.

// CLI commands accessible via icejs executable
// icejs <command> [options]

// Available commands:
// - start: Start development server
// - build: Build project for production  
// - test: Run Jest tests

CLI Commands

Plugin System

Builtin plugin system that automatically configures development and build processes based on user configuration and project requirements.

/**
 * Get builtin plugins based on user configuration
 * @param {Object} userConfig - User configuration object
 * @returns {Array} Array of plugin configurations
 */
function getBuiltInPlugins(userConfig);

Plugin System

Framework Integration

Programmatic interface for integrating ice.js into custom frameworks and toolchains.

/**
 * Create CLI with framework integration (module.exports function)
 * @param {string} frameworkName - Name of the framework
 * @param {Object} options - Configuration options (destructured)
 * @param {Object} options.packageInfo - Package.json information
 * @param {Function} [options.extendCli] - Function to extend CLI with custom commands
 */
module.exports = function(frameworkName, { packageInfo, extendCli });

Framework Integration

Types

/**
 * User configuration object
 * @typedef {Object} UserConfig
 * @property {boolean} [disableRuntime] - Disable runtime features
 * @property {boolean} [ssr] - Enable server-side rendering
 * @property {boolean} [store] - Enable state management (default: true)
 * @property {boolean} [auth] - Enable authentication (default: true)
 * @property {Array} [plugins] - Additional user plugins
 */

/**
 * Package information object (standard package.json structure)
 * @typedef {Object} PackageInfo
 * @property {string} name - Package name
 * @property {string} version - Package version
 * @property {Object} engines - Node.js engine requirements
 * @property {string} engines.node - Node.js version requirement (e.g., ">=10.13.0")
 * @property {Object} [__ICEJS_INFO__] - Ice.js framework information (auto-added)
 * @property {string} [__ICEJS_INFO__.name] - Ice.js package name ("ice.js")
 * @property {string} [__ICEJS_INFO__.version] - Ice.js package version
 */

/**
 * Plugin configuration
 * @typedef {string|Array} PluginConfig
 * - String: Plugin name
 * - Array: [pluginName, options]
 */