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',
});
});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.