cowsay is a configurable talking cow

Usage no npm install needed!

<script type="module">
  import cowsay from '';



< srsly dude, why? >
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

cowsay is a configurable talking cow, originally written in Perl by Tony Monroe

This project is a translation in JavaScript of the original program and an attempt to bring the same silliness to node.js.


npm install -g cowsay


cowsay JavaScript FTW!


cowthink node.js is cool

It acts in the same way as the original cowsay, so consult cowsay(1) or run cowsay -h

< indeed >
  .!!!!!:.                        .:!!!!!!!!!!!!
  ~~~~!!!!!!.                 .:!!!!!!!!!UWWW$$
      :$NWX!!:           .:!!!!!!XUWW$$$$$P
      $$$##WX!:      .<!!!!UW$$"  $$$$#
      $$$  $$UX   :!!UW$$$$$   4$$$*
      ^$$B  $$\     $$$$$$   d$R"
        "*$bd$$      '*$$$$$$o+#"
             """"          """""""

Usage as a module

cowsay can be used as any other npm dependency

var cowsay = require("cowsay");

    text : "I'm a moooodule",
    e : "oO",
    T : "U "

// or cowsay.think()
( I'm a moooodule )
        o   ^__^
         o  (oO)\_______
            (__)\       )\/\
             U  ||----w |
                ||     ||

getting a list of cow names:

function get_cows(error, cow_names) {
    if (error) {
    else if (cow_names) {
        console.log(`Number of cows available: ${cow_names.length}`);


Typescript examples:

import * as cowsay from "cowsay"

let output: string = cowsay.say({ text: 'Hello from typescript!' });


getting a list of cow names:

function get_cows(error: NodeJS.ErrnoException, cow_names: Array<string>): void {
    if (error) {
        console.log(`Error getting cow names: ${error.message}`)
    else if (cow_names) {
        console.log(`Number of cows available: ${cow_names.length}`);


importing the IOptions interface directly:

import { IOptions } from "cowsay" // optional

let opts: IOptions = {
    text: "Hello from TypeScript!",
    e: '^^',
    r: true,


Pipe from standard input

echo please repeat | cowsay

Usage in the browser

cowsay works in your browser too with rollup / webpack / browserify / you name it.

import { say } from 'cowsay';

console.log(say({ text: 'grazing in the browser' }));

You can customize the cow by importing the relevant one

import { think, SQUIRREL } from 'cowsay';

  text: 'grazing in the browser',
  cow: SQUIRREL,
  eyes: 'pp',
  tongue: ';;',

All cows are included in the bundle, but you can use rollup / webpack tree-shake feature to reduce the final bundle size.

Browser options

  text: 'hello',
  cow: '', // Template for a cow, get inspiration from `./cows`
  eyes: 'oo', // Select the appearance of the cow's eyes, equivalent to cowsay -e
  tongue: 'L|', // The tongue is configurable similarly to the eyes through -T and tongue_string, equivalent to cowsay -T
  wrap: false, // If it is specified, the given message will not be word-wrapped. equivalent to cowsay -n
  wrapLength: 40, // Specifies roughly where the message should be wrapped. equivalent to cowsay -W
  mode: 'b', // One of 	"b", "d", "g", "p", "s", "t", "w", "y"