MarkForm

# the syntax

Documentation

Learn the MarkForm markdown syntax to create forms quickly.

Generate MarkForms with AI

Copy the prompt below and paste it into ChatGPT, Claude, or any AI assistant. Then ask it to create a MarkForm for your use case — it will output valid MarkForm markdown you can paste directly into the editor.

Preview prompt content
You are an AI assistant that helps users modify forms using the MarkForm markdown syntax.

## Your Response Format

ALWAYS respond with valid JSON in this exact format:
{
  "action": "update" | "question" | "error",
  "message": "Brief description of what you did or are asking (max 100 chars)",
  "markdown": "The complete updated form markdown (only if action is 'update')",
  "question": "A simple clarifying question (only if action is 'question')"
}

## When to use each action:

- **"update"**: When you can confidently make the requested change. Include the full updated markdown.
- **"question"**: When the request is ambiguous or you need more info. Ask ONE simple question.
- **"error"**: When the request is impossible or doesn't make sense.

## MarkForm Syntax Reference

### Structure
- `# Title` - Form title
- Description text after title
- `## Section` - Section headers
- Question label on line before `?[type]`
- Append `*` for required questions

### Question Types
- `?[short](placeholder)*` - Short text
- `?[paragraph](placeholder)` - Long text
- `?[email](placeholder)*` - Email with validation
- `?[phone](placeholder)` - Phone number
- `?[number](min-max)` - Number with range
- `?[url](placeholder)` - URL input
- `?[date]` - Date picker
- `?[time]` - Time picker
- `?[radio]{Option1|Option2|Option3}*` - Single choice
- `?[checkbox]{Option1|Option2|Option3}` - Multiple choice
- `?[dropdown]{Option1|Option2|Option3}*` - Dropdown
- `?[scale](1-5){Low label|High label}*` - Linear scale
- `?[slider](0-100){Low|High}` - Slider
- `?[rating](5){Label}` - Star rating
- `?[rank]{Item1|Item2|Item3}*` - Ranking/ordering
- `?[grid-radio](Rows: R1|R2)(Cols: C1|C2|C3)*` - Radio grid
- `?[grid-checkbox](Rows: R1|R2)(Cols: C1|C2|C3)` - Checkbox grid
- `?[file]{pdf|docx}(10MB)*` - File upload
- `?[signature]*` - Signature capture
- `?[location]` - Location picker

### Media Blocks
```
:::media
![Alt text](https://example.com/image.jpg)
:::

:::media{grid: 2}
![Image 1](url1)
![Image 2](url2)
:::
```

## Guidelines

1. Keep messages SHORT - just describe what you did in a few words
2. When in doubt, ASK - don't guess what the user wants
3. Preserve existing form structure unless asked to change it
4. Make minimal changes - don't add extra questions or sections
5. If adding a question, put it in a logical place (end of relevant section)

## Examples

User: "add an email field"
Response: {"action":"update","message":"Added email field at the end","markdown":"...full markdown..."}

User: "add a rating"
Response: {"action":"question","message":"Need more details","question":"What should the rating be for? (e.g., 'overall experience', 'product quality')"}

User: "make it better"
Response: {"action":"question","message":"Can you be more specific?","question":"What would you like me to improve? (e.g., add questions, reorganize sections, change question types)"}

User: "delete everything"
Response: {"action":"error","message":"Can't delete the entire form","question":null}

Basic structure

Every MarkForm starts with a title using #, followed by an optional description. Questions have a label on one line and a definition on the next line starting with ?[type]. Use ## for section headers. Append * to make any question required.

Structure
# Form Title
Description text goes here.

## Section Header

Question label
?[type](params){options}*

All 20 question types

Short answer

Single-line text input. Optional placeholder in parentheses.

?[short](placeholder)*

Paragraph

Multi-line text area for longer responses.

?[paragraph](placeholder)

Multiple choice

Radio buttons — respondent picks one option.

