Documentation Guidelines
We aim to give our readers a complete set of documentation that has a consistent look and feel. This includes matching the design with what readers see on the website and in the source documents.
Style Guide
The Style Guide outlines the rules and recommendations for every documentation page. The rules cover two things: how the prose reads (British English, a Grade 9 reading level, a friendly tone, and an approved word list) and how the AsciiDoc is built (xrefs, tables, admonitions, collapsible blocks, and numbers).
Consistency is important. A reader who sees three spellings of one term, or three ways of writing a version number, spends effort decoding the style instead of finding the answer they need.
The subsections below are in alphabetical order.
Accessibility
Accessible documents allow everyone to access information equally. This also improves the user experience. To improve accessibility, use clear headings, descriptive alt text, and high colour contrast. This supports assistive technologies and aids users with visual or hearing impairments.
Make your information easy to read by using clear tables and simple lists. These formats act like a map, helping your reader navigate complex data quickly.
Give every diagram and table a descriptive title. For technical drawings like engineering diagrams, add call-outs to explain key parts. These labels guide the eye and clarify how systems connect.
Follow the other design rules in this document to improve your layout. Use consistent fonts, proper spacing, and organised headings. These elements work together to create a professional look. Structured formatting helps lessen eye strain and keeps readers focused on the content.
Admonitions
Pick the admonition type by what happens to the reader who ignores the box, not by how much we want their attention. Overusing WARNING trains readers to skip all five.
| Type | Use when | Cost of ignoring it |
|---|---|---|
NOTE |
Extra context that helps but isn’t needed to finish the task. |
Nothing breaks. |
TIP |
A faster or cleaner way to do what the reader is already doing. |
Nothing breaks, the reader uses a slower method. |
IMPORTANT |
A step or condition the reader must not skip. |
The task fails or gives the wrong result. |
CAUTION |
An action that can lose data, break a running server, or need manual recovery. |
Recoverable damage. |
WARNING |
An action that can lock out access, expose credentials, or take down production. |
Serious or hard to reverse damage. |
Keep an admonition to three sentences. Anything longer belongs in body text under its own heading.
Never stack two admonitions together, as readers skip both. Never open a section with an admonition, because the reader has no context yet for the thing they’re being warned about.
Capitalisation
Use Title Case for all Table of Contents (TOC) entries to ensure clear organisation.
Use Title Case for your main titles and top-level headings, such as H1 and H2. This consistency helps readers navigate your document like a map. Ensure navigation panels match the H1 and H2 headings on selected pages to avoid confusing users.
Use Sentence case for all smaller headings from H3 to H6. This style follows a regular sentence. Only the first word and proper nouns are capitalised. This shows the reader that these sections provide supporting details, not main topics. The documentation needs varying heading styles to guide the reader through the content.
Collapsible text
Use a collapsible block for very large code snippets, programming examples, debug outputs, or anything longer than 20 lines. This allows us to place more information on one or two pages, and readers can select exactly the information they need by expanding sections.
A collapsible block is an example block (==== delimiters) marked
with [%collapsible]:
.Server startup output [%collapsible] ==== FreeRADIUS Version 4.0.0 Copyright (C) 1999-2026 The FreeRADIUS server project and contributors ====
Always give the block a title, as the title becomes the text the reader clicks to expand. A block with no title shows the word "Details" instead, which tells the reader nothing about what’s inside.
The exception is a code block (more than 20 lines) that a user needs to copy. Keep the text or block expanded.
Font
Use a clear font that is legible on-screen and large enough so it’s easy to read (accessible). Generally a non-serif font is best for screens and works in PDFs (if required).
Avoid capital letters BECAUSE IT SEEMS LIKE WE’RE ALWAYS YELLING AT OUR READERS! Use bold to emphasise or italics (sparingly) to highlight information. Use capital letters for all acronyms such as TCP/IP and EAP.
The CSS files set the font family and size for every page, see Layout and CSS.
Formatting
Use bold to emphasise information rather than italics, because
readers recognise bold text faster than they recognise italic
text. All programming snippets must be formatted as code or code
blocks.
Code blocks using a source such as html, shell (zsh, bash), and
unlang render the output text in different colours. Since there are
so many sources, we’re allowing all types and will update CSS with
final colours for the output text.
Other code blocks without a native source, keep text in the code or
code block black.
The CSS files control every colour on the page, see Layout and CSS.
Grammar
Replace words of six or more syllables with shorter terms that translate easily. Substitute or remove formal words not recommended for software documentation. Check the Terminology section for more information on recommended words and terms.
Shorten sentences or break them into two sentences to ensure conciseness.
Landing pages
All landing pages (H1 top level sections) need an introductory paragraph and an explanation of what the section contains.
Add xrefs to all the subsections contained in this section on the top level landing page. Users can select a topic from the main page while reading or use the navigation panel on the left side.
Layout and CSS
Left-justify (irregular right edge) all pages. A left-justified page is more accessible and increases readability. Avoid centre-justification.
The CSS files control the design elements: fonts, colours, layout, margins, and page size. Change one line in a CSS file and the change applies across every page at once.
Headers and footers live in separate files, which keeps branding and navigation consistent. Update a logo or a contact address in one header file and the change reaches every page.
|
If your page needs a CSS update, send the request with your pull request. |
Localisation
Remove as many gerunds (words ending in ing) as possible. English doesn’t easily translate these words. This can confuse non-native speakers.
Check convoluted text or run-on sentences with Hemingway or Grammarly editors. The reading level should be Grade 9. This ensures the document is scannable and readable. Most users can understand what they’re reading on the first pass.
|
Hemingway and Grammarly are third-party tools, not ours. Both have free versions that run in a browser and are enough for checking reading level and sentence length. Neither is required, and neither has the last word on a rule this guide sets. |
Numbers
Numbers like 1, 2, 3, … up to 9 are written as words. Numbers starting at 10+ are written out in numerals.
This is not applicable for code or code blocks. These numbers
need to stay in their native formats.
Decimal numbers need to only be two significant digits.
See IEEE expressing numbers for more guidance.
Punctuation
Currently, there is one space after a period at the end of a sentence. The source files still hold a mix of one and two spaces, and this will change in a future release. Use the Oxford comma to make sentences clear and concise.
Choose the list type to match the content:
-
Use unordered lists when listing contents or items.
-
Use ordered lists for tasks or steps.
Use a period at the end of each list entry.
Spacing
All headings have a line space after them before the first paragraph. There is also a single blank line between paragraphs.
The recommended method is to use one space at the end of a sentence (see the previous note in Punctuation).
Heading spacing is set per page rather than globally in the CSS.
Spelling
We use British or UK spelling and most words use the s instead of
z. An example is "utilise" versus "utilize". By spelling our words
the same as the supporting material, for example the company website
or the FreeRADIUS software, our readers' comprehension increases. The
reader isn’t figuring out what terms mean if they’re spelled the same.
They’re also not determining whether two terms spelled differently
mean the same thing.
Exception: Use the z form for authorization rather than
authorisation. This rule matches the same spelling of the term
authorize in the RFCs and codebase.
Tables
Put information in tables where applicable to increase readability / scanning. See Collapsible text for hiding very long code snippets, programming examples, or debug outputs.
Tone
Friendly and informal for users who need to feel comfortable when accessing information. The informal tone allows the use of contractions.
Remove all slang terms and rhetorical questions. Check other style guides (Chicago/Google/Apple/Microsoft) for anything else not covered by this page. MS Tips is a good reference for technical documentation and localisation.
Xrefs and Links
Use xref: for a target inside our documentation and link: for a
target on another site.
Don’t send an external URL through xref:. Asciidoctor treats the URL
as an anchor name and emits href="#https://example.com/", so the
link looks right on the page and goes nowhere when clicked.
| Target | Syntax | Example |
|---|---|---|
Page in the same module |
|
|
Anchor on a page in the same module |
|
|
Page in another module |
|
|
Anchor on the page being read |
|
|
Another site or external site |
|
|
To print a macro instead of running it, wrap the example in plus signs inside the backticks:
| Page in the same module | `+xref:page.adoc[text]+`
Always put link text inside the brackets. Empty brackets print the raw URL, which readers can’t scan and screen readers read out one character at a time.
Every module needs its prefix when you reference a file in a different
module. A page in howto linking to a page in concepts needs
xref:concepts:, and leaving the prefix off resolves against howto
instead.
RFCs need to be referenced with no dash between RFC and the xxxx digits. For example, RFC 2865.
Recommendations
AsciiDoc
Use the built-in functions and templates from AsciiDoc to standardise output rendering.
Some tips include:
-
Use the Menu listing and the menu items function in AsciiDoc. For example,
menufunction (gives the MENU>item1>item2 syntax). -
For tables, use
[options="header,autowidth"]to size the columns to fit their contents. Note that the option isheader, notheaders, and the plural is silently ignored so the table renders with no header row. -
To set the column widths yourself, use
[cols=...]and dropautowidth, becauseautowidthoverrides any widths given incols. For example,[cols="1,3,3",options="header"]makes the first column narrow and the remaining two equal.
Single source
Add partials for any section of text repeated more than twice throughout the documentation. Some examples are the mailing and RFC lists that are repeated multiple times throughout the documentation.
Any paragraphs or text that is required in more than one place needs to be placed in a partials directory.
Any diagram or image that is required in more than one place needs to be placed in an images directory.
Terminology
We write in British English, and we keep the wording plain enough for a global readership. Plain, simple wording prioritises clarity for non-native speakers. Readers from diverse linguistic backgrounds can then follow the text on the first pass.
To ensure effective communication, consider the following:
-
Simplify language and avoid complex constructions.
-
Write for translation; simpler words are easy to localise and understand.
-
Use clear, short sentences and avoid ambiguous language.
-
Use standard expressions and avoid phrasal verbs, gerunds, and colloquialisms.
-
Standardise dates, phone numbers, and addresses. Worked examples are still to be added.
The following tables indicate which terms are good or bad to use in our documentation, both the developer documentation written inside the source code and the customer-facing pages.
Words and terms
| Not recommended | Recommended | Reason |
|---|---|---|
analyze, analyzed, analyzing |
analyse, analysed, analysing |
Standardise on British English. |
authorise, authorised, authorising |
authorize, authorized, authorizing |
Use the |
behavior |
behaviour |
Standardise on British English. |
centralize, centralized, centralizing |
centralise, centralised, centralising |
Standardise on British English. |
freeradius, FreeRadius |
freeRADIUS, FreeRADIUS |
Use a standard word for freeRADIUS so users don’t think it’s a different software version or product. This recommended form best represents the freeRADIUS logo. |
license, licensed |
licence, licenced |
You may see licence=noun and license=verb, but licenced (as in copyright) is an acceptable form. |
minimize, minimizing, minimized |
minimise, minimised, minimising |
Standardise on British English. |
thus, thusly |
therefore, as a result, so, thereby |
Thus is a formal term and not recommended for software documentation. Try rephrasing the sentence to remove the word. |
v.4.0.0, ver 4.0, v4.0.x |
v4, version 4 |
Standardise on one term throughout the documentation. |
v.3.0.0, ver 3.0, v3.0.x |
v3, version 3 |
Standardise on one term throughout the documentation. |
master |
primary, main |
Try to use inclusive language as the first option. Legacy terms master/slave may be used according to industry standard. Only use the term where/when the 'master' reference works in the selected context. |
mandatory |
required, needed, must be present |
Inclusive language. |
user, users, network user(s) |
end-user, end-user(s) |
In a RADIUS context only. An end-user is the person or client device (Windows machines, Macs) authenticating to the network. An end-user is not a network client such as a NAS or proxy server that talks directly to the freeRADIUS server. When referring to the person reading our documentation, |
nases, Nases, NASs |
NASes or Network Access Servers |
NAS refers to a Network Access Server that may be a devices or software. There are many plural forms, but we need to standardise on one form such as NASes. |
client, clients |
network client, network clients, NAS, NASes |
Refers to any device that communicates directly with the RADIUS server. |
should |
must, required, need to |
Use direct language to instruct the user what they have to do. Should implies a suggestion and not necessarily a step that’s required. |
Network RADIUS, Network Radius |
InkBridge Networks |
Rebranding of documents. |
whilst |
while |
Whilst is a formal term and not recommended for software documentation. |
Forbidden words
| Not Recommended | Recommended Words | Reason |
|---|---|---|
stupid, stupidities |
nonsensical, problems, issues, senseless (if referring to an action, not a person). Other suggestions - lower intelligence threshold, unwanted behaviours, unexpected results, imprudences. |
Stupid is a superfluous word and not needed. |
crap, shit |
problems, issues |
Crap and shit are slang and hard to translate. |
retarded |
not recommended, nonsensical |
Use inclusive language. This word excludes the 'slower-than-average' reader. |
hell |
troublesome, gives you issues |
Hell is hard to translate and alternative words can be used. |
weenie |
ineffectual, problematic, weak |
Weenie translates very differently into other languages and is definitely not a good word to use. |
Acronyms
Industry-standard acronyms use capital letters.
| Term | Term to use | Reason |
|---|---|---|
arp, Arp |
ARP |
Standard way to reference protocol. |
dns, Dns |
DNS |
Standard way to reference protocol. |
eap, Eap |
EAP |
Standard way to reference protocol. |
Ip, ip |
IP |
Use IP when referring to the Internet Protocol (IP) or networking standards. NOTE: Use ip when referencing a variable or a specific instance of an IP address in code or examples. |
ldap |
LDAP |
Standard way to reference protocol, but use |
tcp, Tcp |
TCP |
Standard way to reference protocol. |
TCPIP, TCPip, TcpIP |
TCP/IP |
Standard way to reference protocol. |
Udp, udp |
UDP |
Standard way to reference protocol. |