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";constoutput=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";constoutput=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";constmyHex=nprint.hex("#05ffacff");nprint.log(myHex.bold.underline("Custom styled text"));import{code,registerLang,render}from"@monitext/nprint";importjavascriptfrom"highlight.js/lib/languages/javascript";// Register the language firstregisterLang("javascript",javascript);constoutput=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.
constoutput=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.
constoutput=writeSync(({ push, cols })=>{push(cols.green("Synchronous green text"));});Asynchronous version of the write function.
constoutput=awaitwriteAsync(async({ push, cols })=>{awaitsomeAsyncOperation();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:
constoutput=code({lang: "typescript",content: "const x = 42;",theme: "githubDark",});Register a new language for syntax highlighting:
import{registerLang}from"@monitext/nprint";importpythonfrom"highlight.js/lib/languages/python";registerLang("python",python);Get the current terminal width:
constwidth=getTerminalWidth();// Auto-detectDetect the current JavaScript runtime:
construntime=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";constboxedText=box("Hello, World!",{color: "blue",rounded: true});console.log(boxedText);Add horizontal and vertical padding to text:
import{pad}from"@monitext/nprint";constpaddedText=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";constbarredText=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")));});constoutput=awaitwriteAsync(async({ push, cols })=>{push(cols.blue("Loading data..."));constdata=awaitfetchData();push(cols.green("Data loaded successfully!"));});The library is fully typed and provides excellent IntelliSense support:
importtype{Theme}from"@monitext/nprint";consttheme: 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.