?[radio]{Opt A|Opt B|Opt C}*

Checkboxes

Checkboxes — respondent can select multiple options.

?[checkbox]{Opt A|Opt B|Opt C}

Dropdown

Dropdown select menu — respondent picks one.

?[dropdown]{Opt A|Opt B|Opt C}*

Linear scale

Numeric scale with min/max values and optional endpoint labels.

?[scale](1-5){Low|High}*

Radio grid

Table of radio buttons. One selection per row.

?[grid-radio](Rows: A|B)(Cols: X|Y|Z)*

Checkbox grid

Table of checkboxes. Multiple selections per row.

?[grid-checkbox](Rows: A|B)(Cols: X|Y)

Date

Date picker input.

?[date]*

Time

Time picker input.

?[time]

File upload

File upload with optional type restrictions and size limit.

?[file]{pdf|docx}(10MB)

Ranking

Drag-to-reorder ranking of options.

?[rank]{First|Second|Third}*

Location

Searchable country dropdown picker.

?[location]*

Email

Email input with built-in validation. Optional regex pattern in braces with a hint message after |.

?[email](you@example.com){pattern|hint}*

Phone

Phone number input. Optional regex pattern in braces with a hint message after |.

?[phone](+1 555-0000){pattern|hint}*

Number

Numeric input with optional min/max range.

?[number](0-100)*

URL

URL/website input with validation.

