Nprint is a cross-platform console logging and styling utility that works seamlessly in Node.js, Deno, Bun, and browsers (Yes — even browser consoles support full color!). It provides a rich API for color manipulation, syntax highlighting, and terminal utilities, making it an essential tool for developers who want to enhance their console output.
- 🎨 Cross-platform color support - Works in Node.js, Bun, Deno, and browsers.
- 🖥️ Auto-runtime detection - Automatically detects the environment and applies appropriate styling.
- 🌈 Rich color API - Support for named colors, hex colors, and background colors.
- 💻 Syntax highlighting - Powered by highlight.js with multiple themes.
- 📏 Terminal utilities - Terminal width detection and horizontal rule generation.
- 🔄 Flexible rendering - Support for both synchronous and asynchronous operations.
- 🎯 TypeScript support - Fully typed with comprehensive TypeScript definitions.
Install the library using your favorite package manager:
npm install @monitext/nprint
# or
pnpm add @monitext/nprint
# or
yarn add @monitext/nprintYou can use nprint in two ways:
import { nprint } from "@monitext/nprint";
const output = nprint.write(({ push }) => {
const { cols } = nprint;
push(cols.red("Error: Something went wrong!"));
push(cols.green("Success: Operation completed"));
push(cols.blue.bold("Bold blue text"));
});
nprint.log(output); // Wrapper around console.logimport { write, render, cols } from "@monitext/nprint";
const output = write(({ push }) => {
push(cols.red("Error: Something went wrong!"));
push(cols.green("Success: Operation completed"));
push(cols.blue.bold("Bold blue text"));
});
console.log(...render(output));import { nprint } from "@monitext/nprint";
const myHex = nprint.hex("#05ffacff");
nprint.log(myHex.bold.underline("Custom styled text"));import { code, registerLang, render } from "@monitext/nprint";
import javascript from "highlight.js/lib/languages/javascript";
// Register the language first
registerLang("javascript", javascript);
const output = code({
lang: "javascript",
content: `
function greet(name) {
console.log(\`Hello, \${name}!\`);
}
greet("World");
`,
theme: "githubDark", // or "monokai", "vs", "far"
});
console.log(...render(output));The main function for creating styled output. Automatically detects whether the function is synchronous or asynchronous.
const output = write(({ push, cols, hex, bgHex, code, pretty }) => {
push("Regular text");
push(cols.red("Red text"));
push(hex("#FF0000")("Hex red text"));
});Synchronous version of the write function.
const output = writeSync(({ push, cols }) => {
push(cols.green("Synchronous green text"));
});Asynchronous version of the write function.
const output = await writeAsync(async ({ push, cols }) => {
await someAsyncOperation();
push(cols.blue("Asynchronous blue text"));
});Object containing all available color functions based on chalk styling:
cols.red("Red text");
cols.green.bold("Bold green text");
cols.bgBlue("Text with blue background");Apply custom hex colors to text:
hex("#FF5733")("Orange text");Apply custom hex background colors:
bgHex("#333333")("Text with dark background");Render syntax-highlighted code:
const output = code({
lang: "typescript",
content: "const x = 42;",
theme: "githubDark",
});Register a new language for syntax highlighting:
import { registerLang } from "@monitext/nprint";
import python from "highlight.js/lib/languages/python";
registerLang("python", python);Get the current terminal width:
const width = getTerminalWidth(); // Auto-detectDetect the current JavaScript runtime:
const runtime = detectRuntime();
// Returns: "node" | "bun" | "deno" | "browser" | "unknown"write(({ push, pretty }) => {
pretty.hr({
char: "=",
width: 50,
title: "Section Title",
align: "center",
titleColor: "blue",
hrColor: "gray",
});
});Create a box around text with customizable colors and rounded corners:
import { box } from "@monitext/nprint";
const boxedText = box("Hello, World!", { color: "blue", rounded: true });
console.log(boxedText);Add horizontal and vertical padding to text:
import { pad } from "@monitext/nprint";
const paddedText = pad("Hello, World!", { x: 2, y: 1 });
console.log(paddedText);Add a vertical bar to the left of text with customizable styling:
import { vbar } from "@monitext/nprint";
const barredText = vbar("Hello, World!", { color: "gray", bold: true, pad: 2 });
console.log(barredText);write(({ push, cols, hex, bgHex }) => {
push(cols.bold(cols.underline(cols.red("Bold underlined red"))));
push(bgHex("#1a1a1a")(hex("#00ff00")("Green on dark background")));
});const output = await writeAsync(async ({ push, cols }) => {
push(cols.blue("Loading data..."));
const data = await fetchData();
push(cols.green("Data loaded successfully!"));
});The library is fully typed and provides excellent IntelliSense support:
import type { Theme } from "@monitext/nprint";
const theme: Theme = "githubDark"; // Autocomplete available- ✅ Node.js - Full ANSI color support
- ✅ Bun - Full ANSI color support
- ✅ Deno - Full ANSI color support
- ✅ Browser - Console styling with CSS
- ✅ TypeScript - Complete type definitions
Unlike other libraries like Chalk or Colorette, @monitext/nprint unifies terminal and browser styling, includes syntax highlighting out of the box, and is built around a pseudo-rendering system that makes it easy to format strings, code, and pretty outputs in one place.
Contributions are welcome! Please feel free to submit a Pull Request or open an issue.