Skip to main content
Memos supports rich text formatting using Markdown syntax. We use goldmark on the backend for metadata extraction and rendering, with full GitHub Flavored Markdown (GFM) support.

Basic Syntax

Headings

Create headings with # symbols:
# Heading 1
## Heading 2
### Heading 3
#### Heading 4
##### Heading 5
###### Heading 6
Headings automatically generate anchor IDs for deep linking within memos.

Text Formatting

**This text is bold**
__This is also bold__

Lists

- First item
- Second item
  - Nested item
  - Another nested item
- Third item

* Asterisks work too
+ Or plus signs
# Inline links
[Link text](https://example.com)
[Link with title](https://example.com "Hover title")

# Automatic links
https://example.com
[email protected]

# Internal memo links
[Related memo](/memos/abc123)
Automatic linking converts URLs and email addresses to clickable links without explicit markdown syntax.

Images

![Alt text](https://example.com/image.jpg)
![Image with title](https://example.com/image.jpg "Image title")

# Local attachments
![Uploaded image](/o/attachments/xyz789)
Images are automatically displayed inline with lazy loading and responsive sizing.

Code and Syntax

Inline Code

Wrap code in backticks:
Use `console.log()` to debug JavaScript.
Run `npm install` to install dependencies.

Code Blocks

Create fenced code blocks with syntax highlighting:
```javascript
function greet(name) {
  console.log(`Hello, ${name}!`);
}

greet("World");
```

```python
def greet(name):
    print(f"Hello, {name}!")

greet("World")
```

```bash
# Install dependencies
npm install

# Run the development server
npm run dev
```
Supported languages include: JavaScript, TypeScript, Python, Go, Rust, Java, C++, SQL, and many more.

Tables

Create tables with GitHub Flavored Markdown syntax:
| Feature | Supported | Notes |
|---------|-----------|-------|
| Headings | ✓ | H1-H6 |
| Tables | ✓ | GFM style |
| Code blocks | ✓ | With syntax highlighting |
| Task lists | ✓ | Interactive checkboxes |

# Alignment
| Left aligned | Center aligned | Right aligned |
|:-------------|:--------------:|--------------:|
| Left | Center | Right |
| Text | Text | Text |
Result:
FeatureSupportedNotes
HeadingsH1-H6
TablesGFM style
Code blocksWith syntax highlighting
Task listsInteractive checkboxes

Blockquotes

> This is a blockquote.
> It can span multiple lines.
>
> And multiple paragraphs.

> Nested quotes
>> Like this
>>> And this

Horizontal Rules

Create dividers with three or more dashes, asterisks, or underscores:
---

***

___

Custom Extensions

Tags

Memos includes a custom tag extension for organization:
Working on the #project-alpha feature today.
This relates to #backend and #api-design.

Meeting scheduled for tomorrow #meeting #team-sync.
Tags:
  • Start with # followed by alphanumeric characters
  • Support hyphens, underscores, and Unicode
  • Are automatically extracted and indexed
  • Can include hierarchies: #work/project/milestone
  • Are case-sensitive: #Work#work
Chinese, Japanese, Korean, and other Unicode characters are fully supported in tags: #测试 #日本語 #한국어

Slash Commands

Type / in the editor to access quick insertion commands:
CommandShortcutDescription
/codeInsert code block
/tableInsert table template
/todoInsert task list
/dividerInsert horizontal rule

Metadata Extraction

Memos automatically extracts metadata from your Markdown content:

Tags

All #tags are extracted and indexed for filtering and search.

Properties

Content properties like has_link, has_code, has_task_list are computed.

Snippets

Plain text summaries are generated for previews and search results.

Links

External and internal links are tracked for reference graphs.

Filtering by Properties

Use extracted properties in filters:
# Find memos with code blocks
property.has_code == true

# Find memos with incomplete tasks
property.has_incomplete_tasks == true

# Find memos with links
property.has_link == true

# Combine filters
property.has_code == true && tag_search == "tutorial"

Editor Features

Real-Time Preview

The editor provides instant feedback:
Markdown syntax is highlighted as you type for better readability.
Type # to see existing tags and autocomplete.
Toggle distraction-free writing with the focus mode button.

Keyboard Shortcuts

ActionShortcut (Mac)Shortcut (Windows/Linux)
Save memoCmd + EnterCtrl + Enter
Bold textCmd + BCtrl + B
Italic textCmd + ICtrl + I
Insert linkCmd + KCtrl + K
Insert codeCmd + ECtrl + E

Rendering Modes

Memos uses different renderers for different contexts:
Uses markdown-it for client-side rendering with:
  • Interactive task checkboxes
  • Syntax-highlighted code blocks
  • Lazy-loaded images
  • Link previews

Advanced Examples

Meeting Notes

# Team Meeting - 2024-01-15
#meeting #team-sync

## Attendees
- Alice (Product)
- Bob (Engineering)
- Carol (Design)

## Agenda
1. [ ] Review sprint progress
2. [ ] Discuss upcoming features
3. [ ] Plan next quarter

## Notes
- Completed **80%** of sprint goals
- New feature: [Dashboard redesign](/memos/dashboard-spec)
- Q2 planning starts next week

## Action Items
- [ ] Alice: Update roadmap document
- [ ] Bob: Review PR #123
- [x] Carol: Share design mockups

---
Next meeting: 2024-01-22

Code Snippet

# Quick Sort Implementation
#algorithms #python #tutorial

Here's a clean implementation of QuickSort:

```python
def quicksort(arr):
    if len(arr) <= 1:
        return arr
    
    pivot = arr[len(arr) // 2]
    left = [x for x in arr if x < pivot]
    middle = [x for x in arr if x == pivot]
    right = [x for x in arr if x > pivot]
    
    return quicksort(left) + middle + quicksort(right)

# Example usage
numbers = [3, 6, 8, 10, 1, 2, 1]
print(quicksort(numbers))
# Output: [1, 1, 2, 3, 6, 8, 10]
```

**Time Complexity**: O(n log n) average, O(n²) worst case
**Space Complexity**: O(log n)

See also: [Merge Sort](/memos/merge-sort)

Project Log

# Project Alpha - Progress Update
#project-alpha #development #progress

## Completed ✓
- [x] Set up development environment
- [x] Implement authentication system
- [x] Design database schema

## In Progress
- [ ] Build API endpoints (60% complete)
- [ ] Create admin dashboard (30% complete)

## Blockers
> **API Rate Limits**: Need to implement caching layer
> Discussing options with #backend team

## Resources
- [API Documentation](https://api.example.com/docs)
- [Design Mockups](/o/attachments/mockups-v2)

| Milestone | Target Date | Status |
|-----------|-------------|--------|
| MVP | 2024-02-01 | On track |
| Beta | 2024-03-15 | On track |
| Launch | 2024-04-30 | Planning |

API Integration

Render Markdown to HTML via API:
# Not directly exposed - use memo content field
curl -X POST https://your-instance.com/api/v1/memos \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "memo": {
      "content": "# Heading\n\nSome **bold** text"
    }
  }'

Limitations

The following Markdown features are not currently supported:
  • Footnotes
  • Definition lists
  • HTML embedded in Markdown
  • LaTeX/Math equations
  • Diagrams (Mermaid, PlantUML)
For these use cases, consider:
  • Linking to external tools
  • Using code blocks with syntax highlighting
  • Attaching images of diagrams

Best Practices

  • Use headings to structure longer memos
  • Keep paragraphs short for readability
  • Use lists instead of long sentences
  • Add code blocks for commands and snippets
  • Use lowercase for general tags: #meeting, #todo
  • Use hierarchies for projects: #project/alpha/backend
  • Be consistent with separators: hyphens OR underscores
  • Avoid spaces in tags (use #team-meeting not #team meeting)
  • Avoid excessive nesting (>3 levels)
  • Keep code blocks under 1000 lines
  • Optimize large images before uploading
  • Split very long memos into multiple entries

Next Steps

Creating Memos

Learn how to create and organize memos

Attachments

Add images and files to your memos

Tags & Filters

Master advanced filtering with tags

Editor Reference

Keyboard shortcuts and productivity tips

Build docs developers (and LLMs) love