Sample Post: everything a post can do
This is a post about a post. Everything on this page was made in the Tovu post editor — no HTML.
Here it is in the editor, built on TipTap:

Text
Bold, italic, underline, strikethrough, highlight, inline code, and links. Also H2O and x2.
Change the color, the font, or the size of any run of text.
Headings
Three levels, H1 to H3. The headings on this page are H2s; here's an H3:
A smaller heading
Alignment
Left-aligned, the default for reading.
Centered, for a short line that should stand out.
Right-aligned, for a sign-off or a date.
Justified text stretches every full line to both edges, so a longer paragraph like this one forms a clean block on the left and on the right, the way a printed column does.
Quotes
Write it once. Every theme restyles it for free.
Lists
Bulleted
Numbered
Checklists
Write the post
Pick a template
Publish
Draft
Add images
Share it
Tables
Posts | Pages | |
|---|---|---|
Shows up in post lists | Yes | No |
Written in the editor | Yes | Yes |
Raw HTML | No | Yes |
Code
Code blocks keep every space and line break, and are tagged with their language:
def reading_time(text: str, words_per_minute: int = 230) -> str:
"""Estimate how long a post takes to read."""
words = len(text.split())
minutes = max(1, round(words / words_per_minute))
return f"{minutes} min read"
print(reading_time("Posts are your dated, ongoing writing. " * 120)) # 3 min readImages
Pick any image from the Media library.

Images come from Media, sized for the page automatically.
Or paste a link to any image on the web:
Photo: Wikimedia Commons.
GIFs work the same way:

Video
Videos come from Media too. This one shows the site being run entirely by chat.
Or embed straight from YouTube by pasting its link:
Widgets
Drop a widget in anywhere. This one shows a menu, and updates when the menu does:
Forms
Forms are widgets too. This one is live — submissions land in the admin under Forms.
That's a post. See Posts for how posts differ from pages.