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 featuresQuick 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(); // animatedColors
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(); // HSLBackground 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 + bgModifiers
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 paddingCentering
stylish("text").centerX().print(); // Horizontal center
stylish("text").centerY().print(); // Vertical center
stylish("text").center().print(); // BothAnimations (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();banner — Combine Blocks
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() |