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.
▀▄█▌▐░▒▓
| Designed by | {{{author}}} |
|---|---|
| Appeared in | 2026 |
| Dimensions | 1 |
| Computational class | Unknown |
| Reference implementation | Unimplemented |
▀▄█▌▐░▒▓ is an esoteric programming language created by User:Ø in 2026. It is a direct reskin of Brainfuck: identical semantics, but every command is replaced with a Unicode block/shade character instead of an ASCII symbol. The name comes from the block elements' informal name, "shade characters."
Programs are stored in .shade files, which begin with a short text header before the actual code, distinguishing Shade files from plain Brainfuck source.
Instructions
Shade uses the same eight commands as Brainfuck, mapped onto eight Unicode block/shade characters (U+2580–U+2593):
| Shade | Unicode | Brainfuck equivalent | Meaning |
|---|---|---|---|
█ |
U+2588 FULL BLOCK | + |
Increment the byte at the pointer |
░ |
U+2591 LIGHT SHADE | - |
Decrement the byte at the pointer |
▒ |
U+2592 MEDIUM SHADE | < |
Move the pointer left |
▓ |
U+2593 DARK SHADE | > |
Move the pointer right |
▀ |
U+2580 UPPER HALF BLOCK | [ |
Jump forward past the matching ▄ if the current byte is zero
|
▄ |
U+2584 LOWER HALF BLOCK | ] |
Jump back to the matching ▀ if the current byte is nonzero
|
▌ |
U+258C LEFT HALF BLOCK | . |
Output the current byte as a character |
▐ |
U+2590 RIGHT HALF BLOCK | , |
Input a character and store its value at the pointer |
Any character other than the eight above is treated as a comment and ignored, in keeping with Brainfuck tradition.
File format
A .shade file consists of a header, a separator, and a body:
SHADE v1 ; anything on a line starting with a semicolon is a comment --- (program code goes here, using the eight shade characters)
- Line 1 must read
SHADE v1, identifying the file and format version. - The line
---marks the end of the header and the start of the program body. - Everything after
---is scanned for the eight instruction characters; all other characters (including whitespace, comments, and decorative box-drawing) are ignored.
Examples
Hi
Increments the cell to 72 ('H'), prints it, increments to 105 ('i'), prints it:
SHADE v1 --- ████████████████████████████████████████████████████████████████████████▌█████████████████████████████████▌
Hello, World!
A direct transliteration of the canonical Brainfuck Hello World program, substituting shade characters one-for-one for their Brainfuck equivalents:
SHADE v1 --- ████████▀▓████▀▓██▓███▓███▓█▒▒▒▒░▄▓█▓█▓░▓▓█▀▒▄▒░▄▓▓▌▓░░░▌███████▌▌███▌▓▓▌▒░▌▒▌███▌░░░░░░▌░░░░░░░░▌▓▓█▌▓██▌
(Output: Hello World!)
Implementation
Python
A minimal reference interpreter:
<syntaxhighlight lang="python"> import sys
OPS = "█░▒▓▀▄▌▐" # incr, decr, left, right, loop-start, loop-end, out, in
def load(path):
with open(path, encoding='utf-8') as f:
lines = f.read().splitlines()
if not lines or not lines[0].startswith("SHADE"):
raise ValueError("Not a valid .shade file (missing 'SHADE v1' header)")
body_start = lines.index("---") + 1
code = "\n".join(lines[body_start:])
return "".join(c for c in code if c in OPS)
def run(code):
tape = [0] * 30000
ptr = pc = 0
out = []
stack, match = [], {}
for i, c in enumerate(code):
if c == "▀":
stack.append(i)
elif c == "▄":
j = stack.pop()
match[i], match[j] = j, i
while pc < len(code):
c = code[pc]
if c == "█": tape[ptr] = (tape[ptr] + 1) % 256
elif c == "░": tape[ptr] = (tape[ptr] - 1) % 256
elif c == "▒": ptr -= 1
elif c == "▓": ptr += 1
elif c == "▀":
if tape[ptr] == 0: pc = match[pc]
elif c == "▄":
if tape[ptr] != 0: pc = match[pc]
elif c == "▌": out.append(chr(tape[ptr]))
elif c == "▐": tape[ptr] = ord(sys.stdin.read(1) or "\0")
pc += 1
return "".join(out)
if __name__ == "__main__":
print(run(load(sys.argv[1])))
</syntaxhighlight>