?[url](https://example.com)

Rating

Star rating selector with optional max value and label.

?[rating](5){How satisfied?}*

Slider

Range slider with optional min/max and endpoint labels.

?[slider](0-100){Low|High}

Signature

Signature capture field for drawn signatures.

?[signature]*

Full example

A complete feedback survey using multiple question types.

Example MarkForm
# Customer Feedback Survey
We'd love to hear about your experience.

## About You

What is your name?
?[short](Enter your full name)*

What is your email?
?[short](you@example.com)*

## Your Experience

How would you rate our service?
?[scale](1-5){Very poor|Excellent}*

Which features did you use?
?[checkbox]{Dashboard|Reports|API|Mobile App}

What department did you interact with?
?[dropdown]{Sales|Support|Engineering|Billing}*

How would you rank these aspects by importance?
?[rank]{Speed|Quality|Price|Support}*

Rate each area
?[grid-radio](Rows: Speed|Quality|Support)(Cols: Poor|Average|Good|Excellent)*

## Additional Feedback

Any other comments?
?[paragraph](Share your thoughts here...)

When did you visit us?
?[date]

MarkForm Settings & Sharing

Control how your MarkForm accepts responses and who can see the results.

Accept / Close Responses

Toggle the Accepting responses switch in MarkForm settings to open or close your MarkForm. You can also schedule an automatic close date and time — responses will stop being accepted after that moment.

Response Visibility

Choose when respondents can see aggregate results.

ModeBehavior
HiddenResults are never shown to respondents
After closeResults visible only after the MarkForm stops accepting responses
LiveRespondents see a live results sidebar after submitting

Public Share Link

Each MarkForm has a public URL in the format /f/[shareId]. Share this link with respondents. The share ID is automatically generated when you create the MarkForm.

Collaboration

Invite team members to work on MarkForms together in real time.

Inviting Collaborators

Open the MarkForm settings and enter a collaborator's email address. They will receive an invitation link. Invitations expire after 7 days if not accepted.

Real-Time Editing

When multiple editors open the same form, all changes sync instantly via conflict-free CRDTs (Yjs). No save conflicts, no overwriting.

Live cursors: Each collaborator’s cursor appears in the Monaco editor with their initials in a colored label above the cursor line.
Remote selections: Text selected by other users is highlighted in their assigned color so you can see what they’re working on.
Presence bar: Colored avatar circles in the header show who’s online. Click to jump to their cursor, double-click to follow.

Card Locking

In the Form Editor panel, selecting a question card locks it for other users. This prevents two people from editing the same question at once.

Automatic locking: Clicking a card locks it. The card shows a colored border and a badge with the editor’s initials.
Blocked selection: Locked cards display a “not allowed” cursor and cannot be selected by other users until released.
Auto-release: Locks are released when the user deselects the card or disconnects.

Follow Mode

Double-click a collaborator's avatar in the presence bar to enter follow mode. The editor will continuously scroll to keep their cursor in view.

ActionResult
Click avatarJump to their cursor position (one-time)
Double-click avatarFollow their cursor continuously (avatar gets a ring)
Click while followingStop following
Type or click editorAutomatically stops following

Roles

PermissionEditorViewer
Edit form contentYesNo
See live cursors & presenceYesYes
View form & settingsYesYes
View responsesYesIf enabled
Manage collaboratorsNoNo

Shared with Me

Forms shared with you appear under the Shared with me tab in your dashboard. The form owner controls whether viewers can access responses via the response access toggle.

GitHub Version Control

Back up your forms to a GitHub repository and keep them in sync.

Setup

  • 1.Go to Settings > GitHub
  • 2.Click Connect GitHub and authorize the app
  • 3.Select an existing repository or create a new one

Push & Pull

Use Push to upload your local form changes to GitHub, and Pull to download changes made externally. Forms are stored as markdown files using the naming convention:

forms/{slug}-{idSuffix}.md

Sync Status

StatusIndicatorMeaning
SyncedLocal and remote are identical
Local changesYou have unpushed local edits
ConflictBoth local and remote have diverged
ErrorSync failed — check your connection or permissions

Conflict Resolution

When a conflict is detected, you can choose to keep local (overwrite remote) or keep remote (overwrite local). A side-by-side diff view helps you compare changes before deciding.

Auto-Sync & History

Enable auto-sync to push changes to GitHub automatically every hour. The commit history view shows all previous versions with diffs — you can restore any prior version with one click.

AI-Powered Editing

Use a built-in AI assistant to modify your form directly in the editor — distinct from the external prompt copy feature above.

Supported Providers

ProviderModel
OpenAIGPT-4o
AnthropicClaude
GoogleGemini

Setup

Go to Settings > AI and enter your API key for one or more providers. Your keys are stored securely and never shared.

Usage

In the form editor, type a natural language instruction (e.g. "add a required email field to the About You section") and the AI will modify your MarkForm markdown directly. Review the changes in the diff view before accepting.

Response Analytics

View and analyze form responses with built-in charts and tables.

Summary View

The summary tab shows a chart for each question. The available chart types depend on the question type:

Question typeChart modes
Radio / DropdownBar, Pie, Donut
CheckboxBar, Pie, Donut
ScaleBar, Line
RankingBar, Funnel
LocationWorld map, Scatter map, Bar, Pie
Radio gridHeatmap, Stacked bar, Table
Checkbox gridHeatmap, Stacked bar, Table
Short / ParagraphText list
Date / TimeText list
File uploadUpload count
Email / Phone / URLText list
NumberText list
RatingBar, Line
SliderBar, Line
SignatureSignature image

Table View

Switch to the Table tab to see all responses in a spreadsheet-like grid. Each row is a response and each column is a question.

Chart Mode Switching

Click the chart mode button on any summary card to cycle through available chart types. Your chart preference is saved per-question and persists across sessions.

Tips

  • 1.Use the Markdown editor for speed, or switch to Visual mode for drag-and-drop editing. Both stay in sync.
  • 2.Separate options with | inside curly braces: {A|B|C}
  • 3.The live preview updates as you type — use it to verify your syntax.
  • 4.Copy the AI prompt above into any AI chatbot and ask it to generate a form for your use case.
  • 5.After saving, share the public link with respondents. Enable show results to responders if you want them to see aggregate results after submitting.

Ready to create a form?

Use the editor or paste AI-generated markdown.

Open Editor