print

Print is a set of pretty print macros, useful for print-debugging.

Pure Nim score 30/100 · tests present · docs generated

Summary

Latest Version Unknown
License MIT
CI Status Passing
Downloads 0
Last Indexed 2026-07-21 05:24

Tags

Installation

nimble install print
choosenim install print
git clone https://github.com/treeform/print

OS Compatibility

Platform Linux macOS Windows FreeBSD OpenBSD NetBSD Android iOS WASM Embedded
print - - - - - - -

Source

Repository https://github.com/treeform/print
Homepage https://github.com/treeform/print
Documentation View Documentation
Registry Source nimble_official

README

Print - a better echo.

nimble install print

Github Actions

API reference

This library has no dependencies other than the Nim standard library.

About

Use print the same way you would use echo for print-debugging. It prints objects the "Nim way" with syntax highlighting. Even with refs, pointers, or cycles!

import print

let a = 3
print a
a = 3

The "Nim way"

It prints data structures in the same way you would create them in Nim source code. Ideally you can take what it prints out and just copy paste that into code again and it should compile in many cases.

let
  a = 3
  b = "hi there"
  c = "oh\nthis\0isit!"
  d = @[1, 2, 3]
  d2 = [1, 2, 3]
  f = Foo(a:"hi", b:@["a", "abc"], c:1234)

print a, b, c, d, d2, f
a=3 b="hi there" c="oh\nthis\0isit!" d=@[1, 2, 3] d2=[1, 2, 3] f=Foo(a:"hi", b:@["a", "abc"], c:1234)

Syntax highlighting

Screenshot from VS Code:

Image of Yaktocat

If you are piping to a file it will detect not-a-terminal and give you plain ascii instead.

Smart indention

It will try to print out everything in one line, but it if it does not fit it will create indentation levels. Max width is based on current terminal max width.

g2 = Bar(a: "hi a really really long string", b: @["a", "abc"], c: 1234)
print g2

Stuff echo does not do well

It will also print nils, refs, and pointers.

g2=Bar(
  a: "hi a really really long string",
  b: @["a", "abc"],
  c: 1234
)
let
  p1: ptr int = nil
  p2: ref Foo = nil
print p1, p2
p1=nil p2=nil
var three = 3
var pointerToThree = cast[pointer](addr three)
print pointerToThree
pointerToThree=0x00000000004360A0

And even cycles!

It will also stop recursing repeating structures:

type Node = ref object
  data: string
  next: Node
var n = Node(data:"hi")
n.next = n
print n
n=Node(data: "hi", next: ...)