Skip to content

Content Types

Glassy organises your work into a few well-defined types. Each has its own storage rules, AI affordances, and reader experience. Understanding the differences helps you build a workflow that matches how you actually think.

Canonical note types (beta.29+; canvas added in v2.40.0)

For API and MCP integrations, the canonical notes.type values are text, checklist, draw, youtube, music, rss, spotify, vimeo, and canvas — nine values, and shared/noteTypes.json in the application repo is the single source of truth for the list. The MCP glassy_note_create / glassy_note_update tools expose it as their type enum, and the database enforces it with a CHECK constraint, so a value outside the list is rejected rather than silently coerced.

These are distinct from capture categories such as Article and Repo below. Legacy values normalize as follows: drawing → draw; rich, image, voice, and voice_recording → text. Use canonical values for new writes; voice recording metadata and audio remain a separate content surface.

canvas — the one type allowed to embed live content

A canvas note is a first-class page rather than a card: it renders in its own viewer, and also full-screen at #/canvas/<id> for dashboards and build logs that need the whole viewport. Both routes share one renderer, so what you see in the modal is what you see full-screen.

Because a canvas may embed live external content, it is the only note type under an origin-scoped embed policy:

  • The server publishes the permitted hostnames at /api/capabilities under renderers.canvas.allowedOrigins; the renderer applies that list.
  • Only absolute http(s) or protocol-relative (//host/…) URLs count as external. A relative URL is same-origin by definition and always renders — it cannot leave your instance.
  • Anything resolving to a hostname not on the allowlist is blocked, and the renderer refuses the whole canvas rather than quietly dropping one embed. That is deliberate: a dashboard missing half its frames should not look like it rendered successfully.

If a canvas you expected to render comes up refused, the blocked hostnames are named in the UI — add the origin to the allowlist rather than pasting the content in as a text note, which would lose the layout.

Upgrading note: canvas was added to the canonical list in v2.40.0. Because SQLite cannot alter a CHECK constraint, existing databases were migrated by a table rebuild that introspects its own columns and verifies its row count before committing; a database whose constraint already admits canvas skips the rebuild entirely.

The four primary types

Type What it stores Counts toward storage? AI features
Note Rich Markdown with attachments Yes Full (summarise, rewrite, tag, embed)
Bookmark URL plus optional title, description, tags No Limited (auto-tag on save, KB search)
Capture Structured web content from the Companion Yes Full (rendered with the immersive reader)
Voice memo Audio + transcript Yes (audio) Whisper transcription, semantic search on transcript

Notes and captures render as rich Markdown documents. Bookmarks are lightweight URL-only records — they don't count toward your storage quota, which makes them ideal for quick saves you might not revisit. Voice memos pair an audio file with a Whisper transcript so you can search the words later.

Structured capture types (v2.9.0+)

When you save from the Glassy Capture extension with Smart capture enabled, you choose one of four structured types. The choice shapes the metadata header and the reader layout:

Type Best for Metadata captured Reader treatment
Article Long-form editorial abstract, DOI, language Two-pane reader with hero image and progress bar
Video YouTube, Vimeo videoId, provider, channel, duration Embedded player above prose
Repo GitHub, GitLab owner, repo, stars, language, license, topics Header card with repo stats above the README
Bookmark Quick URL with tags none Standard bookmark view

Rule Engine (Settings → Rules) can auto-assign a type by URL pattern, so github.com/* always arrives as a Repo and youtube.com/* as a Video.

Choosing the right type

Ask two questions:

  1. Is it yours or someone else's? Yours → Note. Someone else's URL you want to revisit → Bookmark. Someone else's content you want to actually read and cite → Capture.
  2. Will you search the full text later? If yes → Note or Capture (both are full-text indexed). If no → Bookmark is enough.

How the types interact

  • A bookmark can be promoted to a capture. Open a bookmark, click Save as capture — the URL is re-fetched with Readability and stored as a full capture with metadata.
  • A capture can be turned into a note. Open a capture, click Detach to note — the Markdown body becomes editable, the source URL stays in the header.
  • A note can be published. Open a note, toggle Public in the header — anyone with the link can read it on your Public Window.
  • A voice memo can become a note. Open a voice memo, click Detach transcript — the Whisper text becomes a new editable note.

Tags: one policy everywhere (beta.41+)

Tags are the one piece of metadata every content type shares, and until v2.36.0-beta.41 there were three different rules for them depending on where the tag came from — the notes API, the capture/extension endpoints, and the AI auto-tag lane each sanitised differently. A tag you typed could arrive stored in a different shape than a tag an agent wrote or the AI suggested.

There is now one policy, applied identically to notes, bookmarks, captures, extension writes, AI auto-tagging and MCP:

Rule Behaviour
Maximum tags per item 20
Maximum tag length 64 characters
Letter case Lowercased — AI, ai and ai are the same tag
Leading/trailing whitespace Trimmed
Accents, spaces and punctuation inside a tag Preserved
Control characters and newlines Rejected
Empty after trimming Rejected
Duplicates Collapsed

The change you will actually notice: tags keep their words. Résumé used to come back as rsum and release notes as releasenotes on the AI auto-tag lane, because that lane stripped every non-alphanumeric character. Both now survive intact (lowercased, as above). If you have old tags that were mangled this way, they are still mangled — the fix applies to new writes, and renaming a tag in the tag manager is the way to repair the old ones.

Invalid tags are refused, not quietly rewritten

A write carrying a tag that breaks these rules is rejected with 422 INVALID_TAGS, and the response names every offending tag with its reason, lists the tags that were acceptable, and restates the limits. That is deliberate: silently storing something different from what was sent is the worst possible behaviour for an automation caller, because the divergence is invisible until a later read.

Storage caps

Tier Total storage Per-file limit
Free 10 MB 2 MB
Pro 200 MB 25 MB
Clear 200 MB 25 MB

Bookmarks never count. Notes, captures, voice memos, and attachments share the per-tier cap. Storage fills up from largest files first — old voice memos are usually the biggest line item.

Learn more