We are currently working on new rules for what content should and shouldn't be allowed on this website, and are looking for feedback! See Esolang:2026 topicality proposal to view and give feedback on the current draft.
Meowlang
- Not to be confused with Meow (Martsadas), nor Meow (None1).
Meowlang is an esoteric programming language where every program speaks exclusively in cat. Instead of keywords or symbols, the entire source code consists of one sound: the meow. Each element is written as a run of Meow tokens — the more meows, the higher the opcode — making Meowlang perhaps the only Turing-complete language whose source code is also a valid feline monologue. As of version 0.4.0, a Meowlang program can read keyboard input, print arbitrary text, sleep, and clear the screen, putting full interactive programs within reach of any sufficiently patient cat.
The language was inspired by Chicken. User:Wixette designed Meowlang's instruction set and open-sourced the JavaScript interpreter.
Examples
Hello, World!
The following program prints Hello, World! using the YOWL instruction (opcode 10), which pops the tail value and prints the corresponding ASCII character. Each character's code is loaded with PUSH (opcode 2) and immediately printed with YOWL. Here are the first two instructions — PUSH 'H' then YOWL — in the standard .meow token format, where every number is simply a run of Meow tokens followed by a semicolon:
MeowMeow; MeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeow; MeowMeowMeowMeowMeowMeowMeowMeowMeowMeow; MeowMeow; MeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeow; MeowMeowMeowMeowMeowMeowMeowMeowMeowMeow;
(the pattern repeats for each of the remaining 11 characters)
Each run of Meow tokens is simply a number. The same program in the simplified .smeow format makes the numeric values explicit:
2 // PUSH 72 // 'H' = 72 10 // YOWL 2 // PUSH 101 // 'e' = 101 10 // YOWL 2 // PUSH 108 // 'l' = 108 10 // YOWL 2 // PUSH 108 // 'l' = 108 10 // YOWL 2 // PUSH 111 // 'o' = 111 10 // YOWL 2 // PUSH 44 // ',' = 44 10 // YOWL 2 // PUSH 32 // ' ' = 32 10 // YOWL 2 // PUSH 87 // 'W' = 87 10 // YOWL 2 // PUSH 111 // 'o' = 111 10 // YOWL 2 // PUSH 114 // 'r' = 114 10 // YOWL 2 // PUSH 108 // 'l' = 108 10 // YOWL 2 // PUSH 100 // 'd' = 100 10 // YOWL 2 // PUSH 33 // '!' = 33 10 // YOWL 0 // RET
Output:
Hello, World!
Echo
A real-time character echo loop using SNIFF (opcode 11) and YOWL (opcode 10). SNIFF reads one character from standard input and pushes its ASCII code; YOWL pops and prints it back. The loop exits when SNIFF receives a zero (end of input, e.g. Ctrl+D in a terminal).
11 // [0] SNIFF — read one character from stdin 9 // [1] JE 6 // [2] → jump to index 6 if input is 0 (end of input) 10 // [3] YOWL — echo the character 8 // [4] JMP 0 // [5] → back to index 0 0 // [6] RET — final newline
Fibonacci
A Meowlang program to print the Fibonacci numbers:
MeowMeowMeowMeowMeowMeowMeowMeow; MeowMeowMeowMeow; Meow; Meow; MeowMeow; MeowMeowMeowMeowMeowMeowMeowMeowMeowMeow; MeowMeowMeowMeow; MeowMeow; Meow; ; MeowMeowMeow; MeowMeowMeowMeow; MeowMeow; MeowMeowMeowMeow; MeowMeowMeow; MeowMeowMeowMeowMeowMeow; MeowMeowMeowMeow; MeowMeowMeow; MeowMeowMeowMeowMeow; MeowMeow; MeowMeowMeow; MeowMeowMeowMeowMeow; MeowMeowMeow; MeowMeowMeow; MeowMeow; Meow; MeowMeowMeowMeowMeowMeowMeow; MeowMeowMeowMeowMeowMeowMeowMeowMeow; MeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeowMeow; MeowMeowMeowMeowMeowMeowMeowMeow; MeowMeowMeowMeowMeowMeow; MeowMeowMeow; MeowMeowMeowMeowMeowMeowMeowMeowMeowMeow;
The output of the Fibonacci program:
🐈 🐈 🐈🐈 🐈🐈🐈 🐈🐈🐈🐈🐈 🐈🐈🐈🐈🐈🐈🐈🐈 🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈 🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈 🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈 🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈
Language Specification
Meow List
A valid Meowlang program is a text representation of a Meow List.
A Meow List is a sequence of Meow elements.
Every Meow element contains zero or more Meow tokens. The number of Meow tokens in a Meow element corresponds to a non-negative integer value, which is the value of the Meow element.
A Meow element can be treated either as a Meow instruction or a Meow operand, depending on the execution context:
- When a Meow element is treated as a Meow instruction, the value of the element is the opcode of the instruction.
- When a Meow element is treated as a Meow operand, the operand value is the value of the element.
In the Meowlang runtime, the loaded Meow List is a read/write list, which is both the sequence of instructions to execute and the only in-memory data structure that instructions can access.
In other words, code is data and data is code.
Meow Tokens
A Meow token is a cat cry written in plain text. The following Meow tokens are valid and interchangeable in Meowlang programs:
Meowin English (alsoMiaowandMeaw)Miaouin French喵in ChineseMiaoin Chinese PinyinMiauin Germanニャーin Japanese KatakanaМяуin Russian
Meow tokens are case-insensitive. For example, Meow, meow, and MEOW are all the same token. Tokens from different languages can be mixed freely within a single program.
Meow File Format
The text representation of a Meowlang program uses the semicolon ; to end every Meow element. The Chinese fullwidth semicolon ; is also accepted as an equivalent separator.
For example, the following code contains 5 Meow elements whose values are 0, 1, 2, 3, and 4:
; Meow; Meow Meow; Meow Meow Meow; Meow Meow Meow Meow;
White spaces (space, tab, newline) are used for formatting only and are ignored during execution. You may lay out your code in many creative ways. For example:
; M e o w ; MeowMeow ; MeowMeowMeow ; MeowMeowMeowMeow ;
Tokens from different languages can be mixed in the same element. For example:
; 喵; Meow Miao; Miaou Miaou Miaou; Miaou 喵 Meow Miao;
The preferred file extension for the Meow format is .meow.
Simplified Meow File Format
A Meow program can also be stored as a sequence of non-negative integers, one per line, each corresponding to the value of a Meow element:
0 1 2 3 4
Line comments starting with // are supported in this format:
11 // SNIFF 9 // JE 6 // → jump to index 6
The preferred file extension for the simplified format is .smeow.
Meow Instruction Set
| Opcode | Name | Cat Behavior | Description | IP Operation
|
|---|---|---|---|---|
0
|
RET
|
Print an empty line ("\n") to the output.
|
IP++
| |
1
|
MEOW
|
Print T cat emoji characters to the output.
|
IP++
| |
2
|
PUSH
|
Push N to the tail of the Meow List.
|
IP += 2
| |
3
|
POP
|
Pop the tail element from the Meow List. | IP++
| |
4
|
LOAD
|
Push the value of E(N) to the tail of the Meow List.
|
IP += 2
| |
5
|
SAVE
|
Copy the tail value into E(N). The tail is not popped.
|
IP += 2
| |
6
|
ADD
|
Pop the last two tail elements, push their sum. | IP++
| |
7
|
SUB
|
Pop the last two tail elements, push (second-to-last − last). If the result would be negative, push zero instead. | IP++
| |
8
|
JMP
|
Set IP to N.
|
IP = N
| |
9
|
JE
|
If the tail value is zero, set IP to N; otherwise skip the operand and continue.
|
IP = (T == 0) ? N : IP + 2
| |
10
|
YOWL
|
A loud sound directed at humans. | ASCII Output: Pop the tail value and print the corresponding ASCII character. | IP++
|
11
|
SNIFF
|
Detecting a scent from the environment. | ASCII Input: Read one character from standard input and push its ASCII code to the tail. Pushes 0 on EOF.
|
IP++
|
12
|
NAP
|
A cat's rest. | Sleep: Pop the tail value and pause execution for that many milliseconds. | IP++
|
13
|
SCRATCH
|
Cleaning the territory. | Clear Screen: Clear the output console or screen. | IP++
|
≥14
|
NOP
|
No operation. | IP++
|
IP: The Instruction Pointer.T: The value of the tail element.N: The value of the next element (the operand).E(N): The element at indexNin the Meow List.
Interpreters
- Source code and CLI: https://github.com/wixette/meowlang
- Online interpreter: https://wixette.github.io/meowlang/