626 words
3 minutes
Cutesy

Trigger warning: American spelling

Do you know this feeling? You have added a bunch of logging and want to make things prettier? Pretty fast you find yourself looking add simple coloring and start seeing that it looks a little more complicated, starting to write your own little logger and keep copy pasting the same thing into your hundreds of projects thinking

I wish i could just use this everywhere?

Now if you only code in one programming language that seems like something that isn’t a problem because you can just make a package for it and use it, like i did at first.

Now if you were to switch from JavaScript to something like Python you’d pretty quickly see that you have to rewrite your entire logic into python because the likelyhood of having the exact same logger in two languages is quite unlikely. You might find similarities but at the end you’ll end up with something that works differently in one language than the other.

I decided to put an end because more than often i don’t need complicated loggers but instead just a logger that is capabable of basic things.

Features#

  • Uncomplicated coloring with the same default color pallette
  • Padding when using multiple loggers
  • Write to a file when promted to do so
  • Timestamps
  • Naming
  • Tracing

The goal? A small, simple, zero dependancy logger, that is both compatible with ANSI-8 and ANSI-256/Truecolor maintaining the same usage and functionality in every single language that the package exists for.

Behold the invention made back in 2022. The original concept: Cutesy

Calemy
/
cutesy
Waiting for api.github.com...
00K
0K
0K
Waiting...
NOTE

Cutesy’s original package is now outdated by my new standards, but will be overhauled by the changes introduced in other languages.

Now i had a package that made logging easy for me!

JavaScript (cutesy)#

import Logger from "cutesy.js" //version 1.2.3
const logger = new Logger() //currently uses ANSI-256 by default
logger.blue("This part is colored blue ").red("while this is red!").send()
logger.addTimestamp("hh:mm:ss").send("This text has a timestamp")
// => 04:31:05 - This text has a timestamp
logger.changeTag("Debug").send("This is a debug")
// => Debug | This text is a debug
logger.sendTraced("Where am I?")
//Where am I? -> /home/nanoo/cutesy/blog.js:9:7
logger.send("This should be saved inside a file.").save()
//Everything attatched to the message will be saved inside the file (Name, Timestamp, Trace)
logger.blurple()
//Now all messages are Blurple?!?!
logger.send("This message is Blurple")
logger.send("This one too!")
logger.green().send("Now it's green")
logger.send("Still green. surprising isn't it?")

Quickly i got a reality check when i switched to Go. There is no package that does the thing i want to do in a simple manner like i’m used to. So i got quickly to thinking and came up with the go-varient of cutesy. Currently called Goatsy. It’s also my first Go code that i’ve published to GitHub!

Calemy
/
goatsy
Waiting for api.github.com...
00K
0K
0K
Waiting...

Get it? It’s funny because it’s Go? Goatsy?

Oh it just isn’t funny. Right..

Oh well now we try the same things we did in JavaScript.

Go (goatsy)#

import "github.com/calemy/goatsy" //version 0.0.1
var logger = goatsy.New(&goatsy.Options{
Truecolor: true, //Enables truecolor, currently uses ANSI-256 by default which has to be changed.
TimeFormat: time.DateTime,
})
logger.Blue("This part is colored blue ").Red("while this is red!").Send()
logger.Rename("Debug").Send("This is a debug")
logger.Trace("Where am I?")
//Where am I? -> /home/nanoo/goatsy/blog.go:10
//Saving to a file is currently a WIP
logger.Blurple()
//Now all messages are Blurple?!?!
logger.Send("This message is Blurple")
logger.Send("This one too!")
logger.Green().Send("Now it's green")
logger.Send("Still green. surprising isn't it?")
logger.Color("#ff0000", 9).Send("I now used a custom color, with a fallback in case truecolor is disabled.")

As you can see. It’s quite similar to each other therefore i’ll still do changes to cutesy to align it with goatsy.

I’m now working on a Python version which i would have called qtcpy which follows a similar concept to JavaScript.

My C version i would have called cuteC.

Now thinking about it, i should just stick with cutesy-ext.

Language Support List#

Fully supported#

  • JavaScript (cutesy) - The OG 🗣🗣🗣

Partily supported#

  • Go (goatsy) (soon cutesy-go)

Work in Progress#

  • Python

Planned#

  • C/C++
  • Zig
  • Rust
  • Odin

If you have any wishes, let me know!

Cutesy
https://blog.catboy.best/posts/cutesy/
Author
Nanoo
Published at
2025-09-19
License
CC BY-NC-SA 4.0