Guide to using Markdown on RFC Hub
This document contains most of the Markdown formatting that can be used on RFC Hub. It is essentially GitHub Flavored Markdown but there are a few edge-cases that can lead to differences in rendering. Major differences include not being able to embed any HTML and that images must be uploaded using the RFC Editor.
Headers #
Headers are used to define different sections of your RFC. Note that the title of your RFC is always displayed at the top of the document so there's no reason to repeat it within the RFC itself.
Hovering over a header will display an octothorpe (#) character. Clicking it will scroll to the header and add an anchor to the current URL. Sharing this new URL with others will link them directly to that heading.
# h1 Heading
## h2 Heading
### h3 Heading
#### h4 Heading
##### h5 Heading
###### h6 Heading
These lesser common heading formats are also accepted:
Alt-H1
======
Alt-H2
------
h1 Heading #
h2 Heading #
h3 Heading #
h4 Heading #
h5 Heading #
h6 Heading #
These lesser common heading formats are also accepted:
Alt-H1 #
Alt-H2 #
Markdown Alerts #
> [!NOTE]
> Highlights information that users should take into account, even when skimming.
> [!TIP]
> Optional information to help a user be more successful.
> [!IMPORTANT]
> Crucial information necessary for users to succeed.
> [!WARNING]
> Critical content demanding immediate user attention due to potential risks.
> [!CAUTION]
> Negative potential consequences of an action.
Note
Highlights information that users should take into account, even when skimming.
Tip
Optional information to help a user be more successful.
Important
Crucial information necessary for users to succeed.
Warning
Critical content demanding immediate user attention due to potential risks.
Caution
Negative potential consequences of an action.
Emphasis #
Emphasis, aka italics, with *asterisks* or _underscores_.
Strong emphasis, aka bold, with **asterisks** or __underscores__.
Combined emphasis with **asterisks and _underscores_**.
Strikethrough uses two tildes. ~~Scratch this.~~
**This is bold text**
__This is bold text__
*This is italic text*
_This is italic text_
~~Strikethrough~~
Emphasis, aka italics, with asterisks or underscores.
Strong emphasis, aka bold, with asterisks or underscores.
Combined emphasis with asterisks and underscores.
Strikethrough uses two tildes. Scratch this.
This is bold text
This is bold text
This is italic text
This is italic text
Strikethrough
Lists #
1. First ordered list item
2. Another item
* Unordered sub-list
* Use four spaces for proper rendering
1. The actual number itself isn't too important
1. Ordered sub-list
4. And another item.
You can have properly indented paragraphs within list items. Notice the blank line above, and the leading spaces.
To have a line break without a paragraph, you will need to use two trailing spaces.
Note that this line is separate, but within the same paragraph.
(This is contrary to the typical GFM line break behaviour, where trailing spaces are not required.)
* Unordered list can use asterisks
- Or minuses
+ Or pluses, but when adjacent they form a new list
1. Make my changes
1. Fix bug
2. Improve formatting
- Make the headings bigger
2. Push my commits to GitHub
3. Open a pull request
* Describe my changes
* Mention all the members of my team
* Ask for feedback
+ Create a list by starting a line with `+`, `-`, or `*`
+ Sub-lists are made by indenting 2 spaces:
- Marker character change forces new list start:
* Ac tristique libero volutpat at
+ Facilisis in pretium nisl aliquet
- Nulla volutpat aliquam velit
+ Very easy!
-
First ordered list item
-
Another item
- Unordered sub-list
- Use four spaces for proper rendering
-
The actual number itself isn't too important
- Ordered sub-list
-
And another item.
You can have properly indented paragraphs within list items. Notice the blank line above, and the leading spaces.
To have a line break without a paragraph, you will need to use two trailing spaces.
Note that this line is separate, but within the same paragraph.
(This is contrary to the typical GFM line break behaviour, where trailing spaces are not required.)
- Unordered list can use asterisks
- Or minuses
- Or pluses, but when adjacent they form a new list
- Make my changes
- Fix bug
- Improve formatting
- Make the headings bigger
- Push my commits to GitHub
- Open a pull request
- Describe my changes
- Mention all the members of my team
- Ask for feedback
- Create a list by starting a line with
+,-, or* - Sub-lists are made by indenting 2 spaces:
- Marker character change forces new list start:
- Ac tristique libero volutpat at
- Facilisis in pretium nisl aliquet
- Nulla volutpat aliquam velit
- Marker character change forces new list start:
- Very easy!
Ignoring Markdown formatting #
You can escape Markdown formatting by using a backslash \ before the Markdown character.
Let's rename \*our-new-project\* to \*our-old-project\*.
Let's rename *our-new-project* to *our-old-project*.
<strong>Also note that HTML is not allowed</strong>
Links #
[I'm an inline-style link](https://www.google.com)
[I'm a link to a heading in the current document](#sec-headers)
[I'm an inline-style link with title](https://www.google.com "Google's Homepage")
[I'm a reference-style link][Arbitrary case-insensitive reference text]
[You can use numbers for reference-style link definitions][1]
Or leave it empty and use the [link text itself].
URLs in angle brackets will automatically get turned into links.
<http://www.example.com> will work but http://www.example.com will not.
Some text to show that the reference links can follow later.
[arbitrary case-insensitive reference text]: https://www.mozilla.org
[1]: http://slashdot.org
[link text itself]: http://www.reddit.com
I'm a link to a heading in the current document
I'm an inline-style link with title
You can use numbers for reference-style link definitions
Or leave it empty and use the link text itself.
URLs in angle brackets will automatically get turned into links. http://www.example.com will work but http://www.example.com will not.
Some text to show that the reference links can follow later.
Images #
The RFC Editor allows you to add images to your document. Upon clicking an uploaded
image it will automatically add the appropriate markdown to embed the image in your
RFC. Here's an example without alt text:

By default the alt text will be the name of the image file. However, you should change
it to be something more descriptive as the alt text will be displayed below the image
as a caption.

Note that images must be uploaded using the RFC Editor. Images loaded from third party
domains will not work. Deleting an RFC will also delete the files attached to it so if
you copy and paste the contents of an RFC into another RFC then you should also
re-upload the images to be safe.
The RFC Editor allows you to add images to your document. Upon clicking an uploaded image it will automatically add the appropriate markdown to embed the image in your RFC. Here's an example without alt text:

By default the alt text will be the name of the image file. However, you should change it to be something more descriptive as the alt text will be displayed below the image as a caption.

Note that images must be uploaded using the RFC Editor. Images loaded from third party domains will not work. Deleting an RFC will also delete the files attached to it so if you copy and paste the contents of an RFC into another RFC then you should also re-upload the images to be safe.
Code and Syntax Highlighting #
Inline `code` has `back-ticks around` it.
Inline code has back-ticks around it.
@media print, (max-width:1270px) {
/* shadow gets cut off when screen is thin */
#rfc-markdown {
box-shadow: none !important;
}
}
function updateTimeElementsToBeLocalTime(root = document.body) {
const $times = $$('time', root);
for (let $time of $times) {
if ($time.classList.contains('localized') || !$time.attributes.format) return;
const format = $time.attributes.format.value; // string dateFns format
if (format === 'iso') continue;
const local = dateFns.format($time.dateTime, format);
$time.innerText = local;
$time.classList.add('localized');
}
}
The following languages are supported when viewing an RFC:
| Language | Language | Language | Language | Language |
|---|---|---|---|---|
| 1c | abnf | accesslog | actionscript | ada |
| angelscript | apache | applescript | arcade | arduino |
| armasm | asciidoc | aspectj | autohotkey | autoit |
| avrasm | awk | axapta | bash | basic |
| bnf | brainfuck | cal | capnproto | ceylon |
| c | clean | clojure | clojure-repl | cmake |
| coffeescript | coq | cos | cpp | crmsh |
| crystal | csharp | csp | css | dart |
| delphi | diff | django | d | dns |
| dockerfile | dos | dsconfig | dts | dust |
| ebnf | elixir | elm | erb | erlang |
| erlang-repl | excel | fix | flix | fortran |
| fsharp | gams | gauss | gcode | gherkin |
| glsl | gml | go | golo | gradle |
| graphql | groovy | haml | handlebars | haskell |
| haxe | hsp | http | hy | inform7 |
| ini | irpf90 | isbl | java | javascript |
| jboss-cli | json | julia | julia-repl | kotlin |
| lasso | latex | ldif | leaf | less |
| lisp | livecodeserver | livescript | llvm | lsl |
| lua | makefile | markdown | mathematica | matlab |
| maxima | mel | mercury | mipsasm | mizar |
| mojolicious | monkey | moonscript | n1ql | nestedtext |
| nginx | nim | nix | node-repl | nsis |
| objectivec | ocaml | openscad | oxygene | parser3 |
| perl | pf | pgsql | php | php-template |
| plaintext | pony | powershell | processing | profile |
| prolog | properties | protobuf | puppet | purebasic |
| python | python-repl | q | qml | reasonml |
| rib | r | roboconf | routeros | rsl |
| ruby | ruleslanguage | rust | sas | scala |
| scheme | scilab | scss | shell | smali |
| smalltalk | sml | sqf | sql | stan |
| stata | step21 | stylus | subunit | swift |
| taggerscript | tap | tcl | thrift | tp |
| twig | typescript | vala | vbnet | vbscript-html |
| vbscript | verilog | vhdl | vim | wasm |
| wren | x86asm | xl | xml | xquery |
| yaml | zephir |
Note that while editing your RFC document you'll also get syntax highlighting on code blocks. However, only a subset of languages are supported.
Tables #
Colons can be used to align columns.
| Tables | Are | Cool |
| ------------- |:-------------:| -----:|
| col 3 is | right-aligned | $1600 |
| col 2 is | centered | $12 |
| zebra stripes | are neat | $1 |
There must be at least 3 dashes separating each header cell.
The outer pipes (|) are optional, and you don't need to make the
raw Markdown line up prettily. You can also use inline Markdown.
Markdown | Less | Pretty
--- | --- | ---
*Still* | `renders` | **nicely**
1 | 2 | 3
| First Header | Second Header |
| ------------- | ------------- |
| Content Cell | Content Cell |
| Content Cell | Content Cell |
| Command | Description |
| --- | --- |
| git status | List all new or modified files |
| git diff | Show file differences that haven't been staged |
| Command | Description |
| --- | --- |
| `git status` | List all *new or modified* files |
| `git diff` | Show file differences that **haven't been** staged |
| Left-aligned | Center-aligned | Right-aligned |
| :--- | :---: | ---: |
| git status | git status | git status |
| git diff | git diff | git diff |
| Name | Character |
| --- | --- |
| Backtick | ` |
| Pipe | \| |
Colons can be used to align columns.
| Tables | Are | Cool |
|---|---|---|
| col 3 is | right-aligned | $1600 |
| col 2 is | centered | $12 |
| zebra stripes | are neat | $1 |
There must be at least 3 dashes separating each header cell. The outer pipes (|) are optional, and you don't need to make the raw Markdown line up prettily. You can also use inline Markdown.
| Markdown | Less | Pretty |
|---|---|---|
| Still | renders |
nicely |
| 1 | 2 | 3 |
| First Header | Second Header |
|---|---|
| Content Cell | Content Cell |
| Content Cell | Content Cell |
| Command | Description |
|---|---|
| git status | List all new or modified files |
| git diff | Show file differences that haven't been staged |
| Command | Description |
|---|---|
git status |
List all new or modified files |
git diff |
Show file differences that haven't been staged |
| Left-aligned | Center-aligned | Right-aligned |
|---|---|---|
| git status | git status | git status |
| git diff | git diff | git diff |
| Name | Character |
|---|---|
| Backtick | ` |
| Pipe | | |
Blockquotes #
> Blockquotes are very handy in email to emulate reply text.
> This line is part of the same quote.
Quote break.
> This is a very long line that will still be quoted properly when it wraps. Oh boy let's keep writing to make sure this is long enough to actually wrap for everyone. Oh, you can *put* **Markdown** into a blockquote.
> Blockquotes can also be nested...
>> ...by using additional greater-than signs right next to each other...
> > > ...or with spaces between arrows.
Blockquotes are very handy in email to emulate reply text. This line is part of the same quote.
Quote break.
This is a very long line that will still be quoted properly when it wraps. Oh boy let's keep writing to make sure this is long enough to actually wrap for everyone. Oh, you can put Markdown into a blockquote.
Blockquotes can also be nested...
...by using additional greater-than signs right next to each other...
...or with spaces between arrows.
Horizontal Rules #
Three or more...
---
Hyphens
***
Asterisks
___
Underscores
Three or more...
Hyphens
Asterisks
Underscores