JSPM

stylish-terminal

1.1.0
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 21
  • Score
    100M100P100Q47162F
  • License MIT

Beautiful terminal styling — colors, gradients, animations, pixel art, themes, and more.

Package Exports

  • stylish-terminal

Readme

Stylish — JavaScript / TypeScript

Beautiful terminal styling library for Node.js. Colors, gradients, animations, pixel art, tables, and more.

Installation

npm install sharp  # Optional: only needed for image/GIF features

Quick Start

import { stylish, log } from 'stylish-terminal';

stylish("Hello World!").red.bold.print();
stylish("Gradient text").gradient(["#ff0000", "#0000ff"]).print();
log.info("Server started");

API Reference

stylish(text) — Create a StyledText

Returns a chainable StyledText object. All methods return this for chaining. Animations are async — use await with .print().

stylish("text").red.bold.italic.underline.print();
await stylish("text").typing({ speed: 30 }).print(); // animated

Colors

Named colors (as properties)

stylish("text").red.print();
stylish("text").cyan.print();
stylish("text").gold.print();
stylish("text").emerald.print();

Available: black, white, red, green, blue, yellow, cyan, magenta, orange, pink, purple, lime, teal, indigo, violet, coral, salmon, gold, silver, gray, navy, maroon, olive, aqua, crimson, turquoise, tomato, chocolate, skyblue, lavender, peach, mint, rose, azure, emerald, ruby, sapphire, amber

Custom colors

stylish("text").fg("#ff6b35").print();         // Hex
stylish("text").fg(100, 200, 50).print();      // RGB
stylish("text").fg("hsl(280, 80%, 60%)").print(); // HSL

Background colors

stylish("text").bg("#2d2d2d").print();         // Custom bg
stylish("text").bg(0, 0, 128).print();         // RGB bg
stylish("text").bg_navy.print();               // Named bg (bg_ prefix)
stylish("text").fg("#fff").bg("#9b59b6").print(); // fg + bg

Modifiers

stylish("text").bold.print();
stylish("text").dim.print();
stylish("text").italic.print();
stylish("text").underline.print();
stylish("text").blink.print();
stylish("text").inverse.print();
stylish("text").hidden.print();
stylish("text").strikethrough.print();

// Combine multiple
stylish("text").red.bold.italic.underline.print();

Gradients

// Horizontal (default)
stylish("text").gradient(["#ff0000", "#ffff00", "#00ff00"]).print();

// Vertical
stylish("multi\nline").gradient(["#ff00ff", "#00ffff"], "vertical").print();

// Diagonal
stylish("text").gradient(["#f72585", "#4cc9f0"], "diagonal").print();

// Rainbow shorthand
stylish("text").rainbow().print();

Themes

stylish("text").theme("neon").print();
stylish("text").theme("cyberpunk").print();
stylish("text").theme("matrix").print();

Available: neon, retro, ocean, forest, sunset, cyberpunk, pastel, fire, ice, matrix

Custom themes

import { themes } from 'stylish-terminal';

themes.register({
  name: "custom",
  primary: "#ff0000",
  secondary: "#00ff00",
  accent: "#0000ff",
  gradient: ["#ff0000", "#00ff00", "#0000ff"],
  modifiers: ["bold"],
});
stylish("text").theme("custom").print();

Boxes

stylish("text").box("single").print();
stylish("text").box("double").print();
stylish("text").box("rounded").print();
stylish("text").box("heavy").print();
stylish("text").box("ascii").print();
stylish("text").box("rounded", 2).print();  // with padding

Centering

stylish("text").centerX().print();   // Horizontal center
stylish("text").centerY().print();   // Vertical center
stylish("text").center().print();    // Both

Animations (async)

All animations require await.

await stylish("text").typing({ speed: 30 }).print();
await stylish("text").typewriter({ speed: 30 }).print();
await stylish("text").fadeIn({ duration: 1000 }).print();
await stylish("text").fadeOut({ duration: 1000 }).print();
await stylish("text").rainbowCycle({ duration: 3000 }).print();
await stylish("text").glitch({ duration: 2000, intensity: 0.3 }).print();
await stylish("text").pulse({ duration: 3000 }).print();
await stylish("text").wave({ duration: 3000 }).print();
await stylish("text").bounce({ duration: 3000 }).print();

