Skip to main content
A readable note in a game is usually one of two things: a texture painted on a quad, or a UMG text block floating in front of the world. The first cannot be edited without going back to a paint program; the second never looks like it is on the paper. Both read as a decal — the writing sits on top of the sheet, white text brightens it, and the paper grain stops dead at the edge of every glyph. Inkwell removes that gap. You write pages in a WYSIWYG editor inside Unreal, and at runtime each page is laid out with Slate — per-run fonts, sizes, colors, bold / italic / underline / strikethrough — and baked into an ink layer: a transparent render target holding the content and nothing else. The page material then multiplies that ink over the paper. Grain shows through every stroke, white ink cannot lighten the sheet, and one document can be printed onto different papers, tinted, or faded without re-baking the ink: the paper, Paper Tint, Ink Tint and Ink Strength are parameters on the page material, not part of the bake.
An Inkwell page rendered at runtime

A finished page as it bakes at runtime — ink multiplied over paper, not pasted onto it.

Two minutes to see it

The plugin ships a playable showroom: enable Inkwell, turn on Show Plugin Content in the Content Browser, open /Inkwell/Maps/L_InkwellShowroom, and press Play. A first-person reader pawn spawns with everything already bound — walk up to any exhibit, press E to pick it up, turn pages with the arrow keys or mouse wheel, flip the sheet over with F, put it back with Q. The map needs nothing from your project, not even input assets. The quickstart starts there.
An Inkwell note placed in the showroom level

The sample note on its podium in the showroom.

What you get

A real page editor. Type straight onto the paper. Select a word, change its font, size or color, hit B / I / U. The right-hand preview renders through the exact same bake path the game uses, so what you see is the pixels that ship. Layers. A page is an ordered back-to-front stack of layers — Text, Image or Drawing. Index 0 is the back of the page, the last entry the front, so a watermark can sit under the writing while a stamp sits over it. Text is a layer payload, which means one page can carry a heading, a body and a signature as three independent text boxes with pictures stacked between them. Drawing. Five brushes — pen, pencil, marker, crayon and highlighter — drawn procedurally, with color, size and opacity, plus an eraser that rubs out the ink under the cursor instead of deleting whole strokes. No brush textures ship with the plugin, and none are needed. Four kinds of paper. A document’s paper can be a texture you supply, paper Inkwell generates itself — plain, lined, grid or dotted stock with your own colors, spacing, an optional margin rule, punched binder holes and fiber grain — a whole material of your own carrying the MF_InkwellPageInk material function, or no paper from Inkwell at all: the ink is laid onto whatever material the target mesh already wears. A project can ship notebook paper, graph paper and inked wooden signs without a single paper texture.
A strip of procedurally generated Inkwell paper samples

Generated paper: plain, lined, grid, dotted, and lined with a margin rule and punched holes.

Pages have backs. Every sheet can carry an independently authored back — its own layers, and its own paper if you want a lined front over a plain back. The reader turns the sheet over with Flip Page, and on a multipage document reads in book order: front, back, next page. Backs are opt-in; a page you never author a back for costs nothing. One physical dimension. A document’s Page Width Cm is the only real-world size you set — 21 cm, the width of A4, out of the box. The height is derived from the page’s pixel aspect ratio, so the paper is always the shape of the page you authored and the writing can never come out stretched. Author a landscape page and you get landscape paper. Every surface in the plugin sizes itself from that one number. Nothing to build first. Assign a document to an Ink Page Display component and, if the actor has no mesh of its own, the component makes and sizes its own sheet.

The pieces

These are the production components — the parts your game ships: The plugin also bundles a set of demo and reference pieces so the showroom plays out of the box and so you can read a complete working integration: the Ink Page Interactor (UInkPageInteractorComponent, the “look at a page, press E” component), the Inkwell Reader Character (AInkwellReaderCharacter), the Inkwell Reader Game Mode (AInkwellReaderGameMode), the Inkwell Exhibit component (UInkwellExhibitComponent) and the read prompt widget (WBP_InkwellReadPrompt). They are reference implementations, not recommended for production use — in your game, your own interaction system drives an Ink Page Reader directly. The integration guide shows exactly that.

No strings attached

The runtime module depends on engine modules only — Core, CoreUObject, Engine, InputCore, EnhancedInput, Slate, SlateCore, UMG, DeveloperSettings, plus private RenderCore and RHI. The one plugin dependency is Enhanced Input, which ships with the engine and is enabled in every UE5 project by default. No third-party libraries, nothing else pulled into your project. Everything is Blueprint-callable, so a Blueprint-only project can use all of it. Five open-licensed font families ship in /Inkwell/Fonts/ — Courier Prime, Crimson Text, Great Vibes, Kalam and Patrick Hand — imported as composite fonts and ready to use. Bring your own with font import. Every asset Inkwell loads resolves through Project Settings → Plugins → Inkwell, so a project can repoint the ink material, the sheet mesh, the paper texture or the default font without touching code.

Next

Press Play, then make it yours

See the showroom working in two minutes, author a page, and wire reading into your own interaction system.

I already have an interaction system

Keep your interactor and your base interactable Blueprint. Drive an Ink Page Display and an Ink Page Reader from what you already have.

I have not installed it yet

Install from Fab, enable the plugin per project, check it took, and set the settings that matter on day one.

I want to see the editor first

The Page Editor end to end: the toolbar, the three modes, layers, and the game-true preview.