Pasting and node types
Every kind of content Krafa recognizes, the order it checks them in, and what lands on the canvas as a result.
Krafa never asks what kind of block you want. It reads the clipboard, decides, and renders. This page documents what it decides.
The thirteen content types
| Type | Comes from | Renders as |
|---|---|---|
color | A single CSS color value | A swatch with its value |
palette | Several color values at once | A row of swatches |
image | Image URL, data URL, image file, or an import | An image card |
video | Video URL or video file | A full player with scrubbing and captions |
audio | Audio URL or audio file | A custom audio player |
youtube | A YouTube URL | An embedded player with title and channel |
figma | A Figma file or prototype URL | A design preview card |
tweet | An X post URL or an X bookmark import | The rendered post, with article preview when present |
link | Any other URL | A preview card with favicon, title, and OG image |
table | A Markdown, TSV, or CSV table | A real table |
code | Code-like text or a source file | A syntax-highlighted block |
markdown | Markdown-like text or a .md file | A tabbed editor and preview |
text | Anything else, or an empty note | An editable note |
Two more node types exist but aren't pasted: folders and stacks are containers you create from nodes already on the board.
How detection decides
For pasted text, Krafa walks this list top to bottom and takes the first match. Knowing the order explains most surprises:
URLs and data
A data:image/… URI becomes an image. Then the URL patterns get their turn, most specific first: YouTube, then X, then Figma, then URLs ending in an image, video, or audio extension. Any remaining http(s):// URL falls through to a link.
That ordering is why a YouTube link becomes a player and not a generic link card, and why https://example.com/hero.png becomes an image rather than a link preview.
Colors
A string that is a single valid CSS color becomes a swatch. Validity is decided by CSS.supports, not a regex, so every color function the browser understands works: #ff5c00, rgb(255 92 0), hsl(21 100% 50%), oklch(0.7 0.19 40), color-mix(…), and named colors alike.
Paste several color values together (one per line, or comma-separated) and you get a single palette node instead of a scatter of swatches. This is the fastest way to teach Krafa a color system: copy the values straight out of your theme file.
Markdown, then code
Both are scored heuristically. Markdown looks for headings, fenced blocks, link syntax, and list markers and needs a score of at least 2. Code looks for language keywords, braces, and consistent indentation and needs at least 3.
Markdown is checked first, so a document about code stays Markdown while a bare function becomes code.
Tables, then plain text
What's left is run through a table parser that understands Markdown pipe tables, tab-separated values, and simple CSV. Paste a range out of a spreadsheet and you get a table.
Anything that survives all of the above is a text note.
Files and folders
Drag files onto the canvas, or use Upload from computer in the create menu:
- Images, video, and audio upload to storage and are served back from a stable URL, so the board still works on another machine. If an upload fails, Krafa falls back to a local blob URL so you don't lose the paste.
.csvand.tsvbecome tables when they parse cleanly, notes when they don't..md,.markdown,.mdxbecome Markdown nodes.- Source files (
.js,.ts,.py,.css,.html, and friends) become code nodes. - Any other text file becomes a note.
Dropping a folder from your desktop creates a folder node containing its files. Krafa reads one level deep and ignores nested subfolders.
Where things land
Pasted nodes appear at your cursor; dropped files appear where you dropped them. Paste several items at once and they cascade with a 24-pixel offset instead of stacking invisibly on top of each other.
Every node can be resized from the grip in its bottom-right corner. Hold Shift while dragging to preserve the aspect ratio.
What gets learned
Most pastes trigger a taste extraction, but not all of them. Video, audio, tables, folders, and stacks are skipped, and a text note has to be at least 100 characters before it counts. A shimmer on the node tells you extraction is running.
Since extraction ignores tables and media players, use them freely for scratch material: a spreadsheet of competitor pricing or a screen recording you're referencing won't dilute your taste profile.