Side by Side

const left = stylish("Left\nBlock").red.bold;
const right = stylish("Right\nBlock").cyan.bold;

// Using sideBySide
left.sideBySide(right).print();

// Multiple blocks with custom spacing
a.sideBySide(b, c, d).print();

String Conversion

const colored = stylish("hello").red.bold.toString();
console.log(`He said: ${colored}`);

Modules

log — Styled Logger

import { log } from 'stylish-terminal';

log.info("Message");
log.success("Message");
log.warn("Message");
log.error("Message");
log.debug("Message");

const db = log.scope("DATABASE");
db.info("Running migration...");

log.configure({ showTime: false, showIcons: false });

image — Image & GIF to Terminal

Requires: npm install sharp

import { image } from 'stylish-terminal';

// Print image as pixel art
await image.printImage("photo.jpg", 60);

// GIF animation
await image.playGif("animation.gif", 40, true, 3);

// GIF loop
await image.playGifLoop("cube.gif", 40, true, 10);

progress — Progress Bars & Spinners

import { progress } from 'stylish-terminal';

// Static progress bar
console.log(progress.progressBar(0.75, 40, ["#ff0000", "#00ff00"]));

// Animated progress bar
await progress.animatedProgress(3000, 40, ["#ff00ff", "#00ffff"]);

// Spinner
await progress.spinner("Loading...", "dots", "#00ffff", 3000);

Spinner styles: dots, line, circle, square, arrow, bounce, moon, clock, earth, blocks, star

figlet — Big ASCII Text

import { figlet, stylish } from 'stylish-terminal';

const text = figlet.bigText("HELLO");
stylish(text).gradient(["#ff0000", "#0000ff"]).print();

table — Styled Tables

import { table } from 'stylish-terminal';

console.log(table.table({
  headers: ["Name", "Score", "Status"],
  rows: [
    ["Alice", "95", "Pass"],
    ["Bob", "82", "Pass"],
  ],
  style: "rounded",
  headerColor: "#ff00ff",
  borderColor: "#555555",
  stripe: true,
  stripeColor: "#1a1a2e",
  align: "left",
}));

panel — Panels & Separators

import { panel } from 'stylish-terminal';

console.log(panel.panel({ text: "Content", title: "Title" }));
console.log(panel.separator());
console.log(panel.titledSeparator("Section Name"));

extras — Alerts, Countdown

import { extras } from 'stylish-terminal';

extras.alert("Info message", "info");
extras.alert("Success!", "success");
extras.alert("Warning!", "warning");
extras.alert("Error!", "error");

await extras.countdown(5, "Starting in");

terminal — Terminal Control

import { terminal } from 'stylish-terminal';

terminal.title("My App");
terminal.clear();
terminal.resize(120, 40);
terminal.autoResize(text, 4);
terminal.beep();

const { columns, rows } = terminal.size();
const output = terminal.execute("Get-Process");

cursor — Cursor Control

import { cursor } from 'stylish-terminal';

cursor.hide();
// ... do stuff ...
cursor.show();
import { banner } from 'stylish-terminal';

console.log(banner.combine([text1, text2, text3], 4, "top"));
// align: "top", "center", "bottom"

Color — Color Engine

import { Color } from 'stylish-terminal';

const c = Color.parse("#ff6b35");
const c2 = Color.parse(255, 107, 53);
const c3 = Color.parse("red");

c.lighten(0.2);
c.darken(0.2);
c.complement();
c.hex();  // "#ff6b35"

Color.lerp(c1, c2, 0.5);
Color.lerpHsl(c1, c2, 0.5);

Python vs JavaScript differences

Feature Python JavaScript
Animations Blocking Async (await)
Side-by-side a + b or .side_by_side() .sideBySide()
Center .center_x() .centerX()
Images Pillow sharp
Execute terminal.execute() terminal.execute()