Real-time performance
Blazing fast ASCII conversion powered by an optimized WebGL2 rendering pipeline specifically designed for textmode art.
textmode.js? textmode.js brings the art of ASCII and textmode graphics into the modern web. Built for developers from all corners and skill levels of the creative coding world - it's the tool I wished existed when I started exploring textmode art.
A library designed for building generative art installations, retro games, interactive visualizations, live coding performances, and experimental web experiences. Whether you're prototyping an idea or shipping a production app, textmode.js has you covered.
Shape the future of textmode graphics. Your feedback, ideas, and creations help drive development. Join our Discord to share what you're building, get support, and connect with fellow textmode enthusiasts.
const tm = textmode.create();
tm.draw(() => {
tm.background(0, 0, 0, 0);
const halfCols = tm.grid.cols / 2;
const halfRows = tm.grid.rows / 2;
for (let y = -halfRows; y < halfRows; y++) {
for (let x = -halfCols; x < halfCols; x++) {
const dist = Math.sqrt(x * x + y * y);
const wave = Math.sin(dist * 0.2 - tm.frameCount * 0.1);
tm.push();
tm.translate(x, y, 0);
tm.char(wave > 0.5 ? '▓' : wave > 0 ? '▒' : '░');
tm.charColor(0, 150 + wave * 100, 255);
tm.point();
tm.pop();
}
}
});Simple, powerful, and ready for your wildest ideas.
#textmodejsEvery pattern, every animation, every experiment adds to the growing tapestry of textmode art. These sketches are randomly selected from our featured collection.
Hover over sketches to view source, tweak parameters, and break things - it's encouraged!
Join the conversation and share your experience with textmode.js
#textmodejs and we might feature you!You're not coding alone. Join a vibrant community of creative developers pushing the boundaries of textmode art.
Every sketch starts with an empty file.
Your next masterpiece starts the same way.