Skip to content

Installation

Install textmode.js with npm for a modern JavaScript or TypeScript project, or load its UMD bundle directly in the browser. Official add-ons use the same plugin setup in either environment. (ง •̀_•́)ง

Try it online first

Open editor.textmode.art, a browser-based live-coding environment for the complete official textmode.js ecosystem. Sketches run as you edit, with no local toolchain required.

The editor includes textmode.js and the add-ons textmode.export.js, textmode.filters.js, textmode.figlet.js, and textmode.synth.js.

  • Write with Monaco-powered completions, hover documentation, and diagnostics.
  • Start with a blank sketch, an included example, or a community gallery sketch.
  • Keep code and preferences saved in the browser, then share sketches through URL-based links.
  • Use microphone or line-input analysis for audio-reactive work, and create on desktop or mobile.

Use it to learn the ecosystem, prototype an idea, or decide which packages your local project needs.

Requirements

You do not need to create a <canvas> element yourself. Unless you provide one, textmode.js creates and mounts a canvas after the document body is available.

WebGL2 is required

textmode.js does not currently provide a WebGL1 or Canvas 2D fallback. Check your target browsers on Can I Use.

Install textmode.js

npm and ESM

For projects built with tools such as Vite, install the package from npm:

bash
npm install textmode.js

Import the textmode entry point in your JavaScript or TypeScript:

js
import { textmode } from "textmode.js";

const t = textmode.create({
  width: window.innerWidth,
  height: window.innerHeight,
  fontSize: 16,
});

t.draw(() => {
  t.background(18);
  t.char("@");
  t.charColor(255);
  t.rect(12, 8);
});

Your bundler will include the ESM build and its TypeScript declarations automatically. Continue with First Sketch for the complete draw, setup, and resize pattern.

CDN and UMD

For a browser project without a package manager or bundler, load the UMD build from jsDelivr:

html
<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <title>textmode.js sketch</title>
  </head>
  <body>
    <script src="https://cdn.jsdelivr.net/npm/textmode.js@latest/dist/textmode.umd.js"></script>
    <script>
      const t = textmode.create({
        width: window.innerWidth,
        height: window.innerHeight,
        fontSize: 16,
      });

      t.draw(() => {
        t.background(18);
        t.char("@");
        t.charColor(255);
        t.rect(12, 8);
      });
    </script>
  </body>
</html>

The UMD bundle exposes the library as the global textmode object. Load it before any script that calls textmode.create().

Install add-ons

Official add-ons are npm packages with textmode.js as a peer dependency. Each package exports a plugin that you pass to textmode.create() through the plugins array:

PackagePlugin / UMD global
textmode.export.jsExportPlugin
textmode.filters.jsFiltersPlugin
textmode.figlet.jsFigletPlugin
textmode.overlay.jsOverlayPlugin
textmode.synth.jsSynthPlugin

The corresponding UMD files are dist/textmode.export.umd.js, dist/textmode.filters.umd.js, dist/textmode.figlet.umd.js, dist/textmode.overlay.umd.js, and dist/textmode.synth.umd.js.

npm and ESM

Install the core library and the add-on together. For example, to use textmode.filters.js:

bash
npm install textmode.js textmode.filters.js

Import the plugin and register it when you create the Textmodifier instance:

js
import { textmode } from "textmode.js";
import { FiltersPlugin } from "textmode.filters.js";

const t = textmode.create({
  width: window.innerWidth,
  height: window.innerHeight,
  plugins: [FiltersPlugin],
});

Importing the add-on also makes its TypeScript declarations and any Textmodifier augmentations available to your project.

CDN and UMD

Load the core UMD bundle first, followed by the add-on bundle, and then create your sketch with the add-on's global plugin:

html
<script src="https://cdn.jsdelivr.net/npm/textmode.js@latest/dist/textmode.umd.js"></script>
<script src="https://cdn.jsdelivr.net/npm/textmode.filters.js@latest/dist/textmode.filters.umd.js"></script>
<script>
  const t = textmode.create({
    width: window.innerWidth,
    height: window.innerHeight,
    plugins: [FiltersPlugin],
  });
</script>

Use the package, bundle, and plugin names from the table above to install another add-on with the same pattern.

Use multiple add-ons

Install every package your sketch needs in one command:

bash
npm install textmode.js textmode.export.js textmode.filters.js

Then import and register the plugins together:

js
import { textmode } from "textmode.js";
import { ExportPlugin } from "textmode.export.js";
import { FiltersPlugin } from "textmode.filters.js";

const t = textmode.create({
  width: window.innerWidth,
  height: window.innerHeight,
  plugins: [ExportPlugin, FiltersPlugin],
});

For UMD projects, follow the same order: load textmode.js, load each add-on bundle, and then run the sketch.

Version compatibility

Each add-on declares its compatible textmode.js versions through peerDependencies. Keep the core library and add-ons up to date together, and resolve any peer-dependency warning reported by npm before running your project.

Pin CDN versions for production

The CDN examples use @latest for convenient experimentation. For a reproducible production build, replace latest with tested versions for both textmode.js and every add-on.

Common setup issues

  • textmode is not defined: load the core UMD bundle before your sketch, or import textmode in your ESM module.
  • A plugin global is not defined: confirm that the matching add-on UMD bundle loaded before your sketch and that you used the plugin name from the table above.
  • npm reports a missing or incompatible peer dependency: install a compatible textmode.js version alongside the add-on.
  • The canvas is blank or WebGL initialization fails: confirm that WebGL2 is enabled and supported by the browser and device.

Next steps