Quill User Guide
QUILL stands for Quality, Usable, Inclusive, Lightweight, Literate.
QUILL: A quality, usable, inclusive, lightweight, and literate editor built for everyone who writes, codes, learns, and creates.
Quill is a screen-reader-first writing and reading environment for Windows. It is designed to feel calm, predictable, deeply keyboard-friendly, and respectful of your focus. It is also ambitious. Quill is not only a place to write plain text. It is a place to open difficult documents, inspect structure, navigate long material, compare revisions, prepare content for Markdown or HTML, and work with accessibility and extraction issues without leaving the editor.
This guide is aligned to QUILL 1.0.0, built by Blind Information Technology Solutions (BITS) together with Community Access.
This guide is written as a companion, not a reference wall. Read it from the beginning if you are new to Quill. Dip into the sections that matter most if you already know what kind of work you want to do.
Quill is also in beta. Expect polish, depth, and real daily utility. Also expect rough edges, unfinished flows, and the occasional surprise. If you find something confusing or broken, that is useful information. Quill is becoming stronger because real people are trying it on real work.
Table of Contents
- Start Here
- What Quill Feels Like
- Your First Session
- Getting Around QUILL
- Command-Line Launching
- The Main Window
- The Menu Bar Reference
- Writing and Editing
- Search, Replace, and Deep Navigation
- QUILL Quick Nav Mode
- Formatting and Markup Work
- Tools for Reading, Review, and Inspection
- GLOW Workflows Inside QUILL
- Accessibility and Low-Vision Features
- Quill on macOS
- Profiles, Keyboard Packs, and Customization
- Trust, Recovery, Sessions, and Safety
- Working with Different Document Types
- Quill Radio and the QuillVille family
- Sleep Timer
- Starting QUILL automatically
- Braille Mode (BRF, BRL, PEF, UEB)
- Help, Learning, and Daily Confidence
- Translation and Community Localization
- Checking for Updates
- Beta Feedback and Bug Reporting
- A Fast Shortcut Tour
- Control Reference
- Glossary of QUILL Terms
Start Here
If you only have five minutes, do this:
- The first time QUILL starts, the Personalise QUILL wizard offers to set up your keyboard layout, profile, and optional features in about two minutes. Complete it or dismiss it; you can re-run it from Help → Personalise QUILL at any time.
- Press
Ctrl+Nto create a new document, or pressCtrl+Oto open one. - Type a few lines.
- Press
Ctrl+Shift+Pto open the Command Palette. Typeguide,spell,compare, orglowand notice how quickly Quill turns intent into action. - Press
F6to move into the status bar and hear how Quill treats even the bottom of the window as a working surface. - Press
F7for spell check,Ctrl+Fto search, orCtrl+Kto insert a link. - Press
F1on any control to hear what it does and see its keyboard shortcuts.
If you ever feel lost, press F1 for immediate help on
the focused control, or use Help → What Can I Do Here?
for document-context guidance. Think of those commands as the editor
quietly putting a mentor beside you.
What Quill Feels Like
Quill is built around a few promises.
- The keyboard is never second-class.
- Screen readers are not an afterthought.
- Every major action is reachable from the menu, the palette, and the command system.
- Documents open locally and stay local unless you explicitly choose a network-aware action.
- The editor should tell you what changed, where you are, and what is possible next.
In practice, that means Quill spends a lot of attention on focus movement, meaningful status updates, discoverable commands, and native Windows controls. It also means Quill tries to reduce fear. When you open a recovered draft, compare two files, or inspect extraction quality, the point is not to feel clever. The point is to feel safe.
Your First Session
Imagine your first meaningful visit to Quill.
You launch the app. There is no splash screen. The window appears quickly, with a menu bar, an editor, and a status bar. If Quill detects a screen reader, it adjusts its hints and announcement style. If Quill notices an earlier crash or autosave state, it offers recovery instead of silently hoping you forgot.
From there, a natural first session looks like this:
- Open a file with
Ctrl+Oor create one withCtrl+N. Turn on Settings > General > Use simple file open dialog if you prefer a smaller, screen-reader-friendly file picker. - Read or write in the editor.
- Use
Ctrl+Shift+Pto explore commands without memorizing everything. - Use the Navigate menu to jump by line, heading, block, region, or page.
- Use the Tools menu for spelling, word count, extraction review, compare, macros, and regex help.
- Open Help → Open Keyboard Reference to see the exact shortcuts that exist in your current configuration. This reference is generated dynamically, so it always reflects your current feature profile and any custom keybindings.
That first session matters because it teaches the most important Quill habit: you do not need to hunt. If an action exists, Quill wants you to be able to reach it from where you already are.
Getting Around QUILL
QUILL is designed so you never need to memorize an action to reach it.
F1 — help on the focused control
Press F1 on any focusable control — a dialog field, a
button, a menu item, the editor itself — and a small help dialog opens.
It tells you what the control does and what keyboard shortcuts apply to
it. The full text lands in one read-only field so your screen reader
announces everything in one pass when the dialog opens.
F1— help on the focused controlCtrl+F1— open the full User GuideShift+F1— open “What Can I Do Here?” for the active document context
See Context-Sensitive Help (F1) for full details.
F1 works the same way in every Quill app – Radio, Cast, the Media Player, Audio Studio, Inkwell, Weather, the Converter and Beacon – and it answers two questions at once. First it says what the window you are standing in is for, in a sentence or two written for that window. Then it describes the control under your cursor: what it wants, what format it expects, what its default is, and what changing it affects. A field asking for a number of seconds says so, and says which number it starts at.
Controls whose own name already teaches – “Reload the highlighted source from the internet” – answer with that name plus a line on how to drive a control of that kind (“A list: Up and Down move between rows, Enter acts on the row, and Shift+F10 lists everything else you can do to it”). Nothing answers F1 with silence.
If you would rather read it all at once than press F1 in each place, every authored sentence in the family is collected in one document: the F1 help reference. The default keyboard shortcuts have a companion document of the same kind: the keyboard reference. Both are generated from the app itself, so they cannot fall out of step with what QUILL actually does.
The QUILL key
The QUILL key is Ctrl+Shift+Grave (the
back-tick/grave key above Tab). It is a layered prefix chord that opens
most of QUILL’s power features without ever leaving the keyboard.
Heads up: the chord reads as
QUILL Key + <key>everywhere you see it. Menus, the About > Keyboard Reference page, the QUILL Key Help dialog, the cheat sheet, and the status bar all show the chord in the branded form (QUILL Key + S,QUILL Key + Shift+O, and so on). The stored binding is stillCtrl+Shift+Grave, <key>— only the user-visible label moves. The display rewrite is one function (format_binding_for_display), so the entire product speaks the same label and a rebrand inquill/branding.pyfollows everywhere.
It operates in two primary layers:
- Prefix Mode (One-shot). Press it once and QUILL
arms a short-lived prefix. The next key you press runs a chord command
(like
Gfor Go to Anything orMfor Markdown paste), and then the prefix expires. - Browse Mode (Locked). Press the QUILL key twice in
a row, and QUILL locks Quick Nav (Browse) mode on. In
this mode, single-letter keys (like
Hfor headings,Pfor paragraphs, orSfor sentences) move the cursor through the document structure. This mode stays active until you pressEsc.
The QUILL key is its own tiny language: every chord is data-driven
from the keymap, which means every chord is fully remappable in
Preferences → Keyboard → Keymap Editor. The full cheat
sheet is one keystroke away (QUILL Key + ?).
QUILL key sound. When the QUILL key is pressed and
the prefix arms, QUILL plays a short two-tone earcon
(quill_key_pressed) — a quick double-ping distinct from all
other sounds — so you get instant audio confirmation without waiting for
speech. This earcon is included in all bundled sound packs and can be
toggled individually in Tools → Reading & Dictation → Sound
Events….
Detection note. On some keyboards or drivers, Windows reports the grave/back-tick key differently than expected. QUILL now uses three independent detection strategies (character code, Windows virtual key VK_OEM_3, and physical scan code 0x29) so the key is recognized on any layout.
macOS note. Use the physical
Control key, not Cmd, for the QUILL key on macOS:
Cmd+Shift+ `` is macOS’s own reserved “cycle windows”
shortcut and never reaches QUILL. If you’d rather use Cmd, reassign that
system shortcut in System Settings → Keyboard → Keyboard
Shortcuts → Mission Control first.
Reassigning chord commands. Open Preferences
→ Keyboard → Keymap Editor, find the command you want to move,
and type a new chord binding in the form
Ctrl+Shift+Grave, X (replacing X with the key
you want). The Keymap Editor stores chords in this
Ctrl+Shift+Grave, X grammar; menus and the cheat sheet
display them as QUILL Key + X. Conflict detection prevents
accidental double-bindings.
The Keyboard Manager: search, record, and diagnose
The Keymap Editor is built for fast, confident customisation, however you think about shortcuts:
- Search two ways from one box. Type part of a
command’s name to filter the list. Or type a shortcut —
ctrl+alt+m,Control + Shift + K, even a QUILL chord likequill, s— and the editor flips to reverse lookup, telling you exactly which command that key is assigned to, or that it is “unassigned and available.” You do not have to remember whether a key is free; ask it. - Forgiving spelling. Modifiers can be written
however you like:
control,ctrl, orctl; in any order (shift+ctrl+kequalsctrl+shift+k); in any case. QUILL normalises what you type and stores the tidy form, somac-styleCmdstays distinct fromCtrland is never confused with it. - Record Keys. Prefer to press the combination rather than spell it? Choose Record Keys, press the chord, and QUILL fills it in for you.
- Honest conflicts with one-step reassignment. If you assign a key that is already taken, QUILL names the command that owns it — by its friendly title, not an internal id — and offers to move the key here, freeing it on the other command. No silent clobbering, no guessing.
- Diagnostics and self-heal. Run Diagnostics audits your whole keymap and reports duplicate shortcuts, bindings for commands that no longer exist, unreadable bindings, and any key that is “assigned but inert” (one the editor cannot actually fire). For the repairable problems it offers a one-click Heal that removes the bad entries and re-applies your keymap so menus and shortcuts line up again.
Default QUILL-key chords:
QUILL Key + N— enter Quick Nav (browse) mode for the next action. If thebrowse_mode_stickysetting is on, the mode stays locked untilEsc; otherwise it expires on the QUILL-key timeout. Press the QUILL key again (without a chord) to lock it on regardless of the setting.QUILL Key(pressed twice) — lock Quick Nav mode on untilEsc. This is the most common path: first press arms the prefix, second press locks browse mode.QUILL Key + G— open Go to Anything (Quick Nav search).QUILL Key + M— paste the rich HTML clipboard as Markdown at the cursor.QUILL Key + V— open the browser preview for the current document.QUILL Key + Shift+O— open from remote (FTP / SFTP / HTTPS / WebDAV / S3 / GitHub).QUILL Key + W— save to remote.QUILL Key + Shift+M— manage saved remote sites.QUILL Key + A— selection actions when text is selected (also expands an abbreviation manually mid-word).QUILL Key + Shift+A— open the abbreviation manager.QUILL Key + E— toggle abbreviation expansion on or off.QUILL Key + X— open the Copy Tray dialog.QUILL Key + Shift+1–Shift+9,Shift+0,Shift+-,Shift+=— copy the selection to slots 1–12 of the Copy Tray.QUILL Key + ?— show the QUILL key cheat sheet.QUILL Key + Esc— cancel the prefix without firing any command.
Command Palette
Ctrl+Shift+P opens the Command Palette — a searchable
list of every registered command. Type any part of a command name to
filter. Press Enter to run it. This is the fastest way to reach any
action without memorizing its key or menu path. Searching
guide, spell, compare, or
glow from the palette is a good first practice.
Search matches more than the command name. Multi-word queries match
in any order (url open and open url both find
Open From URL…), a command’s shortcut text is
searchable (ctrl+o finds Open), and common intent words are
understood as aliases — settings finds
Preferences…, quit finds
Exit. As you arrow through results, QUILL speaks each
command’s shortcut along with its name — the palette teaches the
keystroke while it dispatches, so you graduate off the palette instead
of depending on it.
Every on/off command in the palette says which way it is currently set: Toggle Soft Wrap (currently On), Toggle Dark Mode (currently Off), and so on for find wrap, the tab control, persistent undo, spell check as you type, word prediction, overwrite mode, extend-selection mode, tab insert mode, abbreviation expansion, and more. A menu can show a checkmark; a palette list cannot, so the state lives in the name instead. You should never have to throw a switch to discover which way it was set.
When a command cannot run right now, the palette says why, not just that it can’t: a command disabled by a safety advisory reads and speaks as “(unavailable: Turned off by a safety update: …)”, and trying to run it repeats the reason. You should never have to guess why QUILL refused.
Navigation anchors
The status bar (F6 to focus it) is a working surface,
not decoration. Each cell announces meaningful information and most
cells open a related dialog when you press Enter or click.
Shift+F6 moves focus back to the editor.
Reach any menu from the keyboard: Alt+F for File,
Alt+E for Edit, Alt+V for View,
Alt+T for Tools, Alt+H for Help. All menu
items have keyboard mnemonics.
The Navigate menu groups document-level movement: go to line, go to heading, go to entry in notebook, heading organizer, outline navigator, back and forward location history, and structural next/previous. When you need to move across a large document, start there.
The Simple File Open dialog
QUILL can open files through either the standard Windows file open
dialog or a keyboard-friendly Simple File Open dialog
that lists files in a focused list, with a small filter, recent
locations, and a hidden-files toggle. Both dialogs are reached from the
same place — File > Open… or Ctrl+O —
and the active dialog is chosen by Settings > General >
Use simple file open dialog. The setting is off by default;
turn it on if you prefer a minimal, screen-reader-friendly picker.
The Simple File Open dialog has:
- A Path field at the top showing the current folder.
Type a path and press Enter to navigate (folders) or open (files). Use
Ctrl+L to focus the path field from anywhere in the
dialog. Paste paths in whatever form you have them: File Explorer’s
“Copy as path” quotes,
%APPDATA%-style environment variables,file://links, and~all work — QUILL cleans them up for you. - A Filter dropdown with the file types the dialog will show. The default, Supported files, includes plain text, Markdown, HTML, and Rich Text. Switch to Plain text, Markdown, HTML, or Rich Text to narrow further, or to All files to see everything.
- A Files list of folders and files in the current
directory. Folders are prefixed with
[dir]. Use the Up button (or press Backspace in the list) to go to the parent folder. - A Hidden toggle to show or hide files whose names start with a dot or whose Windows hidden attribute is set. Ctrl+H toggles this from the path field or the file list (on macOS, use Cmd+Shift+. — the Finder convention — since Ctrl+H is the system Hide shortcut).
- A Recent button that opens a popup listing recently opened files for one-click re-open.
- A Use Windows Dialog button that opens the standard
Windows file dialog for one invocation. The setting does not change; the
next time you press
Ctrl+Oyou are back in the simple dialog. Use this when an edge case (a long file path, a custom file association) calls for the native picker. - An Open button and a Cancel button. Press Enter to open the selected file, Escape to cancel.
The status line below the list announces the current directory, the number of visible entries, and any errors. Permission-denied and not-a-directory errors keep the dialog open so you can correct the path and try again.
When a file is not where it was
Files move. A OneDrive or SharePoint file can be a placeholder whose contents were never downloaded to this PC; a file opened from File > Open Recent may have been renamed or deleted since; a file on a USB stick or a network share is simply not there when the drive is not connected.
QUILL says so in one sentence, in the status bar and out loud:
Bingo3.html is no longer there. It may have been moved, renamed, or deleted, or it may live on a drive that is not connected.
Nothing else happens — no crash, no dialog to dismiss, and QUILL stays exactly where it was, so you can press Ctrl+O and pick something else. Choosing a folder where a file was expected says that instead, rather than failing halfway through reading it.
Your Recent list is left alone on purpose. A file that is missing today may be a USB stick you plug back in tomorrow, so QUILL does not quietly forget it when an open fails.
There is an opt-in tidy for people who would rather not keep dead
entries: recent_files_auto_clear_missing in your settings
file, off by default and not yet exposed in Preferences. Even switched
on it only removes entries on this PC’s own fixed drives — files on
removable and network drives are never even checked, because “not
connected” is not the same as “gone”.
Command-Line Launching
Quill supports command-line startup options for scripted workflows and direct navigation.
Supported options:
--help: show command help and exit.--version: print QUILL version and exit without launching the UI.--safe-mode: launch with optional state disabled.--reset-profile: reset feature profile store before launch.--diagnostics: start with diagnostics tracing enabled.--dump-stacks: write a thread-stack dump and exit.--line N: 1-based line for the first startup file.--column M: 1-based column for the first startup file.--goto FILE[:LINE[:COL]]: open a file at an optional 1-based line and column in one argument. This is the compact form of--line/--column, handy when an external tool (a linter, a search result, a build error) hands you afile:line:columnstring. Example:--goto main.kt:27:5.--diff LEFT RIGHT: open two files directly in compare mode, landing on the first difference without opening each file by hand.--new-window: force a new process instead of forwarding to an existing instance.--wait: when forwarding to an existing instance, wait for that instance to close.
Use quill.exe (the bundled launcher — installed or
portable, this is what you actually have) as the command. During setup,
the installer offers an “Add Quill to PATH” option; turn it on and
quill works from any Command Prompt or PowerShell window
without typing the full install path. If you skipped that option, use
the full path instead (typically
"%LOCALAPPDATA%\Programs\Quill for All\quill.exe" for a
per-user install), or a source checkout, where the equivalent command is
python -m quill.
Examples:
quill --versionquill notes.md --line 40 --column 5quill --goto main.kt:27:5quill --diff old-draft.md new-draft.mdquill --new-window notes.md
The Main Window
Quill keeps its main window intentionally simple.
Menu bar
The menu bar follows the Windows and Office order you likely expect:
- File
- Edit
- View
- Insert
- Format
- Navigate
- Search
- Tools
- Window
- Help
The menu bar is exhaustive rather than decorative. If Quill can do something, there is almost certainly a menu path for it.
Editor surface
The editor is the heart of Quill. It is where writing happens, where extracted text lands, where reports open as ordinary tabs, and where compare summaries feel like first-class documents rather than pop-ups.
The editor supports:
- plain text writing
- Markdown-aware authoring
- HTML-aware authoring
- structural navigation
- selection helpers
- text cleanup
- spell and thesaurus workflows
- link insertion and link following
- compare-driven review
Tabs and document switching
Quill is multi-document. Each open file lives in a notebook tab. You can:
- move between documents with
Ctrl+TabandCtrl+Shift+Tab - close the active document with
Ctrl+W - use the tab context menu to close one tab, close other tabs, or close tabs to the right
- reveal a saved document in File Explorer directly from the tab context menu
Quill also opens generated artifacts as tabs. The welcome guide, keyboard reference, and compare summary all feel like normal working tabs. That is deliberate. Artifacts should stay close to the work that created them.
Status bar
The status bar is interactive. It is not just a strip of passive text.
Use F6 to move into it. Once there, you can move between
cells and activate them. Depending on your layout and current state, the
status bar can surface:
- current message
- line and column
- word count
- insert or overwrite mode
- tab mode (whether the Tab key indents the line or inserts a tab character)
- selection size
- encoding
- line endings
- spell-check state
- background task state
- notifications
- read-aloud state
- autosave timing
- current search term
- file path or unsaved state
You can reorder or hide status items through Tools → Customize & Support → Status Bar Layout…. Right-click a focused status cell to Activate, Hide this item, or open Status bar settings…. On the Notifications (or Background Tasks) cell the context menu also offers Clear All Notifications, which empties the notification list in one step without opening the dialog. Use Restore Defaults in status bar settings to reset visibility and order. When title mode is set to full path, Quill automatically hides the duplicate file-path status cell. The current-message cell hides itself the same way whenever its text exactly matches another currently-visible cell’s — it never says the same thing twice.
Region cycling
Use F6 and Shift+F6 to move between major
regions. Quill treats region movement as a first-class accessibility
feature. If you write, inspect, and navigate entirely from the keyboard,
this becomes second nature quickly.
When Show Tab Control is on (View menu) and at least one document is open, the document tab bar joins the F6 rotation as the Document Tabs region, so the tab strip is reachable from the keyboard rather than being skipped. The cycle is Editor → Document Tabs → (Preview, when split open) → Status Bar. From the tab bar, the left and right arrows move between tabs, and Enter, Space, or Tab returns focus to the editor on the selected document.
Tab key: indent or insert a tab character
By default the Tab key runs Quill’s smart line indent: it adds one indentation level to the current line (or every line in the selection) at the start of the line, and Shift+Tab outdents. On a Markdown list item Tab and Shift+Tab nest and promote the item. Each of these actions is spoken, so a screen reader confirms the indent even though the caret stays in place.
If you would rather have Tab type a literal tab character at the cursor — the way a plain text editor behaves — toggle Tab Mode with the QUILL Key + U chord (this is Quill’s equivalent of the VS Code “Tab key” toggle; Ctrl+M itself is reserved for the mark ring, and Ctrl+Alt+ chords are avoided as screen-reader-hostile). The current mode is shown in the Tab Mode status-bar cell (Indent or Tab char), mirrored by the checkable Format → Tab Key Inserts Tab Character menu item, and the new mode is announced when you switch. While Tab Mode is set to insert a tab character, Shift+Tab still outdents so a stray indent can be removed without leaving the mode. The setting applies to the current session.
How the indent is spoken, and how wide it is. When you indent with Tab (or outdent with Shift+Tab), Quill speaks the line’s new indentation depth — for example “4 spaces”, “8 spaces”, or “1 tab” — so you always know how deep the line sits, not just that it moved. Two settings control the indentation itself: Number of spaces per indent level (Settings; 1–8, default 4) sets the width, and Insert tab characters instead of spaces (Settings) switches between space and tab indentation — the spoken depth follows whichever you choose. If you prefer the shorter “Indented lines” message, turn off Announce indentation depth on Tab (Settings → Accessibility).
The Menu Bar Reference
This section walks the entire menu bar in the order you will encounter it.
File
The File menu is the full document lifecycle.
- New creates a blank document.
- Open… opens a document from disk.
- Open Recent returns quickly to recently used files. If you turn on Drop missing recent files automatically in Settings (General), entries whose file has been deleted from a fixed internal drive are removed from the list. Files on USB, removable, or network drives are always kept, so unplugging a drive never clears its history.
- Open from URL… downloads a document or text resource through an explicit safety flow that confirms host and expected size.
- Open from Remote, Save to Remote, Save Copy to Remote, and Manage Remote Sites… (in the Open from Remote submenu) open, save, and administer saved sites over FTP, SFTP, HTTPS, WebDAV, and Amazon S3 (or any S3-compatible service). Each remote operation is explicit, runs over a verified TLS context, announces host and expected size, and never writes to disk before you confirm.
- Snapshots lets you save and reopen groups of documents as a single workspace snapshot, similar to lightweight workspaces in Visual Studio Code.
- New from Clipboard opens a new document seeded with the current clipboard text.
- Save writes the current document.
- Save As… writes to a new path, converting the
document to the file type you choose in the dialog. Quill keeps your
text as portable Markdown-style markup, so picking Rich Text
Format (*.rtf) writes real RTF, HTML (*.html)
writes a standalone web page, and Text (*.txt) writes
clean prose with the markup removed. Choosing Markdown
(*.md) keeps the markup verbatim. The file’s extension always
decides the format; if you type a name without an extension, the
selected type supplies one. When Save As changes the format, Quill can
reload the file so the editing surface matches it — for example, opening
a freshly saved
.rtfin the Rich text editor. By default it asks first with a Yes/No prompt (reloading replaces the editor contents with the saved file); set Settings → Editing → Reload after Save As to match the format to Reload automatically or Keep current surface to skip the prompt. - Save All writes every modified open document.
- Save As Plain Text… exports a clean plain-text
version. Because plain text has no links, Settings → Editing →
Links in plain-text export controls how Markdown links are
written: keep the link text and its URL (the default, so you never lose
where a link pointed), the link text only, the URL only, or the original
Markdown link. This setting also applies whenever Save As writes a
.txtfile. If the document carries hidden formatting (fonts, colours, alignment), Quill offers to keep it with an Illumination — see below.
Keeping formatting in a plain-text file: Illuminations
A plain .txt file has nowhere to store fonts, colours,
or alignment, so saving formatted text as plain text normally drops the
formatting. Quill gives you a choice, named after the decorative layer a
scribe paints over a manuscript: an Illumination is a
small companion file, yourfile.txt.illumination, that holds
the formatting beside the clean text. Your .txt stays
genuinely plain — readable in Notepad, e-mail, or anywhere — and when
you reopen it in Quill, the matching Illumination restores
every font, colour, and alignment exactly.
What happens when you save formatted text as plain text is set by Settings → Editing → Saving formatted text as plain text:
- Ask each time (the default) — Quill asks whether to
keep your formatting (by saving as Markdown, Word, or RTF instead), to
save the plain
.txtplus an Illumination, or to save plain text only and drop the formatting. - Always save an Illumination sidecar — Quill writes
the clean
.txtand the.illuminationcompanion every time, no prompt. - Save plain text and drop the formatting — the
classic lossy save; the
.txtis clean and any old Illumination beside it is removed.
A few things worth knowing: the Illumination travels as a
separate file, so if you copy or e-mail only the
.txt, the formatting won’t come along — keep the pair
together (or use Markdown/Word/RTF, which carry formatting inside one
file). And if you edit the .txt in another program, Quill
notices the text no longer matches the Illumination and opens it as
plain text rather than re-applying formatting to the wrong words. If
you’d rather a single self-contained file that preserves everything,
save as Markdown (which keeps the formatting inline) or
Word/RTF (which turn it into native formatting).
- Reload from Disk throws away in-memory edits and reloads the file from storage after confirmation.
- Restore Backup… lets you restore a saved backup version.
- Page Setup… and Print… support paper and print workflows. Print Studio… goes one step further: it reports a spoken/textual preview — “3 pages, Letter, default margins” — the screen-reader equivalent of a visual print preview, then lets you choose all, odd, or even pages, print in reverse order, or skip the first page (handy if page 1 is pre-printed letterhead) before handing off to the same print dialog Print already uses.
- Header and Footer… builds a header and footer for the current document from named presets — Title left, page number right, Filename and date, Roman numerals for front matter — or your own combination of a small set of tokens (title, filename, date, page number) placed left, center, or right. Turn on Different first page for its own separate header/footer, and choose numeric or Roman page numbering with a starting number of your choice. It’s saved with the document and drawn on every printed page, whether you use Print or Print Studio.
- Run Current File executes the saved file with its associated tool, and Open Target at Cursor opens the path or link under the caret.
- Rename Current File… and Delete Current File… manage the file on disk from inside the editor.
- Close Document closes the current tab.
- Exit closes the application.
The File menu is also where Quill quietly proves that it respects risk. Reload is explicit. Backup restore is explicit. URL opening is explicit. Nothing important is hidden behind a side effect.
Edit
The Edit menu is where writing muscles live.
Standard clipboard commands are here:
- Undo
- Redo
- Cut
- Copy
- Paste
- Copy With Source
- Select All
Quill then goes further with selection- and navigation-aware editing:
Find…, Replace…, Find Next, Find Previous, and Find All Matches all live here. Replace includes a Replace All action in its dialog, so bulk replacement stays in one place.
By default Ctrl+F and Ctrl+H open the standard Windows Find and Replace dialog. Turn on Settings > Use QUILL’s own Find dialog and they open QUILL’s accessible Find dialog instead — everything the Windows one does, plus:
- Extended mode (special characters). Choose
Extended in the Mode list and search for characters you cannot
type:
\nfor a line break,\tfor a tab,\xNNor\uNNNNby code, or\N{EM DASH}by name. The Insert Special Character… button offers forty named characters — non-breaking space, curly quotes, zero-width space, soft hyphen, and more — so the invisible characters that quietly wreck a document become findable, nameable things. Replacements understand the same escapes, so “replace every non-breaking space with a plain space” is a first-class, two-field operation. - A spoken match count as you type. Pause for a moment and QUILL says “17 matches” — you know the query is right before you commit to it.
- Peek navigation. Ctrl+Down and Ctrl+Up step through matches while focus stays in the search field: each step speaks the match in its sentence and selects it in the editor, and you can keep typing at any moment. Browse first, then press Enter when the query is right.
- Spoken match context. Every found match is announced as the sentence around it (“line 40: …the quick brown fox…”), not a bare position, and wrapping past the end of the document is always announced.
- A Direction group that announces its name. The Up/Down choice is a real labeled group, so your screen reader says “Direction” when you reach it.
- One dialog, always. Ctrl+F while it is open returns you to the search field; Ctrl+H switches it to Replace in place; Ctrl+L jumps back to the search field from anywhere in the dialog; Escape closes and returns to your text. Count answers “how many?” without moving anywhere.
The setting ships off while the dialog is validated with every screen reader — the Windows dialog remains exactly as it was, and you can switch back at any time. This is the first phase of the unified search plan; scopes beyond the current document (folders, the Vault) arrive in later phases.
- Extended mode (special characters). Choose
Extended in the Mode list and search for characters you cannot
type:
Word Prediction… opens inline word and tag suggestions.
Extend Selection Mode turns selection growth into a dedicated mode.
Selection submenu includes Select Line, Select Paragraph, Select Block, Select to Start or End of Line, Select to Start or End of Document, and a nested Recent Marks (Ring) group (set a temporary mark, jump to previous marks, swap cursor and mark, list recent marks).
Follow Link opens the link under the caret. (Link insertion now lives in the Insert menu.)
Paste HTML as Markdown converts rich clipboard HTML to Markdown as it pastes.
Paste Markdown as HTML does the reverse: clipboard Markdown is rendered to a clean HTML fragment (the same renderer as the live preview and HTML export) and inserted at the cursor. Unbound by default; give it a key in the Keymap Editor.
The deletion group — Delete to Line Start, Delete to Line End, Delete to Document Top, Delete to Document Bottom, and Delete Paragraph — removes text relative to the cursor.
Preferences… and Customize Menus… live with the rest of Quill’s configuration under Tools -> Customize & Support.
View
The View menu controls how Quill presents your document on screen without changing your content.
- Toggle Soft Wrap changes line wrapping without modifying the file.
- Auto Side-by-Side Preview opens a live preview beside the editor automatically.
- Show Tab Control toggles the visible document tab strip.
- Wrap Find Searches controls whether Find wraps past the end of the document.
- Start With No Document Open makes Quill open into an empty workspace instead of a starter document.
- Preview…, Preview Side by Side, Focus Preview, and Browser Preview… open rendered views of the current document.
Live preview while you type. The side-by-side
preview (Ctrl+F6 to focus it directly — it also joins the
F6 region rotation while open — or turn on Auto
Side-by-Side Preview) updates silently in place as you edit —
the rendered content is swapped without reloading the page, so your
braille display and screen reader are not interrupted, nothing is
re-announced from the top, and your reading position is kept. This is
the recommended live preview for screen-reader and braille users. The
external Browser Preview (in your web browser) can also
follow your edits, but because a real browser reload is a full page
navigation, QUILL refreshes it only after you pause typing (not on every
keystroke) and keeps your place on each refresh — landing back at the
section you are editing, or at your previous scroll position — rather
than jumping to the top.
Jump from the preview back to the editor. Reading the side preview and want to edit what you just heard? Open the context menu on a block — a heading, paragraph, list item, quote, table, or code block — with the Applications key, Shift+F10, or a right-click, and choose “Go to this location in the editor”. The editor caret moves to that block’s source, focus follows, and QUILL announces where you landed. Pressing Enter on a block does the same thing when your screen reader passes the key through, but the context menu is the reliable path: in browse mode there is no way to ask “where is the virtual cursor?”, while a context menu always targets the exact element you are on. The jump is offered when the preview matches your document verbatim; a preview that expands Vault links does not offer it, because the positions would no longer line up.
Preference-style toggles that used to live here — theme/dark mode, system-tray mode, title-bar path style, dirty-title style, persistent undo, spell-check-as-you-type, and word-prediction-as-you-type — now live in the registry-driven Settings dialog (Tools -> Customize & Support -> Preferences…), where they are persisted in one place.
Insert
The Insert menu adds structured content at the cursor.
Insert Link… creates a format-aware link.
Heading submenu: insert Heading 1 through 6, Decrease Level / Increase Level, and Style Headings… (font, size, alignment) for the current level or all levels.
List submenu: Bullet, Numbered, Task, List Manager…, and Structured List Studio… (F2).
Insert Code Block, Insert Footnote, Insert Table…, Insert Block Quote, Insert Horizontal Rule, Insert HTML Tag…, and Insert Markdown Tag….
The two tag pickers are dimmed where they do not apply, and exactly one of them is ever live: Insert Markdown Tag in a Markdown document, Insert HTML Tag in an HTML one, and neither in a plain document or a rich text one. Markdown used to stay enabled in a plain document too, which was the mirror image of the HTML row’s rule and worse by ear than by eye: an enabled row promises the command will work, and a document that quietly became half-Markdown is not something you can see you did. Navigate ▸ Set Document Language… turns the rows back on in one keystroke.
Format-aware inserts. Block quote, horizontal rule, table, and image insert Markdown in a Markdown document and HTML in an HTML document. If the document’s format isn’t set yet (a brand-new or plain buffer), QUILL asks “Markdown or HTML?” the first time, then remembers your answer for that document and stops asking. These carry direct authoring shortcuts: Insert Table is
Ctrl+Alt+T, Insert Block Quote isCtrl+Alt+Q, and Insert Horizontal Rule isCtrl+Alt+H— alongside theCtrl+Alt+1–6heading chords andCtrl+Alt+7/8list chords. All remain rebindable in the Keymap Editor.Insert Snippet… and Manage Snippets… for reusable text with placeholders.
Special Character… (
Shift+F2) opens a picker for the 357 characters a keyboard has no key for. Search by name (dash,euro,acute,arrow) or by a word Unicode does not use but people do (gbp,copyright,eszett), or clear the box and browse one of fifteen groups: whitespace, dashes, quotes, invisibles, typography, legal and reference marks, currency, maths and units, fractions, superscripts and ordinals, arrows, accented letters (small and capital), Greek, and punctuation from other languages. Each row shows the character, its name and its code point, and a description pane updates as you arrow. The search box is also the code-point box –2014,U+2014andd8212all find the em dash, and a code point in no group still resolves, so the picker reaches every character Unicode has. That replaced the bare code-point prompt this command used to be. QUILL says what it inserted, in Describe Character’s words, because most of the list is invisible on the page. QuillLite has the same picker on Edit > Insert > Special Character…. (This moved from F2, which now opens the Structured List Studio; both keys are remappable.)Line Break (
Shift+Enter) ends the line without starting a new paragraph — the same chord Word uses for the same thing. This is the distinction a blank line cannot make: in Markdown, a blank line between two lines makes them two paragraphs, while a hard break makes them two lines of one. It is what you want for an address block, a verse, or a scene-break run of lines that should sit tight against each other.QUILL writes the break in whichever spelling Preferences → Editing → Markdown line break style (
markdown_hard_break_style) names, and says which one it used. The default is a backslash at the end of the line, because the alternative — two trailing spaces — is invisible on screen, silent to a screen reader, and stripped by many tools when they save. QUILL always reads both, so a document written elsewhere in the two-space style still renders correctly here.QuillLite has the same command on Edit > Insert > Line Break, on the same key.
Date and Time submenu inserts a date, time, or both at the cursor. The bundled
com.quill.bundled.insert-toolsQuillin owns this submenu; it is the canonical home for date and time snippets. See Date and Time submenu below.Insert Emoji… (
Alt+.) opens the Accessible Emoji Picker: browse or search all 3,781 standard emoji by name, keyword, symbol, or a typed smiley like:), each with a real spoken description of what it looks like. See Insert Emoji: browse or search 3,781 emoji below.File Content… inserts the contents of another file at the cursor.
Insert Equation… (
Ctrl+Shift+E) opens a two-step prompt for inserting a LaTeX or MathML equation. Type the formula in LaTeX notation — for exampleE=mc^2or\frac{-b \pm \sqrt{b^2 - 4ac}}{2a}— or paste a MathML fragment. If the input is LaTeX, a second step asks whether to display it inline (\(...\)) or as a block ($$...$$). If a LaTeX equation is already selected when you pressCtrl+Shift+E, the delimiters are stripped and the bare formula pre-fills the prompt. MathML input (starting with<math) is inserted verbatim without a mode step. Browser Preview and HTML export render equations using MathJax 3; see Math Equations later in this guide for the formula gallery, symbol abbreviations, structural exploration, and Word export.
Quill treats Markdown and HTML as working surfaces, not special-purpose export formats, so tag insertion lives here beside the structural inserts.
Word prediction and snippets
Quill separates live prediction from snippet insertion so the hotkeys feel like a modern editor:
- Press
Ctrl+.to open Word Prediction (also on Edit -> Word Prediction…). - Type to surface matching document words, HTML tags, and Markdown tags.
- Use arrow keys to choose a result and press Enter to insert it.
For setup and maintenance:
- Press
Ctrl+Shift+Grave, Sfor Insert Snippet. - Press
Ctrl+Shift+Grave, Shift+Sfor Manage Snippets (create, edit, delete, import, export, and starter packs). - Open Preferences -> Install Starter Snippet Packs to install sample libraries for daily writing, developer flow, and support/accessibility notes.
- In General Preferences, toggle Word prediction and tag IntelliSense or Expand snippet triggers while typing as needed.
Snippets support placeholders such as ${input:name},
${choice:a|b}, ${date}, ${time},
and ${cursor}.
Date and Time submenu
Insert -> Date and Time is a submenu, not a
single command. The bundled com.quill.bundled.insert-tools
Quillin owns it and contributes three snippet-backed items:
- Insert Date — inserts today’s date at the cursor
using the project’s current
${date}format. - Insert Time — inserts the current time at the
cursor using
${time}. - Insert Date and Time — inserts both, separated by a single space.
The submenu is built by routing Quillin contributions whose
parent is Date and Time. If you disable the
bundled insert-tools Quillin, the submenu is still present
but its items go with it. Enable or disable it from Preferences
-> Quillins if you want to replace these with your own
date/time snippets.
Insert Emoji: browse or search 3,781 emoji
Insert -> Insert Emoji… (Alt+.)
opens the Accessible Emoji Picker, the opposite workflow from
Special Character…: instead of “I know the exact code
point,” it is “I don’t know the code point, help me find one.” There is
no picture grid anywhere in this dialog — a grid of small images is
exactly the design that shuts out anyone who cannot see it. Everything
here is a category list and a named results list, the same shape as
QUILL’s other browse-and-search dialogs.
Two ways to find an emoji:
Search (the box at the top) matches, in this order: the emoji symbol itself if you paste or type one in; a legacy typed alias like
:),:D, or<3; a substring of the official Unicode name or a keyword (for example “grin,” “dog,” or “heart”); and, as a last resort, a substring of the emoji’s own description, so a half-remembered phrase like “melting” or “puddle” can still turn up the right result even when it is not one of the emoji’s listed keywords.Category (the list on the left) browses Unicode’s own grouping, in this size order:
Category Emoji People & Body 2,261 Flags 270 Objects 264 Symbols 224 Travel & Places 218 Smileys & Emotion 169 Animals & Nature 159 Food & Drink 131 Activities 85 Clearing the search box returns to whichever category you last selected.
Arrow through the results list and the Description pane updates for each one: its category and subgroup, its official name, its keywords, any legacy typed alias, and a real one-to-two-sentence description of what it actually looks like — colors, shapes, expression, pose — not just a restatement of its name. Press Insert, or press Enter directly on a result, to write the emoji at your cursor and close the dialog; Cancel or Escape closes without inserting anything.
Favorites and Recent. Two more entries sit above the nine Unicode categories in the category list:
- Favorites lists emoji you’ve starred. Select any emoji, anywhere — a category, a search result, Recent — and press Add to Favorites (the button relabels to Remove from Favorites once it is one) to add or remove it.
- Recent fills itself in automatically with the last 30 emoji you’ve actually inserted, most-recently-used first.
Removing an emoji from Favorites, or letting old entries age out of Recent, only changes what appears in those two shortcuts — it never removes the emoji from the picker itself. It’s still exactly as findable under its usual category or by search either way.
The catalog behind this — all 3,781 standard emoji, their categories,
keywords, legacy aliases, and descriptions — ships as a single bundled
file. Using the picker makes no network connection, in Safe Mode or
otherwise; the catalog was generated entirely offline ahead of time by
QUILL’s own maintainer tooling
(quill/tools/generate_emoji_catalog.py — see the PRD’s
Accessible Emoji Picker section for the full maintenance runbook).
The full catalog, grouped by category, is listed below for reference.
Smileys & Emotion (169)
| Emoji | Name | Description |
|---|---|---|
| 😀 | grinning face | A yellow face with a broad, open smile showing teeth, conveying happiness. |
| 😃 | grinning face with big eyes | A bright yellow face with a wide grin and large, round eyes, expressing excitement. |
| 😄 | grinning face with smiling eyes | A yellow face with a big smile and smiling eyes, radiating joy and cheerfulness. |
| 😁 | beaming face with smiling eyes | A yellow face with a beaming smile and closed eyes, suggesting overwhelming happiness. |
| 😆 | grinning squinting face | A yellow face with a wide grin and squinting eyes, indicating laughter or amusement. |
| 😅 | grinning face with sweat | A yellow face with a nervous grin and a bead of sweat on its forehead, showing relief or awkwardness. |
| 🤣 | rolling on the floor laughing | A yellow face rolling on the floor with laughter, tears streaming from its eyes, indicating extreme amusement. |
| 😂 | face with tears of joy | A yellow face laughing with tears of joy, showcasing a mix of happiness and hilarity. |
| 🙂 | slightly smiling face | A yellow face with a slight smile, expressing mild happiness or contentment. |
| 🙃 | upside-down face | A yellow face turned upside down, featuring a playful smile that suggests silliness. |
| 🫠 | melting face | A yellow face with a melting appearance, conveying embarrassment or discomfort. |
| 😉 | winking face | A yellow face with a wink and a playful smile, suggesting flirtation or teasing. |
| 😊 | smiling face with smiling eyes | A yellow face with rosy cheeks and a gentle smile, radiating warmth and satisfaction. |
| 😇 | smiling face with halo | A yellow face with a halo above its head and a sweet smile, representing innocence or angelic qualities. |
| 🥰 | smiling face with hearts | A yellow face surrounded by hearts, conveying love and affection. |
| 😍 | smiling face with heart-eyes | A yellow face with heart-shaped eyes, expressing deep admiration or love. |
| 🤩 | star-struck | A yellow face with wide eyes and a big smile, showing excitement and awe. |
| 😘 | face blowing a kiss | A yellow face puckering its lips as if blowing a kiss, suggesting affection. |
| 😗 | kissing face | A yellow face with closed lips, giving a soft kiss, indicating love or flirtation. |
| ☺️ | smiling face | A yellow face with a gentle smile, radiating warmth and happiness. |
| 😚 | kissing face with closed eyes | A yellow face with closed eyes and a kissy face, conveying affection and sweetness. |
| 😙 | kissing face with smiling eyes | A yellow face with smiling eyes and puckered lips, suggesting a loving kiss. |
| 🥲 | smiling face with tear | A yellow face with a small smile and a single tear, expressing bittersweet joy or gratitude. |
| 😋 | face savoring food | A yellow face with a wide grin and a tongue sticking out, indicating enjoyment of food. |
| 😛 | face with tongue | A yellow face with its tongue sticking out and a playful smile, suggesting fun or mischief. |
| 😜 | winking face with tongue | A yellow face with one eye closed and its tongue sticking out, conveying cheekiness or humor. |
| 🤪 | zany face | A yellow face with bulging eyes and a goofy smile, indicating silliness or craziness. |
| 😝 | squinting face with tongue | A yellow face squinting with its tongue out, suggesting playful teasing or silliness. |
| 🤑 | money-mouth face | A yellow face with dollar signs for eyes and a wide, greedy smile, indicating a love for money. |
| 🤗 | smiling face with open hands | A yellow face with open hands, smiling warmly as if inviting a hug. |
| 🤭 | face with hand over mouth | A yellow face with a hand covering its mouth, suggesting a giggle or a secret. |
| 🫢 | face with open eyes and hand over mouth | A yellow face with wide eyes and a hand over its mouth, showing shock or surprise. |
| 🫣 | face with peeking eye | A yellow face peeking from behind its hand, indicating shyness or embarrassment. |
| 🤫 | shushing face | A yellow face with a finger to its lips, signaling to be quiet or keep a secret. |
| 🤔 | thinking face | A yellow face with a hand on its chin, deep in thought or contemplation. |
| 🫡 | saluting face | A yellow face with a slight smile and a hand raised in a salute, showing respect. |
| 🤐 | zipper-mouth face | A yellow face with a zipper for a mouth, indicating silence or keeping a secret. |
| 🤨 | face with raised eyebrow | A yellow face with a raised eyebrow and a skeptical expression, suggesting doubt. |
| 😐 | neutral face | A yellow face with a straight mouth and neutral expression, indicating indifference. |
| 😑 | expressionless face | A yellow face with a flat expression and closed eyes, conveying boredom or annoyance. |
| 😶 | face without mouth | A neutral face with a round, pale yellow head and no mouth, conveying a blank or expressionless demeanor. |
| 🫥 | dotted line face | A face with a dotted outline, appearing as if it’s fading away, with a neutral expression that suggests hiding or being withdrawn. |
| 😶🌫️ | face in clouds | A pale yellow face partially obscured by fluffy white clouds, giving a dreamy or hazy appearance. |
| 😏 | smirking face | A face with a sly smirk, featuring raised eyebrows and a mischievous glint in its eyes, suggesting confidence or flirtation. |
| 😒 | unamused face | A face with a flat expression, downturned mouth, and narrowed eyes, indicating boredom or discontent. |
| 🙄 | face with rolling eyes | A face with rolling eyes, showing annoyance or disbelief, with a slight frown and raised eyebrows. |
| 😬 | grimacing face | A face with clenched teeth and a nervous smile, conveying awkwardness or discomfort. |
| 😮💨 | face exhaling | A face with puffed cheeks and an exhaling expression, suggesting relief or exhaustion, often depicted with a light blue or gray tone. |
| 🤥 | lying face | A face with a long nose, representing a liar, featuring a slight smirk and closed eyes. |
| 🫨 | shaking face | A face that appears to be shaking, with wide eyes and an open mouth, indicating panic or surprise. |
| 🙂↔︎️ | head shaking horizontally | A face with a gentle smile, depicted shaking its head horizontally, suggesting disagreement or uncertainty. |
| 🙂↕️ | head shaking vertically | A face with a gentle smile, depicted shaking its head vertically, suggesting contemplation or indecision. |
| 😌 | relieved face | A serene face with closed eyes and a soft smile, conveying a sense of calm and relief. |
| 😔 | pensive face | A face with downturned eyes and a frown, showing feelings of sadness or disappointment. |
| 😪 | sleepy face | A tired face with droopy eyes and a slight frown, suggesting sleepiness or fatigue. |
| 🤤 | drooling face | A face with drool dripping from the mouth, indicating extreme desire or hunger. |
| 😴 | sleeping face | A face with closed eyes and a peaceful expression, often depicted with a slight smile, representing sleep. |
| | face with bags under eyes | A tired face with dark circles under its eyes, indicating exhaustion or fatigue. |
| 😷 | face with medical mask | A face wearing a medical mask, with wide eyes showing concern or illness. |
| 🤒 | face with thermometer | A face with a thermometer in its mouth, looking ill, with flushed cheeks and a frown. |
| 🤕 | face with head-bandage | A face with a bandage wrapped around its head, showing signs of injury or pain. |
| 🤢 | nauseated face | A face with a greenish tint and a disgusted expression, indicating nausea or sickness. |
| 🤮 | face vomiting | A face with a pained expression and vomit coming from its mouth, representing extreme disgust or illness. |
| 🤧 | sneezing face | A face with a tissue held to its nose, showing signs of sneezing or illness. |
| 🥵 | hot face | A flushed face with sweat beads, indicating extreme heat or discomfort. |
| 🥶 | cold face | A blue face with shivering features, suggesting extreme cold or freezing conditions. |
| 🥴 | woozy face | A face with droopy eyes and a lopsided grin, indicating dizziness or intoxication. |
| 😵 | face with crossed-out eyes | A face with crossed-out eyes and a dazed expression, suggesting confusion or being overwhelmed. |
| 😵💫 | face with spiral eyes | A face with spiral eyes, indicating dizziness or confusion, often with a shocked expression. |
| 🤯 | exploding head | A face with an exploding head, conveying a mind-blown reaction to surprising information. |
| 🤠 | cowboy hat face | A cheerful face wearing a cowboy hat, suggesting a fun and adventurous spirit. |
| 🥳 | partying face | A joyful face wearing a party hat, with wide eyes and a big smile, celebrating a festive occasion. |
| 🥸 | disguised face | A face in disguise, featuring glasses, a moustache, and raised eyebrows, suggesting incognito status. |
| 😎 | smiling face with sunglasses | A smiling face wearing dark sunglasses, exuding a cool and relaxed vibe. |
| 🤓 | nerd face | A face with thick glasses and a big smile, suggesting intelligence or nerdiness. |
| 🧐 | face with monocle | A face with a monocle and raised eyebrow, conveying curiosity or sophistication. |
| 😕 | confused face | A face with a furrowed brow and a confused expression, indicating uncertainty. |
| 🫤 | face with diagonal mouth | A face with a diagonal mouth and a skeptical look, suggesting doubt or disappointment. |
| 😟 | worried face | A worried face with furrowed brows and downturned mouth, conveying anxiety or concern. |
| 🙁 | slightly frowning face | A slightly frowning face with a sad expression, indicating mild disappointment or concern. |
| ☹️ | frowning face | A yellow face with downturned mouth and furrowed eyebrows, expressing sadness or disappointment. |
| 😮 | face with open mouth | A yellow face with wide eyes and an open mouth, conveying shock or surprise. |
| 😯 | hushed face | A yellow face with raised eyebrows and a hushed expression, indicating astonishment or being stunned. |
| 😲 | astonished face | A yellow face with wide eyes and an open mouth, showing a look of astonishment or shock. |
| 😳 | flushed face | A yellow face with flushed cheeks and wide eyes, appearing embarrassed or flustered. |
| 🥺 | pleading face | A yellow face with large, pleading eyes and a slight frown, expressing a desire for compassion or mercy. |
| 🥹 | face holding back tears | A yellow face with teary eyes and a quivering mouth, indicating an emotional struggle to hold back tears. |
| 😦 | frowning face with open mouth | A yellow face with a frown and an open mouth, expressing shock or concern. |
| 😧 | anguished face | A yellow face with wide eyes and a frown, showing anguish or distress. |
| 😨 | fearful face | A yellow face with wide eyes and a fearful expression, indicating anxiety or fear. |
| 😰 | anxious face with sweat | A yellow face with a worried expression and sweat droplets on its forehead, showing anxiety or fear. |
| 😥 | sad but relieved face | A yellow face with a slight frown and a tear, conveying sadness mixed with relief. |
| 😢 | crying face | A yellow face with tears streaming down its cheeks, expressing deep sadness or sorrow. |
| 😭 | loudly crying face | A yellow face with tears flowing freely and an open mouth, indicating loud crying or distress. |
| 😱 | face screaming in fear | A yellow face with wide eyes and an open mouth, screaming in fear or horror. |
| 😖 | confounded face | A yellow face with furrowed brows and a grimace, expressing confusion or frustration. |
| 😣 | persevering face | A yellow face with clenched teeth and a furrowed brow, indicating perseverance through difficulty. |
| 😞 | disappointed face | A yellow face with downturned eyes and a frown, expressing disappointment or sadness. |
| 😓 | downcast face with sweat | A yellow face with a downcast expression and sweat droplets, indicating stress or anxiety. |
| 😩 | weary face | A yellow face with closed eyes and a frown, showing weariness or frustration. |
| 😫 | tired face | A yellow face with closed eyes and a distressed expression, conveying tiredness or exhaustion. |
| 🥱 | yawning face | A yellow face with closed eyes and a wide open mouth in a yawn, indicating boredom or sleepiness. |
| 😤 | face with steam from nose | A yellow face with narrowed eyes and steam coming from its nose, expressing anger or frustration. |
| 😡 | enraged face | A red face with furrowed brows and a frown, indicating intense anger. |
| 😠 | angry face | A yellow face with a frown and narrowed eyes, expressing anger or frustration. |
| 🤬 | face with symbols on mouth | A yellow face with angry eyebrows and symbols covering its mouth, indicating cursing or strong discontent. |
| 😈 | smiling face with horns | A purple face with a mischievous grin and two pointed horns, representing a devilish character. |
| 👿 | angry face with horns | A red face with a frown and two pointed horns, conveying an angry or devilish demeanor. |
| 💀 | skull | A white skull with empty eye sockets and a toothy grin, representing death or danger. |
| ☠️ | skull and crossbones | A skull and crossbones symbol, representing danger or poison. |
| 💩 | pile of poo | A brown pile shaped like a swirl, with a smiling face, representing humor or silliness. |
| 🤡 | clown face | A clown face with a big red nose, colorful hair, and a wide smile, representing fun or silliness. |
| 👹 | ogre | A green ogre face with sharp teeth and a fierce expression, representing a mythical creature. |
| 👺 | goblin | A red goblin face with a scowl and pointed ears, representing anger or mischief. |
| 👻 | ghost | A white ghost with a floating appearance and a playful expression, representing spookiness. |
| 👽 | alien | A green alien face with large black eyes and a small mouth, representing extraterrestrial life. |
| 👾 | alien monster | A pixelated alien monster with a blocky shape and a playful expression, representing video game culture. |
| 🤖 | robot | A gray robot face with a flat mouth and two eyes, representing technology or artificial intelligence. |
| 😺 | grinning cat | A yellow cat face with a broad grin and open mouth, showing happiness or playfulness. |
| 😸 | grinning cat with smiling eyes | A yellow cat face with a wide grin and smiling eyes, conveying joy or contentment. |
| 😹 | cat with tears of joy | A gray cat with a wide, open-mouthed smile, squinting eyes, and tears of joy streaming down its face. |
| 😻 | smiling cat with heart-eyes | A gray cat with large, heart-shaped eyes and a big smile, radiating love and affection. |
| 😼 | cat with wry smile | A gray cat with a sly, wry smile and half-closed eyes, suggesting a mischievous or ironic expression. |
| 😽 | kissing cat | A gray cat with closed eyes and puckered lips, as if blowing a kiss, conveying affection. |
| 🙀 | weary cat | A gray cat with wide eyes and raised eyebrows, expressing surprise or weariness, as if shocked. |
| 😿 | crying cat | A gray cat with a sad expression, large teardrops falling from its eyes, indicating distress or sorrow. |
| 😾 | pouting cat | A gray cat with a frown and narrowed eyes, looking displeased or pouting. |
| 🙈 | see-no-evil monkey | A monkey face with a neutral expression covering its eyes with both hands, symbolizing the act of not looking. |
| 🙉 | hear-no-evil monkey | A monkey face with a neutral expression covering its ears with both hands, symbolizing the act of not hearing. |
| 🙊 | speak-no-evil monkey | A monkey face with a neutral expression covering its mouth with both hands, symbolizing the act of not speaking. |
| 💌 | love letter | An envelope with a heart on it, colored pink, representing a love letter. |
| 💘 | heart with arrow | A red heart pierced by a golden arrow, symbolizing love and affection. |
| 💝 | heart with ribbon | A red heart wrapped in a pink ribbon, suggesting a gift of love. |
| 💖 | sparkling heart | A bright pink heart with sparkling accents, conveying excitement and affection. |
| 💗 | growing heart | A pink heart that appears to be growing larger, symbolizing expanding love. |
| 💓 | beating heart | A red heart with a rhythmic pulse effect, representing a beating heart. |
| 💞 | revolving hearts | Two pink hearts revolving around each other, symbolizing mutual love and affection. |
| 💕 | two hearts | Two pink hearts side by side, representing love and romance. |
| 💟 | heart decoration | A decorative heart in purple, symbolizing love and affection. |
| ❣️ | heart exclamation | A bold red heart with an exclamation mark, emphasizing strong feelings of love. |
| 💔 | broken heart | A red heart that is split in two, symbolizing heartbreak and sadness. |
| ❤️🔥 | heart on fire | A red heart engulfed in flames, symbolizing passionate love or intense emotions. |
| ❤️🩹 | mending heart | A red heart with a bandage wrapped around it, symbolizing healing from emotional pain. |
| ❤️ | red heart | A classic red heart, representing love and affection. |
| 🩷 | pink heart | A soft pink heart, symbolizing cuteness and affection. |
| 🧡 | orange heart | An orange heart, representing warmth and friendship. |
| 💛 | yellow heart | A bright yellow heart, symbolizing happiness and friendship. |
| 💚 | green heart | A green heart, representing nature, growth, and harmony. |
| 💙 | blue heart | A blue heart, symbolizing calmness and trust. |
| 🩵 | light blue heart | A light blue heart, representing serenity and tranquility. |
| 💜 | purple heart | A purple heart, symbolizing compassion and love. |
| 🤎 | brown heart | A brown heart, representing stability and support. |
| 🖤 | black heart | A black heart, often associated with darkness or a rebellious attitude. |
| 🩶 | grey heart | A gray heart, symbolizing neutrality or balance in emotions. |
| 🤍 | white heart | A white heart, representing purity and innocence. |
| 💋 | kiss mark | A pair of lips with a bright red kiss mark, symbolizing affection and romance. |
| 💯 | hundred points | A bold red ‘100’ symbol, often used to signify perfection or agreement. |
| 💢 | anger symbol | A comic-style symbol of anger, resembling a jagged explosion. |
| 💥 | collision | A bright explosion graphic, symbolizing a collision or impact. |
| 💫 | dizzy | A swirling star with sparkling effects, suggesting dizziness or a magical feeling. |
| 💦 | sweat droplets | Two blue droplets, resembling sweat, are depicted, with a slight shine to suggest moisture. |
| 💨 | dashing away | A white cloud shape with a tail, suggesting movement, appears as if it’s dashing away quickly. |
| 🕳️ | hole | A simple black circle, representing a hole, with a flat bottom and no additional features. |
| 💬 | speech balloon | A rounded speech balloon with a pointed tail, typically in a light blue color, indicating dialogue or a message. |
| 👁️🗨️ | eye in speech bubble | An eye is set inside a speech bubble, combining the elements of observation and conversation. |
| 🗨️ | left speech bubble | A left-facing speech bubble with a pointed tail, usually in a light color, indicating dialogue. |
| 🗯️ | right anger bubble | A jagged speech bubble with a pointed tail, suggesting anger or strong emotion, typically in a light color. |
| 💭 | thought balloon | A cloud-like thought balloon, often in white or light blue, with small bubbles indicating daydreaming or contemplation. |
| 💤 | ZZZ | Three Z’s stacked vertically, in a light blue or white color, representing sleep or snoring. |
People & Body (2261)
| Emoji | Name | Description |
|---|---|---|
| 👋 | waving hand | A hand with fingers spread open, palm facing forward, in a neutral skin tone, suggesting a wave or greeting. |
| 👋🏻 | waving hand: light skin tone | A hand with fingers spread open, palm facing forward, in a light skin tone. |
| 👋🏼 | waving hand: medium-light skin tone | A hand with fingers spread open, palm facing forward, in a medium-light skin tone. |
| 👋🏽 | waving hand: medium skin tone | A hand with fingers spread open, palm facing forward, in a medium skin tone. |
| 👋🏾 | waving hand: medium-dark skin tone | A hand with fingers spread open, palm facing forward, in a medium-dark skin tone. |
| 👋🏿 | waving hand: dark skin tone | A hand with fingers spread open, palm facing forward, in a dark skin tone. |
| 🤚 | raised back of hand | The back of a hand is raised with fingers extended, palm facing away, indicating a stop gesture. |
| 🤚🏻 | raised back of hand: light skin tone | The back of a hand raised with fingers extended, in a light skin tone. |
| 🤚🏼 | raised back of hand: medium-light skin tone | The back of a hand raised with fingers extended, in a medium-light skin tone. |
| 🤚🏽 | raised back of hand: medium skin tone | The back of a hand raised with fingers extended, in a medium skin tone. |
| 🤚🏾 | raised back of hand: medium-dark skin tone | The back of a hand raised with fingers extended, in a medium-dark skin tone. |
| 🤚🏿 | raised back of hand: dark skin tone | The back of a hand raised with fingers extended, in a dark skin tone. |
| 🖐️ | hand with fingers splayed | A hand with fingers splayed wide open, palm facing forward, suggesting a greeting or stop gesture. |
| 🖐🏻 | hand with fingers splayed: light skin tone | A hand with fingers splayed wide open, palm facing forward, in a light skin tone. |
| 🖐🏼 | hand with fingers splayed: medium-light skin tone | A hand with fingers splayed wide open, palm facing forward, in a medium-light skin tone. |
| 🖐🏽 | hand with fingers splayed: medium skin tone | A hand with fingers splayed wide open, palm facing forward, in a medium skin tone. |
| 🖐🏾 | hand with fingers splayed: medium-dark skin tone | A hand with fingers splayed wide open, palm facing forward, in a medium-dark skin tone. |
| 🖐🏿 | hand with fingers splayed: dark skin tone | A hand with fingers splayed wide open, palm facing forward, in a dark skin tone. |
| ✋ | raised hand | A hand raised with fingers extended, palm facing forward, often used to indicate stop or high five. |
| ✋🏻 | raised hand: light skin tone | A raised hand with fingers extended, in a light skin tone. |
| ✋🏼 | raised hand: medium-light skin tone | A raised hand with fingers extended, in a medium-light skin tone. |
| ✋🏽 | raised hand: medium skin tone | A raised hand with fingers extended, in a medium skin tone. |
| ✋🏾 | raised hand: medium-dark skin tone | A raised hand with fingers extended, in a medium-dark skin tone. |
| ✋🏿 | raised hand: dark skin tone | A raised hand with fingers extended, in a dark skin tone. |
| 🖖 | vulcan salute | A hand making the Vulcan salute, with the palm facing forward and fingers split between the middle and ring fingers. |
| 🖖🏻 | vulcan salute: light skin tone | A hand making the Vulcan salute, in a light skin tone. |
| 🖖🏼 | vulcan salute: medium-light skin tone | A hand making the Vulcan salute, in a medium-light skin tone. |
| 🖖🏽 | vulcan salute: medium skin tone | A hand making the Vulcan salute, in a medium skin tone. |
| 🖖🏾 | vulcan salute: medium-dark skin tone | A hand making the Vulcan salute, in a medium-dark skin tone. |
| 🖖🏿 | vulcan salute: dark skin tone | A hand making the Vulcan salute, in a dark skin tone. |
| 🫱 | rightwards hand | A hand reaching out to the right, with fingers extended and palm facing up, suggesting an offering or handshake. |
| 🫱🏻 | rightwards hand: light skin tone | A right hand with fingers extended and palm facing right, depicted in a light skin tone. |
| 🫱🏼 | rightwards hand: medium-light skin tone | A right hand with fingers extended and palm facing right, depicted in a medium-light skin tone. |
| 🫱🏽 | rightwards hand: medium skin tone | A right hand with fingers extended and palm facing right, depicted in a medium skin tone. |
| 🫱🏾 | rightwards hand: medium-dark skin tone | A right hand with fingers extended and palm facing right, depicted in a medium-dark skin tone. |
| 🫱🏿 | rightwards hand: dark skin tone | A right hand with fingers extended and palm facing right, depicted in a dark skin tone. |
| 🫲 | leftwards hand | A left hand with fingers extended and palm facing left. |
| 🫲🏻 | leftwards hand: light skin tone | A left hand with fingers extended and palm facing left, depicted in a light skin tone. |
| 🫲🏼 | leftwards hand: medium-light skin tone | A left hand with fingers extended and palm facing left, depicted in a medium-light skin tone. |
| 🫲🏽 | leftwards hand: medium skin tone | A left hand with fingers extended and palm facing left, depicted in a medium skin tone. |
| 🫲🏾 | leftwards hand: medium-dark skin tone | A left hand with fingers extended and palm facing left, depicted in a medium-dark skin tone. |
| 🫲🏿 | leftwards hand: dark skin tone | A left hand with fingers extended and palm facing left, depicted in a dark skin tone. |
| 🫳 | palm down hand | A hand with palm facing down and fingers extended, suggesting a dismissive gesture. |
| 🫳🏻 | palm down hand: light skin tone | A hand with palm facing down and fingers extended, depicted in a light skin tone. |
| 🫳🏼 | palm down hand: medium-light skin tone | A hand with palm facing down and fingers extended, depicted in a medium-light skin tone. |
| 🫳🏽 | palm down hand: medium skin tone | A hand with palm facing down and fingers extended, depicted in a medium skin tone. |
| 🫳🏾 | palm down hand: medium-dark skin tone | A hand with palm facing down and fingers extended, depicted in a medium-dark skin tone. |
| 🫳🏿 | palm down hand: dark skin tone | A hand with palm facing down and fingers extended, depicted in a dark skin tone. |
| 🫴 | palm up hand | A hand with palm facing up and fingers extended, suggesting an inviting gesture. |
| 🫴🏻 | palm up hand: light skin tone | A hand with palm facing up and fingers extended, depicted in a light skin tone. |
| 🫴🏼 | palm up hand: medium-light skin tone | A hand with palm facing up and fingers extended, depicted in a medium-light skin tone. |
| 🫴🏽 | palm up hand: medium skin tone | A hand with palm facing up and fingers extended, depicted in a medium skin tone. |
| 🫴🏾 | palm up hand: medium-dark skin tone | A hand with palm facing up and fingers extended, depicted in a medium-dark skin tone. |
| 🫴🏿 | palm up hand: dark skin tone | A hand with palm facing up and fingers extended, depicted in a dark skin tone. |
| 🫷 | leftwards pushing hand | A hand with fingers extended and palm facing left, as if pushing something away. |
| 🫷🏻 | leftwards pushing hand: light skin tone | A hand with fingers extended and palm facing left, depicted in a light skin tone. |
| 🫷🏼 | leftwards pushing hand: medium-light skin tone | A hand with fingers extended and palm facing left, depicted in a medium-light skin tone. |
| 🫷🏽 | leftwards pushing hand: medium skin tone | A hand with fingers extended and palm facing left, depicted in a medium skin tone. |
| 🫷🏾 | leftwards pushing hand: medium-dark skin tone | A hand with fingers extended and palm facing left, depicted in a medium-dark skin tone. |
| 🫷🏿 | leftwards pushing hand: dark skin tone | A hand with fingers extended and palm facing left, depicted in a dark skin tone. |
| 🫸 | rightwards pushing hand | A hand with fingers extended and palm facing right, as if pushing something away. |
| 🫸🏻 | rightwards pushing hand: light skin tone | A hand with fingers extended and palm facing right, depicted in a light skin tone. |
| 🫸🏼 | rightwards pushing hand: medium-light skin tone | A hand with fingers extended and palm facing right, depicted in a medium-light skin tone. |
| 🫸🏽 | rightwards pushing hand: medium skin tone | A hand with fingers extended and palm facing right, depicted in a medium skin tone. |
| 🫸🏾 | rightwards pushing hand: medium-dark skin tone | A hand with fingers extended and palm facing right, depicted in a medium-dark skin tone. |
| 🫸🏿 | rightwards pushing hand: dark skin tone | A hand with fingers extended and palm facing right, depicted in a dark skin tone. |
| 👌 | OK hand | A hand forming an ‘OK’ gesture with the thumb and index finger touching, while the other fingers are extended. |
| 👌🏻 | OK hand: light skin tone | A hand forming an ‘OK’ gesture with the thumb and index finger touching, depicted in a light skin tone. |
| 👌🏼 | OK hand: medium-light skin tone | A hand forming an ‘OK’ gesture with the thumb and index finger touching, depicted in a medium-light skin tone. |
| 👌🏽 | OK hand: medium skin tone | A hand forming an ‘OK’ gesture with the thumb and index finger touching, depicted in a medium skin tone. |
| 👌🏾 | OK hand: medium-dark skin tone | A hand forming an ‘OK’ gesture with the thumb and index finger touching, depicted in a medium-dark skin tone. |
| 👌🏿 | OK hand: dark skin tone | A hand making an ‘OK’ gesture, with a dark skin tone, fingers curved and thumb touching the index finger. |
| 🤌 | pinched fingers | A hand with fingers pinched together, palm facing up, suggesting a questioning or emphasizing gesture. |
| 🤌🏻 | pinched fingers: light skin tone | A hand with fingers pinched together, palm facing up, featuring a light skin tone. |
| 🤌🏼 | pinched fingers: medium-light skin tone | A hand with fingers pinched together, palm facing up, with a medium-light skin tone. |
| 🤌🏽 | pinched fingers: medium skin tone | A hand with fingers pinched together, palm facing up, showing a medium skin tone. |
| 🤌🏾 | pinched fingers: medium-dark skin tone | A hand with fingers pinched together, palm facing up, displaying a medium-dark skin tone. |
| 🤌🏿 | pinched fingers: dark skin tone | A hand with fingers pinched together, palm facing up, characterized by a dark skin tone. |
| 🤏 | pinching hand | A hand with fingers slightly bent and pinching together, palm facing up, indicating a small amount. |
| 🤏🏻 | pinching hand: light skin tone | A hand with fingers slightly bent and pinching together, palm facing up, featuring a light skin tone. |
| 🤏🏼 | pinching hand: medium-light skin tone | A hand with fingers slightly bent and pinching together, palm facing up, with a medium-light skin tone. |
| 🤏🏽 | pinching hand: medium skin tone | A hand with fingers slightly bent and pinching together, palm facing up, showing a medium skin tone. |
| 🤏🏾 | pinching hand: medium-dark skin tone | A hand with fingers slightly bent and pinching together, palm facing up, displaying a medium-dark skin tone. |
| 🤏🏿 | pinching hand: dark skin tone | A hand with fingers slightly bent and pinching together, palm facing up, characterized by a dark skin tone. |
| ✌️ | victory hand | A hand with the index and middle fingers raised in a V shape, palm facing outward, symbolizing peace. |
| ✌🏻 | victory hand: light skin tone | A hand with the index and middle fingers raised in a V shape, palm facing outward, featuring a light skin tone. |
| ✌🏼 | victory hand: medium-light skin tone | A hand with the index and middle fingers raised in a V shape, palm facing outward, with a medium-light skin tone. |
| ✌🏽 | victory hand: medium skin tone | A hand with the index and middle fingers raised in a V shape, palm facing outward, showing a medium skin tone. |
| ✌🏾 | victory hand: medium-dark skin tone | A hand with the index and middle fingers raised in a V shape, palm facing outward, displaying a medium-dark skin tone. |
| ✌🏿 | victory hand: dark skin tone | A hand with the index and middle fingers raised in a V shape, palm facing outward, characterized by a dark skin tone. |
| 🤞 | crossed fingers | A hand with fingers crossed, palm facing up, symbolizing hope or luck. |
| 🤞🏻 | crossed fingers: light skin tone | A hand with fingers crossed, palm facing up, featuring a light skin tone. |
| 🤞🏼 | crossed fingers: medium-light skin tone | A hand with fingers crossed, palm facing up, with a medium-light skin tone. |
| 🤞🏽 | crossed fingers: medium skin tone | A hand with fingers crossed, palm facing up, showing a medium skin tone. |
| 🤞🏾 | crossed fingers: medium-dark skin tone | A hand with fingers crossed, palm facing up, displaying a medium-dark skin tone. |
| 🤞🏿 | crossed fingers: dark skin tone | A hand with fingers crossed, palm facing up, characterized by a dark skin tone. |
| 🫰 | hand with index finger and thumb crossed | A hand with the index finger and thumb crossed, palm facing up, often associated with a gesture of love or affection. |
| 🫰🏻 | hand with index finger and thumb crossed: light skin tone | A hand with the index finger and thumb crossed, palm facing up, featuring a light skin tone. |
| 🫰🏼 | hand with index finger and thumb crossed: medium-light skin tone | A hand with the index finger and thumb crossed, palm facing up, with a medium-light skin tone. |
| 🫰🏽 | hand with index finger and thumb crossed: medium skin tone | A hand with the index finger and thumb crossed, palm facing up, showing a medium skin tone. |
| 🫰🏾 | hand with index finger and thumb crossed: medium-dark skin tone | A hand with the index finger and thumb crossed, palm facing up, displaying a medium-dark skin tone. |
| 🫰🏿 | hand with index finger and thumb crossed: dark skin tone | A hand with the index finger and thumb crossed, palm facing up, characterized by a dark skin tone. |
| 🤟 | love-you gesture | A hand with the pinky and thumb extended while the other fingers are curled down, often used to express love. |
| 🤟🏻 | love-you gesture: light skin tone | A hand with the pinky and thumb extended while the other fingers are curled down, featuring a light skin tone. |
| 🤟🏼 | love-you gesture: medium-light skin tone | A hand with the pinky and thumb extended while the other fingers are curled down, with a medium-light skin tone. |
| 🤟🏽 | love-you gesture: medium skin tone | A hand with the pinky and thumb extended while the other fingers are curled down, showing a medium skin tone. |
| 🤟🏾 | love-you gesture: medium-dark skin tone | A hand with the pinky and thumb extended while the other fingers are curled down, displaying a medium-dark skin tone. |
| 🤟🏿 | love-you gesture: dark skin tone | A hand with the pinky and thumb extended while the other fingers are curled down, characterized by a dark skin tone. |
| 🤘 | sign of the horns | A hand with the pinky and index fingers raised while the other fingers are curled down, often associated with rock music. |
| 🤘🏻 | sign of the horns: light skin tone | A hand with the pinky and index fingers raised while the other fingers are curled down, featuring a light skin tone. |
| 🤘🏼 | sign of the horns: medium-light skin tone | A hand with the pinky and index fingers raised while the other fingers are curled down, with a medium-light skin tone. |
| 🤘🏽 | sign of the horns: medium skin tone | A hand with the pinky and index finger raised, forming the ‘sign of the horns’, with a medium skin tone. |
| 🤘🏾 | sign of the horns: medium-dark skin tone | A hand with the pinky and index finger raised, forming the ‘sign of the horns’, with a medium-dark skin tone. |
| 🤘🏿 | sign of the horns: dark skin tone | A hand with the pinky and index finger raised, forming the ‘sign of the horns’, with a dark skin tone. |
| 🤙 | call me hand | A hand with the thumb and pinky extended, resembling a gesture for ‘call me’, in a neutral skin tone. |
| 🤙🏻 | call me hand: light skin tone | A hand with the thumb and pinky extended, resembling a gesture for ‘call me’, with a light skin tone. |
| 🤙🏼 | call me hand: medium-light skin tone | A hand with the thumb and pinky extended, resembling a gesture for ‘call me’, with a medium-light skin tone. |
| 🤙🏽 | call me hand: medium skin tone | A hand with the thumb and pinky extended, resembling a gesture for ‘call me’, with a medium skin tone. |
| 🤙🏾 | call me hand: medium-dark skin tone | A hand with the thumb and pinky extended, resembling a gesture for ‘call me’, with a medium-dark skin tone. |
| 🤙🏿 | call me hand: dark skin tone | A hand with the thumb and pinky extended, resembling a gesture for ‘call me’, with a dark skin tone. |
| 👈 | backhand index pointing left | A hand with the back of the fingers facing outward, pointing to the left with the index finger extended. |
| 👈🏻 | backhand index pointing left: light skin tone | A hand with the back of the fingers facing outward, pointing to the left with the index finger extended, in a light skin tone. |
| 👈🏼 | backhand index pointing left: medium-light skin tone | A hand with the back of the fingers facing outward, pointing to the left with the index finger extended, in a medium-light skin tone. |
| 👈🏽 | backhand index pointing left: medium skin tone | A hand with the back of the fingers facing outward, pointing to the left with the index finger extended, in a medium skin tone. |
| 👈🏾 | backhand index pointing left: medium-dark skin tone | A hand with the back of the fingers facing outward, pointing to the left with the index finger extended, in a medium-dark skin tone. |
| 👈🏿 | backhand index pointing left: dark skin tone | A hand with the back of the fingers facing outward, pointing to the left with the index finger extended, in a dark skin tone. |
| 👉 | backhand index pointing right | A hand with the back of the fingers facing outward, pointing to the right with the index finger extended. |
| 👉🏻 | backhand index pointing right: light skin tone | A hand with the back of the fingers facing outward, pointing to the right with the index finger extended, in a light skin tone. |
| 👉🏼 | backhand index pointing right: medium-light skin tone | A hand with the back of the fingers facing outward, pointing to the right with the index finger extended, in a medium-light skin tone. |
| 👉🏽 | backhand index pointing right: medium skin tone | A hand with the back of the fingers facing outward, pointing to the right with the index finger extended, in a medium skin tone. |
| 👉🏾 | backhand index pointing right: medium-dark skin tone | A hand with the back of the fingers facing outward, pointing to the right with the index finger extended, in a medium-dark skin tone. |
| 👉🏿 | backhand index pointing right: dark skin tone | A hand with the back of the fingers facing outward, pointing to the right with the index finger extended, in a dark skin tone. |
| 👆 | backhand index pointing up | A hand with the back of the fingers facing outward, pointing upward with the index finger extended. |
| 👆🏻 | backhand index pointing up: light skin tone | A hand with the back of the fingers facing outward, pointing upward with the index finger extended, in a light skin tone. |
| 👆🏼 | backhand index pointing up: medium-light skin tone | A hand with the back of the fingers facing outward, pointing upward with the index finger extended, in a medium-light skin tone. |
| 👆🏽 | backhand index pointing up: medium skin tone | A hand with the back of the fingers facing outward, pointing upward with the index finger extended, in a medium skin tone. |
| 👆🏾 | backhand index pointing up: medium-dark skin tone | A hand with the back of the fingers facing outward, pointing upward with the index finger extended, in a medium-dark skin tone. |
| 👆🏿 | backhand index pointing up: dark skin tone | A hand with the back of the fingers facing outward, pointing upward with the index finger extended, in a dark skin tone. |
| 🖕 | middle finger | A hand with the middle finger raised, showing a gesture that is often considered rude. |
| 🖕🏻 | middle finger: light skin tone | A hand with the middle finger raised, showing a gesture that is often considered rude, in a light skin tone. |
| 🖕🏼 | middle finger: medium-light skin tone | A hand with the middle finger raised, showing a gesture that is often considered rude, in a medium-light skin tone. |
| 🖕🏽 | middle finger: medium skin tone | A hand with the middle finger raised, showing a gesture that is often considered rude, in a medium skin tone. |
| 🖕🏾 | middle finger: medium-dark skin tone | A hand with the middle finger raised, showing a gesture that is often considered rude, in a medium-dark skin tone. |
| 🖕🏿 | middle finger: dark skin tone | A hand with the middle finger raised, showing a gesture that is often considered rude, in a dark skin tone. |
| 👇 | backhand index pointing down | A hand with the back of the fingers facing outward, pointing downward with the index finger extended. |
| 👇🏻 | backhand index pointing down: light skin tone | A hand with the back of the fingers facing outward, pointing downward with the index finger extended, in a light skin tone. |
| 👇🏼 | backhand index pointing down: medium-light skin tone | A hand with the back of the fingers facing outward, pointing downward with the index finger extended, in a medium-light skin tone. |
| 👇🏽 | backhand index pointing down: medium skin tone | A hand with the back of the fingers facing outward, pointing downward with the index finger extended, in a medium skin tone. |
| 👇🏾 | backhand index pointing down: medium-dark skin tone | A hand with the back of the fingers facing outward, pointing downward with the index finger extended, in a medium-dark skin tone. |
| 👇🏿 | backhand index pointing down: dark skin tone | A hand with the back of the fingers facing outward, pointing downward with the index finger extended, in a dark skin tone. |
| ☝️ | index pointing up | A hand with the index finger raised and pointing upward, in a neutral skin tone. |
| ☝🏻 | index pointing up: light skin tone | A raised hand with the index finger pointing upwards, featuring a light skin tone. |
| ☝🏼 | index pointing up: medium-light skin tone | A raised hand with the index finger pointing upwards, showcasing a medium-light skin tone. |
| ☝🏽 | index pointing up: medium skin tone | A raised hand with the index finger pointing upwards, displaying a medium skin tone. |
| ☝🏾 | index pointing up: medium-dark skin tone | A raised hand with the index finger pointing upwards, representing a medium-dark skin tone. |
| ☝🏿 | index pointing up: dark skin tone | A raised hand with the index finger pointing upwards, characterized by a dark skin tone. |
| 🫵 | index pointing at the viewer | A hand with the index finger extended, pointing directly at the viewer. |
| 🫵🏻 | index pointing at the viewer: light skin tone | A hand with the index finger extended, pointing at the viewer, featuring a light skin tone. |
| 🫵🏼 | index pointing at the viewer: medium-light skin tone | A hand with the index finger extended, pointing at the viewer, showcasing a medium-light skin tone. |
| 🫵🏽 | index pointing at the viewer: medium skin tone | A hand with the index finger extended, pointing at the viewer, displaying a medium skin tone. |
| 🫵🏾 | index pointing at the viewer: medium-dark skin tone | A hand with the index finger extended, pointing at the viewer, representing a medium-dark skin tone. |
| 🫵🏿 | index pointing at the viewer: dark skin tone | A hand with the index finger extended, pointing at the viewer, characterized by a dark skin tone. |
| 👍 | thumbs up | A hand with fingers closed and the thumb raised, indicating approval or a positive gesture. |
| 👍🏻 | thumbs up: light skin tone | A hand with fingers closed and the thumb raised, indicating approval, featuring a light skin tone. |
| 👍🏼 | thumbs up: medium-light skin tone | A hand with fingers closed and the thumb raised, indicating approval, showcasing a medium-light skin tone. |
| 👍🏽 | thumbs up: medium skin tone | A hand with fingers closed and the thumb raised, indicating approval, displaying a medium skin tone. |
| 👍🏾 | thumbs up: medium-dark skin tone | A hand with fingers closed and the thumb raised, indicating approval, representing a medium-dark skin tone. |
| 👍🏿 | thumbs up: dark skin tone | A hand with fingers closed and the thumb raised, indicating approval, characterized by a dark skin tone. |
| 👎 | thumbs down | A hand with fingers closed and the thumb pointing downwards, indicating disapproval or a negative gesture. |
| 👎🏻 | thumbs down: light skin tone | A hand with fingers closed and the thumb pointing downwards, indicating disapproval, featuring a light skin tone. |
| 👎🏼 | thumbs down: medium-light skin tone | A hand with fingers closed and the thumb pointing downwards, indicating disapproval, showcasing a medium-light skin tone. |
| 👎🏽 | thumbs down: medium skin tone | A hand with fingers closed and the thumb pointing downwards, indicating disapproval, displaying a medium skin tone. |
| 👎🏾 | thumbs down: medium-dark skin tone | A hand with fingers closed and the thumb pointing downwards, indicating disapproval, representing a medium-dark skin tone. |
| 👎🏿 | thumbs down: dark skin tone | A hand with fingers closed and the thumb pointing downwards, indicating disapproval, characterized by a dark skin tone. |
| ✊ | raised fist | A clenched fist raised in solidarity or strength. |
| ✊🏻 | raised fist: light skin tone | A clenched fist raised in solidarity, featuring a light skin tone. |
| ✊🏼 | raised fist: medium-light skin tone | A clenched fist raised in solidarity, showcasing a medium-light skin tone. |
| ✊🏽 | raised fist: medium skin tone | A clenched fist raised in solidarity, displaying a medium skin tone. |
| ✊🏾 | raised fist: medium-dark skin tone | A clenched fist raised in solidarity, representing a medium-dark skin tone. |
| ✊🏿 | raised fist: dark skin tone | A clenched fist raised in solidarity, characterized by a dark skin tone. |
| 👊 | oncoming fist | A fist coming towards the viewer, often used to signify agreement or camaraderie. |
| 👊🏻 | oncoming fist: light skin tone | A fist coming towards the viewer, featuring a light skin tone. |
| 👊🏼 | oncoming fist: medium-light skin tone | A fist coming towards the viewer, showcasing a medium-light skin tone. |
| 👊🏽 | oncoming fist: medium skin tone | A fist coming towards the viewer, displaying a medium skin tone. |
| 👊🏾 | oncoming fist: medium-dark skin tone | A fist coming towards the viewer, representing a medium-dark skin tone. |
| 👊🏿 | oncoming fist: dark skin tone | A fist coming towards the viewer, characterized by a dark skin tone. |
| 🤛 | left-facing fist | A left-facing fist, often used to signify a punch or greeting. |
| 🤛🏻 | left-facing fist: light skin tone | A left-facing fist, featuring a light skin tone. |
| 🤛🏼 | left-facing fist: medium-light skin tone | A left-facing fist, showcasing a medium-light skin tone. |
| 🤛🏽 | left-facing fist: medium skin tone | A left-facing fist, displaying a medium skin tone. |
| 🤛🏾 | left-facing fist: medium-dark skin tone | A left-facing fist, representing a medium-dark skin tone. |
| 🤛🏿 | left-facing fist: dark skin tone | A left-facing fist with a dark skin tone, the fingers are tightly closed into a fist shape. |
| 🤜 | right-facing fist | A right-facing fist with fingers tightly closed, positioned to the right. |
| 🤜🏻 | right-facing fist: light skin tone | A right-facing fist with a light skin tone, fingers tightly closed and angled to the right. |
| 🤜🏼 | right-facing fist: medium-light skin tone | A right-facing fist with a medium-light skin tone, fingers closed and pointing right. |
| 🤜🏽 | right-facing fist: medium skin tone | A right-facing fist with a medium skin tone, fingers tightly closed and directed to the right. |
| 🤜🏾 | right-facing fist: medium-dark skin tone | A right-facing fist with a medium-dark skin tone, fingers closed and angled right. |
| 🤜🏿 | right-facing fist: dark skin tone | A right-facing fist with a dark skin tone, fingers tightly closed and pointing to the right. |
| 👏 | clapping hands | Two hands coming together in a clapping motion, indicating applause or approval. |
| 👏🏻 | clapping hands: light skin tone | Two hands clapping together with a light skin tone, symbolizing applause. |
| 👏🏼 | clapping hands: medium-light skin tone | Two hands clapping together with a medium-light skin tone, expressing applause. |
| 👏🏽 | clapping hands: medium skin tone | Two hands clapping together with a medium skin tone, indicating appreciation. |
| 👏🏾 | clapping hands: medium-dark skin tone | Two hands clapping together with a medium-dark skin tone, representing applause. |
| 👏🏿 | clapping hands: dark skin tone | Two hands clapping together with a dark skin tone, symbolizing approval. |
| 🙌 | raising hands | Two hands raised upwards, palms facing forward, expressing celebration or praise. |
| 🙌🏻 | raising hands: light skin tone | Two hands raised with a light skin tone, palms up, symbolizing celebration. |
| 🙌🏼 | raising hands: medium-light skin tone | Two hands raised with a medium-light skin tone, palms facing up in a celebratory gesture. |
| 🙌🏽 | raising hands: medium skin tone | Two hands raised with a medium skin tone, palms up, indicating joy or celebration. |
| 🙌🏾 | raising hands: medium-dark skin tone | Two hands raised with a medium-dark skin tone, palms facing up, expressing praise. |
| 🙌🏿 | raising hands: dark skin tone | Two hands raised with a dark skin tone, palms up, symbolizing celebration or joy. |
| 🫶 | heart hands | Two hands forming a heart shape, symbolizing love and affection. |
| 🫶🏻 | heart hands: light skin tone | Two hands forming a heart shape with a light skin tone, representing love. |
| 🫶🏼 | heart hands: medium-light skin tone | Two hands forming a heart shape with a medium-light skin tone, symbolizing affection. |
| 🫶🏽 | heart hands: medium skin tone | Two hands forming a heart with a medium skin tone, expressing love. |
| 🫶🏾 | heart hands: medium-dark skin tone | Two hands creating a heart shape with a medium-dark skin tone, representing love. |
| 🫶🏿 | heart hands: dark skin tone | Two hands forming a heart shape with a dark skin tone, symbolizing affection. |
| 👐 | open hands | Two open hands facing upwards, suggesting an invitation or a gesture of giving. |
| 👐🏻 | open hands: light skin tone | Two open hands facing up with a light skin tone, indicating an invitation. |
| 👐🏼 | open hands: medium-light skin tone | Two open hands facing upwards with a medium-light skin tone, suggesting a welcoming gesture. |
| 👐🏽 | open hands: medium skin tone | Two open hands facing up with a medium skin tone, symbolizing an invitation. |
| 👐🏾 | open hands: medium-dark skin tone | Two open hands facing upwards with a medium-dark skin tone, indicating a welcoming gesture. |
| 👐🏿 | open hands: dark skin tone | Two open hands facing up with a dark skin tone, suggesting an invitation or offering. |
| 🤲 | palms up together | Two hands with palms up together, cupped as if in prayer or asking for something. |
| 🤲🏻 | palms up together: light skin tone | Two cupped hands with a light skin tone, palms up, suggesting prayer or a request. |
| 🤲🏼 | palms up together: medium-light skin tone | Two palms up together with a medium-light skin tone, indicating a gesture of prayer. |
| 🤲🏽 | palms up together: medium skin tone | Two hands with palms up together, cupped and showing a medium skin tone. |
| 🤲🏾 | palms up together: medium-dark skin tone | Two hands with palms up together, cupped and displaying a medium-dark skin tone. |
| 🤲🏿 | palms up together: dark skin tone | Two hands with palms up together, cupped and showing a dark skin tone. |
| 🤝 | handshake | Two hands clasped in a handshake, symbolizing agreement or partnership. |
| 🤝🏻 | handshake: light skin tone | A handshake between two hands with a light skin tone, indicating agreement. |
| 🤝🏼 | handshake: medium-light skin tone | A handshake between two hands with a medium-light skin tone, representing a deal. |
| 🤝🏽 | handshake: medium skin tone | A handshake between two hands, one with a medium skin tone and the other with a similar medium skin tone, symbolizing agreement or partnership. |
| 🤝🏾 | handshake: medium-dark skin tone | A handshake between two hands, one with a medium-dark skin tone and the other with a matching medium-dark skin tone, representing cooperation. |
| 🤝🏿 | handshake: dark skin tone | A handshake between two hands, both with dark skin tones, conveying unity or collaboration. |
| 🫱🏻🫲🏼 | handshake: light skin tone, medium-light skin tone | A handshake gesture where one hand is light-skinned and the other is medium-light-skinned, indicating a friendly agreement. |
| 🫱🏻🫲🏽 | handshake: light skin tone, medium skin tone | A handshake gesture with one light-skinned hand and one medium-skinned hand, symbolizing connection. |
| 🫱🏻🫲🏾 | handshake: light skin tone, medium-dark skin tone | A handshake between a light-skinned hand and a medium-dark-skinned hand, representing partnership. |
| 🫱🏻🫲🏿 | handshake: light skin tone, dark skin tone | A handshake gesture featuring a light-skinned hand and a dark-skinned hand, indicating collaboration. |
| 🫱🏼🫲🏻 | handshake: medium-light skin tone, light skin tone | A handshake where one hand is medium-light-skinned and the other is light-skinned, symbolizing agreement. |
| 🫱🏼🫲🏽 | handshake: medium-light skin tone, medium skin tone | A handshake between a medium-light-skinned hand and a medium-skinned hand, representing unity. |
| 🫱🏼🫲🏾 | handshake: medium-light skin tone, medium-dark skin tone | A handshake gesture with one medium-light-skinned hand and one medium-dark-skinned hand, indicating cooperation. |
| 🫱🏼🫲🏿 | handshake: medium-light skin tone, dark skin tone | A handshake between a medium-light-skinned hand and a dark-skinned hand, symbolizing partnership. |
| 🫱🏽🫲🏻 | handshake: medium skin tone, light skin tone | A handshake where one hand is medium-skinned and the other is light-skinned, representing connection. |
| 🫱🏽🫲🏼 | handshake: medium skin tone, medium-light skin tone | A handshake between a medium-skinned hand and a medium-light-skinned hand, indicating collaboration. |
| 🫱🏽🫲🏾 | handshake: medium skin tone, medium-dark skin tone | A handshake gesture featuring a medium-skinned hand and a medium-dark-skinned hand, symbolizing agreement. |
| 🫱🏽🫲🏿 | handshake: medium skin tone, dark skin tone | A handshake between a medium-skinned hand and a dark-skinned hand, representing unity. |
| 🫱🏾🫲🏻 | handshake: medium-dark skin tone, light skin tone | A handshake where one hand is medium-dark-skinned and the other is light-skinned, indicating partnership. |
| 🫱🏾🫲🏼 | handshake: medium-dark skin tone, medium-light skin tone | A handshake between a medium-dark-skinned hand and a medium-light-skinned hand, symbolizing cooperation. |
| 🫱🏾🫲🏽 | handshake: medium-dark skin tone, medium skin tone | A handshake gesture featuring a medium-dark-skinned hand and a medium-skinned hand, representing connection. |
| 🫱🏾🫲🏿 | handshake: medium-dark skin tone, dark skin tone | A handshake between a medium-dark-skinned hand and a dark-skinned hand, indicating unity. |
| 🫱🏿🫲🏻 | handshake: dark skin tone, light skin tone | A handshake where one hand is dark-skinned and the other is light-skinned, symbolizing collaboration. |
| 🫱🏿🫲🏼 | handshake: dark skin tone, medium-light skin tone | A handshake between a dark-skinned hand and a medium-light-skinned hand, representing partnership. |
| 🫱🏿🫲🏽 | handshake: dark skin tone, medium skin tone | A handshake gesture featuring a dark-skinned hand and a medium-skinned hand, indicating agreement. |
| 🫱🏿🫲🏾 | handshake: dark skin tone, medium-dark skin tone | A handshake between a dark-skinned hand and a medium-dark-skinned hand, symbolizing unity. |
| 🙏 | folded hands | Two hands pressed together in a prayer or gratitude gesture, often used to express thanks or a request. |
| 🙏🏻 | folded hands: light skin tone | Two light-skinned hands pressed together in a prayer gesture, symbolizing appreciation. |
| 🙏🏼 | folded hands: medium-light skin tone | Two medium-light-skinned hands pressed together in a gesture of thanks or prayer. |
| 🙏🏽 | folded hands: medium skin tone | Two medium-skinned hands pressed together, representing gratitude or a plea. |
| 🙏🏾 | folded hands: medium-dark skin tone | Two medium-dark-skinned hands pressed together in a prayer gesture, indicating appreciation. |
| 🙏🏿 | folded hands: dark skin tone | Two dark-skinned hands pressed together, symbolizing a gesture of thanks or a request. |
| ✍️ | writing hand | A hand holding a pen, poised to write, symbolizing the act of writing or drawing. |
| ✍🏻 | writing hand: light skin tone | A light-skinned hand holding a pen, ready to write, representing the act of writing. |
| ✍🏼 | writing hand: medium-light skin tone | A medium-light-skinned hand gripping a pen, indicating the action of writing. |
| ✍🏽 | writing hand: medium skin tone | A medium-skinned hand holding a pen, symbolizing the act of writing or note-taking. |
| ✍🏾 | writing hand: medium-dark skin tone | A medium-dark-skinned hand grasping a pen, representing the action of writing. |
| ✍🏿 | writing hand: dark skin tone | A dark-skinned hand holding a pen, poised to write, indicating the act of writing. |
| 💅 | nail polish | A hand with a manicured nail, often depicted with a shiny polish, symbolizing beauty and self-care. |
| 💅🏻 | nail polish: light skin tone | A light-skinned hand with a neatly polished nail, representing beauty and grooming. |
| 💅🏼 | nail polish: medium-light skin tone | A medium-light-skinned hand with a manicured nail, indicating self-care and beauty. |
| 💅🏽 | nail polish: medium skin tone | A medium-skinned hand with a polished nail, symbolizing care and beauty. |
| 💅🏾 | nail polish: medium-dark skin tone | A medium-dark-skinned hand with a manicured nail, representing beauty and self-grooming. |
| 💅🏿 | nail polish: dark skin tone | A hand with a dark skin tone, showcasing a manicured nail painted in a vibrant color. |
| 🤳 | selfie | A hand holding a smartphone at arm’s length, angled as if taking a selfie, with a relaxed expression. |
| 🤳🏻 | selfie: light skin tone | A hand with a light skin tone holding a smartphone, positioned for a selfie, conveying a cheerful vibe. |
| 🤳🏼 | selfie: medium-light skin tone | A hand with a medium-light skin tone gripping a smartphone, angled for a selfie with a bright expression. |
| 🤳🏽 | selfie: medium skin tone | A hand with a medium skin tone holding a smartphone, positioned for a selfie, exuding a lively demeanor. |
| 🤳🏾 | selfie: medium-dark skin tone | A hand with a medium-dark skin tone grasping a smartphone, angled for a selfie, radiating a fun atmosphere. |
| 🤳🏿 | selfie: dark skin tone | A hand with a dark skin tone holding a smartphone, positioned to take a selfie, reflecting a joyful attitude. |
| 💪 | flexed biceps | A muscular arm flexing its bicep, showcasing strength with a confident posture. |
| 💪🏻 | flexed biceps: light skin tone | A flexed bicep with a light skin tone, indicating strength and fitness. |
| 💪🏼 | flexed biceps: medium-light skin tone | A flexed bicep with a medium-light skin tone, representing strength and determination. |
| 💪🏽 | flexed biceps: medium skin tone | A flexed bicep with a medium skin tone, showcasing power and athleticism. |
| 💪🏾 | flexed biceps: medium-dark skin tone | A flexed bicep with a medium-dark skin tone, symbolizing strength and resilience. |
| 💪🏿 | flexed biceps: dark skin tone | A flexed bicep with a dark skin tone, embodying strength and vigor. |
| 🦾 | mechanical arm | A mechanical arm, designed with metallic elements, representing a prosthetic limb. |
| 🦿 | mechanical leg | A mechanical leg, featuring a sleek design and metallic details, symbolizing a prosthetic limb. |
| 🦵 | leg | A bent leg, showing the knee and lower limb, depicted in a neutral position. |
| 🦵🏻 | leg: light skin tone | A bent leg with a light skin tone, showcasing the knee and lower limb. |
| 🦵🏼 | leg: medium-light skin tone | A bent leg with a medium-light skin tone, highlighting the knee and lower limb. |
| 🦵🏽 | leg: medium skin tone | A bent leg with a medium skin tone, displaying the knee and lower limb. |
| 🦵🏾 | leg: medium-dark skin tone | A bent leg with a medium-dark skin tone, emphasizing the knee and lower limb. |
| 🦵🏿 | leg: dark skin tone | A bent leg with a dark skin tone, illustrating the knee and lower limb. |
| 🦶 | foot | A foot, depicted from the side, showing the toes and ankle in a neutral position. |
| 🦶🏻 | foot: light skin tone | A foot with a light skin tone, showing the toes and ankle. |
| 🦶🏼 | foot: medium-light skin tone | A foot with a medium-light skin tone, displaying the toes and ankle. |
| 🦶🏽 | foot: medium skin tone | A foot with a medium skin tone, highlighting the toes and ankle. |
| 🦶🏾 | foot: medium-dark skin tone | A foot with a medium-dark skin tone, showcasing the toes and ankle. |
| 🦶🏿 | foot: dark skin tone | A foot with a dark skin tone, illustrating the toes and ankle. |
| 👂 | ear | An ear, depicted in a simple shape, representing the organ of hearing. |
| 👂🏻 | ear: light skin tone | An ear with a light skin tone, illustrating the organ of hearing. |
| 👂🏼 | ear: medium-light skin tone | An ear with a medium-light skin tone, representing the organ of hearing. |
| 👂🏽 | ear: medium skin tone | An ear with a medium skin tone, depicting the organ of hearing. |
| 👂🏾 | ear: medium-dark skin tone | An ear with a medium-dark skin tone, illustrating the organ of hearing. |
| 👂🏿 | ear: dark skin tone | An ear with a dark skin tone, representing the organ of hearing. |
| 🦻 | ear with hearing aid | An ear with a hearing aid, showing a device attached to assist with hearing. |
| 🦻🏻 | ear with hearing aid: light skin tone | An ear with a hearing aid, featuring a light skin tone. |
| 🦻🏼 | ear with hearing aid: medium-light skin tone | An ear with a hearing aid, showcasing a medium-light skin tone. |
| 🦻🏽 | ear with hearing aid: medium skin tone | An ear with a hearing aid, depicted with a medium skin tone. |
| 🦻🏾 | ear with hearing aid: medium-dark skin tone | An ear with a hearing aid, illustrating a medium-dark skin tone. |
| 🦻🏿 | ear with hearing aid: dark skin tone | An ear with a hearing aid, represented with a dark skin tone. |
| 👃 | nose | A nose, depicted in a simple shape, representing the organ of smell. |
| 👃🏻 | nose: light skin tone | A light skin tone nose, depicted in a simple, rounded shape. |
| 👃🏼 | nose: medium-light skin tone | A medium-light skin tone nose, featuring a rounded and smooth shape. |
| 👃🏽 | nose: medium skin tone | A medium skin tone nose, represented with a rounded shape. |
| 👃🏾 | nose: medium-dark skin tone | A medium-dark skin tone nose, shown in a rounded form. |
| 👃🏿 | nose: dark skin tone | A dark skin tone nose, illustrated in a rounded shape. |
| 🧠 | brain | A pinkish brain with a wrinkled surface, resembling the shape of a human brain. |
| 🫀 | anatomical heart | A realistic, red anatomical heart with visible veins and arteries, showing its complex structure. |
| 🫁 | lungs | Two light pink lungs, shaped like a pair of inflated sacs, connected by a trachea. |
| 🦷 | tooth | A single white tooth with a smooth surface and rounded edges. |
| 🦴 | bone | A white bone, shaped like a wishbone or a simplified skeletal bone, with rounded ends. |
| 👀 | eyes | A pair of large, cartoonish eyes with white sclera and dark pupils, conveying a sense of curiosity. |
| 👁️ | eye | A single eye with a white sclera and a dark pupil, representing a simple eye shape. |
| 👅 | tongue | A pink tongue, elongated and slightly curled at the edges, suggesting a playful or tasting expression. |
| 👄 | mouth | A pair of red lips, slightly parted, suggesting a smile or kiss. |
| 🫦 | biting lip | Lips with a slight bite, depicted in a soft pink color, suggesting a flirty or anxious expression. |
| 👶 | baby | A small, round-faced baby with a soft appearance, typically depicted with a neutral expression. |
| 👶🏻 | baby: light skin tone | A light skin tone baby, characterized by a round face and soft features. |
| 👶🏼 | baby: medium-light skin tone | A medium-light skin tone baby, featuring a round face and gentle features. |
| 👶🏽 | baby: medium skin tone | A medium skin tone baby, depicted with a round face and soft, delicate features. |
| 👶🏾 | baby: medium-dark skin tone | A medium-dark skin tone baby, illustrated with a round face and gentle expression. |
| 👶🏿 | baby: dark skin tone | A dark skin tone baby, characterized by a round face and soft features. |
| 🧒 | child | A young child with a bright-eyed expression, depicted with a round face and simple features. |
| 🧒🏻 | child: light skin tone | A light skin tone child, featuring a round face and bright eyes. |
| 🧒🏼 | child: medium-light skin tone | A medium-light skin tone child, illustrated with a round face and cheerful expression. |
| 🧒🏽 | child: medium skin tone | A medium skin tone child, characterized by a round face and bright-eyed look. |
| 🧒🏾 | child: medium-dark skin tone | A medium-dark skin tone child, depicted with a round face and lively expression. |
| 🧒🏿 | child: dark skin tone | A dark skin tone child, featuring a round face and bright-eyed appearance. |
| 👦 | boy | A young boy with a bright-eyed expression, depicted with a round face and simple features. |
| 👦🏻 | boy: light skin tone | A light skin tone boy, characterized by a round face and bright eyes. |
| 👦🏼 | boy: medium-light skin tone | A medium-light skin tone boy, illustrated with a round face and cheerful expression. |
| 👦🏽 | boy: medium skin tone | A medium skin tone boy, depicted with a round face and lively expression. |
| 👦🏾 | boy: medium-dark skin tone | A medium-dark skin tone boy, featuring a round face and bright-eyed look. |
| 👦🏿 | boy: dark skin tone | A dark skin tone boy, characterized by a round face and cheerful expression. |
| 👧 | girl | A young girl with a bright-eyed expression, depicted with a round face and simple features. |
| 👧🏻 | girl: light skin tone | A light skin tone girl, featuring a round face and bright eyes. |
| 👧🏼 | girl: medium-light skin tone | A medium-light skin tone girl, illustrated with a round face and cheerful expression. |
| 👧🏽 | girl: medium skin tone | A medium skin tone girl, depicted with a round face and lively expression. |
| 👧🏾 | girl: medium-dark skin tone | A medium-dark skin tone girl, characterized by a round face and bright-eyed look. |
| 👧🏿 | girl: dark skin tone | A dark skin tone girl, featuring a round face and cheerful expression. |
| 🧑 | person | An adult person with a neutral expression, depicted with a round face and simple features. |
| 🧑🏻 | person: light skin tone | A person with light skin tone, represented as a simple humanoid figure. |
| 🧑🏼 | person: medium-light skin tone | A person with medium-light skin tone, depicted as a basic humanoid figure. |
| 🧑🏽 | person: medium skin tone | A person with medium skin tone, shown as a standard humanoid figure. |
| 🧑🏾 | person: medium-dark skin tone | A person with medium-dark skin tone, illustrated as a typical humanoid figure. |
| 🧑🏿 | person: dark skin tone | A person with dark skin tone, represented as a generic humanoid figure. |
| 👱 | person: blond hair | A person with blond hair, depicted as a basic humanoid figure with a distinct yellow hairstyle. |
| 👱🏻 | person: light skin tone, blond hair | A person with light skin tone and blond hair, shown as a simple humanoid figure with a bright yellow hairstyle. |
| 👱🏼 | person: medium-light skin tone, blond hair | A person with medium-light skin tone and blond hair, illustrated as a standard humanoid figure with a light yellow hairstyle. |
| 👱🏽 | person: medium skin tone, blond hair | A person with medium skin tone and blond hair, depicted as a typical humanoid figure with a golden blond hairstyle. |
| 👱🏾 | person: medium-dark skin tone, blond hair | A person with medium-dark skin tone and blond hair, represented as a humanoid figure with a darker blond hairstyle. |
| 👱🏿 | person: dark skin tone, blond hair | A person with dark skin tone and blond hair, shown as a simple humanoid figure with a deep blond hairstyle. |
| 👨 | man | An adult male figure, depicted as a basic humanoid shape. |
| 👨🏻 | man: light skin tone | An adult male with light skin tone, represented as a humanoid figure. |
| 👨🏼 | man: medium-light skin tone | An adult male with medium-light skin tone, illustrated as a standard humanoid figure. |
| 👨🏽 | man: medium skin tone | An adult male with medium skin tone, shown as a typical humanoid figure. |
| 👨🏾 | man: medium-dark skin tone | An adult male with medium-dark skin tone, depicted as a basic humanoid figure. |
| 👨🏿 | man: dark skin tone | An adult male with dark skin tone, represented as a generic humanoid figure. |
| 🧔 | person: beard | A person with a beard, depicted as a humanoid figure with facial hair. |
| 🧔🏻 | person: light skin tone, beard | A person with light skin tone and a beard, shown as a humanoid figure with light facial hair. |
| 🧔🏼 | person: medium-light skin tone, beard | A person with medium-light skin tone and a beard, illustrated as a standard humanoid figure with light facial hair. |
| 🧔🏽 | person: medium skin tone, beard | A person with medium skin tone and a beard, depicted as a typical humanoid figure with medium facial hair. |
| 🧔🏾 | person: medium-dark skin tone, beard | A person with medium-dark skin tone and a beard, represented as a humanoid figure with darker facial hair. |
| 🧔🏿 | person: dark skin tone, beard | A person with dark skin tone and a beard, shown as a generic humanoid figure with dark facial hair. |
| 🧔♂️ | man: beard | A male figure with a beard, depicted as a humanoid shape with facial hair. |
| 🧔🏻♂️ | man: light skin tone, beard | A male with light skin tone and a beard, represented as a humanoid figure with light facial hair. |
| 🧔🏼♂️ | man: medium-light skin tone, beard | A male with medium-light skin tone and a beard, illustrated as a standard humanoid figure with light facial hair. |
| 🧔🏽♂️ | man: medium skin tone, beard | A male with medium skin tone and a beard, depicted as a typical humanoid figure with medium facial hair. |
| 🧔🏾♂️ | man: medium-dark skin tone, beard | A male with medium-dark skin tone and a beard, represented as a humanoid figure with darker facial hair. |
| 🧔🏿♂️ | man: dark skin tone, beard | A male with dark skin tone and a beard, shown as a generic humanoid figure with dark facial hair. |
| 🧔♀️ | woman: beard | A female figure with a beard, depicted as a humanoid shape with facial hair. |
| 🧔🏻♀️ | woman: light skin tone, beard | A female with light skin tone and a beard, represented as a humanoid figure with light facial hair. |
| 🧔🏼♀️ | woman: medium-light skin tone, beard | A female with medium-light skin tone and a beard, illustrated as a standard humanoid figure with light facial hair. |
| 🧔🏽♀️ | woman: medium skin tone, beard | A female with medium skin tone and a beard, depicted as a typical humanoid figure with medium facial hair. |
| 🧔🏾♀️ | woman: medium-dark skin tone, beard | A female with medium-dark skin tone and a beard, represented as a humanoid figure with darker facial hair. |
| 🧔🏿♀️ | woman: dark skin tone, beard | A female with dark skin tone and a beard, shown as a generic humanoid figure with dark facial hair. |
| 👨🦰 | man: red hair | A male figure with red hair, depicted as a basic humanoid shape. |
| 👨🏻🦰 | man: light skin tone, red hair | A male with light skin tone and red hair, represented as a humanoid figure. |
| 👨🏼🦰 | man: medium-light skin tone, red hair | A male with medium-light skin tone and red hair, illustrated as a standard humanoid figure. |
| 👨🏽🦰 | man: medium skin tone, red hair | A male with medium skin tone and red hair, shown as a typical humanoid figure. |
| 👨🏾🦰 | man: medium-dark skin tone, red hair | A male with medium-dark skin tone and red hair, depicted as a basic humanoid figure. |
| 👨🏿🦰 | man: dark skin tone, red hair | A man with dark skin and bright red curly hair, smiling gently. |
| 👨🦱 | man: curly hair | A man with curly hair, looking straight ahead with a neutral expression. |
| 👨🏻🦱 | man: light skin tone, curly hair | A man with light skin and curly hair, smiling softly. |
| 👨🏼🦱 | man: medium-light skin tone, curly hair | A man with medium-light skin and curly hair, wearing a calm expression. |
| 👨🏽🦱 | man: medium skin tone, curly hair | A man with medium skin tone and curly hair, looking confidently ahead. |
| 👨🏾🦱 | man: medium-dark skin tone, curly hair | A man with medium-dark skin and curly hair, smiling warmly. |
| 👨🏿🦱 | man: dark skin tone, curly hair | A man with dark skin and curly hair, appearing cheerful. |
| 👨🦳 | man: white hair | A man with white hair, looking wise and thoughtful. |
| 👨🏻🦳 | man: light skin tone, white hair | A man with light skin and white hair, smiling gently. |
| 👨🏼🦳 | man: medium-light skin tone, white hair | A man with medium-light skin and white hair, looking serene. |
| 👨🏽🦳 | man: medium skin tone, white hair | A man with medium skin tone and white hair, appearing calm. |
| 👨🏾🦳 | man: medium-dark skin tone, white hair | A man with medium-dark skin and white hair, smiling softly. |
| 👨🏿🦳 | man: dark skin tone, white hair | A man with dark skin and white hair, looking wise and friendly. |
| 👨🦲 | man: bald | A bald man with a neutral expression, looking straight ahead. |
| 👨🏻🦲 | man: light skin tone, bald | A light-skinned bald man, smiling gently. |
| 👨🏼🦲 | man: medium-light skin tone, bald | A medium-light skinned bald man, looking calm. |
| 👨🏽🦲 | man: medium skin tone, bald | A medium-skinned bald man, appearing confident. |
| 👨🏾🦲 | man: medium-dark skin tone, bald | A medium-dark skinned bald man, smiling warmly. |
| 👨🏿🦲 | man: dark skin tone, bald | A dark-skinned bald man, looking cheerful. |
| 👩 | woman | A woman with a neutral expression, looking straight ahead. |
| 👩🏻 | woman: light skin tone | A light-skinned woman, smiling softly. |
| 👩🏼 | woman: medium-light skin tone | A medium-light skinned woman, appearing calm. |
| 👩🏽 | woman: medium skin tone | A medium-skinned woman, looking confidently ahead. |
| 👩🏾 | woman: medium-dark skin tone | A medium-dark skinned woman, smiling warmly. |
| 👩🏿 | woman: dark skin tone | A dark-skinned woman, looking cheerful. |
| 👩🦰 | woman: red hair | A woman with bright red curly hair, smiling gently. |
| 👩🏻🦰 | woman: light skin tone, red hair | A light-skinned woman with red curly hair, looking cheerful. |
| 👩🏼🦰 | woman: medium-light skin tone, red hair | A medium-light skinned woman with red curly hair, appearing calm. |
| 👩🏽🦰 | woman: medium skin tone, red hair | A medium-skinned woman with red curly hair, smiling softly. |
| 👩🏾🦰 | woman: medium-dark skin tone, red hair | A medium-dark skinned woman with red curly hair, looking confidently ahead. |
| 👩🏿🦰 | woman: dark skin tone, red hair | A dark-skinned woman with red curly hair, appearing cheerful. |
| 🧑🦰 | person: red hair | A person with bright red curly hair, smiling gently. |
| 🧑🏻🦰 | person: light skin tone, red hair | A light-skinned person with red curly hair, looking cheerful. |
| 🧑🏼🦰 | person: medium-light skin tone, red hair | A medium-light skinned person with red curly hair, appearing calm. |
| 🧑🏽🦰 | person: medium skin tone, red hair | A medium-skinned person with red curly hair, smiling softly. |
| 🧑🏾🦰 | person: medium-dark skin tone, red hair | A medium-dark skinned person with red curly hair, looking confidently ahead. |
| 🧑🏿🦰 | person: dark skin tone, red hair | A dark-skinned person with red curly hair, appearing cheerful. |
| 👩🦱 | woman: curly hair | A woman with curly hair, looking straight ahead with a neutral expression. |
| 👩🏻🦱 | woman: light skin tone, curly hair | A light-skinned woman with curly hair, smiling softly. |
| 👩🏼🦱 | woman: medium-light skin tone, curly hair | A medium-light skinned woman with curly hair, looking calm. |
| 👩🏽🦱 | woman: medium skin tone, curly hair | A woman with medium skin tone and curly hair, displaying a friendly expression. |
| 👩🏾🦱 | woman: medium-dark skin tone, curly hair | A woman with medium-dark skin tone and curly hair, looking cheerful. |
| 👩🏿🦱 | woman: dark skin tone, curly hair | A woman with dark skin tone and curly hair, wearing a warm smile. |
| 🧑🦱 | person: curly hair | A person with curly hair, exuding a neutral expression. |
| 🧑🏻🦱 | person: light skin tone, curly hair | A person with light skin tone and curly hair, appearing friendly. |
| 🧑🏼🦱 | person: medium-light skin tone, curly hair | A person with medium-light skin tone and curly hair, showing a pleasant demeanor. |
| 🧑🏽🦱 | person: medium skin tone, curly hair | A person with medium skin tone and curly hair, looking approachable. |
| 🧑🏾🦱 | person: medium-dark skin tone, curly hair | A person with medium-dark skin tone and curly hair, smiling warmly. |
| 🧑🏿🦱 | person: dark skin tone, curly hair | A person with dark skin tone and curly hair, radiating a friendly vibe. |
| 👩🦳 | woman: white hair | A woman with striking white hair, presenting a calm expression. |
| 👩🏻🦳 | woman: light skin tone, white hair | A woman with light skin tone and white hair, looking serene. |
| 👩🏼🦳 | woman: medium-light skin tone, white hair | A woman with medium-light skin tone and white hair, exuding a gentle demeanor. |
| 👩🏽🦳 | woman: medium skin tone, white hair | A woman with medium skin tone and white hair, appearing composed. |
| 👩🏾🦳 | woman: medium-dark skin tone, white hair | A woman with medium-dark skin tone and white hair, showing a peaceful expression. |
| 👩🏿🦳 | woman: dark skin tone, white hair | A woman with dark skin tone and white hair, radiating calmness. |
| 🧑🦳 | person: white hair | A person with white hair, conveying a neutral expression. |
| 🧑🏻🦳 | person: light skin tone, white hair | A person with light skin tone and white hair, looking tranquil. |
| 🧑🏼🦳 | person: medium-light skin tone, white hair | A person with medium-light skin tone and white hair, appearing relaxed. |
| 🧑🏽🦳 | person: medium skin tone, white hair | A person with medium skin tone and white hair, showing a composed demeanor. |
| 🧑🏾🦳 | person: medium-dark skin tone, white hair | A person with medium-dark skin tone and white hair, radiating calmness. |
| 🧑🏿🦳 | person: dark skin tone, white hair | A person with dark skin tone and white hair, looking serene. |
| 👩🦲 | woman: bald | A woman with a bald head, conveying a confident expression. |
| 👩🏻🦲 | woman: light skin tone, bald | A woman with light skin tone and a bald head, appearing self-assured. |
| 👩🏼🦲 | woman: medium-light skin tone, bald | A woman with medium-light skin tone and a bald head, exuding confidence. |
| 👩🏽🦲 | woman: medium skin tone, bald | A woman with medium skin tone and a bald head, looking empowered. |
| 👩🏾🦲 | woman: medium-dark skin tone, bald | A woman with medium-dark skin tone and a bald head, radiating strength. |
| 👩🏿🦲 | woman: dark skin tone, bald | A woman with dark skin tone and a bald head, showing determination. |
| 🧑🦲 | person: bald | A person with a bald head, displaying a neutral expression. |
| 🧑🏻🦲 | person: light skin tone, bald | A person with light skin tone and a bald head, looking confident. |
| 🧑🏼🦲 | person: medium-light skin tone, bald | A person with medium-light skin tone and a bald head, appearing self-assured. |
| 🧑🏽🦲 | person: medium skin tone, bald | A person with medium skin tone and a bald head, radiating empowerment. |
| 🧑🏾🦲 | person: medium-dark skin tone, bald | A person with medium-dark skin tone and a bald head, showing strength. |
| 🧑🏿🦲 | person: dark skin tone, bald | A person with dark skin tone and a bald head, conveying determination. |
| 👱♀️ | woman: blond hair | A woman with blond hair, smiling cheerfully. |
| 👱🏻♀️ | woman: light skin tone, blond hair | A woman with light skin tone and blond hair, appearing joyful. |
| 👱🏼♀️ | woman: medium-light skin tone, blond hair | A woman with medium-light skin tone and blond hair, looking happy. |
| 👱🏽♀️ | woman: medium skin tone, blond hair | A woman with medium skin tone and blond hair, radiating positivity. |
| 👱🏾♀️ | woman: medium-dark skin tone, blond hair | A woman with medium-dark skin tone and blond hair, smiling warmly. |
| 👱🏿♀️ | woman: dark skin tone, blond hair | A woman with dark skin tone and blond hair, displaying a bright smile. |
| 👱♂️ | man: blond hair | A man with blond hair, looking cheerful. |
| 👱🏻♂️ | man: light skin tone, blond hair | A man with light skin and short, straight blond hair, looking straight ahead. |
| 👱🏼♂️ | man: medium-light skin tone, blond hair | A man with medium-light skin and short, straight blond hair, looking straight ahead. |
| 👱🏽♂️ | man: medium skin tone, blond hair | A man with medium skin and short, straight blond hair, looking straight ahead. |
| 👱🏾♂️ | man: medium-dark skin tone, blond hair | A man with medium-dark skin and short, straight blond hair, looking straight ahead. |
| 👱🏿♂️ | man: dark skin tone, blond hair | A man with dark skin and short, straight blond hair, looking straight ahead. |
| 🧓 | older person | An older person with gray hair and a neutral expression, wearing a simple outfit. |
| 🧓🏻 | older person: light skin tone | An older person with light skin and gray hair, wearing a simple outfit. |
| 🧓🏼 | older person: medium-light skin tone | An older person with medium-light skin and gray hair, wearing a simple outfit. |
| 🧓🏽 | older person: medium skin tone | An older person with medium skin and gray hair, wearing a simple outfit. |
| 🧓🏾 | older person: medium-dark skin tone | An older person with medium-dark skin and gray hair, wearing a simple outfit. |
| 🧓🏿 | older person: dark skin tone | An older person with dark skin and gray hair, wearing a simple outfit. |
| 👴 | old man | An old man with a bald head and a white beard, looking serious. |
| 👴🏻 | old man: light skin tone | An old man with light skin, a bald head, and a white beard, looking serious. |
| 👴🏼 | old man: medium-light skin tone | An old man with medium-light skin, a bald head, and a white beard, looking serious. |
| 👴🏽 | old man: medium skin tone | An old man with medium skin, a bald head, and a white beard, looking serious. |
| 👴🏾 | old man: medium-dark skin tone | An old man with medium-dark skin, a bald head, and a white beard, looking serious. |
| 👴🏿 | old man: dark skin tone | An old man with dark skin, a bald head, and a white beard, looking serious. |
| 👵 | old woman | An old woman with gray hair, looking kindly. |
| 👵🏻 | old woman: light skin tone | An old woman with light skin and gray hair, looking kindly. |
| 👵🏼 | old woman: medium-light skin tone | An old woman with medium-light skin and gray hair, looking kindly. |
| 👵🏽 | old woman: medium skin tone | An old woman with medium skin and gray hair, looking kindly. |
| 👵🏾 | old woman: medium-dark skin tone | An old woman with medium-dark skin and gray hair, looking kindly. |
| 👵🏿 | old woman: dark skin tone | An old woman with dark skin and gray hair, looking kindly. |
| 🙍 | person frowning | A person with a frown, looking displeased or annoyed. |
| 🙍🏻 | person frowning: light skin tone | A person with light skin and a frown, looking displeased or annoyed. |
| 🙍🏼 | person frowning: medium-light skin tone | A person with medium-light skin and a frown, looking displeased or annoyed. |
| 🙍🏽 | person frowning: medium skin tone | A person with medium skin and a frown, looking displeased or annoyed. |
| 🙍🏾 | person frowning: medium-dark skin tone | A person with medium-dark skin and a frown, looking displeased or annoyed. |
| 🙍🏿 | person frowning: dark skin tone | A person with dark skin and a frown, looking displeased or annoyed. |
| 🙍♂️ | man frowning | A man with a frown, looking displeased or annoyed. |
| 🙍🏻♂️ | man frowning: light skin tone | A man with light skin and a frown, looking displeased or annoyed. |
| 🙍🏼♂️ | man frowning: medium-light skin tone | A man with medium-light skin and a frown, looking displeased or annoyed. |
| 🙍🏽♂️ | man frowning: medium skin tone | A man with medium skin and a frown, looking displeased or annoyed. |
| 🙍🏾♂️ | man frowning: medium-dark skin tone | A man with medium-dark skin and a frown, looking displeased or annoyed. |
| 🙍🏿♂️ | man frowning: dark skin tone | A man with dark skin and a frown, looking displeased or annoyed. |
| 🙍♀️ | woman frowning | A woman with a frown, looking displeased or annoyed. |
| 🙍🏻♀️ | woman frowning: light skin tone | A woman with light skin and a frown, looking displeased or annoyed. |
| 🙍🏼♀️ | woman frowning: medium-light skin tone | A woman with medium-light skin and a frown, looking displeased or annoyed. |
| 🙍🏽♀️ | woman frowning: medium skin tone | A woman with medium skin and a frown, looking displeased or annoyed. |
| 🙍🏾♀️ | woman frowning: medium-dark skin tone | A woman with medium-dark skin and a frown, looking displeased or annoyed. |
| 🙍🏿♀️ | woman frowning: dark skin tone | A woman with dark skin has a frowning expression, her eyebrows furrowed and lips pressed together, conveying discontent. |
| 🙎 | person pouting | A person with a pouting expression, lips protruding and eyebrows slightly raised, suggesting disappointment or annoyance. |
| 🙎🏻 | person pouting: light skin tone | A person with light skin has a pouting expression, lips pushed out and a slight frown, indicating displeasure. |
| 🙎🏼 | person pouting: medium-light skin tone | A person with medium-light skin is pouting, their lips pushed forward and brows slightly furrowed, showing discontent. |
| 🙎🏽 | person pouting: medium skin tone | A person with medium skin displays a pouting expression, lips protruding and eyebrows raised, reflecting a sense of dissatisfaction. |
| 🙎🏾 | person pouting: medium-dark skin tone | A person with medium-dark skin has a pouting look, lips sticking out and eyebrows slightly raised, suggesting annoyance. |
| 🙎🏿 | person pouting: dark skin tone | A person with dark skin is pouting, their lips pushed out and a frown on their face, indicating displeasure. |
| 🙎♂️ | man pouting | A man is pouting, with his lips protruding and a slight frown, suggesting he is unhappy or dissatisfied. |
| 🙎🏻♂️ | man pouting: light skin tone | A man with light skin has a pouting expression, lips pushed out and eyebrows slightly raised, conveying disappointment. |
| 🙎🏼♂️ | man pouting: medium-light skin tone | A man with medium-light skin is pouting, lips protruding and a slight frown, indicating discontent. |
| 🙎🏽♂️ | man pouting: medium skin tone | A man with medium skin shows a pouting expression, lips sticking out and brows raised, reflecting annoyance. |
| 🙎🏾♂️ | man pouting: medium-dark skin tone | A man with medium-dark skin has a pouting look, lips pushed forward and a frown, suggesting displeasure. |
| 🙎🏿♂️ | man pouting: dark skin tone | A man with dark skin is pouting, his lips protruding and a frown on his face, indicating dissatisfaction. |
| 🙎♀️ | woman pouting | A woman is pouting, with her lips pushed out and a slight frown, suggesting she is unhappy or annoyed. |
| 🙎🏻♀️ | woman pouting: light skin tone | A woman with light skin has a pouting expression, lips protruding and eyebrows slightly raised, conveying displeasure. |
| 🙎🏼♀️ | woman pouting: medium-light skin tone | A woman with medium-light skin is pouting, her lips pushed forward and a frown, indicating discontent. |
| 🙎🏽♀️ | woman pouting: medium skin tone | A woman with medium skin displays a pouting expression, lips sticking out and eyebrows raised, reflecting annoyance. |
| 🙎🏾♀️ | woman pouting: medium-dark skin tone | A woman with medium-dark skin has a pouting look, lips pushed out and a frown, suggesting dissatisfaction. |
| 🙎🏿♀️ | woman pouting: dark skin tone | A woman with dark skin is pouting, her lips protruding and a frown on her face, indicating displeasure. |
| 🙅 | person gesturing NO | A person is gesturing ‘no’ with one hand raised and palm facing outward, displaying a clear rejection or denial. |
| 🙅🏻 | person gesturing NO: light skin tone | A person with light skin gestures ‘no’, raising one hand with the palm facing outward, indicating refusal. |
| 🙅🏼 | person gesturing NO: medium-light skin tone | A person with medium-light skin is gesturing ‘no’, their hand raised with the palm out, showing disapproval. |
| 🙅🏽 | person gesturing NO: medium skin tone | A person with medium skin is making a ‘no’ gesture, one hand raised with the palm facing outward, signaling rejection. |
| 🙅🏾 | person gesturing NO: medium-dark skin tone | A person with medium-dark skin gestures ‘no’, raising one hand with the palm outward, indicating denial. |
| 🙅🏿 | person gesturing NO: dark skin tone | A person with dark skin is gesturing ‘no’, their hand raised with the palm facing outwards, showing refusal. |
| 🙅♂️ | man gesturing NO | A man is gesturing ‘no’, with one hand raised and palm outward, clearly indicating rejection. |
| 🙅🏻♂️ | man gesturing NO: light skin tone | A man with light skin gestures ‘no’, raising one hand with the palm facing outward, signaling refusal. |
| 🙅🏼♂️ | man gesturing NO: medium-light skin tone | A man with medium-light skin is making a ‘no’ gesture, his hand raised with the palm out, indicating disapproval. |
| 🙅🏽♂️ | man gesturing NO: medium skin tone | A man with medium skin is gesturing ‘no’, one hand raised with the palm facing outward, signaling denial. |
| 🙅🏾♂️ | man gesturing NO: medium-dark skin tone | A man with medium-dark skin gestures ‘no’, raising one hand with the palm out, indicating rejection. |
| 🙅🏿♂️ | man gesturing NO: dark skin tone | A man with dark skin is gesturing ‘no’, his hand raised with the palm facing outward, showing refusal. |
| 🙅♀️ | woman gesturing NO | A woman is gesturing ‘no’, with one hand raised and palm outward, clearly indicating rejection. |
| 🙅🏻♀️ | woman gesturing NO: light skin tone | A woman with light skin gestures ‘no’, raising one hand with the palm facing outward, signaling refusal. |
| 🙅🏼♀️ | woman gesturing NO: medium-light skin tone | A woman with medium-light skin is making a ‘no’ gesture, her hand raised with the palm out, indicating disapproval. |
| 🙅🏽♀️ | woman gesturing NO: medium skin tone | A woman with medium skin is gesturing ‘no’, one hand raised with the palm facing outward, signaling denial. |
| 🙅🏾♀️ | woman gesturing NO: medium-dark skin tone | A woman with medium-dark skin gestures ‘no’, raising one hand with the palm out, indicating rejection. |
| 🙅🏿♀️ | woman gesturing NO: dark skin tone | A woman with dark skin is gesturing ‘no’, her hand raised with the palm facing outward, showing refusal. |
| 🙆 | person gesturing OK | A person is gesturing ‘OK’, with one hand raised and fingers forming a circle, indicating affirmation. |
| 🙆🏻 | person gesturing OK: light skin tone | A person with light skin is making an ‘OK’ gesture, one hand raised with fingers forming a circle, signaling agreement. |
| 🙆🏼 | person gesturing OK: medium-light skin tone | A person with medium-light skin gestures ‘OK’, their hand raised with fingers forming a circle, indicating affirmation. |
| 🙆🏽 | person gesturing OK: medium skin tone | A person with medium skin tone is smiling and raising both hands with palms facing outward, forming an ‘OK’ gesture. |
| 🙆🏾 | person gesturing OK: medium-dark skin tone | A person with medium-dark skin tone is smiling and raising both hands with palms facing outward, forming an ‘OK’ gesture. |
| 🙆🏿 | person gesturing OK: dark skin tone | A person with dark skin tone is smiling and raising both hands with palms facing outward, forming an ‘OK’ gesture. |
| 🙆♂️ | man gesturing OK | A man is smiling and raising both hands with palms facing outward, forming an ‘OK’ gesture. |
| 🙆🏻♂️ | man gesturing OK: light skin tone | A man with light skin tone is smiling and raising both hands with palms facing outward, forming an ‘OK’ gesture. |
| 🙆🏼♂️ | man gesturing OK: medium-light skin tone | A man with medium-light skin tone is smiling and raising both hands with palms facing outward, forming an ‘OK’ gesture. |
| 🙆🏽♂️ | man gesturing OK: medium skin tone | A man with medium skin tone is smiling and raising both hands with palms facing outward, forming an ‘OK’ gesture. |
| 🙆🏾♂️ | man gesturing OK: medium-dark skin tone | A man with medium-dark skin tone is smiling and raising both hands with palms facing outward, forming an ‘OK’ gesture. |
| 🙆🏿♂️ | man gesturing OK: dark skin tone | A man with dark skin tone is smiling and raising both hands with palms facing outward, forming an ‘OK’ gesture. |
| 🙆♀️ | woman gesturing OK | A woman is smiling and raising both hands with palms facing outward, forming an ‘OK’ gesture. |
| 🙆🏻♀️ | woman gesturing OK: light skin tone | A woman with light skin tone is smiling and raising both hands with palms facing outward, forming an ‘OK’ gesture. |
| 🙆🏼♀️ | woman gesturing OK: medium-light skin tone | A woman with medium-light skin tone is smiling and raising both hands with palms facing outward, forming an ‘OK’ gesture. |
| 🙆🏽♀️ | woman gesturing OK: medium skin tone | A woman with medium skin tone is smiling and raising both hands with palms facing outward, forming an ‘OK’ gesture. |
| 🙆🏾♀️ | woman gesturing OK: medium-dark skin tone | A woman with medium-dark skin tone is smiling and raising both hands with palms facing outward, forming an ‘OK’ gesture. |
| 🙆🏿♀️ | woman gesturing OK: dark skin tone | A woman with dark skin tone is smiling and raising both hands with palms facing outward, forming an ‘OK’ gesture. |
| 💁 | person tipping hand | A person is standing with one hand raised and tilted slightly, suggesting a casual gesture, often interpreted as ‘here’s what I think’. |
| 💁🏻 | person tipping hand: light skin tone | A person with light skin tone is standing with one hand raised and tilted slightly, suggesting a casual gesture. |
| 💁🏼 | person tipping hand: medium-light skin tone | A person with medium-light skin tone is standing with one hand raised and tilted slightly, suggesting a casual gesture. |
| 💁🏽 | person tipping hand: medium skin tone | A person with medium skin tone is standing with one hand raised and tilted slightly, suggesting a casual gesture. |
| 💁🏾 | person tipping hand: medium-dark skin tone | A person with medium-dark skin tone is standing with one hand raised and tilted slightly, suggesting a casual gesture. |
| 💁🏿 | person tipping hand: dark skin tone | A person with dark skin tone is standing with one hand raised and tilted slightly, suggesting a casual gesture. |
| 💁♂️ | man tipping hand | A man is standing with one hand raised and tilted slightly, suggesting a casual gesture. |
| 💁🏻♂️ | man tipping hand: light skin tone | A man with light skin tone is standing with one hand raised and tilted slightly, suggesting a casual gesture. |
| 💁🏼♂️ | man tipping hand: medium-light skin tone | A man with medium-light skin tone is standing with one hand raised and tilted slightly, suggesting a casual gesture. |
| 💁🏽♂️ | man tipping hand: medium skin tone | A man with medium skin tone is standing with one hand raised and tilted slightly, suggesting a casual gesture. |
| 💁🏾♂️ | man tipping hand: medium-dark skin tone | A man with medium-dark skin tone is standing with one hand raised and tilted slightly, suggesting a casual gesture. |
| 💁🏿♂️ | man tipping hand: dark skin tone | A man with dark skin tone is standing with one hand raised and tilted slightly, suggesting a casual gesture. |
| 💁♀️ | woman tipping hand | A woman is standing with one hand raised and tilted slightly, suggesting a casual gesture. |
| 💁🏻♀️ | woman tipping hand: light skin tone | A woman with light skin tone is standing with one hand raised and tilted slightly, suggesting a casual gesture. |
| 💁🏼♀️ | woman tipping hand: medium-light skin tone | A woman with medium-light skin tone is standing with one hand raised and tilted slightly, suggesting a casual gesture. |
| 💁🏽♀️ | woman tipping hand: medium skin tone | A woman with medium skin tone is standing with one hand raised and tilted slightly, suggesting a casual gesture. |
| 💁🏾♀️ | woman tipping hand: medium-dark skin tone | A woman with medium-dark skin tone is standing with one hand raised and tilted slightly, suggesting a casual gesture. |
| 💁🏿♀️ | woman tipping hand: dark skin tone | A woman with dark skin tone is standing with one hand raised and tilted slightly, suggesting a casual gesture. |
| 🙋 | person raising hand | A person is smiling and raising one hand high, as if to indicate they want to speak or are volunteering. |
| 🙋🏻 | person raising hand: light skin tone | A person with light skin tone is smiling and raising one hand high, as if to indicate they want to speak or are volunteering. |
| 🙋🏼 | person raising hand: medium-light skin tone | A person with medium-light skin tone is smiling and raising one hand high, as if to indicate they want to speak or are volunteering. |
| 🙋🏽 | person raising hand: medium skin tone | A person with medium skin tone is smiling and raising one hand high, as if to indicate they want to speak or are volunteering. |
| 🙋🏾 | person raising hand: medium-dark skin tone | A person with medium-dark skin tone is smiling and raising one hand high, as if to indicate they want to speak or are volunteering. |
| 🙋🏿 | person raising hand: dark skin tone | A person with dark skin tone is smiling and raising one hand high, as if to indicate they want to speak or are volunteering. |
| 🙋♂️ | man raising hand | A man is smiling and raising one hand high, as if to indicate he wants to speak or is volunteering. |
| 🙋🏻♂️ | man raising hand: light skin tone | A light-skinned man with short hair is raising his right hand, smiling and looking forward. |
| 🙋🏼♂️ | man raising hand: medium-light skin tone | A medium-light-skinned man with short hair is raising his right hand, smiling and looking forward. |
| 🙋🏽♂️ | man raising hand: medium skin tone | A medium-skinned man with short hair is raising his right hand, smiling and looking forward. |
| 🙋🏾♂️ | man raising hand: medium-dark skin tone | A medium-dark-skinned man with short hair is raising his right hand, smiling and looking forward. |
| 🙋🏿♂️ | man raising hand: dark skin tone | A dark-skinned man with short hair is raising his right hand, smiling and looking forward. |
| 🙋♀️ | woman raising hand | A woman with long hair is raising her right hand, smiling and looking forward. |
| 🙋🏻♀️ | woman raising hand: light skin tone | A light-skinned woman with long hair is raising her right hand, smiling and looking forward. |
| 🙋🏼♀️ | woman raising hand: medium-light skin tone | A medium-light-skinned woman with long hair is raising her right hand, smiling and looking forward. |
| 🙋🏽♀️ | woman raising hand: medium skin tone | A medium-skinned woman with long hair is raising her right hand, smiling and looking forward. |
| 🙋🏾♀️ | woman raising hand: medium-dark skin tone | A medium-dark-skinned woman with long hair is raising her right hand, smiling and looking forward. |
| 🙋🏿♀️ | woman raising hand: dark skin tone | A dark-skinned woman with long hair is raising her right hand, smiling and looking forward. |
| 🧏 | deaf person | A person with a neutral expression is making a gesture with one hand near their ear, indicating they are deaf. |
| 🧏🏻 | deaf person: light skin tone | A light-skinned person with a neutral expression is making a gesture with one hand near their ear, indicating they are deaf. |
| 🧏🏼 | deaf person: medium-light skin tone | A medium-light-skinned person with a neutral expression is making a gesture with one hand near their ear, indicating they are deaf. |
| 🧏🏽 | deaf person: medium skin tone | A medium-skinned person with a neutral expression is making a gesture with one hand near their ear, indicating they are deaf. |
| 🧏🏾 | deaf person: medium-dark skin tone | A medium-dark-skinned person with a neutral expression is making a gesture with one hand near their ear, indicating they are deaf. |
| 🧏🏿 | deaf person: dark skin tone | A dark-skinned person with a neutral expression is making a gesture with one hand near their ear, indicating they are deaf. |
| 🧏♂️ | deaf man | A man with a neutral expression is making a gesture with one hand near his ear, indicating he is deaf. |
| 🧏🏻♂️ | deaf man: light skin tone | A light-skinned man with a neutral expression is making a gesture with one hand near his ear, indicating he is deaf. |
| 🧏🏼♂️ | deaf man: medium-light skin tone | A medium-light-skinned man with a neutral expression is making a gesture with one hand near his ear, indicating he is deaf. |
| 🧏🏽♂️ | deaf man: medium skin tone | A medium-skinned man with a neutral expression is making a gesture with one hand near his ear, indicating he is deaf. |
| 🧏🏾♂️ | deaf man: medium-dark skin tone | A medium-dark-skinned man with a neutral expression is making a gesture with one hand near his ear, indicating he is deaf. |
| 🧏🏿♂️ | deaf man: dark skin tone | A dark-skinned man with a neutral expression is making a gesture with one hand near his ear, indicating he is deaf. |
| 🧏♀️ | deaf woman | A woman with a neutral expression is making a gesture with one hand near her ear, indicating she is deaf. |
| 🧏🏻♀️ | deaf woman: light skin tone | A light-skinned woman with a neutral expression is making a gesture with one hand near her ear, indicating she is deaf. |
| 🧏🏼♀️ | deaf woman: medium-light skin tone | A medium-light-skinned woman with a neutral expression is making a gesture with one hand near her ear, indicating she is deaf. |
| 🧏🏽♀️ | deaf woman: medium skin tone | A medium-skinned woman with a neutral expression is making a gesture with one hand near her ear, indicating she is deaf. |
| 🧏🏾♀️ | deaf woman: medium-dark skin tone | A medium-dark-skinned woman with a neutral expression is making a gesture with one hand near her ear, indicating she is deaf. |
| 🧏🏿♀️ | deaf woman: dark skin tone | A dark-skinned woman with a neutral expression is making a gesture with one hand near her ear, indicating she is deaf. |
| 🙇 | person bowing | A person with a neutral expression is bowing forward slightly, with hands clasped together in front. |
| 🙇🏻 | person bowing: light skin tone | A light-skinned person with a neutral expression is bowing forward slightly, with hands clasped together in front. |
| 🙇🏼 | person bowing: medium-light skin tone | A medium-light-skinned person with a neutral expression is bowing forward slightly, with hands clasped together in front. |
| 🙇🏽 | person bowing: medium skin tone | A medium-skinned person with a neutral expression is bowing forward slightly, with hands clasped together in front. |
| 🙇🏾 | person bowing: medium-dark skin tone | A medium-dark-skinned person with a neutral expression is bowing forward slightly, with hands clasped together in front. |
| 🙇🏿 | person bowing: dark skin tone | A dark-skinned person with a neutral expression is bowing forward slightly, with hands clasped together in front. |
| 🙇♂️ | man bowing | A man with a neutral expression is bowing forward slightly, with hands clasped together in front. |
| 🙇🏻♂️ | man bowing: light skin tone | A light-skinned man with a neutral expression is bowing forward slightly, with hands clasped together in front. |
| 🙇🏼♂️ | man bowing: medium-light skin tone | A medium-light-skinned man with a neutral expression is bowing forward slightly, with hands clasped together in front. |
| 🙇🏽♂️ | man bowing: medium skin tone | A medium-skinned man with a neutral expression is bowing forward slightly, with hands clasped together in front. |
| 🙇🏾♂️ | man bowing: medium-dark skin tone | A medium-dark-skinned man with a neutral expression is bowing forward slightly, with hands clasped together in front. |
| 🙇🏿♂️ | man bowing: dark skin tone | A man with dark skin is bowing slightly, his head lowered and hands placed together in front of him. |
| 🙇♀️ | woman bowing | A woman is bowing gracefully, her head lowered and hands together in front of her chest. |
| 🙇🏻♀️ | woman bowing: light skin tone | A woman with light skin is bowing, her head tilted down and hands clasped together in front. |
| 🙇🏼♀️ | woman bowing: medium-light skin tone | A woman with medium-light skin is bowing, her head lowered and hands positioned together at her chest. |
| 🙇🏽♀️ | woman bowing: medium skin tone | A woman with medium skin tone is bowing, her head down and hands held together in a respectful gesture. |
| 🙇🏾♀️ | woman bowing: medium-dark skin tone | A woman with medium-dark skin is bowing, her head lowered and hands clasped in front of her. |
| 🙇🏿♀️ | woman bowing: dark skin tone | A woman with dark skin is bowing slightly, her head down and hands together in a gesture of respect. |
| 🤦 | person facepalming | A person is facepalming, their hand covering their forehead in a gesture of disbelief or exasperation. |
| 🤦🏻 | person facepalming: light skin tone | A person with light skin is facepalming, their hand pressed against their forehead in frustration. |
| 🤦🏼 | person facepalming: medium-light skin tone | A person with medium-light skin is facepalming, their hand covering their forehead in a sign of annoyance. |
| 🤦🏽 | person facepalming: medium skin tone | A person with medium skin tone is facepalming, their hand on their forehead, expressing disbelief. |
| 🤦🏾 | person facepalming: medium-dark skin tone | A person with medium-dark skin is facepalming, their hand resting on their forehead in exasperation. |
| 🤦🏿 | person facepalming: dark skin tone | A person with dark skin is facepalming, their hand covering their forehead in a moment of frustration. |
| 🤦♂️ | man facepalming | A man is facepalming, his hand pressed against his forehead in a gesture of disbelief. |
| 🤦🏻♂️ | man facepalming: light skin tone | A man with light skin is facepalming, his hand covering his forehead in annoyance. |
| 🤦🏼♂️ | man facepalming: medium-light skin tone | A man with medium-light skin is facepalming, his hand on his forehead, showing exasperation. |
| 🤦🏽♂️ | man facepalming: medium skin tone | A man with medium skin tone is facepalming, his hand covering his forehead in disbelief. |
| 🤦🏾♂️ | man facepalming: medium-dark skin tone | A man with medium-dark skin is facepalming, his hand pressed against his forehead in frustration. |
| 🤦🏿♂️ | man facepalming: dark skin tone | A man with dark skin is facepalming, his hand covering his forehead in a moment of exasperation. |
| 🤦♀️ | woman facepalming | A woman is facepalming, her hand covering her forehead in disbelief or frustration. |
| 🤦🏻♀️ | woman facepalming: light skin tone | A woman with light skin is facepalming, her hand pressed against her forehead in annoyance. |
| 🤦🏼♀️ | woman facepalming: medium-light skin tone | A woman with medium-light skin is facepalming, her hand on her forehead, expressing exasperation. |
| 🤦🏽♀️ | woman facepalming: medium skin tone | A woman with medium skin tone is facepalming, her hand covering her forehead in disbelief. |
| 🤦🏾♀️ | woman facepalming: medium-dark skin tone | A woman with medium-dark skin is facepalming, her hand pressed against her forehead in frustration. |
| 🤦🏿♀️ | woman facepalming: dark skin tone | A woman with dark skin is facepalming, her hand covering her forehead in a moment of annoyance. |
| 🤷 | person shrugging | A person is shrugging, raising their shoulders and arms in a gesture of uncertainty or indifference. |
| 🤷🏻 | person shrugging: light skin tone | A person with light skin is shrugging, their shoulders raised and arms outstretched in confusion. |
| 🤷🏼 | person shrugging: medium-light skin tone | A person with medium-light skin is shrugging, their shoulders lifted and arms raised in a questioning gesture. |
| 🤷🏽 | person shrugging: medium skin tone | A person with medium skin tone is shrugging, their shoulders raised and arms outstretched in uncertainty. |
| 🤷🏾 | person shrugging: medium-dark skin tone | A person with medium-dark skin is shrugging, their shoulders lifted and arms raised in indifference. |
| 🤷🏿 | person shrugging: dark skin tone | A person with dark skin is shrugging, their shoulders raised and arms outstretched in a gesture of doubt. |
| 🤷♂️ | man shrugging | A man is shrugging, his shoulders raised and arms outstretched in a gesture of uncertainty. |
| 🤷🏻♂️ | man shrugging: light skin tone | A man with light skin is shrugging, his shoulders lifted and arms raised in confusion. |
| 🤷🏼♂️ | man shrugging: medium-light skin tone | A man with medium-light skin is shrugging, his shoulders raised and arms outstretched in a questioning manner. |
| 🤷🏽♂️ | man shrugging: medium skin tone | A man with medium skin tone is shrugging, his shoulders lifted and arms raised in uncertainty. |
| 🤷🏾♂️ | man shrugging: medium-dark skin tone | A man with medium-dark skin is shrugging, his shoulders raised and arms outstretched in indifference. |
| 🤷🏿♂️ | man shrugging: dark skin tone | A man with dark skin is shrugging, his shoulders lifted and arms raised in a gesture of doubt. |
| 🤷♀️ | woman shrugging | A woman is shrugging, her shoulders raised and arms outstretched in a gesture of uncertainty. |
| 🤷🏻♀️ | woman shrugging: light skin tone | A woman with light skin is shrugging, her shoulders lifted and arms raised in confusion. |
| 🤷🏼♀️ | woman shrugging: medium-light skin tone | A woman with medium-light skin is shrugging, her shoulders raised and arms outstretched in a questioning gesture. |
| 🤷🏽♀️ | woman shrugging: medium skin tone | A woman with medium skin tone raises her shoulders in a shrug, displaying a neutral expression as if to indicate uncertainty or indifference. |
| 🤷🏾♀️ | woman shrugging: medium-dark skin tone | A woman with medium-dark skin tone raises her shoulders in a shrug, showing a calm expression that suggests she doesn’t know or doesn’t care. |
| 🤷🏿♀️ | woman shrugging: dark skin tone | A woman with dark skin tone shrugs her shoulders, her facial expression neutral, conveying a sense of confusion or lack of knowledge. |
| 🧑⚕️ | health worker | A health worker with a neutral skin tone is depicted wearing a medical uniform, symbolizing their role in healthcare. |
| 🧑🏻⚕️ | health worker: light skin tone | A health worker with light skin tone is shown in a medical uniform, representing their profession in healthcare. |
| 🧑🏼⚕️ | health worker: medium-light skin tone | A health worker with medium-light skin tone is depicted in a medical outfit, indicating their role in the health sector. |
| 🧑🏽⚕️ | health worker: medium skin tone | A health worker with medium skin tone is shown wearing a medical uniform, symbolizing their profession in healthcare. |
| 🧑🏾⚕️ | health worker: medium-dark skin tone | A health worker with medium-dark skin tone is depicted in a medical outfit, representing their role in the healthcare field. |
| 🧑🏿⚕️ | health worker: dark skin tone | A health worker with dark skin tone is shown wearing a medical uniform, indicating their profession in healthcare. |
| 👨⚕️ | man health worker | A man health worker is depicted in a medical uniform, representing his role in the healthcare profession. |
| 👨🏻⚕️ | man health worker: light skin tone | A man health worker with light skin tone is shown in a medical outfit, symbolizing his profession in healthcare. |
| 👨🏼⚕️ | man health worker: medium-light skin tone | A man health worker with medium-light skin tone is depicted in a medical uniform, representing his role in healthcare. |
| 👨🏽⚕️ | man health worker: medium skin tone | A man health worker with medium skin tone is shown wearing a medical outfit, indicating his profession in the health sector. |
| 👨🏾⚕️ | man health worker: medium-dark skin tone | A man health worker with medium-dark skin tone is depicted in a medical uniform, symbolizing his role in healthcare. |
| 👨🏿⚕️ | man health worker: dark skin tone | A man health worker with dark skin tone is shown wearing a medical outfit, representing his profession in the healthcare field. |
| 👩⚕️ | woman health worker | A woman health worker is depicted in a medical uniform, symbolizing her role in the healthcare profession. |
| 👩🏻⚕️ | woman health worker: light skin tone | A woman health worker with light skin tone is shown in a medical outfit, representing her profession in healthcare. |
| 👩🏼⚕️ | woman health worker: medium-light skin tone | A woman health worker with medium-light skin tone is depicted in a medical uniform, indicating her role in the health sector. |
| 👩🏽⚕️ | woman health worker: medium skin tone | A woman health worker with medium skin tone is shown wearing a medical outfit, symbolizing her profession in healthcare. |
| 👩🏾⚕️ | woman health worker: medium-dark skin tone | A woman health worker with medium-dark skin tone is depicted in a medical uniform, representing her role in the healthcare field. |
| 👩🏿⚕️ | woman health worker: dark skin tone | A woman health worker with dark skin tone is shown wearing a medical outfit, indicating her profession in healthcare. |
| 🧑🎓 | student | A student is depicted wearing a graduation cap and gown, symbolizing their academic achievement. |
| 🧑🏻🎓 | student: light skin tone | A student with light skin tone is shown in a graduation cap and gown, representing their academic success. |
| 🧑🏼🎓 | student: medium-light skin tone | A student with medium-light skin tone is depicted wearing a graduation cap and gown, indicating their achievement in education. |
| 🧑🏽🎓 | student: medium skin tone | A student with medium skin tone is shown in a graduation outfit, symbolizing their academic accomplishment. |
| 🧑🏾🎓 | student: medium-dark skin tone | A student with medium-dark skin tone is depicted wearing a graduation cap and gown, representing their educational success. |
| 🧑🏿🎓 | student: dark skin tone | A student with dark skin tone is shown in a graduation outfit, indicating their achievement in academics. |
| 👨🎓 | man student | A man student is depicted wearing a graduation cap and gown, symbolizing his academic achievement. |
| 👨🏻🎓 | man student: light skin tone | A man student with light skin tone is shown in a graduation cap and gown, representing his educational success. |
| 👨🏼🎓 | man student: medium-light skin tone | A man student with medium-light skin tone is depicted wearing a graduation cap and gown, indicating his achievement in education. |
| 👨🏽🎓 | man student: medium skin tone | A man student with medium skin tone is shown in a graduation outfit, symbolizing his academic accomplishment. |
| 👨🏾🎓 | man student: medium-dark skin tone | A man student with medium-dark skin tone is depicted wearing a graduation cap and gown, representing his educational success. |
| 👨🏿🎓 | man student: dark skin tone | A man student with dark skin tone is shown in a graduation outfit, indicating his achievement in academics. |
| 👩🎓 | woman student | A woman student is depicted wearing a graduation cap and gown, symbolizing her academic achievement. |
| 👩🏻🎓 | woman student: light skin tone | A woman student with light skin tone is shown in a graduation cap and gown, representing her educational success. |
| 👩🏼🎓 | woman student: medium-light skin tone | A woman student with medium-light skin tone is depicted wearing a graduation cap and gown, indicating her achievement in education. |
| 👩🏽🎓 | woman student: medium skin tone | A woman student with medium skin tone is shown in a graduation outfit, symbolizing her academic accomplishment. |
| 👩🏾🎓 | woman student: medium-dark skin tone | A woman student with medium-dark skin tone is depicted wearing a graduation cap and gown, representing her educational success. |
| 👩🏿🎓 | woman student: dark skin tone | A woman student with dark skin tone is shown in a graduation outfit, indicating her achievement in academics. |
| 🧑🏫 | teacher | A teacher is depicted in professional attire, symbolizing their role in education and instruction. |
| 🧑🏻🏫 | teacher: light skin tone | A person with light skin tone, wearing a black graduation cap and a white shirt, standing with a neutral expression. |
| 🧑🏼🏫 | teacher: medium-light skin tone | A person with medium-light skin tone, wearing a black graduation cap and a white shirt, standing with a neutral expression. |
| 🧑🏽🏫 | teacher: medium skin tone | A person with medium skin tone, wearing a black graduation cap and a white shirt, standing with a neutral expression. |
| 🧑🏾🏫 | teacher: medium-dark skin tone | A person with medium-dark skin tone, wearing a black graduation cap and a white shirt, standing with a neutral expression. |
| 🧑🏿🏫 | teacher: dark skin tone | A person with dark skin tone, wearing a black graduation cap and a white shirt, standing with a neutral expression. |
| 👨🏫 | man teacher | A man with a neutral expression, wearing a black graduation cap and a white shirt, standing confidently. |
| 👨🏻🏫 | man teacher: light skin tone | A man with light skin tone, wearing a black graduation cap and a white shirt, standing confidently. |
| 👨🏼🏫 | man teacher: medium-light skin tone | A man with medium-light skin tone, wearing a black graduation cap and a white shirt, standing confidently. |
| 👨🏽🏫 | man teacher: medium skin tone | A man with medium skin tone, wearing a black graduation cap and a white shirt, standing confidently. |
| 👨🏾🏫 | man teacher: medium-dark skin tone | A man with medium-dark skin tone, wearing a black graduation cap and a white shirt, standing confidently. |
| 👨🏿🏫 | man teacher: dark skin tone | A man with dark skin tone, wearing a black graduation cap and a white shirt, standing confidently. |
| 👩🏫 | woman teacher | A woman with a neutral expression, wearing a black graduation cap and a white shirt, standing confidently. |
| 👩🏻🏫 | woman teacher: light skin tone | A woman with light skin tone, wearing a black graduation cap and a white shirt, standing confidently. |
| 👩🏼🏫 | woman teacher: medium-light skin tone | A woman with medium-light skin tone, wearing a black graduation cap and a white shirt, standing confidently. |
| 👩🏽🏫 | woman teacher: medium skin tone | A woman with medium skin tone, wearing a black graduation cap and a white shirt, standing confidently. |
| 👩🏾🏫 | woman teacher: medium-dark skin tone | A woman with medium-dark skin tone, wearing a black graduation cap and a white shirt, standing confidently. |
| 👩🏿🏫 | woman teacher: dark skin tone | A woman with dark skin tone, wearing a black graduation cap and a white shirt, standing confidently. |
| 🧑⚖️ | judge | A person wearing a black robe and a white collar, with a neutral expression, standing with arms at the sides. |
| 🧑🏻⚖️ | judge: light skin tone | A person with light skin tone, wearing a black robe and a white collar, with a neutral expression. |
| 🧑🏼⚖️ | judge: medium-light skin tone | A person with medium-light skin tone, wearing a black robe and a white collar, with a neutral expression. |
| 🧑🏽⚖️ | judge: medium skin tone | A person with medium skin tone, wearing a black robe and a white collar, with a neutral expression. |
| 🧑🏾⚖️ | judge: medium-dark skin tone | A person with medium-dark skin tone, wearing a black robe and a white collar, with a neutral expression. |
| 🧑🏿⚖️ | judge: dark skin tone | A person with dark skin tone, wearing a black robe and a white collar, with a neutral expression. |
| 👨⚖️ | man judge | A man wearing a black robe and a white collar, with a neutral expression, standing with arms at the sides. |
| 👨🏻⚖️ | man judge: light skin tone | A man with light skin tone, wearing a black robe and a white collar, with a neutral expression. |
| 👨🏼⚖️ | man judge: medium-light skin tone | A man with medium-light skin tone, wearing a black robe and a white collar, with a neutral expression. |
| 👨🏽⚖️ | man judge: medium skin tone | A man with medium skin tone, wearing a black robe and a white collar, with a neutral expression. |
| 👨🏾⚖️ | man judge: medium-dark skin tone | A man with medium-dark skin tone, wearing a black robe and a white collar, with a neutral expression. |
| 👨🏿⚖️ | man judge: dark skin tone | A man with dark skin tone, wearing a black robe and a white collar, with a neutral expression. |
| 👩⚖️ | woman judge | A woman wearing a black robe and a white collar, with a neutral expression, standing with arms at the sides. |
| 👩🏻⚖️ | woman judge: light skin tone | A woman with light skin tone, wearing a black robe and a white collar, with a neutral expression. |
| 👩🏼⚖️ | woman judge: medium-light skin tone | A woman with medium-light skin tone, wearing a black robe and a white collar, with a neutral expression. |
| 👩🏽⚖️ | woman judge: medium skin tone | A woman with medium skin tone, wearing a black robe and a white collar, with a neutral expression. |
| 👩🏾⚖️ | woman judge: medium-dark skin tone | A woman with medium-dark skin tone, wearing a black robe and a white collar, with a neutral expression. |
| 👩🏿⚖️ | woman judge: dark skin tone | A woman with dark skin tone, wearing a black robe and a white collar, with a neutral expression. |
| 🧑🌾 | farmer | A person wearing a straw hat and overalls, with a friendly expression, holding a gardening tool. |
| 🧑🏻🌾 | farmer: light skin tone | A person with light skin tone, wearing a straw hat and overalls, with a friendly expression, holding a gardening tool. |
| 🧑🏼🌾 | farmer: medium-light skin tone | A person with medium-light skin tone, wearing a straw hat and overalls, with a friendly expression, holding a gardening tool. |
| 🧑🏽🌾 | farmer: medium skin tone | A person with medium skin tone, wearing a straw hat and overalls, with a friendly expression, holding a gardening tool. |
| 🧑🏾🌾 | farmer: medium-dark skin tone | A person with medium-dark skin tone, wearing a straw hat and overalls, with a friendly expression, holding a gardening tool. |
| 🧑🏿🌾 | farmer: dark skin tone | A person with dark skin, wearing a straw hat and overalls, stands confidently, holding a farming tool. |
| 👨🌾 | man farmer | A man with short hair, wearing a straw hat and overalls, holds a farming tool with a determined expression. |
| 👨🏻🌾 | man farmer: light skin tone | A man with light skin, wearing a straw hat and overalls, stands with a farming tool, looking ready for work. |
| 👨🏼🌾 | man farmer: medium-light skin tone | A man with medium-light skin, dressed in overalls and a straw hat, holds a farming tool, appearing focused. |
| 👨🏽🌾 | man farmer: medium skin tone | A man with medium skin, wearing a straw hat and overalls, stands with a farming tool, looking determined. |
| 👨🏾🌾 | man farmer: medium-dark skin tone | A man with medium-dark skin, dressed in overalls and a straw hat, confidently holds a farming tool. |
| 👨🏿🌾 | man farmer: dark skin tone | A man with dark skin, wearing a straw hat and overalls, stands with a farming tool, ready for work. |
| 👩🌾 | woman farmer | A woman with long hair, wearing a straw hat and overalls, holds a farming tool with an enthusiastic expression. |
| 👩🏻🌾 | woman farmer: light skin tone | A woman with light skin, dressed in overalls and a straw hat, stands with a farming tool, looking ready to work. |
| 👩🏼🌾 | woman farmer: medium-light skin tone | A woman with medium-light skin, wearing a straw hat and overalls, holds a farming tool, appearing focused. |
| 👩🏽🌾 | woman farmer: medium skin tone | A woman with medium skin, dressed in overalls and a straw hat, stands with a farming tool, looking determined. |
| 👩🏾🌾 | woman farmer: medium-dark skin tone | A woman with medium-dark skin, wearing a straw hat and overalls, confidently holds a farming tool. |
| 👩🏿🌾 | woman farmer: dark skin tone | A woman with dark skin, dressed in overalls and a straw hat, stands with a farming tool, ready for work. |
| 🧑🍳 | cook | A person with a chef’s hat and apron, smiling while holding a cooking utensil, ready to prepare a meal. |
| 🧑🏻🍳 | cook: light skin tone | A person with light skin, wearing a chef’s hat and apron, smiles while holding a cooking utensil. |
| 🧑🏼🍳 | cook: medium-light skin tone | A person with medium-light skin, dressed in a chef’s hat and apron, holds a cooking utensil with a cheerful expression. |
| 🧑🏽🍳 | cook: medium skin tone | A person with medium skin, wearing a chef’s hat and apron, smiles while holding a cooking utensil. |
| 🧑🏾🍳 | cook: medium-dark skin tone | A person with medium-dark skin, dressed in a chef’s hat and apron, holds a cooking utensil with a friendly smile. |
| 🧑🏿🍳 | cook: dark skin tone | A person with dark skin, wearing a chef’s hat and apron, smiles while holding a cooking utensil, ready to cook. |
| 👨🍳 | man cook | A man with short hair, wearing a chef’s hat and apron, smiles while holding a cooking utensil, eager to cook. |
| 👨🏻🍳 | man cook: light skin tone | A man with light skin, dressed in a chef’s hat and apron, holds a cooking utensil with a friendly smile. |
| 👨🏼🍳 | man cook: medium-light skin tone | A man with medium-light skin, wearing a chef’s hat and apron, smiles while holding a cooking utensil. |
| 👨🏽🍳 | man cook: medium skin tone | A man with medium skin, dressed in a chef’s hat and apron, holds a cooking utensil with enthusiasm. |
| 👨🏾🍳 | man cook: medium-dark skin tone | A man with medium-dark skin, wearing a chef’s hat and apron, smiles while holding a cooking utensil. |
| 👨🏿🍳 | man cook: dark skin tone | A man with dark skin, dressed in a chef’s hat and apron, holds a cooking utensil with a cheerful expression. |
| 👩🍳 | woman cook | A woman with long hair, wearing a chef’s hat and apron, smiles while holding a cooking utensil, ready to cook. |
| 👩🏻🍳 | woman cook: light skin tone | A woman with light skin, dressed in a chef’s hat and apron, holds a cooking utensil with a friendly smile. |
| 👩🏼🍳 | woman cook: medium-light skin tone | A woman with medium-light skin, wearing a chef’s hat and apron, smiles while holding a cooking utensil. |
| 👩🏽🍳 | woman cook: medium skin tone | A woman with medium skin, dressed in a chef’s hat and apron, holds a cooking utensil with enthusiasm. |
| 👩🏾🍳 | woman cook: medium-dark skin tone | A woman with medium-dark skin, wearing a chef’s hat and apron, smiles while holding a cooking utensil. |
| 👩🏿🍳 | woman cook: dark skin tone | A woman with dark skin, dressed in a chef’s hat and apron, holds a cooking utensil with a cheerful expression. |
| 🧑🔧 | mechanic | A person with a wrench in hand, wearing a work uniform and a tool belt, looks ready to fix something. |
| 🧑🏻🔧 | mechanic: light skin tone | A person with light skin, dressed in a work uniform and tool belt, holds a wrench with determination. |
| 🧑🏼🔧 | mechanic: medium-light skin tone | A person with medium-light skin, wearing a work uniform and tool belt, stands with a wrench, ready to work. |
| 🧑🏽🔧 | mechanic: medium skin tone | A person with medium skin, dressed in a work uniform and tool belt, confidently holds a wrench. |
| 🧑🏾🔧 | mechanic: medium-dark skin tone | A person with medium-dark skin, wearing a work uniform and tool belt, stands with a wrench, looking prepared. |
| 🧑🏿🔧 | mechanic: dark skin tone | A person with dark skin, dressed in a work uniform and tool belt, confidently holds a wrench, ready for repairs. |
| 👨🔧 | man mechanic | A man with short hair, wearing a work uniform and tool belt, holds a wrench with a focused expression. |
| 👨🏻🔧 | man mechanic: light skin tone | A man with light skin, dressed in a work uniform and tool belt, stands with a wrench, looking ready to work. |
| 👨🏼🔧 | man mechanic: medium-light skin tone | A man with medium-light skin, wearing a work uniform and tool belt, holds a wrench with determination. |
| 👨🏽🔧 | man mechanic: medium skin tone | A man with medium skin tone wearing a blue shirt and holding a wrench, representing a mechanic. |
| 👨🏾🔧 | man mechanic: medium-dark skin tone | A man with medium-dark skin tone dressed in a blue shirt, holding a wrench, symbolizing a mechanic. |
| 👨🏿🔧 | man mechanic: dark skin tone | A man with dark skin tone wearing a blue shirt and holding a wrench, depicting a mechanic. |
| 👩🔧 | woman mechanic | A woman in a blue shirt, holding a wrench, representing a mechanic. |
| 👩🏻🔧 | woman mechanic: light skin tone | A woman with light skin tone dressed in a blue shirt and holding a wrench, symbolizing a mechanic. |
| 👩🏼🔧 | woman mechanic: medium-light skin tone | A woman with medium-light skin tone wearing a blue shirt and holding a wrench, depicting a mechanic. |
| 👩🏽🔧 | woman mechanic: medium skin tone | A woman with medium skin tone in a blue shirt, holding a wrench, representing a mechanic. |
| 👩🏾🔧 | woman mechanic: medium-dark skin tone | A woman with medium-dark skin tone dressed in a blue shirt and holding a wrench, symbolizing a mechanic. |
| 👩🏿🔧 | woman mechanic: dark skin tone | A woman with dark skin tone wearing a blue shirt and holding a wrench, depicting a mechanic. |
| 🧑🏭 | factory worker | A person wearing a hard hat and blue overalls, symbolizing a factory worker. |
| 🧑🏻🏭 | factory worker: light skin tone | A person with light skin tone in blue overalls and a hard hat, representing a factory worker. |
| 🧑🏼🏭 | factory worker: medium-light skin tone | A person with medium-light skin tone wearing blue overalls and a hard hat, depicting a factory worker. |
| 🧑🏽🏭 | factory worker: medium skin tone | A person with medium skin tone dressed in blue overalls and a hard hat, symbolizing a factory worker. |
| 🧑🏾🏭 | factory worker: medium-dark skin tone | A person with medium-dark skin tone in blue overalls and a hard hat, representing a factory worker. |
| 🧑🏿🏭 | factory worker: dark skin tone | A person with dark skin tone wearing blue overalls and a hard hat, depicting a factory worker. |
| 👨🏭 | man factory worker | A man in blue overalls and a hard hat, symbolizing a factory worker. |
| 👨🏻🏭 | man factory worker: light skin tone | A man with light skin tone dressed in blue overalls and a hard hat, representing a factory worker. |
| 👨🏼🏭 | man factory worker: medium-light skin tone | A man with medium-light skin tone wearing blue overalls and a hard hat, depicting a factory worker. |
| 👨🏽🏭 | man factory worker: medium skin tone | A man with medium skin tone in blue overalls and a hard hat, symbolizing a factory worker. |
| 👨🏾🏭 | man factory worker: medium-dark skin tone | A man with medium-dark skin tone dressed in blue overalls and a hard hat, representing a factory worker. |
| 👨🏿🏭 | man factory worker: dark skin tone | A man with dark skin tone wearing blue overalls and a hard hat, depicting a factory worker. |
| 👩🏭 | woman factory worker | A woman in blue overalls and a hard hat, symbolizing a factory worker. |
| 👩🏻🏭 | woman factory worker: light skin tone | A woman with light skin tone dressed in blue overalls and a hard hat, representing a factory worker. |
| 👩🏼🏭 | woman factory worker: medium-light skin tone | A woman with medium-light skin tone wearing blue overalls and a hard hat, depicting a factory worker. |
| 👩🏽🏭 | woman factory worker: medium skin tone | A woman with medium skin tone in blue overalls and a hard hat, symbolizing a factory worker. |
| 👩🏾🏭 | woman factory worker: medium-dark skin tone | A woman with medium-dark skin tone dressed in blue overalls and a hard hat, representing a factory worker. |
| 👩🏿🏭 | woman factory worker: dark skin tone | A woman with dark skin tone wearing blue overalls and a hard hat, depicting a factory worker. |
| 🧑💼 | office worker | A person in a suit and tie, representing an office worker. |
| 🧑🏻💼 | office worker: light skin tone | A person with light skin tone dressed in a suit and tie, symbolizing an office worker. |
| 🧑🏼💼 | office worker: medium-light skin tone | A person with medium-light skin tone wearing a suit and tie, depicting an office worker. |
| 🧑🏽💼 | office worker: medium skin tone | A person with medium skin tone in a suit and tie, representing an office worker. |
| 🧑🏾💼 | office worker: medium-dark skin tone | A person with medium-dark skin tone dressed in a suit and tie, symbolizing an office worker. |
| 🧑🏿💼 | office worker: dark skin tone | A person with dark skin tone wearing a suit and tie, depicting an office worker. |
| 👨💼 | man office worker | A man in a suit and tie, symbolizing an office worker. |
| 👨🏻💼 | man office worker: light skin tone | A man with light skin tone dressed in a suit and tie, representing an office worker. |
| 👨🏼💼 | man office worker: medium-light skin tone | A man with medium-light skin tone wearing a suit and tie, depicting an office worker. |
| 👨🏽💼 | man office worker: medium skin tone | A man with medium skin tone in a suit and tie, symbolizing an office worker. |
| 👨🏾💼 | man office worker: medium-dark skin tone | A man with medium-dark skin tone dressed in a suit and tie, representing an office worker. |
| 👨🏿💼 | man office worker: dark skin tone | A man with dark skin tone wearing a suit and tie, depicting an office worker. |
| 👩💼 | woman office worker | A woman in a suit and tie, symbolizing an office worker. |
| 👩🏻💼 | woman office worker: light skin tone | A woman with light skin tone, wearing a dark blazer and white blouse, exuding a professional demeanor. |
| 👩🏼💼 | woman office worker: medium-light skin tone | A woman with medium-light skin tone, dressed in a dark blazer and white blouse, presenting a confident office worker appearance. |
| 👩🏽💼 | woman office worker: medium skin tone | A woman with medium skin tone, wearing a dark blazer over a white blouse, looking poised and professional. |
| 👩🏾💼 | woman office worker: medium-dark skin tone | A woman with medium-dark skin tone, dressed in a dark suit and white blouse, radiating professionalism. |
| 👩🏿💼 | woman office worker: dark skin tone | A woman with dark skin tone, wearing a dark blazer and white blouse, embodying a strong office presence. |
| 🧑🔬 | scientist | A gender-neutral scientist in a lab coat, holding a test tube, with a focused expression, ready for experimentation. |
| 🧑🏻🔬 | scientist: light skin tone | A scientist with light skin tone, wearing a lab coat and safety glasses, holding a test tube with a curious expression. |
| 🧑🏼🔬 | scientist: medium-light skin tone | A scientist with medium-light skin tone, dressed in a lab coat, looking inquisitive while holding a test tube. |
| 🧑🏽🔬 | scientist: medium skin tone | A scientist with medium skin tone, wearing a lab coat and safety goggles, appearing engaged in scientific work. |
| 🧑🏾🔬 | scientist: medium-dark skin tone | A scientist with medium-dark skin tone, dressed in a lab coat, focused on a test tube with a determined look. |
| 🧑🏿🔬 | scientist: dark skin tone | A scientist with dark skin tone, wearing a lab coat, holding a test tube and looking intently at it. |
| 👨🔬 | man scientist | A man scientist in a lab coat, holding a test tube, with a serious expression, ready to conduct experiments. |
| 👨🏻🔬 | man scientist: light skin tone | A man with light skin tone, dressed in a lab coat and safety glasses, holding a test tube with a thoughtful look. |
| 👨🏼🔬 | man scientist: medium-light skin tone | A man with medium-light skin tone, wearing a lab coat, looking focused while holding a test tube. |
| 👨🏽🔬 | man scientist: medium skin tone | A man with medium skin tone, dressed in a lab coat, appearing engaged in scientific research with a test tube. |
| 👨🏾🔬 | man scientist: medium-dark skin tone | A man with medium-dark skin tone, in a lab coat, looking seriously at a test tube in his hand. |
| 👨🏿🔬 | man scientist: dark skin tone | A man with dark skin tone, wearing a lab coat, holding a test tube and looking intently at it. |
| 👩🔬 | woman scientist | A woman scientist in a lab coat, holding a test tube, with a determined expression, ready to explore. |
| 👩🏻🔬 | woman scientist: light skin tone | A woman with light skin tone, dressed in a lab coat and safety glasses, holding a test tube with a curious gaze. |
| 👩🏼🔬 | woman scientist: medium-light skin tone | A woman with medium-light skin tone, in a lab coat, looking inquisitive while holding a test tube. |
| 👩🏽🔬 | woman scientist: medium skin tone | A woman with medium skin tone, wearing a lab coat and safety goggles, appearing engaged in her scientific work. |
| 👩🏾🔬 | woman scientist: medium-dark skin tone | A woman with medium-dark skin tone, dressed in a lab coat, focused on a test tube with a serious expression. |
| 👩🏿🔬 | woman scientist: dark skin tone | A woman with dark skin tone, wearing a lab coat, holding a test tube and looking intently at it. |
| 🧑💻 | technologist | A gender-neutral technologist sitting at a computer, focused on the screen, with a look of concentration. |
| 🧑🏻💻 | technologist: light skin tone | A technologist with light skin tone, sitting at a computer, typing with a focused expression. |
| 🧑🏼💻 | technologist: medium-light skin tone | A technologist with medium-light skin tone, engaged at a computer, appearing concentrated on their work. |
| 🧑🏽💻 | technologist: medium skin tone | A technologist with medium skin tone, sitting at a computer, looking focused while typing. |
| 🧑🏾💻 | technologist: medium-dark skin tone | A technologist with medium-dark skin tone, working at a computer, with an intense look of concentration. |
| 🧑🏿💻 | technologist: dark skin tone | A technologist with dark skin tone, seated at a computer, deeply focused on the screen. |
| 👨💻 | man technologist | A man technologist at a computer, typing with a serious expression, immersed in his work. |
| 👨🏻💻 | man technologist: light skin tone | A man with light skin tone, sitting at a computer, focused on the screen with a determined look. |
| 👨🏼💻 | man technologist: medium-light skin tone | A man with medium-light skin tone, engaged at a computer, appearing concentrated on his tasks. |
| 👨🏽💻 | man technologist: medium skin tone | A man with medium skin tone, working at a computer, looking focused and intent on his work. |
| 👨🏾💻 | man technologist: medium-dark skin tone | A man with medium-dark skin tone, seated at a computer, deeply focused on the screen. |
| 👨🏿💻 | man technologist: dark skin tone | A man with dark skin tone, sitting at a computer, typing with a serious and concentrated expression. |
| 👩💻 | woman technologist | A woman technologist at a computer, focused on the screen, with a look of determination. |
| 👩🏻💻 | woman technologist: light skin tone | A woman with light skin tone, sitting at a computer, typing with a focused expression. |
| 👩🏼💻 | woman technologist: medium-light skin tone | A woman with medium-light skin tone, engaged at a computer, appearing concentrated on her work. |
| 👩🏽💻 | woman technologist: medium skin tone | A woman with medium skin tone, working at a computer, looking focused while typing. |
| 👩🏾💻 | woman technologist: medium-dark skin tone | A woman with medium-dark skin tone, seated at a computer, deeply focused on the screen. |
| 👩🏿💻 | woman technologist: dark skin tone | A woman with dark skin, wearing glasses, focused on a laptop, representing a technologist. |
| 🧑🎤 | singer | A person with a neutral skin tone, sporting a stylish hairstyle and microphone, embodying a singer. |
| 🧑🏻🎤 | singer: light skin tone | A person with light skin, wearing a trendy outfit and holding a microphone, representing a singer. |
| 🧑🏼🎤 | singer: medium-light skin tone | A person with medium-light skin, dressed in a fashionable outfit and holding a microphone, symbolizing a singer. |
| 🧑🏽🎤 | singer: medium skin tone | A person with medium skin tone, dressed in a cool outfit and holding a microphone, representing a singer. |
| 🧑🏾🎤 | singer: medium-dark skin tone | A person with medium-dark skin, wearing a stylish outfit and holding a microphone, embodying a singer. |
| 🧑🏿🎤 | singer: dark skin tone | A person with dark skin, sporting a trendy hairstyle and microphone, representing a singer. |
| 👨🎤 | man singer | A man with a neutral skin tone, wearing a stylish outfit and microphone, embodying a singer. |
| 👨🏻🎤 | man singer: light skin tone | A man with light skin, dressed in a fashionable outfit and holding a microphone, representing a singer. |
| 👨🏼🎤 | man singer: medium-light skin tone | A man with medium-light skin, wearing a trendy outfit and holding a microphone, symbolizing a singer. |
| 👨🏽🎤 | man singer: medium skin tone | A man with medium skin tone, dressed in a cool outfit and holding a microphone, representing a singer. |
| 👨🏾🎤 | man singer: medium-dark skin tone | A man with medium-dark skin, wearing a stylish outfit and holding a microphone, embodying a singer. |
| 👨🏿🎤 | man singer: dark skin tone | A man with dark skin, sporting a trendy hairstyle and microphone, representing a singer. |
| 👩🎤 | woman singer | A woman with a neutral skin tone, wearing a fashionable outfit and holding a microphone, embodying a singer. |
| 👩🏻🎤 | woman singer: light skin tone | A woman with light skin, dressed in a stylish outfit and holding a microphone, representing a singer. |
| 👩🏼🎤 | woman singer: medium-light skin tone | A woman with medium-light skin, wearing a trendy outfit and holding a microphone, symbolizing a singer. |
| 👩🏽🎤 | woman singer: medium skin tone | A woman with medium skin tone, dressed in a cool outfit and holding a microphone, representing a singer. |
| 👩🏾🎤 | woman singer: medium-dark skin tone | A woman with medium-dark skin, wearing a stylish outfit and holding a microphone, embodying a singer. |
| 👩🏿🎤 | woman singer: dark skin tone | A woman with dark skin, sporting a trendy hairstyle and microphone, representing a singer. |
| 🧑🎨 | artist | A person with a neutral skin tone, holding a palette and brush, representing an artist. |
| 🧑🏻🎨 | artist: light skin tone | A person with light skin, holding a palette and brush, representing an artist. |
| 🧑🏼🎨 | artist: medium-light skin tone | A person with medium-light skin, holding a palette and brush, representing an artist. |
| 🧑🏽🎨 | artist: medium skin tone | A person with medium skin tone, holding a palette and brush, representing an artist. |
| 🧑🏾🎨 | artist: medium-dark skin tone | A person with medium-dark skin, holding a palette and brush, representing an artist. |
| 🧑🏿🎨 | artist: dark skin tone | A person with dark skin, holding a palette and brush, representing an artist. |
| 👨🎨 | man artist | A man with a neutral skin tone, holding a palette and brush, embodying an artist. |
| 👨🏻🎨 | man artist: light skin tone | A man with light skin, holding a palette and brush, representing an artist. |
| 👨🏼🎨 | man artist: medium-light skin tone | A man with medium-light skin, holding a palette and brush, representing an artist. |
| 👨🏽🎨 | man artist: medium skin tone | A man with medium skin tone, holding a palette and brush, representing an artist. |
| 👨🏾🎨 | man artist: medium-dark skin tone | A man with medium-dark skin, holding a palette and brush, representing an artist. |
| 👨🏿🎨 | man artist: dark skin tone | A man with dark skin, holding a palette and brush, representing an artist. |
| 👩🎨 | woman artist | A woman with a neutral skin tone, holding a palette and brush, embodying an artist. |
| 👩🏻🎨 | woman artist: light skin tone | A woman with light skin, holding a palette and brush, representing an artist. |
| 👩🏼🎨 | woman artist: medium-light skin tone | A woman with medium-light skin, holding a palette and brush, representing an artist. |
| 👩🏽🎨 | woman artist: medium skin tone | A woman with medium skin tone, holding a palette and brush, representing an artist. |
| 👩🏾🎨 | woman artist: medium-dark skin tone | A woman with medium-dark skin, holding a palette and brush, representing an artist. |
| 👩🏿🎨 | woman artist: dark skin tone | A woman with dark skin, holding a palette and brush, representing an artist. |
| 🧑✈️ | pilot | A person with a neutral skin tone, dressed in a pilot’s uniform, representing a pilot. |
| 🧑🏻✈️ | pilot: light skin tone | A person with light skin, dressed in a pilot’s uniform, representing a pilot. |
| 🧑🏼✈️ | pilot: medium-light skin tone | A person with medium-light skin, dressed in a pilot’s uniform, representing a pilot. |
| 🧑🏽✈️ | pilot: medium skin tone | A person with medium skin tone wearing a pilot’s uniform, complete with a jacket and a cap, looking confidently forward. |
| 🧑🏾✈️ | pilot: medium-dark skin tone | A person with medium-dark skin tone dressed in a pilot’s uniform, featuring a jacket and cap, exuding a sense of authority. |
| 🧑🏿✈️ | pilot: dark skin tone | A person with dark skin tone in a pilot’s uniform, including a jacket and cap, appearing professional and focused. |
| 👨✈️ | man pilot | A man in a pilot’s uniform, characterized by a jacket and cap, with a determined expression. |
| 👨🏻✈️ | man pilot: light skin tone | A man with light skin tone wearing a pilot’s uniform, complete with a jacket and cap, looking confidently ahead. |
| 👨🏼✈️ | man pilot: medium-light skin tone | A man with medium-light skin tone dressed in a pilot’s uniform, featuring a jacket and cap, displaying a professional demeanor. |
| 👨🏽✈️ | man pilot: medium skin tone | A man with medium skin tone in a pilot’s uniform, including a jacket and cap, looking focused and ready for flight. |
| 👨🏾✈️ | man pilot: medium-dark skin tone | A man with medium-dark skin tone wearing a pilot’s uniform, characterized by a jacket and cap, appearing authoritative. |
| 👨🏿✈️ | man pilot: dark skin tone | A man with dark skin tone dressed in a pilot’s uniform, complete with a jacket and cap, exuding confidence. |
| 👩✈️ | woman pilot | A woman in a pilot’s uniform, featuring a jacket and cap, with a determined expression on her face. |
| 👩🏻✈️ | woman pilot: light skin tone | A woman with light skin tone wearing a pilot’s uniform, characterized by a jacket and cap, looking confidently forward. |
| 👩🏼✈️ | woman pilot: medium-light skin tone | A woman with medium-light skin tone dressed in a pilot’s uniform, including a jacket and cap, displaying a professional attitude. |
| 👩🏽✈️ | woman pilot: medium skin tone | A woman with medium skin tone in a pilot’s uniform, complete with a jacket and cap, looking focused and ready for action. |
| 👩🏾✈️ | woman pilot: medium-dark skin tone | A woman with medium-dark skin tone wearing a pilot’s uniform, characterized by a jacket and cap, appearing confident. |
| 👩🏿✈️ | woman pilot: dark skin tone | A woman with dark skin tone dressed in a pilot’s uniform, including a jacket and cap, exuding professionalism. |
| 🧑🚀 | astronaut | A person in a space suit, complete with a helmet, looking ready for an adventure in outer space. |
| 🧑🏻🚀 | astronaut: light skin tone | A person with light skin tone wearing a space suit and helmet, prepared for a journey into space. |
| 🧑🏼🚀 | astronaut: medium-light skin tone | A person with medium-light skin tone dressed in a space suit and helmet, looking ready for space exploration. |
| 🧑🏽🚀 | astronaut: medium skin tone | A person with medium skin tone in a space suit and helmet, appearing eager for an adventure in space. |
| 🧑🏾🚀 | astronaut: medium-dark skin tone | A person with medium-dark skin tone wearing a space suit and helmet, looking prepared for space travel. |
| 🧑🏿🚀 | astronaut: dark skin tone | A person with dark skin tone dressed in a space suit and helmet, exuding excitement for space exploration. |
| 👨🚀 | man astronaut | A man in a space suit with a helmet, looking ready for an adventure among the stars. |
| 👨🏻🚀 | man astronaut: light skin tone | A man with light skin tone wearing a space suit and helmet, prepared for a journey into outer space. |
| 👨🏼🚀 | man astronaut: medium-light skin tone | A man with medium-light skin tone dressed in a space suit and helmet, looking eager for space exploration. |
| 👨🏽🚀 | man astronaut: medium skin tone | A man with medium skin tone in a space suit and helmet, appearing ready for an exciting space mission. |
| 👨🏾🚀 | man astronaut: medium-dark skin tone | A man with medium-dark skin tone wearing a space suit and helmet, looking prepared for an adventure in space. |
| 👨🏿🚀 | man astronaut: dark skin tone | A man with dark skin tone dressed in a space suit and helmet, exuding enthusiasm for space travel. |
| 👩🚀 | woman astronaut | A woman in a space suit with a helmet, looking ready for an adventure in the cosmos. |
| 👩🏻🚀 | woman astronaut: light skin tone | A woman with light skin tone wearing a space suit and helmet, prepared for a journey into space. |
| 👩🏼🚀 | woman astronaut: medium-light skin tone | A woman with medium-light skin tone dressed in a space suit and helmet, looking eager for space exploration. |
| 👩🏽🚀 | woman astronaut: medium skin tone | A woman with medium skin tone in a space suit and helmet, appearing ready for an exciting mission in space. |
| 👩🏾🚀 | woman astronaut: medium-dark skin tone | A woman with medium-dark skin tone wearing a space suit and helmet, looking prepared for an adventure in the stars. |
| 👩🏿🚀 | woman astronaut: dark skin tone | A woman with dark skin tone dressed in a space suit and helmet, exuding excitement for space exploration. |
| 🧑🚒 | firefighter | A person in firefighter gear, including a helmet and jacket, looking ready to tackle a fire emergency. |
| 🧑🏻🚒 | firefighter: light skin tone | A person with light skin tone wearing firefighter gear, complete with a helmet and jacket, appearing prepared for action. |
| 🧑🏼🚒 | firefighter: medium-light skin tone | A person with medium-light skin tone dressed in firefighter gear, including a helmet and jacket, looking determined. |
| 🧑🏽🚒 | firefighter: medium skin tone | A person with medium skin tone in firefighter gear, complete with a helmet and jacket, ready for a fire emergency. |
| 🧑🏾🚒 | firefighter: medium-dark skin tone | A person with medium-dark skin tone wearing firefighter gear, characterized by a helmet and jacket, appearing focused. |
| 🧑🏿🚒 | firefighter: dark skin tone | A person with dark skin tone dressed in firefighter gear, including a helmet and jacket, exuding readiness for action. |
| 👨🚒 | man firefighter | A man in firefighter gear, complete with a helmet and jacket, looking prepared to respond to a fire emergency. |
| 👨🏻🚒 | man firefighter: light skin tone | A man with light skin tone wearing a firefighter’s helmet and uniform, standing confidently with a determined expression. |
| 👨🏼🚒 | man firefighter: medium-light skin tone | A man with medium-light skin tone dressed in a firefighter’s uniform and helmet, looking ready for action with a focused expression. |
| 👨🏽🚒 | man firefighter: medium skin tone | A man with medium skin tone in a firefighter’s uniform and helmet, displaying a serious demeanor as he stands prepared for emergencies. |
| 👨🏾🚒 | man firefighter: medium-dark skin tone | A man with medium-dark skin tone wearing a firefighter’s helmet and uniform, exhibiting a brave expression as he stands alert. |
| 👨🏿🚒 | man firefighter: dark skin tone | A man with dark skin tone in a firefighter’s uniform and helmet, showing a composed and determined look as he stands ready. |
| 👩🚒 | woman firefighter | A woman in a firefighter’s uniform and helmet, poised and ready for action, with a determined expression on her face. |
| 👩🏻🚒 | woman firefighter: light skin tone | A woman with light skin tone dressed in a firefighter’s uniform and helmet, looking resolute and prepared for any situation. |
| 👩🏼🚒 | woman firefighter: medium-light skin tone | A woman with medium-light skin tone in a firefighter’s uniform and helmet, displaying a confident expression as she stands ready. |
| 👩🏽🚒 | woman firefighter: medium skin tone | A woman with medium skin tone wearing a firefighter’s helmet and uniform, exuding readiness and determination. |
| 👩🏾🚒 | woman firefighter: medium-dark skin tone | A woman with medium-dark skin tone in a firefighter’s uniform and helmet, showing a focused expression as she stands prepared. |
| 👩🏿🚒 | woman firefighter: dark skin tone | A woman with dark skin tone dressed in a firefighter’s uniform and helmet, displaying a serious and determined demeanor. |
| 👮 | police officer | A police officer in a uniform, standing with a serious expression, ready to enforce the law. |
| 👮🏻 | police officer: light skin tone | A police officer with light skin tone wearing a uniform, looking authoritative and prepared to take action. |
| 👮🏼 | police officer: medium-light skin tone | A police officer with medium-light skin tone in a uniform, displaying a confident and ready expression. |
| 👮🏽 | police officer: medium skin tone | A police officer with medium skin tone dressed in a uniform, exhibiting a serious demeanor as they stand alert. |
| 👮🏾 | police officer: medium-dark skin tone | A police officer with medium-dark skin tone in a uniform, showing a determined expression as they stand ready for duty. |
| 👮🏿 | police officer: dark skin tone | A police officer with dark skin tone wearing a uniform, looking serious and prepared to uphold the law. |
| 👮♂️ | man police officer | A man in a police officer’s uniform, standing with a serious expression, ready to enforce the law. |
| 👮🏻♂️ | man police officer: light skin tone | A man police officer with light skin tone in uniform, looking authoritative and prepared for action. |
| 👮🏼♂️ | man police officer: medium-light skin tone | A man police officer with medium-light skin tone dressed in a uniform, showing a confident and serious demeanor. |
| 👮🏽♂️ | man police officer: medium skin tone | A man police officer with medium skin tone in a uniform, standing alert with a determined expression. |
| 👮🏾♂️ | man police officer: medium-dark skin tone | A man police officer with medium-dark skin tone dressed in a uniform, exhibiting a serious and ready demeanor. |
| 👮🏿♂️ | man police officer: dark skin tone | A man police officer with dark skin tone wearing a uniform, looking serious and prepared for duty. |
| 👮♀️ | woman police officer | A woman in a police officer’s uniform, standing with a serious expression, ready to enforce the law. |
| 👮🏻♀️ | woman police officer: light skin tone | A woman police officer with light skin tone in uniform, looking authoritative and prepared for action. |
| 👮🏼♀️ | woman police officer: medium-light skin tone | A woman police officer with medium-light skin tone dressed in a uniform, displaying a confident and serious demeanor. |
| 👮🏽♀️ | woman police officer: medium skin tone | A woman police officer with medium skin tone in a uniform, standing alert with a determined expression. |
| 👮🏾♀️ | woman police officer: medium-dark skin tone | A woman police officer with medium-dark skin tone dressed in a uniform, showing a focused expression as she stands ready. |
| 👮🏿♀️ | woman police officer: dark skin tone | A woman police officer with dark skin tone wearing a uniform, looking serious and prepared to uphold the law. |
| 🕵️ | detective | A detective wearing a trench coat and fedora, looking inquisitive and observant, ready to solve a mystery. |
| 🕵🏻 | detective: light skin tone | A detective with light skin tone in a trench coat and fedora, displaying a curious expression as they investigate. |
| 🕵🏼 | detective: medium-light skin tone | A detective with medium-light skin tone dressed in a trench coat and fedora, looking focused and ready to uncover clues. |
| 🕵🏽 | detective: medium skin tone | A detective with medium skin tone wearing a trench coat and fedora, exhibiting a serious and observant demeanor. |
| 🕵🏾 | detective: medium-dark skin tone | A detective with medium-dark skin tone in a trench coat and fedora, showing a determined expression as they search for answers. |
| 🕵🏿 | detective: dark skin tone | A detective with dark skin tone dressed in a trench coat and fedora, looking serious and ready to solve a case. |
| 🕵️♂️ | man detective | A man detective wearing a trench coat and fedora, looking inquisitive and ready to investigate. |
| 🕵🏻♂️ | man detective: light skin tone | A man detective with light skin tone in a trench coat and fedora, displaying a curious expression as he investigates. |
| 🕵🏼♂️ | man detective: medium-light skin tone | A man detective with medium-light skin tone dressed in a trench coat and fedora, looking focused and observant. |
| 🕵🏽♂️ | man detective: medium skin tone | A man detective with medium skin tone wearing a trench coat and fedora, exhibiting a serious demeanor as he searches for clues. |
| 🕵🏾♂️ | man detective: medium-dark skin tone | A man detective with medium-dark skin tone in a trench coat and fedora, showing determination as he investigates. |
| 🕵🏿♂️ | man detective: dark skin tone | A man dressed in a black trench coat and hat, with dark skin tone, holding a magnifying glass as if investigating. |
| 🕵️♀️ | woman detective | A woman wearing a black trench coat and hat, holding a magnifying glass, with a focused expression as if solving a mystery. |
| 🕵🏻♀️ | woman detective: light skin tone | A woman detective with light skin tone, dressed in a black trench coat and hat, holding a magnifying glass with a determined look. |
| 🕵🏼♀️ | woman detective: medium-light skin tone | A woman with medium-light skin tone, wearing a black trench coat and hat, holding a magnifying glass, appearing inquisitive. |
| 🕵🏽♀️ | woman detective: medium skin tone | A woman detective with medium skin tone, dressed in a black trench coat and hat, holding a magnifying glass and looking curious. |
| 🕵🏾♀️ | woman detective: medium-dark skin tone | A woman with medium-dark skin tone, wearing a black trench coat and hat, holding a magnifying glass, looking intently as if on a case. |
| 🕵🏿♀️ | woman detective: dark skin tone | A woman detective with dark skin tone, dressed in a black trench coat and hat, holding a magnifying glass, with a serious expression. |
| 💂 | guard | A guard in a tall black hat, wearing a red tunic and black trousers, standing at attention with a serious expression. |
| 💂🏻 | guard: light skin tone | A guard with light skin tone, wearing a tall black hat and a red tunic, standing firmly with a serious demeanor. |
| 💂🏼 | guard: medium-light skin tone | A guard with medium-light skin tone, dressed in a red tunic and a tall black hat, standing at attention with a focused look. |
| 💂🏽 | guard: medium skin tone | A guard with medium skin tone, wearing a tall black hat and a red uniform, standing proudly with a serious expression. |
| 💂🏾 | guard: medium-dark skin tone | A guard with medium-dark skin tone, dressed in a red tunic and a tall black hat, standing at attention with a stern look. |
| 💂🏿 | guard: dark skin tone | A guard with dark skin tone, wearing a tall black hat and a red uniform, standing firmly with a serious expression. |
| 💂♂️ | man guard | A man guard in a tall black hat and red tunic, standing at attention with a serious expression. |
| 💂🏻♂️ | man guard: light skin tone | A man guard with light skin tone, dressed in a red tunic and a tall black hat, standing firmly with a serious demeanor. |
| 💂🏼♂️ | man guard: medium-light skin tone | A man guard with medium-light skin tone, wearing a tall black hat and a red uniform, standing at attention with a focused look. |
| 💂🏽♂️ | man guard: medium skin tone | A man guard with medium skin tone, dressed in a red tunic and a tall black hat, standing proudly with a serious expression. |
| 💂🏾♂️ | man guard: medium-dark skin tone | A man guard with medium-dark skin tone, wearing a tall black hat and a red uniform, standing at attention with a stern look. |
| 💂🏿♂️ | man guard: dark skin tone | A man guard with dark skin tone, dressed in a red tunic and a tall black hat, standing firmly with a serious expression. |
| 💂♀️ | woman guard | A woman guard in a tall black hat and red tunic, standing at attention with a serious expression. |
| 💂🏻♀️ | woman guard: light skin tone | A woman guard with light skin tone, dressed in a red tunic and a tall black hat, standing firmly with a serious demeanor. |
| 💂🏼♀️ | woman guard: medium-light skin tone | A woman guard with medium-light skin tone, wearing a tall black hat and a red uniform, standing at attention with a focused look. |
| 💂🏽♀️ | woman guard: medium skin tone | A woman guard with medium skin tone, dressed in a red tunic and a tall black hat, standing proudly with a serious expression. |
| 💂🏾♀️ | woman guard: medium-dark skin tone | A woman guard with medium-dark skin tone, wearing a tall black hat and a red uniform, standing at attention with a stern look. |
| 💂🏿♀️ | woman guard: dark skin tone | A woman guard with dark skin tone, dressed in a red tunic and a tall black hat, standing firmly with a serious expression. |
| 🥷 | ninja | A ninja dressed entirely in black, with a mask covering the lower part of the face, appearing stealthy and ready for action. |
| 🥷🏻 | ninja: light skin tone | A ninja with light skin tone, dressed in black with a mask covering the lower face, looking stealthy and prepared. |
| 🥷🏼 | ninja: medium-light skin tone | A ninja with medium-light skin tone, dressed in black with a mask, appearing stealthy and alert. |
| 🥷🏽 | ninja: medium skin tone | A ninja with medium skin tone, wearing a black outfit and mask, looking ready for action and stealthy. |
| 🥷🏾 | ninja: medium-dark skin tone | A ninja with medium-dark skin tone, dressed in black with a mask, appearing stealthy and poised for action. |
| 🥷🏿 | ninja: dark skin tone | A ninja with dark skin tone, dressed in black with a mask covering the lower face, looking stealthy and ready for action. |
| 👷 | construction worker | A construction worker wearing a yellow hard hat and blue overalls, looking focused and ready for work. |
| 👷🏻 | construction worker: light skin tone | A construction worker with light skin tone, wearing a yellow hard hat and blue overalls, appearing diligent and ready to work. |
| 👷🏼 | construction worker: medium-light skin tone | A construction worker with medium-light skin tone, dressed in blue overalls and a yellow hard hat, looking focused and prepared. |
| 👷🏽 | construction worker: medium skin tone | A construction worker with medium skin tone, wearing a yellow hard hat and blue overalls, looking determined and ready for work. |
| 👷🏾 | construction worker: medium-dark skin tone | A construction worker with medium-dark skin tone, dressed in blue overalls and a yellow hard hat, appearing diligent and ready to work. |
| 👷🏿 | construction worker: dark skin tone | A construction worker with dark skin tone, wearing a yellow hard hat and blue overalls, looking focused and ready for action. |
| 👷♂️ | man construction worker | A man construction worker wearing a yellow hard hat and blue overalls, looking determined and ready for work. |
| 👷🏻♂️ | man construction worker: light skin tone | A man construction worker with light skin tone, dressed in blue overalls and a yellow hard hat, appearing diligent and ready to work. |
| 👷🏼♂️ | man construction worker: medium-light skin tone | A man construction worker with medium-light skin tone, wearing a yellow hard hat and blue overalls, looking focused and ready for action. |
| 👷🏽♂️ | man construction worker: medium skin tone | A man wearing a hard hat and work clothes, with medium skin tone, standing upright, ready for construction work. |
| 👷🏾♂️ | man construction worker: medium-dark skin tone | A man in a hard hat and work attire, with medium-dark skin tone, positioned confidently as a construction worker. |
| 👷🏿♂️ | man construction worker: dark skin tone | A man dressed in construction gear and a hard hat, showcasing dark skin tone, standing in a work-ready pose. |
| 👷♀️ | woman construction worker | A woman wearing a hard hat and construction outfit, standing confidently, representing a construction worker. |
| 👷🏻♀️ | woman construction worker: light skin tone | A woman in a hard hat and work clothes, with light skin tone, standing upright as a construction worker. |
| 👷🏼♀️ | woman construction worker: medium-light skin tone | A woman dressed in construction attire and a hard hat, with medium-light skin tone, ready for work. |
| 👷🏽♀️ | woman construction worker: medium skin tone | A woman wearing a hard hat and work clothes, with medium skin tone, standing confidently as a construction worker. |
| 👷🏾♀️ | woman construction worker: medium-dark skin tone | A woman in a hard hat and construction gear, with medium-dark skin tone, posed as a dedicated worker. |
| 👷🏿♀️ | woman construction worker: dark skin tone | A woman dressed in construction clothing and a hard hat, showcasing dark skin tone, standing ready for work. |
| 🫅 | person with crown | A person wearing a crown, exuding a regal presence, with a neutral expression. |
| 🫅🏻 | person with crown: light skin tone | A person with light skin tone wearing a crown, radiating a noble aura. |
| 🫅🏼 | person with crown: medium-light skin tone | A person with medium-light skin tone adorned with a crown, embodying a royal demeanor. |
| 🫅🏽 | person with crown: medium skin tone | A person with medium skin tone wearing a crown, presenting a regal appearance. |
| 🫅🏾 | person with crown: medium-dark skin tone | A person with medium-dark skin tone wearing a crown, exuding a noble presence. |
| 🫅🏿 | person with crown: dark skin tone | A person with dark skin tone adorned with a crown, radiating a royal essence. |
| 🤴 | prince | A prince wearing a crown, dressed in royal attire, with a confident smile. |
| 🤴🏻 | prince: light skin tone | A prince with light skin tone, wearing a crown and royal clothing, smiling confidently. |
| 🤴🏼 | prince: medium-light skin tone | A prince with medium-light skin tone, adorned with a crown and dressed in regal attire, smiling. |
| 🤴🏽 | prince: medium skin tone | A prince with medium skin tone, wearing a crown and royal outfit, exuding confidence. |
| 🤴🏾 | prince: medium-dark skin tone | A prince with medium-dark skin tone, dressed in royal attire and wearing a crown, smiling proudly. |
| 🤴🏿 | prince: dark skin tone | A prince with dark skin tone, wearing a crown and regal clothing, radiating confidence. |
| 👸 | princess | A princess wearing a crown, dressed in elegant attire, with a gentle smile. |
| 👸🏻 | princess: light skin tone | A princess with light skin tone, adorned with a crown and wearing a beautiful gown, smiling softly. |
| 👸🏼 | princess: medium-light skin tone | A princess with medium-light skin tone, wearing a crown and elegant dress, smiling gracefully. |
| 👸🏽 | princess: medium skin tone | A princess with medium skin tone, dressed in royal attire and wearing a crown, smiling warmly. |
| 👸🏾 | princess: medium-dark skin tone | A princess with medium-dark skin tone, adorned with a crown and elegant clothing, smiling sweetly. |
| 👸🏿 | princess: dark skin tone | A princess with dark skin tone, wearing a crown and beautiful gown, radiating grace. |
| 👳 | person wearing turban | A person wearing a turban, with a neutral expression, representing cultural attire. |
| 👳🏻 | person wearing turban: light skin tone | A person with light skin tone wearing a turban, embodying cultural significance. |
| 👳🏼 | person wearing turban: medium-light skin tone | A person with medium-light skin tone adorned with a turban, representing cultural attire. |
| 👳🏽 | person wearing turban: medium skin tone | A person with medium skin tone wearing a turban, showcasing cultural heritage. |
| 👳🏾 | person wearing turban: medium-dark skin tone | A person with medium-dark skin tone wearing a turban, reflecting cultural identity. |
| 👳🏿 | person wearing turban: dark skin tone | A person with dark skin tone adorned with a turban, representing cultural significance. |
| 👳♂️ | man wearing turban | A man wearing a turban, standing upright with a neutral expression, representing cultural attire. |
| 👳🏻♂️ | man wearing turban: light skin tone | A man with light skin tone wearing a turban, reflecting cultural significance. |
| 👳🏼♂️ | man wearing turban: medium-light skin tone | A man with medium-light skin tone adorned with a turban, showcasing cultural attire. |
| 👳🏽♂️ | man wearing turban: medium skin tone | A man with medium skin tone wearing a turban, representing cultural heritage. |
| 👳🏾♂️ | man wearing turban: medium-dark skin tone | A man with medium-dark skin tone wearing a turban, embodying cultural identity. |
| 👳🏿♂️ | man wearing turban: dark skin tone | A man with dark skin tone adorned with a turban, reflecting cultural significance. |
| 👳♀️ | woman wearing turban | A woman wearing a turban, standing confidently with a neutral expression, representing cultural attire. |
| 👳🏻♀️ | woman wearing turban: light skin tone | A woman with light skin tone wearing a white turban, looking straight ahead with a neutral expression. |
| 👳🏼♀️ | woman wearing turban: medium-light skin tone | A woman with medium-light skin tone wearing a white turban, gazing forward with a calm demeanor. |
| 👳🏽♀️ | woman wearing turban: medium skin tone | A woman with medium skin tone adorned in a white turban, presenting a composed expression. |
| 👳🏾♀️ | woman wearing turban: medium-dark skin tone | A woman with medium-dark skin tone wearing a white turban, looking ahead with a serene expression. |
| 👳🏿♀️ | woman wearing turban: dark skin tone | A woman with dark skin tone sporting a white turban, facing forward with a gentle expression. |
| 👲 | person with skullcap | A person wearing a traditional skullcap, with a neutral expression, facing forward. |
| 👲🏻 | person with skullcap: light skin tone | A person with light skin tone wearing a white skullcap, looking directly ahead with a calm expression. |
| 👲🏼 | person with skullcap: medium-light skin tone | A person with medium-light skin tone donning a white skullcap, gazing forward with a composed demeanor. |
| 👲🏽 | person with skullcap: medium skin tone | A person with medium skin tone in a white skullcap, presenting a neutral expression. |
| 👲🏾 | person with skullcap: medium-dark skin tone | A person with medium-dark skin tone wearing a white skullcap, looking straight ahead with a serene expression. |
| 👲🏿 | person with skullcap: dark skin tone | A person with dark skin tone sporting a white skullcap, facing forward with a gentle demeanor. |
| 🧕 | woman with headscarf | A woman wearing a headscarf that covers her hair, looking straight ahead with a composed expression. |
| 🧕🏻 | woman with headscarf: light skin tone | A woman with light skin tone wearing a light-colored headscarf, gazing forward with a calm demeanor. |
| 🧕🏼 | woman with headscarf: medium-light skin tone | A woman with medium-light skin tone in a light-colored headscarf, looking ahead with a serene expression. |
| 🧕🏽 | woman with headscarf: medium skin tone | A woman with medium skin tone wearing a headscarf, presenting a neutral expression. |
| 🧕🏾 | woman with headscarf: medium-dark skin tone | A woman with medium-dark skin tone in a headscarf, looking straight ahead with a gentle demeanor. |
| 🧕🏿 | woman with headscarf: dark skin tone | A woman with dark skin tone wearing a dark-colored headscarf, facing forward with a composed expression. |
| 🤵 | person in tuxedo | A person in a formal black tuxedo, looking straight ahead with a neutral expression. |
| 🤵🏻 | person in tuxedo: light skin tone | A person with light skin tone dressed in a black tuxedo, gazing forward with a calm demeanor. |
| 🤵🏼 | person in tuxedo: medium-light skin tone | A person with medium-light skin tone wearing a black tuxedo, looking straight ahead with a composed expression. |
| 🤵🏽 | person in tuxedo: medium skin tone | A person with medium skin tone in a black tuxedo, presenting a neutral expression. |
| 🤵🏾 | person in tuxedo: medium-dark skin tone | A person with medium-dark skin tone dressed in a black tuxedo, looking forward with a serene expression. |
| 🤵🏿 | person in tuxedo: dark skin tone | A person with dark skin tone in a black tuxedo, facing forward with a gentle demeanor. |
| 🤵♂️ | man in tuxedo | A man in a formal black tuxedo, looking straight ahead with a neutral expression. |
| 🤵🏻♂️ | man in tuxedo: light skin tone | A man with light skin tone dressed in a black tuxedo, gazing forward with a calm demeanor. |
| 🤵🏼♂️ | man in tuxedo: medium-light skin tone | A man with medium-light skin tone in a black tuxedo, looking straight ahead with a composed expression. |
| 🤵🏽♂️ | man in tuxedo: medium skin tone | A man with medium skin tone wearing a black tuxedo, presenting a neutral expression. |
| 🤵🏾♂️ | man in tuxedo: medium-dark skin tone | A man with medium-dark skin tone dressed in a black tuxedo, looking forward with a serene expression. |
| 🤵🏿♂️ | man in tuxedo: dark skin tone | A man with dark skin tone in a black tuxedo, facing forward with a gentle demeanor. |
| 🤵♀️ | woman in tuxedo | A woman in a formal black tuxedo, looking straight ahead with a neutral expression. |
| 🤵🏻♀️ | woman in tuxedo: light skin tone | A woman with light skin tone dressed in a black tuxedo, gazing forward with a calm demeanor. |
| 🤵🏼♀️ | woman in tuxedo: medium-light skin tone | A woman with medium-light skin tone in a black tuxedo, looking straight ahead with a composed expression. |
| 🤵🏽♀️ | woman in tuxedo: medium skin tone | A woman with medium skin tone wearing a black tuxedo, presenting a neutral expression. |
| 🤵🏾♀️ | woman in tuxedo: medium-dark skin tone | A woman with medium-dark skin tone dressed in a black tuxedo, looking forward with a serene expression. |
| 🤵🏿♀️ | woman in tuxedo: dark skin tone | A woman with dark skin tone in a black tuxedo, facing forward with a gentle demeanor. |
| 👰 | person with veil | A person wearing a wedding veil, looking straight ahead with a serene expression. |
| 👰🏻 | person with veil: light skin tone | A person with light skin tone adorned with a white veil, gazing forward with a calm demeanor. |
| 👰🏼 | person with veil: medium-light skin tone | A person with medium-light skin tone wearing a white veil, looking straight ahead with a composed expression. |
| 👰🏽 | person with veil: medium skin tone | A person with medium skin tone in a wedding veil, presenting a neutral expression. |
| 👰🏾 | person with veil: medium-dark skin tone | A person with medium-dark skin tone wearing a white veil, looking forward with a gentle demeanor. |
| 👰🏿 | person with veil: dark skin tone | A woman in a white wedding dress with a dark skin tone, wearing a delicate veil that covers her hair. |
| 👰♂️ | man with veil | A man dressed in a formal suit with a white shirt and a black tie, wearing a veil over his head. |
| 👰🏻♂️ | man with veil: light skin tone | A man in a formal suit with a light skin tone, wearing a white shirt and a black tie, topped with a veil. |
| 👰🏼♂️ | man with veil: medium-light skin tone | A man with a medium-light skin tone, dressed in a suit and tie, wearing a white veil. |
| 👰🏽♂️ | man with veil: medium skin tone | A man in a formal suit with a medium skin tone, wearing a white shirt, black tie, and a veil. |
| 👰🏾♂️ | man with veil: medium-dark skin tone | A man with a medium-dark skin tone in a formal suit, wearing a veil that covers his hair. |
| 👰🏿♂️ | man with veil: dark skin tone | A man in a formal suit with a dark skin tone, wearing a veil that drapes over his head. |
| 👰♀️ | woman with veil | A woman in a white wedding dress with a veil covering her hair, smiling gently. |
| 👰🏻♀️ | woman with veil: light skin tone | A woman with a light skin tone in a white wedding dress, wearing a delicate veil. |
| 👰🏼♀️ | woman with veil: medium-light skin tone | A woman with medium-light skin tone in a white wedding dress and a veil, looking serene. |
| 👰🏽♀️ | woman with veil: medium skin tone | A woman in a white wedding dress with a medium skin tone, wearing a veil that softly frames her face. |
| 👰🏾♀️ | woman with veil: medium-dark skin tone | A woman in a white wedding dress with a medium-dark skin tone, adorned with a veil. |
| 👰🏿♀️ | woman with veil: dark skin tone | A woman with a dark skin tone in a white wedding dress, her hair covered by a flowing veil. |
| 🤰 | pregnant woman | A woman with a rounded belly, wearing a simple dress, looking down affectionately at her pregnancy. |
| 🤰🏻 | pregnant woman: light skin tone | A pregnant woman with a light skin tone, gently cradling her rounded belly while wearing a simple dress. |
| 🤰🏼 | pregnant woman: medium-light skin tone | A pregnant woman with medium-light skin tone, looking down at her belly with a soft smile. |
| 🤰🏽 | pregnant woman: medium skin tone | A pregnant woman with medium skin tone, wearing a dress and cradling her rounded belly. |
| 🤰🏾 | pregnant woman: medium-dark skin tone | A pregnant woman with medium-dark skin tone, gently holding her belly and smiling down at it. |
| 🤰🏿 | pregnant woman: dark skin tone | A pregnant woman with a dark skin tone, wearing a dress and affectionately cradling her belly. |
| 🫃 | pregnant man | A man with a rounded belly, appearing bloated, dressed casually and looking down at his stomach. |
| 🫃🏻 | pregnant man: light skin tone | A light-skinned man with a rounded belly, casually dressed and looking down at his stomach. |
| 🫃🏼 | pregnant man: medium-light skin tone | A medium-light skinned man with a rounded belly, dressed casually and gazing at his stomach. |
| 🫃🏽 | pregnant man: medium skin tone | A medium-skinned man with a rounded belly, looking down at his stomach while dressed casually. |
| 🫃🏾 | pregnant man: medium-dark skin tone | A medium-dark skinned man with a rounded belly, casually dressed and gazing at his stomach. |
| 🫃🏿 | pregnant man: dark skin tone | A dark-skinned man with a rounded belly, dressed casually and looking down at his stomach. |
| 🫄 | pregnant person | A person with a rounded belly, appearing pregnant, dressed simply and looking down affectionately. |
| 🫄🏻 | pregnant person: light skin tone | A light-skinned person with a rounded belly, casually dressed and looking down at their stomach. |
| 🫄🏼 | pregnant person: medium-light skin tone | A medium-light skinned person with a rounded belly, dressed simply and gazing down at their stomach. |
| 🫄🏽 | pregnant person: medium skin tone | A medium-skinned person with a rounded belly, looking down at their stomach while dressed casually. |
| 🫄🏾 | pregnant person: medium-dark skin tone | A medium-dark skinned person with a rounded belly, casually dressed and gazing at their stomach. |
| 🫄🏿 | pregnant person: dark skin tone | A dark-skinned person with a rounded belly, dressed simply and looking down affectionately. |
| 🤱 | breast-feeding | A woman sitting and breastfeeding a baby, looking down lovingly at the child in her arms. |
| 🤱🏻 | breast-feeding: light skin tone | A light-skinned woman breastfeeding a baby, gently cradling the child while looking down affectionately. |
| 🤱🏼 | breast-feeding: medium-light skin tone | A medium-light skinned woman breastfeeding a baby, smiling softly as she looks down at the child. |
| 🤱🏽 | breast-feeding: medium skin tone | A medium-skinned woman breastfeeding a baby, cradling the child lovingly in her arms. |
| 🤱🏾 | breast-feeding: medium-dark skin tone | A medium-dark skinned woman breastfeeding a baby, looking down with a warm smile. |
| 🤱🏿 | breast-feeding: dark skin tone | A dark-skinned woman breastfeeding a baby, gently cradling the child and looking down affectionately. |
| 👩🍼 | woman feeding baby | A woman holding a baby in one arm while feeding it from a bottle, looking down with a nurturing expression. |
| 👩🏻🍼 | woman feeding baby: light skin tone | A light-skinned woman feeding a baby with a bottle, cradling the child and smiling gently. |
| 👩🏼🍼 | woman feeding baby: medium-light skin tone | A medium-light skinned woman holding a baby and feeding it from a bottle, looking lovingly at the child. |
| 👩🏽🍼 | woman feeding baby: medium skin tone | A woman with medium skin tone is gently holding a baby while feeding them, wearing a soft smile. |
| 👩🏾🍼 | woman feeding baby: medium-dark skin tone | A woman with medium-dark skin tone is lovingly feeding a baby, her expression warm and nurturing. |
| 👩🏿🍼 | woman feeding baby: dark skin tone | A woman with dark skin tone is cradling a baby in her arms as she feeds them, showing a caring demeanor. |
| 👨🍼 | man feeding baby | A man is feeding a baby, holding them securely in one arm while offering a bottle with a gentle expression. |
| 👨🏻🍼 | man feeding baby: light skin tone | A man with light skin tone is feeding a baby, his face displaying a tender smile as he cradles the child. |
| 👨🏼🍼 | man feeding baby: medium-light skin tone | A man with medium-light skin tone is feeding a baby, looking down with affection and care. |
| 👨🏽🍼 | man feeding baby: medium skin tone | A man with medium skin tone is feeding a baby, his expression soft and attentive as he holds the child. |
| 👨🏾🍼 | man feeding baby: medium-dark skin tone | A man with medium-dark skin tone is nurturing a baby, feeding them with a loving gaze. |
| 👨🏿🍼 | man feeding baby: dark skin tone | A man with dark skin tone is gently feeding a baby, showcasing a caring and protective demeanor. |
| 🧑🍼 | person feeding baby | A person is feeding a baby, holding them close with a kind expression, embodying warmth and care. |
| 🧑🏻🍼 | person feeding baby: light skin tone | A person with light skin tone is lovingly feeding a baby, their face reflecting tenderness. |
| 🧑🏼🍼 | person feeding baby: medium-light skin tone | A person with medium-light skin tone is feeding a baby, showing a gentle smile and nurturing presence. |
| 🧑🏽🍼 | person feeding baby: medium skin tone | A person with medium skin tone is cradling a baby while feeding them, their expression serene and caring. |
| 🧑🏾🍼 | person feeding baby: medium-dark skin tone | A person with medium-dark skin tone is feeding a baby, radiating warmth and affection. |
| 🧑🏿🍼 | person feeding baby: dark skin tone | A person with dark skin tone is gently feeding a baby, their demeanor calm and loving. |
| 👼 | baby angel | A small angelic baby with a cherubic face, wearing a white robe and wings, exuding innocence and purity. |
| 👼🏻 | baby angel: light skin tone | A baby angel with light skin tone, dressed in a white robe and wings, looking sweet and innocent. |
| 👼🏼 | baby angel: medium-light skin tone | A baby angel with medium-light skin tone, wearing a white robe and delicate wings, radiating purity. |
| 👼🏽 | baby angel: medium skin tone | A baby angel with medium skin tone, adorned in a white robe and wings, embodying innocence. |
| 👼🏾 | baby angel: medium-dark skin tone | A baby angel with medium-dark skin tone, dressed in a white robe and wings, appearing gentle and pure. |
| 👼🏿 | baby angel: dark skin tone | A baby angel with dark skin tone, wearing a white robe and wings, looking sweet and innocent. |
| 🎅 | Santa Claus | A jolly Santa Claus with a white beard, red suit, and black belt, smiling warmly as he embodies the spirit of Christmas. |
| 🎅🏻 | Santa Claus: light skin tone | A Santa Claus with light skin tone, wearing a traditional red suit and white beard, exuding joy and cheer. |
| 🎅🏼 | Santa Claus: medium-light skin tone | A Santa Claus with medium-light skin tone, dressed in a red suit and white beard, looking festive and cheerful. |
| 🎅🏽 | Santa Claus: medium skin tone | A Santa Claus with medium skin tone, wearing a classic red suit and white beard, radiating holiday spirit. |
| 🎅🏾 | Santa Claus: medium-dark skin tone | A Santa Claus with medium-dark skin tone, dressed in a red suit and white beard, smiling with warmth. |
| 🎅🏿 | Santa Claus: dark skin tone | A Santa Claus with dark skin tone, wearing a red suit and white beard, embodying the joy of Christmas. |
| 🤶 | Mrs. Claus | Mrs. Claus is smiling warmly, dressed in a red dress with white trim, radiating kindness and holiday cheer. |
| 🤶🏻 | Mrs. Claus: light skin tone | Mrs. Claus with light skin tone, wearing a festive red dress and white trim, looking cheerful and welcoming. |
| 🤶🏼 | Mrs. Claus: medium-light skin tone | Mrs. Claus with medium-light skin tone, dressed in a red dress with white trim, exuding warmth and joy. |
| 🤶🏽 | Mrs. Claus: medium skin tone | Mrs. Claus with medium skin tone, wearing a red dress with white trim, smiling with a friendly demeanor. |
| 🤶🏾 | Mrs. Claus: medium-dark skin tone | Mrs. Claus with medium-dark skin tone, dressed in a red dress with white trim, radiating holiday spirit. |
| 🤶🏿 | Mrs. Claus: dark skin tone | Mrs. Claus with dark skin tone, wearing a red dress with white trim, embodying warmth and cheer. |
| 🧑🎄 | Mx Claus | Mx Claus is smiling, dressed in a festive outfit with red and white accents, embodying the spirit of the holidays. |
| 🧑🏻🎄 | Mx Claus: light skin tone | Mx Claus with light skin tone, dressed in a festive outfit, looking cheerful and inviting. |
| 🧑🏼🎄 | Mx Claus: medium-light skin tone | Mx Claus with medium-light skin tone, wearing a festive outfit, radiating holiday cheer. |
| 🧑🏽🎄 | Mx Claus: medium skin tone | Mx Claus with medium skin tone, dressed in a festive outfit, smiling warmly. |
| 🧑🏾🎄 | Mx Claus: medium-dark skin tone | Mx Claus with medium-dark skin tone, wearing a festive outfit, exuding joy and warmth. |
| 🧑🏿🎄 | Mx Claus: dark skin tone | Mx Claus with dark skin tone, dressed in a festive outfit, embodying the spirit of celebration. |
| 🦸 | superhero | A superhero figure in a dynamic pose, wearing a colorful costume with a cape, exuding strength and confidence. |
| 🦸🏻 | superhero: light skin tone | A superhero with light skin tone, wearing a colorful costume and a cape, striking a confident pose with one arm raised. |
| 🦸🏼 | superhero: medium-light skin tone | A superhero with medium-light skin tone, dressed in a vibrant outfit and cape, standing heroically with one fist clenched. |
| 🦸🏽 | superhero: medium skin tone | A superhero with medium skin tone, showcasing a bold costume and cape, posed with determination and one arm extended. |
| 🦸🏾 | superhero: medium-dark skin tone | A superhero with medium-dark skin tone, wearing a dynamic costume and flowing cape, confidently standing with a strong stance. |
| 🦸🏿 | superhero: dark skin tone | A superhero with dark skin tone, donned in a striking outfit and cape, posing assertively with a raised arm. |
| 🦸♂️ | man superhero | A male superhero in a colorful costume and cape, standing proudly with a confident expression. |
| 🦸🏻♂️ | man superhero: light skin tone | A light-skinned male superhero in a vibrant costume and cape, posed heroically with one arm raised. |
| 🦸🏼♂️ | man superhero: medium-light skin tone | A medium-light-skinned male superhero, dressed in a bright outfit and cape, standing with a determined expression. |
| 🦸🏽♂️ | man superhero: medium skin tone | A medium-skinned male superhero in a colorful costume and cape, confidently posing with one arm extended. |
| 🦸🏾♂️ | man superhero: medium-dark skin tone | A medium-dark-skinned male superhero, wearing a dynamic outfit and flowing cape, standing strong with a proud stance. |
| 🦸🏿♂️ | man superhero: dark skin tone | A dark-skinned male superhero in a striking costume and cape, posed assertively with a raised arm. |
| 🦸♀️ | woman superhero | A female superhero in a colorful costume and cape, standing confidently with a determined expression. |
| 🦸🏻♀️ | woman superhero: light skin tone | A light-skinned female superhero in a vibrant outfit and cape, posed heroically with one arm raised. |
| 🦸🏼♀️ | woman superhero: medium-light skin tone | A medium-light-skinned female superhero, dressed in a bright costume and cape, standing with a strong stance. |
| 🦸🏽♀️ | woman superhero: medium skin tone | A medium-skinned female superhero in a colorful outfit and flowing cape, confidently posing with one arm extended. |
| 🦸🏾♀️ | woman superhero: medium-dark skin tone | A medium-dark-skinned female superhero, wearing a dynamic costume and cape, standing proudly with a determined expression. |
| 🦸🏿♀️ | woman superhero: dark skin tone | A dark-skinned female superhero in a striking outfit and cape, posed assertively with a raised arm. |
| 🦹 | supervillain | A supervillain with a menacing expression, dressed in dark, dramatic attire with a cape, often posed with hands on hips. |
| 🦹🏻 | supervillain: light skin tone | A light-skinned supervillain in a dark costume and cape, striking a villainous pose with a sly smile. |
| 🦹🏼 | supervillain: medium-light skin tone | A medium-light-skinned supervillain, dressed in a dramatic outfit and cape, posed with a cunning expression. |
| 🦹🏽 | supervillain: medium skin tone | A medium-skinned supervillain in a dark, edgy costume and cape, confidently standing with a mischievous grin. |
| 🦹🏾 | supervillain: medium-dark skin tone | A medium-dark-skinned supervillain, wearing a striking outfit and cape, posed with a sinister smile. |
| 🦹🏿 | supervillain: dark skin tone | A dark-skinned supervillain in a dramatic costume and cape, standing menacingly with a confident expression. |
| 🦹♂️ | man supervillain | A male supervillain in a dark, dramatic outfit and cape, posed with a sly grin and arms crossed. |
| 🦹🏻♂️ | man supervillain: light skin tone | A light-skinned male supervillain in a dark costume and cape, striking a villainous pose with a devious smile. |
| 🦹🏼♂️ | man supervillain: medium-light skin tone | A medium-light-skinned male supervillain, dressed in a dramatic outfit and cape, posed with a cunning expression. |
| 🦹🏽♂️ | man supervillain: medium skin tone | A medium-skinned male supervillain in a dark costume and cape, confidently standing with a mischievous grin. |
| 🦹🏾♂️ | man supervillain: medium-dark skin tone | A medium-dark-skinned male supervillain, wearing a striking outfit and cape, posed with a sinister smile. |
| 🦹🏿♂️ | man supervillain: dark skin tone | A dark-skinned male supervillain in a dramatic costume and cape, standing menacingly with a confident expression. |
| 🦹♀️ | woman supervillain | A female supervillain in a dark, dramatic outfit and cape, posed with a sly smile and hands on hips. |
| 🦹🏻♀️ | woman supervillain: light skin tone | A light-skinned female supervillain in a dark costume and cape, striking a villainous pose with a devious grin. |
| 🦹🏼♀️ | woman supervillain: medium-light skin tone | A medium-light-skinned female supervillain, dressed in a dramatic outfit and cape, posed with a cunning expression. |
| 🦹🏽♀️ | woman supervillain: medium skin tone | A medium-skinned female supervillain in a dark costume and cape, confidently standing with a mischievous smile. |
| 🦹🏾♀️ | woman supervillain: medium-dark skin tone | A medium-dark-skinned female supervillain, wearing a striking outfit and cape, posed with a sinister smile. |
| 🦹🏿♀️ | woman supervillain: dark skin tone | A dark-skinned female supervillain in a dramatic costume and cape, standing menacingly with a confident expression. |
| 🧙 | mage | A mage wearing a long robe and pointed hat, often depicted with a mystical expression and holding a magical staff. |
| 🧙🏻 | mage: light skin tone | A light-skinned mage in a long robe and pointed hat, holding a staff and exuding a magical aura. |
| 🧙🏼 | mage: medium-light skin tone | A medium-light-skinned mage dressed in a flowing robe and pointed hat, posed with a staff and a wise expression. |
| 🧙🏽 | mage: medium skin tone | A medium-skinned mage in a colorful robe and pointed hat, confidently holding a staff with a mystical aura. |
| 🧙🏾 | mage: medium-dark skin tone | A medium-dark-skinned mage wearing a dramatic robe and pointed hat, posed with a staff and a wise expression. |
| 🧙🏿 | mage: dark skin tone | A male mage with dark skin, wearing a long, flowing robe and a pointed hat, exuding a mystical aura. |
| 🧙♂️ | man mage | A male mage with a long beard, dressed in a robe and pointed hat, holding a staff, suggesting wisdom and magic. |
| 🧙🏻♂️ | man mage: light skin tone | A male mage with light skin, adorned in a traditional robe and pointed hat, radiating an air of enchantment. |
| 🧙🏼♂️ | man mage: medium-light skin tone | A male mage with medium-light skin, wearing a robe and pointed hat, embodying a sense of fantasy and magic. |
| 🧙🏽♂️ | man mage: medium skin tone | A male mage with medium skin, dressed in a classic robe and pointed hat, evoking a sense of mystique. |
| 🧙🏾♂️ | man mage: medium-dark skin tone | A male mage with medium-dark skin, clad in a robe and pointed hat, exuding magical energy. |
| 🧙🏿♂️ | man mage: dark skin tone | A male mage with dark skin, wearing a flowing robe and pointed hat, suggesting power and wisdom in magic. |
| 🧙♀️ | woman mage | A female mage with a mystical expression, wearing a long robe and a pointed hat, holding a staff, embodying enchantment. |
| 🧙🏻♀️ | woman mage: light skin tone | A female mage with light skin, dressed in a robe and pointed hat, radiating a magical presence. |
| 🧙🏼♀️ | woman mage: medium-light skin tone | A female mage with medium-light skin, adorned in a robe and pointed hat, suggesting a connection to the mystical. |
| 🧙🏽♀️ | woman mage: medium skin tone | A female mage with medium skin, wearing a robe and pointed hat, exuding an aura of magic and mystery. |
| 🧙🏾♀️ | woman mage: medium-dark skin tone | A female mage with medium-dark skin, dressed in a robe and pointed hat, embodying the essence of fantasy. |
| 🧙🏿♀️ | woman mage: dark skin tone | A female mage with dark skin, wearing a long robe and pointed hat, suggesting wisdom and magical prowess. |
| 🧚 | fairy | A whimsical fairy with delicate wings, a playful expression, and a vibrant outfit, embodying enchantment. |
| 🧚🏻 | fairy: light skin tone | A fairy with light skin, featuring delicate wings and a colorful outfit, exuding a joyful and magical aura. |
| 🧚🏼 | fairy: medium-light skin tone | A fairy with medium-light skin, adorned with delicate wings and a bright outfit, radiating charm and magic. |
| 🧚🏽 | fairy: medium skin tone | A fairy with medium skin, showcasing delicate wings and a vibrant outfit, embodying a sense of wonder. |
| 🧚🏾 | fairy: medium-dark skin tone | A fairy with medium-dark skin, featuring beautiful wings and a colorful outfit, exuding an enchanting presence. |
| 🧚🏿 | fairy: dark skin tone | A fairy with dark skin, adorned with delicate wings and a bright outfit, radiating magic and whimsy. |
| 🧚♂️ | man fairy | A male fairy with delicate wings, wearing a playful outfit and a charming smile, embodying fantasy. |
| 🧚🏻♂️ | man fairy: light skin tone | A male fairy with light skin, featuring delicate wings and a colorful outfit, exuding a cheerful aura. |
| 🧚🏼♂️ | man fairy: medium-light skin tone | A male fairy with medium-light skin, adorned with wings and a vibrant outfit, radiating joy and magic. |
| 🧚🏽♂️ | man fairy: medium skin tone | A male fairy with medium skin, showcasing delicate wings and a playful outfit, embodying fantasy. |
| 🧚🏾♂️ | man fairy: medium-dark skin tone | A male fairy with medium-dark skin, featuring beautiful wings and a colorful outfit, exuding charm. |
| 🧚🏿♂️ | man fairy: dark skin tone | A male fairy with dark skin, adorned with delicate wings and a bright outfit, radiating magic and whimsy. |
| 🧚♀️ | woman fairy | A female fairy with delicate wings, a joyful expression, and a vibrant outfit, embodying enchantment. |
| 🧚🏻♀️ | woman fairy: light skin tone | A female fairy with light skin, featuring beautiful wings and a colorful outfit, radiating joy and magic. |
| 🧚🏼♀️ | woman fairy: medium-light skin tone | A female fairy with medium-light skin, adorned with delicate wings and a bright outfit, embodying charm. |
| 🧚🏽♀️ | woman fairy: medium skin tone | A female fairy with medium skin, showcasing delicate wings and a vibrant outfit, exuding a sense of wonder. |
| 🧚🏾♀️ | woman fairy: medium-dark skin tone | A female fairy with medium-dark skin, featuring beautiful wings and a colorful outfit, radiating enchantment. |
| 🧚🏿♀️ | woman fairy: dark skin tone | A female fairy with dark skin, adorned with delicate wings and a bright outfit, embodying magic and whimsy. |
| 🧛 | vampire | A vampire with pale skin, sharp fangs, and a dark cape, exuding a mysterious and eerie presence. |
| 🧛🏻 | vampire: light skin tone | A vampire with light skin, sharp fangs, and a dark cloak, suggesting a classic horror character. |
| 🧛🏼 | vampire: medium-light skin tone | A vampire with medium-light skin, featuring fangs and a dark cloak, embodying a supernatural aura. |
| 🧛🏽 | vampire: medium skin tone | A vampire with medium skin, sharp fangs, and a dark cape, exuding a sense of mystery and danger. |
| 🧛🏾 | vampire: medium-dark skin tone | A vampire with medium-dark skin, showcasing fangs and a dark cloak, radiating an eerie charm. |
| 🧛🏿 | vampire: dark skin tone | A vampire with dark skin, sharp fangs, and a dark cape, embodying a classic horror figure. |
| 🧛♂️ | man vampire | A male vampire with pale skin, dressed in a dark cloak, exuding an air of mystery and danger. |
| 🧛🏻♂️ | man vampire: light skin tone | A male vampire with light skin, featuring fangs and a dark cloak, suggesting a classic horror character. |
| 🧛🏼♂️ | man vampire: medium-light skin tone | A male vampire with medium-light skin, showcasing fangs and a dark cloak, radiating an eerie presence. |
| 🧛🏽♂️ | man vampire: medium skin tone | A man with medium skin tone, dressed in a dark cape, has sharp fangs and a pale face, exuding a mysterious and eerie aura. |
| 🧛🏾♂️ | man vampire: medium-dark skin tone | A man with medium-dark skin tone, wearing a dark cloak, features pointed ears and fangs, presenting a sinister yet charming expression. |
| 🧛🏿♂️ | man vampire: dark skin tone | A man with dark skin tone, clad in a flowing black cape, has a pale complexion and sharp fangs, looking both alluring and menacing. |
| 🧛♀️ | woman vampire | A woman vampire with a pale face, sharp fangs, and long dark hair, dressed in a flowing dark gown that adds to her mysterious allure. |
| 🧛🏻♀️ | woman vampire: light skin tone | A woman vampire with light skin tone, featuring sharp fangs and dark hair, dressed in a dramatic black outfit, radiating an eerie charm. |
| 🧛🏼♀️ | woman vampire: medium-light skin tone | A woman vampire with medium-light skin tone, sharp fangs, and long dark hair, wearing a dark, flowing dress that enhances her mystical appearance. |
| 🧛🏽♀️ | woman vampire: medium skin tone | A woman vampire with medium skin tone, sharp fangs, and dark hair, dressed in a dark cape, exuding a captivating yet eerie presence. |
| 🧛🏾♀️ | woman vampire: medium-dark skin tone | A woman vampire with medium-dark skin tone, sharp fangs, and long dark hair, wearing a flowing dark gown that adds to her enchanting aura. |
| 🧛🏿♀️ | woman vampire: dark skin tone | A woman vampire with dark skin tone, dressed in a dramatic black outfit, sharp fangs, and a pale face, giving her a hauntingly beautiful look. |
| 🧜 | merperson | A merperson with a fish tail, featuring long hair and a serene expression, often depicted with a shimmering tail that reflects ocean colors. |
| 🧜🏻 | merperson: light skin tone | A merperson with light skin tone, long flowing hair, and a shimmering tail, radiating a tranquil and enchanting oceanic vibe. |
| 🧜🏼 | merperson: medium-light skin tone | A merperson with medium-light skin tone, adorned with long hair and a sparkling tail, exuding a magical presence from the sea. |
| 🧜🏽 | merperson: medium skin tone | A merperson with medium skin tone, long hair, and a vibrant tail, embodying the enchanting essence of the ocean. |
| 🧜🏾 | merperson: medium-dark skin tone | A merperson with medium-dark skin tone, featuring long hair and a shimmering tail, exuding a captivating and mystical aura. |
| 🧜🏿 | merperson: dark skin tone | A merperson with dark skin tone, long flowing hair, and a dazzling tail, representing the enchanting beauty of the sea. |
| 🧜♂️ | merman | A merman with a fish tail, long hair, and a calm expression, embodying the enchanting allure of the ocean depths. |
| 🧜🏻♂️ | merman: light skin tone | A merman with light skin tone, long hair, and a shimmering tail, exuding a serene and captivating oceanic charm. |
| 🧜🏼♂️ | merman: medium-light skin tone | A merman with medium-light skin tone, featuring long hair and a sparkling tail, radiating a magical essence from the sea. |
| 🧜🏽♂️ | merman: medium skin tone | A merman with medium skin tone, long hair, and a vibrant tail, embodying the enchanting spirit of the ocean. |
| 🧜🏾♂️ | merman: medium-dark skin tone | A merman with medium-dark skin tone, long flowing hair, and a dazzling tail, exuding a captivating and mystical presence. |
| 🧜🏿♂️ | merman: dark skin tone | A merman with dark skin tone, long hair, and a shimmering tail, representing the enchanting beauty of the ocean depths. |
| 🧜♀️ | mermaid | A mermaid with a fish tail, long hair, and a serene expression, embodying the enchanting allure of the sea. |
| 🧜🏻♀️ | mermaid: light skin tone | A mermaid with light skin tone, long hair, and a shimmering tail, radiating a tranquil and magical oceanic vibe. |
| 🧜🏼♀️ | mermaid: medium-light skin tone | A mermaid with medium-light skin tone, adorned with long hair and a sparkling tail, exuding a magical presence from the sea. |
| 🧜🏽♀️ | mermaid: medium skin tone | A mermaid with medium skin tone, long hair, and a vibrant tail, embodying the enchanting essence of the ocean. |
| 🧜🏾♀️ | mermaid: medium-dark skin tone | A mermaid with medium-dark skin tone, featuring long hair and a shimmering tail, exuding a captivating and mystical aura. |
| 🧜🏿♀️ | mermaid: dark skin tone | A mermaid with dark skin tone, long flowing hair, and a dazzling tail, representing the enchanting beauty of the sea. |
| 🧝 | elf | An elf with pointed ears, dressed in a flowing outfit, often depicted with a serene expression and an air of magic and enchantment. |
| 🧝🏻 | elf: light skin tone | An elf with light skin tone, pointed ears, and a graceful outfit, exuding a mystical and enchanting presence. |
| 🧝🏼 | elf: medium-light skin tone | An elf with medium-light skin tone, featuring pointed ears and a flowing outfit, radiating an aura of magic and fantasy. |
| 🧝🏽 | elf: medium skin tone | An elf with medium skin tone, pointed ears, and a graceful outfit, embodying the enchanting spirit of folklore. |
| 🧝🏾 | elf: medium-dark skin tone | An elf with medium-dark skin tone, adorned with pointed ears and a flowing outfit, exuding a captivating and magical presence. |
| 🧝🏿 | elf: dark skin tone | An elf with dark skin tone, pointed ears, and a graceful outfit, representing the enchanting essence of fantasy. |
| 🧝♂️ | man elf | A man elf with pointed ears, dressed in a flowing outfit, radiating a serene and magical presence. |
| 🧝🏻♂️ | man elf: light skin tone | A man elf with light skin tone, pointed ears, and a graceful outfit, embodying an enchanting and mystical aura. |
| 🧝🏼♂️ | man elf: medium-light skin tone | A man elf with medium-light skin tone, featuring pointed ears and a flowing outfit, exuding a magical essence. |
| 🧝🏽♂️ | man elf: medium skin tone | A man elf with medium skin tone, pointed ears, and a graceful outfit, representing the enchanting spirit of folklore. |
| 🧝🏾♂️ | man elf: medium-dark skin tone | A man elf with medium-dark skin tone, adorned with pointed ears and a flowing outfit, radiating a captivating and magical presence. |
| 🧝🏿♂️ | man elf: dark skin tone | A man elf with dark skin tone, pointed ears, and a graceful outfit, embodying the enchanting essence of fantasy. |
| 🧝♀️ | woman elf | A woman elf with pointed ears, dressed in a flowing outfit, radiating a serene and magical presence. |
| 🧝🏻♀️ | woman elf: light skin tone | A woman with pointed ears and long hair, wearing a green dress and a leafy crown, representing an elf with light skin tone. |
| 🧝🏼♀️ | woman elf: medium-light skin tone | A woman with pointed ears and long hair, dressed in a green outfit with a leafy crown, representing an elf with medium-light skin tone. |
| 🧝🏽♀️ | woman elf: medium skin tone | A woman with pointed ears and long hair, adorned in a green dress and a leafy crown, representing an elf with medium skin tone. |
| 🧝🏾♀️ | woman elf: medium-dark skin tone | A woman with pointed ears and long hair, wearing a green dress and a leafy crown, representing an elf with medium-dark skin tone. |
| 🧝🏿♀️ | woman elf: dark skin tone | A woman with pointed ears and long hair, dressed in a green outfit with a leafy crown, representing an elf with dark skin tone. |
| 🧞 | genie | A whimsical genie with a blue skin tone, wearing a golden belt and a turban, emerging from a lamp with smoke swirling around. |
| 🧞♂️ | man genie | A male genie with blue skin, wearing a turban and golden belt, appearing from a lamp with wisps of smoke around him. |
| 🧞♀️ | woman genie | A female genie with blue skin, adorned with a turban and golden accessories, emerging from a lamp with swirling smoke. |
| 🧟 | zombie | A zombie with a decayed appearance, featuring greenish skin, tattered clothing, and a vacant stare, representing the undead. |
| 🧟♂️ | man zombie | A male zombie with a rotting appearance, greenish skin, and tattered clothes, exhibiting a vacant and eerie expression. |
| 🧟♀️ | woman zombie | A female zombie with a decayed look, greenish skin, and torn clothing, showcasing a vacant and haunting stare. |
| 🧌 | troll | A troll with a large, bulbous nose, shaggy hair, and an oversized body, often depicted with a mischievous expression. |
| 💆 | person getting massage | A person with closed eyes and a relaxed expression, sitting with their head tilted slightly back, receiving a massage. |
| 💆🏻 | person getting massage: light skin tone | A person with light skin, eyes closed and a relaxed expression, sitting back while receiving a massage. |
| 💆🏼 | person getting massage: medium-light skin tone | A person with medium-light skin, eyes closed and a serene expression, enjoying a massage while sitting back. |
| 💆🏽 | person getting massage: medium skin tone | A person with medium skin, eyes closed and a calm expression, leaning back while receiving a massage. |
| 💆🏾 | person getting massage: medium-dark skin tone | A person with medium-dark skin, eyes closed and a peaceful expression, sitting back and enjoying a massage. |
| 💆🏿 | person getting massage: dark skin tone | A person with dark skin, eyes closed and a relaxed expression, leaning back while receiving a massage. |
| 💆♂️ | man getting massage | A man with closed eyes and a serene expression, sitting back and enjoying a massage. |
| 💆🏻♂️ | man getting massage: light skin tone | A man with light skin, eyes closed and a relaxed expression, receiving a massage while seated. |
| 💆🏼♂️ | man getting massage: medium-light skin tone | A man with medium-light skin, eyes closed and a calm expression, leaning back while getting a massage. |
| 💆🏽♂️ | man getting massage: medium skin tone | A man with medium skin, eyes closed and a peaceful expression, sitting back and enjoying a massage. |
| 💆🏾♂️ | man getting massage: medium-dark skin tone | A man with medium-dark skin, eyes closed and a relaxed expression, leaning back while receiving a massage. |
| 💆🏿♂️ | man getting massage: dark skin tone | A man with dark skin, eyes closed and a serene expression, sitting back and enjoying a massage. |
| 💆♀️ | woman getting massage | A woman with closed eyes and a relaxed expression, sitting back and enjoying a massage. |
| 💆🏻♀️ | woman getting massage: light skin tone | A woman with light skin, eyes closed and a serene expression, receiving a massage while seated. |
| 💆🏼♀️ | woman getting massage: medium-light skin tone | A woman with medium-light skin, eyes closed and a calm expression, leaning back while getting a massage. |
| 💆🏽♀️ | woman getting massage: medium skin tone | A woman with medium skin, eyes closed and a peaceful expression, sitting back and enjoying a massage. |
| 💆🏾♀️ | woman getting massage: medium-dark skin tone | A woman with medium-dark skin, eyes closed and a relaxed expression, leaning back while receiving a massage. |
| 💆🏿♀️ | woman getting massage: dark skin tone | A woman with dark skin, eyes closed and a serene expression, sitting back and enjoying a massage. |
| 💇 | person getting haircut | A person with short hair, sitting in a chair, having their hair cut by a stylist, looking relaxed. |
| 💇🏻 | person getting haircut: light skin tone | A person with light skin, sitting in a chair with short hair, having their hair cut, looking relaxed. |
| 💇🏼 | person getting haircut: medium-light skin tone | A person with medium-light skin, sitting in a chair with short hair, receiving a haircut, appearing calm. |
| 💇🏽 | person getting haircut: medium skin tone | A person with medium skin, sitting in a chair with short hair, getting a haircut, looking relaxed. |
| 💇🏾 | person getting haircut: medium-dark skin tone | A person with medium-dark skin, sitting in a chair with short hair, having their hair cut, appearing serene. |
| 💇🏿 | person getting haircut: dark skin tone | A person with dark skin, sitting in a chair with short hair, receiving a haircut, looking relaxed. |
| 💇♂️ | man getting haircut | A man with short hair, sitting in a chair, getting a haircut from a stylist, looking calm. |
| 💇🏻♂️ | man getting haircut: light skin tone | A man with light skin, sitting in a chair with short hair, having his hair cut, appearing relaxed. |
| 💇🏼♂️ | man getting haircut: medium-light skin tone | A man with medium-light skin, sitting in a chair with short hair, receiving a haircut, looking calm. |
| 💇🏽♂️ | man getting haircut: medium skin tone | A man with medium skin, sitting in a chair with short hair, getting a haircut, looking relaxed. |
| 💇🏾♂️ | man getting haircut: medium-dark skin tone | A man with medium-dark skin is sitting in a salon chair, with a stylist cutting his hair. |
| 💇🏿♂️ | man getting haircut: dark skin tone | A man with dark skin is seated in a salon chair, while a stylist trims his hair. |
| 💇♀️ | woman getting haircut | A woman with long hair is sitting in a salon chair, as a stylist cuts her hair. |
| 💇🏻♀️ | woman getting haircut: light skin tone | A woman with light skin and long hair is in a salon chair, with a stylist cutting her hair. |
| 💇🏼♀️ | woman getting haircut: medium-light skin tone | A woman with medium-light skin is seated in a salon chair, while a stylist is cutting her hair. |
| 💇🏽♀️ | woman getting haircut: medium skin tone | A woman with medium skin is sitting in a salon chair, as a stylist trims her hair. |
| 💇🏾♀️ | woman getting haircut: medium-dark skin tone | A woman with medium-dark skin is seated in a salon chair, with a stylist cutting her hair. |
| 💇🏿♀️ | woman getting haircut: dark skin tone | A woman with dark skin is in a salon chair, while a stylist is cutting her hair. |
| 🚶 | person walking | A person is walking with a neutral expression, legs in motion. |
| 🚶🏻 | person walking: light skin tone | A person with light skin is walking, legs in motion, with a neutral expression. |
| 🚶🏼 | person walking: medium-light skin tone | A person with medium-light skin is walking, legs in motion, with a neutral expression. |
| 🚶🏽 | person walking: medium skin tone | A person with medium skin is walking, legs in motion, with a neutral expression. |
| 🚶🏾 | person walking: medium-dark skin tone | A person with medium-dark skin is walking, legs in motion, with a neutral expression. |
| 🚶🏿 | person walking: dark skin tone | A person with dark skin is walking, legs in motion, with a neutral expression. |
| 🚶♂️ | man walking | A man is walking with a neutral expression, legs in motion. |
| 🚶🏻♂️ | man walking: light skin tone | A man with light skin is walking, legs in motion, with a neutral expression. |
| 🚶🏼♂️ | man walking: medium-light skin tone | A man with medium-light skin is walking, legs in motion, with a neutral expression. |
| 🚶🏽♂️ | man walking: medium skin tone | A man with medium skin is walking, legs in motion, with a neutral expression. |
| 🚶🏾♂️ | man walking: medium-dark skin tone | A man with medium-dark skin is walking, legs in motion, with a neutral expression. |
| 🚶🏿♂️ | man walking: dark skin tone | A man with dark skin is walking, legs in motion, with a neutral expression. |
| 🚶♀️ | woman walking | A woman is walking with a neutral expression, legs in motion. |
| 🚶🏻♀️ | woman walking: light skin tone | A woman with light skin is walking, legs in motion, with a neutral expression. |
| 🚶🏼♀️ | woman walking: medium-light skin tone | A woman with medium-light skin is walking, legs in motion, with a neutral expression. |
| 🚶🏽♀️ | woman walking: medium skin tone | A woman with medium skin is walking, legs in motion, with a neutral expression. |
| 🚶🏾♀️ | woman walking: medium-dark skin tone | A woman with medium-dark skin is walking, legs in motion, with a neutral expression. |
| 🚶🏿♀️ | woman walking: dark skin tone | A woman with dark skin is walking, legs in motion, with a neutral expression. |
| 🚶➡️ | person walking facing right | A person is walking with a neutral expression, facing to the right. |
| 🚶🏻➡️ | person walking facing right: light skin tone | A person with light skin is walking, facing to the right, with a neutral expression. |
| 🚶🏼➡️ | person walking facing right: medium-light skin tone | A person with medium-light skin is walking, facing to the right, with a neutral expression. |
| 🚶🏽➡️ | person walking facing right: medium skin tone | A person with medium skin is walking, facing to the right, with a neutral expression. |
| 🚶🏾➡️ | person walking facing right: medium-dark skin tone | A person with medium-dark skin is walking, facing to the right, with a neutral expression. |
| 🚶🏿➡️ | person walking facing right: dark skin tone | A person with dark skin is walking, facing to the right, with a neutral expression. |
| 🚶♀️➡️ | woman walking facing right | A woman is walking, facing to the right, with a neutral expression. |
| 🚶🏻♀️➡️ | woman walking facing right: light skin tone | A woman with light skin is walking, facing to the right, with a neutral expression. |
| 🚶🏼♀️➡️ | woman walking facing right: medium-light skin tone | A woman with medium-light skin is walking, facing to the right, with a neutral expression. |
| 🚶🏽♀️➡️ | woman walking facing right: medium skin tone | A woman with medium skin is walking, facing to the right, with a neutral expression. |
| 🚶🏾♀️➡️ | woman walking facing right: medium-dark skin tone | A woman with medium-dark skin is walking, facing to the right, with a neutral expression. |
| 🚶🏿♀️➡️ | woman walking facing right: dark skin tone | A woman with dark skin is walking, facing to the right, with a neutral expression. |
| 🚶♂️➡️ | man walking facing right | A man is walking, facing to the right, with a neutral expression. |
| 🚶🏻♂️➡️ | man walking facing right: light skin tone | A man with light skin is walking, facing to the right, with a neutral expression. |
| 🚶🏼♂️➡️ | man walking facing right: medium-light skin tone | A man with medium-light skin tone is walking to the right, depicted in a casual pose with one foot raised as if in mid-step. |
| 🚶🏽♂️➡️ | man walking facing right: medium skin tone | A man with medium skin tone is walking to the right, shown in a dynamic walking pose with one leg lifted. |
| 🚶🏾♂️➡️ | man walking facing right: medium-dark skin tone | A man with medium-dark skin tone is depicted walking to the right, with one foot in the air, suggesting movement. |
| 🚶🏿♂️➡️ | man walking facing right: dark skin tone | A man with dark skin tone is shown walking to the right, captured mid-stride with one leg lifted. |
| 🧍 | person standing | A standing person is depicted in a neutral pose, facing forward with arms relaxed at the sides. |
| 🧍🏻 | person standing: light skin tone | A person with light skin tone is standing upright, facing forward with arms at their sides. |
| 🧍🏼 | person standing: medium-light skin tone | A person with medium-light skin tone stands upright, facing forward with a calm demeanor. |
| 🧍🏽 | person standing: medium skin tone | A person with medium skin tone is depicted standing straight, looking forward with arms relaxed. |
| 🧍🏾 | person standing: medium-dark skin tone | A person with medium-dark skin tone stands upright, facing forward with a composed expression. |
| 🧍🏿 | person standing: dark skin tone | A person with dark skin tone is shown standing, facing forward in a relaxed posture. |
| 🧍♂️ | man standing | A man is depicted standing upright, facing forward with arms at his sides. |
| 🧍🏻♂️ | man standing: light skin tone | A man with light skin tone stands upright, looking forward with a neutral expression. |
| 🧍🏼♂️ | man standing: medium-light skin tone | A man with medium-light skin tone stands facing forward, arms relaxed at his sides. |
| 🧍🏽♂️ | man standing: medium skin tone | A man with medium skin tone is depicted standing straight, looking ahead with a calm demeanor. |
| 🧍🏾♂️ | man standing: medium-dark skin tone | A man with medium-dark skin tone stands upright, facing forward with arms relaxed. |
| 🧍🏿♂️ | man standing: dark skin tone | A man with dark skin tone is shown standing, facing forward in a relaxed posture. |
| 🧍♀️ | woman standing | A woman is depicted standing upright, facing forward with arms at her sides. |
| 🧍🏻♀️ | woman standing: light skin tone | A woman with light skin tone stands upright, looking forward with a neutral expression. |
| 🧍🏼♀️ | woman standing: medium-light skin tone | A woman with medium-light skin tone stands facing forward, arms relaxed at her sides. |
| 🧍🏽♀️ | woman standing: medium skin tone | A woman with medium skin tone is depicted standing straight, looking ahead with a calm demeanor. |
| 🧍🏾♀️ | woman standing: medium-dark skin tone | A woman with medium-dark skin tone stands upright, facing forward with arms relaxed. |
| 🧍🏿♀️ | woman standing: dark skin tone | A woman with dark skin tone is shown standing, facing forward in a relaxed posture. |
| 🧎 | person kneeling | A person is depicted kneeling on both knees, with a neutral expression and hands resting on their thighs. |
| 🧎🏻 | person kneeling: light skin tone | A person with light skin tone is shown kneeling, with a calm demeanor and hands resting on their knees. |
| 🧎🏼 | person kneeling: medium-light skin tone | A person with medium-light skin tone kneels with a relaxed posture, hands on their thighs. |
| 🧎🏽 | person kneeling: medium skin tone | A person with medium skin tone is depicted kneeling, hands resting on their knees with a composed expression. |
| 🧎🏾 | person kneeling: medium-dark skin tone | A person with medium-dark skin tone kneels with a neutral expression, hands resting on their thighs. |
| 🧎🏿 | person kneeling: dark skin tone | A person with dark skin tone is shown kneeling, hands on their knees, appearing calm. |
| 🧎♂️ | man kneeling | A man is depicted kneeling on both knees, with a neutral expression and hands resting on his thighs. |
| 🧎🏻♂️ | man kneeling: light skin tone | A man with light skin tone kneels with a calm demeanor, hands resting on his knees. |
| 🧎🏼♂️ | man kneeling: medium-light skin tone | A man with medium-light skin tone is shown kneeling, hands on his thighs in a relaxed posture. |
| 🧎🏽♂️ | man kneeling: medium skin tone | A man with medium skin tone kneels with a composed expression, hands resting on his knees. |
| 🧎🏾♂️ | man kneeling: medium-dark skin tone | A man with medium-dark skin tone is depicted kneeling, hands resting on his thighs with a neutral expression. |
| 🧎🏿♂️ | man kneeling: dark skin tone | A man with dark skin tone is shown kneeling, hands on his knees, appearing calm. |
| 🧎♀️ | woman kneeling | A woman is depicted kneeling on both knees, with a neutral expression and hands resting on her thighs. |
| 🧎🏻♀️ | woman kneeling: light skin tone | A woman with light skin tone kneels with a calm demeanor, hands resting on her knees. |
| 🧎🏼♀️ | woman kneeling: medium-light skin tone | A woman with medium-light skin tone is shown kneeling, hands on her thighs in a relaxed posture. |
| 🧎🏽♀️ | woman kneeling: medium skin tone | A woman with medium skin tone kneels with a composed expression, hands resting on her knees. |
| 🧎🏾♀️ | woman kneeling: medium-dark skin tone | A woman with medium-dark skin tone is depicted kneeling, hands resting on her thighs with a neutral expression. |
| 🧎🏿♀️ | woman kneeling: dark skin tone | A woman with dark skin tone is shown kneeling, hands on her knees, appearing calm. |
| 🧎➡️ | person kneeling facing right | A person kneeling on one knee, facing right, with a neutral expression. |
| 🧎🏻➡️ | person kneeling facing right: light skin tone | A person with light skin kneeling on one knee, facing right, with a neutral expression. |
| 🧎🏼➡️ | person kneeling facing right: medium-light skin tone | A person with medium-light skin kneeling on one knee, facing right, with a neutral expression. |
| 🧎🏽➡️ | person kneeling facing right: medium skin tone | A person with medium skin kneeling on one knee, facing right, with a neutral expression. |
| 🧎🏾➡️ | person kneeling facing right: medium-dark skin tone | A person with medium-dark skin kneeling on one knee, facing right, with a neutral expression. |
| 🧎🏿➡️ | person kneeling facing right: dark skin tone | A person with dark skin kneeling on one knee, facing right, with a neutral expression. |
| 🧎♀️➡️ | woman kneeling facing right | A woman kneeling on one knee, facing right, with a neutral expression. |
| 🧎🏻♀️➡️ | woman kneeling facing right: light skin tone | A woman with light skin kneeling on one knee, facing right, with a neutral expression. |
| 🧎🏼♀️➡️ | woman kneeling facing right: medium-light skin tone | A woman with medium-light skin kneeling on one knee, facing right, with a neutral expression. |
| 🧎🏽♀️➡️ | woman kneeling facing right: medium skin tone | A woman with medium skin kneeling on one knee, facing right, with a neutral expression. |
| 🧎🏾♀️➡️ | woman kneeling facing right: medium-dark skin tone | A woman with medium-dark skin kneeling on one knee, facing right, with a neutral expression. |
| 🧎🏿♀️➡️ | woman kneeling facing right: dark skin tone | A woman with dark skin kneeling on one knee, facing right, with a neutral expression. |
| 🧎♂️➡️ | man kneeling facing right | A man kneeling on one knee, facing right, with a neutral expression. |
| 🧎🏻♂️➡️ | man kneeling facing right: light skin tone | A man with light skin kneeling on one knee, facing right, with a neutral expression. |
| 🧎🏼♂️➡️ | man kneeling facing right: medium-light skin tone | A man with medium-light skin kneeling on one knee, facing right, with a neutral expression. |
| 🧎🏽♂️➡️ | man kneeling facing right: medium skin tone | A man with medium skin kneeling on one knee, facing right, with a neutral expression. |
| 🧎🏾♂️➡️ | man kneeling facing right: medium-dark skin tone | A man with medium-dark skin kneeling on one knee, facing right, with a neutral expression. |
| 🧎🏿♂️➡️ | man kneeling facing right: dark skin tone | A man with dark skin kneeling on one knee, facing right, with a neutral expression. |
| 🧑🦯 | person with white cane | A person holding a white cane, indicating they may be visually impaired, with a neutral expression. |
| 🧑🏻🦯 | person with white cane: light skin tone | A person with light skin holding a white cane, indicating they may be visually impaired, with a neutral expression. |
| 🧑🏼🦯 | person with white cane: medium-light skin tone | A person with medium-light skin holding a white cane, indicating they may be visually impaired, with a neutral expression. |
| 🧑🏽🦯 | person with white cane: medium skin tone | A person with medium skin holding a white cane, indicating they may be visually impaired, with a neutral expression. |
| 🧑🏾🦯 | person with white cane: medium-dark skin tone | A person with medium-dark skin holding a white cane, indicating they may be visually impaired, with a neutral expression. |
| 🧑🏿🦯 | person with white cane: dark skin tone | A person with dark skin holding a white cane, indicating they may be visually impaired, with a neutral expression. |
| 🧑🦯➡️ | person with white cane facing right | A person holding a white cane, facing right, indicating they may be visually impaired. |
| 🧑🏻🦯➡️ | person with white cane facing right: light skin tone | A person with light skin holding a white cane, facing right, indicating they may be visually impaired. |
| 🧑🏼🦯➡️ | person with white cane facing right: medium-light skin tone | A person with medium-light skin holding a white cane, facing right, indicating they may be visually impaired. |
| 🧑🏽🦯➡️ | person with white cane facing right: medium skin tone | A person with medium skin holding a white cane, facing right, indicating they may be visually impaired. |
| 🧑🏾🦯➡️ | person with white cane facing right: medium-dark skin tone | A person with medium-dark skin holding a white cane, facing right, indicating they may be visually impaired. |
| 🧑🏿🦯➡️ | person with white cane facing right: dark skin tone | A person with dark skin holding a white cane, facing right, indicating they may be visually impaired. |
| 👨🦯 | man with white cane | A man holding a white cane, indicating he may be visually impaired, with a neutral expression. |
| 👨🏻🦯 | man with white cane: light skin tone | A man with light skin holding a white cane, indicating he may be visually impaired, with a neutral expression. |
| 👨🏼🦯 | man with white cane: medium-light skin tone | A man with medium-light skin holding a white cane, indicating he may be visually impaired, with a neutral expression. |
| 👨🏽🦯 | man with white cane: medium skin tone | A man with medium skin holding a white cane, indicating he may be visually impaired, with a neutral expression. |
| 👨🏾🦯 | man with white cane: medium-dark skin tone | A man with medium-dark skin holding a white cane, indicating he may be visually impaired, with a neutral expression. |
| 👨🏿🦯 | man with white cane: dark skin tone | A man with dark skin holding a white cane, indicating he may be visually impaired, with a neutral expression. |
| 👨🦯➡️ | man with white cane facing right | A man holding a white cane, facing right, indicating he may be visually impaired. |
| 👨🏻🦯➡️ | man with white cane facing right: light skin tone | A man with light skin holding a white cane, facing right, indicating he may be visually impaired. |
| 👨🏼🦯➡️ | man with white cane facing right: medium-light skin tone | A man with medium-light skin holding a white cane, facing right, indicating he may be visually impaired. |
| 👨🏽🦯➡️ | man with white cane facing right: medium skin tone | A man with medium skin holding a white cane, facing right, indicating he may be visually impaired. |
| 👨🏾🦯➡️ | man with white cane facing right: medium-dark skin tone | A man with medium-dark skin tone holds a white cane and is facing to the right. |
| 👨🏿🦯➡️ | man with white cane facing right: dark skin tone | A man with dark skin tone holds a white cane and is facing to the right. |
| 👩🦯 | woman with white cane | A woman with a white cane stands upright, indicating she may be visually impaired. |
| 👩🏻🦯 | woman with white cane: light skin tone | A woman with light skin tone holds a white cane, suggesting she may be visually impaired. |
| 👩🏼🦯 | woman with white cane: medium-light skin tone | A woman with medium-light skin tone holds a white cane, indicating she may be visually impaired. |
| 👩🏽🦯 | woman with white cane: medium skin tone | A woman with medium skin tone holds a white cane, suggesting she may be visually impaired. |
| 👩🏾🦯 | woman with white cane: medium-dark skin tone | A woman with medium-dark skin tone holds a white cane, indicating she may be visually impaired. |
| 👩🏿🦯 | woman with white cane: dark skin tone | A woman with dark skin tone holds a white cane, suggesting she may be visually impaired. |
| 👩🦯➡️ | woman with white cane facing right | A woman with a white cane is facing to the right. |
| 👩🏻🦯➡️ | woman with white cane facing right: light skin tone | A woman with light skin tone holds a white cane and is facing to the right. |
| 👩🏼🦯➡️ | woman with white cane facing right: medium-light skin tone | A woman with medium-light skin tone holds a white cane and is facing to the right. |
| 👩🏽🦯➡️ | woman with white cane facing right: medium skin tone | A woman with medium skin tone holds a white cane and is facing to the right. |
| 👩🏾🦯➡️ | woman with white cane facing right: medium-dark skin tone | A woman with medium-dark skin tone holds a white cane and is facing to the right. |
| 👩🏿🦯➡️ | woman with white cane facing right: dark skin tone | A woman with dark skin tone holds a white cane and is facing to the right. |
| 🧑🦼 | person in motorized wheelchair | A person sits in a motorized wheelchair, indicating mobility assistance. |
| 🧑🏻🦼 | person in motorized wheelchair: light skin tone | A person with light skin tone sits in a motorized wheelchair. |
| 🧑🏼🦼 | person in motorized wheelchair: medium-light skin tone | A person with medium-light skin tone sits in a motorized wheelchair. |
| 🧑🏽🦼 | person in motorized wheelchair: medium skin tone | A person with medium skin tone sits in a motorized wheelchair. |
| 🧑🏾🦼 | person in motorized wheelchair: medium-dark skin tone | A person with medium-dark skin tone sits in a motorized wheelchair. |
| 🧑🏿🦼 | person in motorized wheelchair: dark skin tone | A person with dark skin tone sits in a motorized wheelchair. |
| 🧑🦼➡️ | person in motorized wheelchair facing right | A person in a motorized wheelchair is facing to the right. |
| 🧑🏻🦼➡️ | person in motorized wheelchair facing right: light skin tone | A person with light skin tone in a motorized wheelchair is facing to the right. |
| 🧑🏼🦼➡️ | person in motorized wheelchair facing right: medium-light skin tone | A person with medium-light skin tone in a motorized wheelchair is facing to the right. |
| 🧑🏽🦼➡️ | person in motorized wheelchair facing right: medium skin tone | A person with medium skin tone in a motorized wheelchair is facing to the right. |
| 🧑🏾🦼➡️ | person in motorized wheelchair facing right: medium-dark skin tone | A person with medium-dark skin tone in a motorized wheelchair is facing to the right. |
| 🧑🏿🦼➡️ | person in motorized wheelchair facing right: dark skin tone | A person with dark skin tone in a motorized wheelchair is facing to the right. |
| 👨🦼 | man in motorized wheelchair | A man sits in a motorized wheelchair, indicating mobility assistance. |
| 👨🏻🦼 | man in motorized wheelchair: light skin tone | A man with light skin tone sits in a motorized wheelchair. |
| 👨🏼🦼 | man in motorized wheelchair: medium-light skin tone | A man with medium-light skin tone sits in a motorized wheelchair. |
| 👨🏽🦼 | man in motorized wheelchair: medium skin tone | A man with medium skin tone sits in a motorized wheelchair. |
| 👨🏾🦼 | man in motorized wheelchair: medium-dark skin tone | A man with medium-dark skin tone sits in a motorized wheelchair. |
| 👨🏿🦼 | man in motorized wheelchair: dark skin tone | A man with dark skin tone sits in a motorized wheelchair. |
| 👨🦼➡️ | man in motorized wheelchair facing right | A man in a motorized wheelchair is facing to the right. |
| 👨🏻🦼➡️ | man in motorized wheelchair facing right: light skin tone | A man with light skin tone in a motorized wheelchair is facing to the right. |
| 👨🏼🦼➡️ | man in motorized wheelchair facing right: medium-light skin tone | A man with medium-light skin tone in a motorized wheelchair is facing to the right. |
| 👨🏽🦼➡️ | man in motorized wheelchair facing right: medium skin tone | A man with medium skin tone in a motorized wheelchair is facing to the right. |
| 👨🏾🦼➡️ | man in motorized wheelchair facing right: medium-dark skin tone | A man with medium-dark skin tone in a motorized wheelchair is facing to the right. |
| 👨🏿🦼➡️ | man in motorized wheelchair facing right: dark skin tone | A man with dark skin tone in a motorized wheelchair is facing to the right. |
| 👩🦼 | woman in motorized wheelchair | A woman sits in a motorized wheelchair, indicating mobility assistance. |
| 👩🏻🦼 | woman in motorized wheelchair: light skin tone | A woman with light skin tone sits in a motorized wheelchair. |
| 👩🏼🦼 | woman in motorized wheelchair: medium-light skin tone | A woman with medium-light skin tone sitting in a motorized wheelchair, looking forward with a neutral expression. |
| 👩🏽🦼 | woman in motorized wheelchair: medium skin tone | A woman with medium skin tone seated in a motorized wheelchair, facing forward with a calm demeanor. |
| 👩🏾🦼 | woman in motorized wheelchair: medium-dark skin tone | A woman with medium-dark skin tone in a motorized wheelchair, gazing ahead with a composed look. |
| 👩🏿🦼 | woman in motorized wheelchair: dark skin tone | A woman with dark skin tone in a motorized wheelchair, looking straight ahead with a serene expression. |
| 👩🦼➡️ | woman in motorized wheelchair facing right | A woman in a motorized wheelchair, positioned to face right, appearing focused and ready to move. |
| 👩🏻🦼➡️ | woman in motorized wheelchair facing right: light skin tone | A woman with light skin tone in a motorized wheelchair, turned to the right, displaying a determined expression. |
| 👩🏼🦼➡️ | woman in motorized wheelchair facing right: medium-light skin tone | A woman with medium-light skin tone in a motorized wheelchair, facing right with an intent look. |
| 👩🏽🦼➡️ | woman in motorized wheelchair facing right: medium skin tone | A woman with medium skin tone in a motorized wheelchair, oriented to the right, showing a calm demeanor. |
| 👩🏾🦼➡️ | woman in motorized wheelchair facing right: medium-dark skin tone | A woman with medium-dark skin tone in a motorized wheelchair, looking right with a composed expression. |
| 👩🏿🦼➡️ | woman in motorized wheelchair facing right: dark skin tone | A woman with dark skin tone in a motorized wheelchair, facing right with a peaceful look. |
| 🧑🦽 | person in manual wheelchair | A person in a manual wheelchair, appearing neutral and upright, with no specific facial expression. |
| 🧑🏻🦽 | person in manual wheelchair: light skin tone | A person with light skin tone seated in a manual wheelchair, maintaining a neutral posture. |
| 🧑🏼🦽 | person in manual wheelchair: medium-light skin tone | A person with medium-light skin tone in a manual wheelchair, sitting upright with a calm demeanor. |
| 🧑🏽🦽 | person in manual wheelchair: medium skin tone | A person with medium skin tone in a manual wheelchair, looking straight ahead with a neutral expression. |
| 🧑🏾🦽 | person in manual wheelchair: medium-dark skin tone | A person with medium-dark skin tone in a manual wheelchair, appearing composed and upright. |
| 🧑🏿🦽 | person in manual wheelchair: dark skin tone | A person with dark skin tone in a manual wheelchair, sitting straight with a neutral look. |
| 🧑🦽➡️ | person in manual wheelchair facing right | A person in a manual wheelchair, oriented to the right, ready to move forward. |
| 🧑🏻🦽➡️ | person in manual wheelchair facing right: light skin tone | A person with light skin tone in a manual wheelchair, facing right with a determined posture. |
| 🧑🏼🦽➡️ | person in manual wheelchair facing right: medium-light skin tone | A person with medium-light skin tone in a manual wheelchair, turned to the right, showing intent. |
| 🧑🏽🦽➡️ | person in manual wheelchair facing right: medium skin tone | A person with medium skin tone in a manual wheelchair, oriented to the right with a calm demeanor. |
| 🧑🏾🦽➡️ | person in manual wheelchair facing right: medium-dark skin tone | A person with medium-dark skin tone in a manual wheelchair, facing right with a composed look. |
| 🧑🏿🦽➡️ | person in manual wheelchair facing right: dark skin tone | A person with dark skin tone in a manual wheelchair, looking right with a serene expression. |
| 👨🦽 | man in manual wheelchair | A man in a manual wheelchair, appearing neutral and seated upright, without a specific expression. |
| 👨🏻🦽 | man in manual wheelchair: light skin tone | A man with light skin tone in a manual wheelchair, maintaining a neutral posture. |
| 👨🏼🦽 | man in manual wheelchair: medium-light skin tone | A man with medium-light skin tone in a manual wheelchair, sitting upright with a calm demeanor. |
| 👨🏽🦽 | man in manual wheelchair: medium skin tone | A man with medium skin tone in a manual wheelchair, looking straight ahead with a neutral expression. |
| 👨🏾🦽 | man in manual wheelchair: medium-dark skin tone | A man with medium-dark skin tone in a manual wheelchair, appearing composed and upright. |
| 👨🏿🦽 | man in manual wheelchair: dark skin tone | A man with dark skin tone in a manual wheelchair, sitting straight with a neutral look. |
| 👨🦽➡️ | man in manual wheelchair facing right | A man in a manual wheelchair, oriented to the right, ready to move forward. |
| 👨🏻🦽➡️ | man in manual wheelchair facing right: light skin tone | A man with light skin tone in a manual wheelchair, facing right with a determined posture. |
| 👨🏼🦽➡️ | man in manual wheelchair facing right: medium-light skin tone | A man with medium-light skin tone in a manual wheelchair, turned to the right, showing intent. |
| 👨🏽🦽➡️ | man in manual wheelchair facing right: medium skin tone | A man with medium skin tone in a manual wheelchair, oriented to the right with a calm demeanor. |
| 👨🏾🦽➡️ | man in manual wheelchair facing right: medium-dark skin tone | A man with medium-dark skin tone in a manual wheelchair, facing right with a composed look. |
| 👨🏿🦽➡️ | man in manual wheelchair facing right: dark skin tone | A man with dark skin tone in a manual wheelchair, looking right with a serene expression. |
| 👩🦽 | woman in manual wheelchair | A woman in a manual wheelchair, appearing neutral and seated upright, without a specific expression. |
| 👩🏻🦽 | woman in manual wheelchair: light skin tone | A woman with light skin tone in a manual wheelchair, maintaining a neutral posture. |
| 👩🏼🦽 | woman in manual wheelchair: medium-light skin tone | A woman with medium-light skin tone in a manual wheelchair, sitting upright with a calm demeanor. |
| 👩🏽🦽 | woman in manual wheelchair: medium skin tone | A woman with medium skin tone in a manual wheelchair, looking straight ahead with a neutral expression. |
| 👩🏾🦽 | woman in manual wheelchair: medium-dark skin tone | A woman with medium-dark skin tone in a manual wheelchair, appearing composed and upright. |
| 👩🏿🦽 | woman in manual wheelchair: dark skin tone | A woman with dark skin tone in a manual wheelchair, sitting straight with a neutral look. |
| 👩🦽➡️ | woman in manual wheelchair facing right | A woman with long hair is seated in a manual wheelchair, facing right, with a determined expression. |
| 👩🏻🦽➡️ | woman in manual wheelchair facing right: light skin tone | A woman with light skin and long hair is seated in a manual wheelchair, facing right, with a determined expression. |
| 👩🏼🦽➡️ | woman in manual wheelchair facing right: medium-light skin tone | A woman with medium-light skin and long hair is seated in a manual wheelchair, facing right, with a determined expression. |
| 👩🏽🦽➡️ | woman in manual wheelchair facing right: medium skin tone | A woman with medium skin and long hair is seated in a manual wheelchair, facing right, with a determined expression. |
| 👩🏾🦽➡️ | woman in manual wheelchair facing right: medium-dark skin tone | A woman with medium-dark skin and long hair is seated in a manual wheelchair, facing right, with a determined expression. |
| 👩🏿🦽➡️ | woman in manual wheelchair facing right: dark skin tone | A woman with dark skin and long hair is seated in a manual wheelchair, facing right, with a determined expression. |
| 🏃 | person running | A person is depicted in mid-stride, arms pumping and legs moving quickly, suggesting a fast running motion. |
| 🏃🏻 | person running: light skin tone | A person with light skin is depicted in mid-stride, arms pumping and legs moving quickly, suggesting a fast running motion. |
| 🏃🏼 | person running: medium-light skin tone | A person with medium-light skin is depicted in mid-stride, arms pumping and legs moving quickly, suggesting a fast running motion. |
| 🏃🏽 | person running: medium skin tone | A person with medium skin is depicted in mid-stride, arms pumping and legs moving quickly, suggesting a fast running motion. |
| 🏃🏾 | person running: medium-dark skin tone | A person with medium-dark skin is depicted in mid-stride, arms pumping and legs moving quickly, suggesting a fast running motion. |
| 🏃🏿 | person running: dark skin tone | A person with dark skin is depicted in mid-stride, arms pumping and legs moving quickly, suggesting a fast running motion. |
| 🏃♂️ | man running | A man is depicted in mid-stride, arms pumping and legs moving quickly, suggesting a fast running motion. |
| 🏃🏻♂️ | man running: light skin tone | A man with light skin is depicted in mid-stride, arms pumping and legs moving quickly, suggesting a fast running motion. |
| 🏃🏼♂️ | man running: medium-light skin tone | A man with medium-light skin is depicted in mid-stride, arms pumping and legs moving quickly, suggesting a fast running motion. |
| 🏃🏽♂️ | man running: medium skin tone | A man with medium skin is depicted in mid-stride, arms pumping and legs moving quickly, suggesting a fast running motion. |
| 🏃🏾♂️ | man running: medium-dark skin tone | A man with medium-dark skin is depicted in mid-stride, arms pumping and legs moving quickly, suggesting a fast running motion. |
| 🏃🏿♂️ | man running: dark skin tone | A man with dark skin is depicted in mid-stride, arms pumping and legs moving quickly, suggesting a fast running motion. |
| 🏃♀️ | woman running | A woman is depicted in mid-stride, arms pumping and legs moving quickly, suggesting a fast running motion. |
| 🏃🏻♀️ | woman running: light skin tone | A woman with light skin is depicted in mid-stride, arms pumping and legs moving quickly, suggesting a fast running motion. |
| 🏃🏼♀️ | woman running: medium-light skin tone | A woman with medium-light skin is depicted in mid-stride, arms pumping and legs moving quickly, suggesting a fast running motion. |
| 🏃🏽♀️ | woman running: medium skin tone | A woman with medium skin is depicted in mid-stride, arms pumping and legs moving quickly, suggesting a fast running motion. |
| 🏃🏾♀️ | woman running: medium-dark skin tone | A woman with medium-dark skin is depicted in mid-stride, arms pumping and legs moving quickly, suggesting a fast running motion. |
| 🏃🏿♀️ | woman running: dark skin tone | A woman with dark skin is depicted in mid-stride, arms pumping and legs moving quickly, suggesting a fast running motion. |
| 🏃➡️ | person running facing right | A person is depicted running while facing right, arms pumping and legs moving quickly. |
| 🏃🏻➡️ | person running facing right: light skin tone | A person with light skin is depicted running while facing right, arms pumping and legs moving quickly. |
| 🏃🏼➡️ | person running facing right: medium-light skin tone | A person with medium-light skin is depicted running while facing right, arms pumping and legs moving quickly. |
| 🏃🏽➡️ | person running facing right: medium skin tone | A person with medium skin is depicted running while facing right, arms pumping and legs moving quickly. |
| 🏃🏾➡️ | person running facing right: medium-dark skin tone | A person with medium-dark skin is depicted running while facing right, arms pumping and legs moving quickly. |
| 🏃🏿➡️ | person running facing right: dark skin tone | A person with dark skin is depicted running while facing right, arms pumping and legs moving quickly. |
| 🏃♀️➡️ | woman running facing right | A woman is depicted running while facing right, arms pumping and legs moving quickly. |
| 🏃🏻♀️➡️ | woman running facing right: light skin tone | A woman with light skin is depicted running while facing right, arms pumping and legs moving quickly. |
| 🏃🏼♀️➡️ | woman running facing right: medium-light skin tone | A woman with medium-light skin is depicted running while facing right, arms pumping and legs moving quickly. |
| 🏃🏽♀️➡️ | woman running facing right: medium skin tone | A woman with medium skin is depicted running while facing right, arms pumping and legs moving quickly. |
| 🏃🏾♀️➡️ | woman running facing right: medium-dark skin tone | A woman with medium-dark skin is depicted running while facing right, arms pumping and legs moving quickly. |
| 🏃🏿♀️➡️ | woman running facing right: dark skin tone | A woman with dark skin is depicted running while facing right, arms pumping and legs moving quickly. |
| 🏃♂️➡️ | man running facing right | A man is depicted running while facing right, arms pumping and legs moving quickly. |
| 🏃🏻♂️➡️ | man running facing right: light skin tone | A man with light skin is depicted running while facing right, arms pumping and legs moving quickly. |
| 🏃🏼♂️➡️ | man running facing right: medium-light skin tone | A man with medium-light skin is depicted running while facing right, arms pumping and legs moving quickly. |
| 🏃🏽♂️➡️ | man running facing right: medium skin tone | A man with medium skin is depicted running while facing right, arms pumping and legs moving quickly. |
| 🏃🏾♂️➡️ | man running facing right: medium-dark skin tone | A man with medium-dark skin tone is running to the right, wearing a determined expression. |
| 🏃🏿♂️➡️ | man running facing right: dark skin tone | A man with dark skin tone is running to the right, showcasing a focused expression. |
| 💃 | woman dancing | A woman in a vibrant red dress is dancing joyfully, with her arms raised and a spirited expression. |
| 💃🏻 | woman dancing: light skin tone | A woman with light skin tone is dancing in a lively red dress, arms lifted in celebration. |
| 💃🏼 | woman dancing: medium-light skin tone | A woman with medium-light skin tone is dancing elegantly in a bright red dress, arms raised in excitement. |
| 💃🏽 | woman dancing: medium skin tone | A woman with medium skin tone is dancing in a flowing red dress, her arms lifted and a joyful expression on her face. |
| 💃🏾 | woman dancing: medium-dark skin tone | A woman with medium-dark skin tone is dancing energetically in a red dress, her arms raised in a festive pose. |
| 💃🏿 | woman dancing: dark skin tone | A woman with dark skin tone is dancing gracefully in a vibrant red dress, her arms lifted in celebration. |
| 🕺 | man dancing | A man is dancing with a joyful expression, dressed in a stylish outfit, arms raised in a festive manner. |
| 🕺🏻 | man dancing: light skin tone | A man with light skin tone is dancing, wearing a smart outfit and displaying a cheerful expression. |
| 🕺🏼 | man dancing: medium-light skin tone | A man with medium-light skin tone is dancing in a stylish outfit, with a lively expression. |
| 🕺🏽 | man dancing: medium skin tone | A man with medium skin tone is dancing joyfully, dressed in a fashionable outfit and smiling. |
| 🕺🏾 | man dancing: medium-dark skin tone | A man with medium-dark skin tone is dancing energetically, wearing a smart outfit and exuding joy. |
| 🕺🏿 | man dancing: dark skin tone | A man with dark skin tone is dancing with enthusiasm, dressed in a stylish outfit and displaying a cheerful expression. |
| 🕴️ | person in suit levitating | A person in a suit is levitating above the ground, arms slightly extended and a confident expression. |
| 🕴🏻 | person in suit levitating: light skin tone | A person with light skin tone in a suit is levitating, arms outstretched and looking confident. |
| 🕴🏼 | person in suit levitating: medium-light skin tone | A person with medium-light skin tone is levitating in a suit, arms extended and a self-assured expression. |
| 🕴🏽 | person in suit levitating: medium skin tone | A person with medium skin tone is levitating in a suit, arms raised slightly and wearing a confident look. |
| 🕴🏾 | person in suit levitating: medium-dark skin tone | A person with medium-dark skin tone is levitating in a suit, arms outstretched and exuding confidence. |
| 🕴🏿 | person in suit levitating: dark skin tone | A person with dark skin tone is levitating in a suit, arms extended and displaying a self-assured expression. |
| 👯 | people with bunny ears | Two people are standing side by side, both wearing bunny ears and smiling, ready to dance. |
| 👯♂️ | men with bunny ears | Two men are standing together, both wearing bunny ears and smiling, ready to perform. |
| 👯♀️ | women with bunny ears | Two women are standing side by side, both wearing bunny ears and smiling, prepared to dance. |
| 🧖 | person in steamy room | A person is sitting in a steamy room, looking relaxed and content, with steam rising around them. |
| 🧖🏻 | person in steamy room: light skin tone | A person with light skin tone is sitting in a steamy room, appearing relaxed and at ease amidst the steam. |
| 🧖🏼 | person in steamy room: medium-light skin tone | A person with medium-light skin tone is sitting in a steamy room, looking calm and content as steam surrounds them. |
| 🧖🏽 | person in steamy room: medium skin tone | A person with medium skin tone is sitting in a steamy room, appearing relaxed and enjoying the warmth. |
| 🧖🏾 | person in steamy room: medium-dark skin tone | A person with medium-dark skin tone is sitting in a steamy room, looking serene and content as steam envelops them. |
| 🧖🏿 | person in steamy room: dark skin tone | A person with dark skin tone is sitting in a steamy room, appearing relaxed and at peace amidst the steam. |
| 🧖♂️ | man in steamy room | A man is sitting in a steamy room, looking relaxed and enjoying the warmth around him. |
| 🧖🏻♂️ | man in steamy room: light skin tone | A man with light skin tone is sitting in a steamy room, appearing calm and content in the warm atmosphere. |
| 🧖🏼♂️ | man in steamy room: medium-light skin tone | A man with medium-light skin tone is sitting in a steamy room, looking relaxed and enjoying the soothing steam. |
| 🧖🏽♂️ | man in steamy room: medium skin tone | A man with medium skin tone is sitting in a steamy room, appearing at ease and enjoying the warmth. |
| 🧖🏾♂️ | man in steamy room: medium-dark skin tone | A man with medium-dark skin tone is sitting in a steamy room, looking serene and content amidst the steam. |
| 🧖🏿♂️ | man in steamy room: dark skin tone | A man with dark skin tone is sitting in a steamy room, appearing relaxed and enjoying the warm, steamy environment. |
| 🧖♀️ | woman in steamy room | A woman is sitting in a steamy room, looking relaxed and content, with steam rising around her. |
| 🧖🏻♀️ | woman in steamy room: light skin tone | A woman with light skin tone is sitting in a steamy room, appearing calm and at ease amidst the steam. |
| 🧖🏼♀️ | woman in steamy room: medium-light skin tone | A woman with medium-light skin tone is sitting in a steamy room, looking relaxed and enjoying the soothing steam. |
| 🧖🏽♀️ | woman in steamy room: medium skin tone | A woman with medium skin tone is sitting in a steamy room, appearing at ease and enjoying the warmth. |
| 🧖🏾♀️ | woman in steamy room: medium-dark skin tone | A woman with medium-dark skin tone is sitting in a steamy room, looking serene and content amidst the steam. |
| 🧖🏿♀️ | woman in steamy room: dark skin tone | A woman with dark skin is relaxing in a steamy room, wearing a towel wrapped around her body and a towel on her head. |
| 🧗 | person climbing | A person is climbing a rock face, with a determined expression, wearing climbing gear and reaching for a handhold. |
| 🧗🏻 | person climbing: light skin tone | A person with light skin is climbing a rock face, focused and wearing climbing gear. |
| 🧗🏼 | person climbing: medium-light skin tone | A person with medium-light skin is climbing, showing concentration and wearing climbing equipment. |
| 🧗🏽 | person climbing: medium skin tone | A person with medium skin is engaged in climbing, displaying a look of determination with climbing gear on. |
| 🧗🏾 | person climbing: medium-dark skin tone | A person with medium-dark skin is climbing, focused and equipped with climbing gear. |
| 🧗🏿 | person climbing: dark skin tone | A person with dark skin is scaling a rock face, wearing climbing gear and looking determined. |
| 🧗♂️ | man climbing | A man is climbing a rock face, looking focused and wearing climbing gear. |
| 🧗🏻♂️ | man climbing: light skin tone | A man with light skin is climbing, showing determination and wearing climbing equipment. |
| 🧗🏼♂️ | man climbing: medium-light skin tone | A man with medium-light skin is engaged in climbing, focused and equipped with climbing gear. |
| 🧗🏽♂️ | man climbing: medium skin tone | A man with medium skin is climbing a rock face, displaying concentration and wearing climbing gear. |
| 🧗🏾♂️ | man climbing: medium-dark skin tone | A man with medium-dark skin is climbing, looking determined and wearing climbing equipment. |
| 🧗🏿♂️ | man climbing: dark skin tone | A man with dark skin is climbing a rock face, focused and equipped with climbing gear. |
| 🧗♀️ | woman climbing | A woman is climbing, looking determined and wearing climbing gear. |
| 🧗🏻♀️ | woman climbing: light skin tone | A woman with light skin is climbing, showing focus and wearing climbing equipment. |
| 🧗🏼♀️ | woman climbing: medium-light skin tone | A woman with medium-light skin is engaged in climbing, displaying concentration and wearing climbing gear. |
| 🧗🏽♀️ | woman climbing: medium skin tone | A woman with medium skin is climbing, looking determined and equipped with climbing gear. |
| 🧗🏾♀️ | woman climbing: medium-dark skin tone | A woman with medium-dark skin is climbing, focused and wearing climbing equipment. |
| 🧗🏿♀️ | woman climbing: dark skin tone | A woman with dark skin is scaling a rock face, wearing climbing gear and looking determined. |
| 🤺 | person fencing | A person is in a fencing stance, wearing a mask and protective gear, holding a sword in a ready position. |
| 🏇 | horse racing | A jockey is riding a galloping horse, leaning forward with determination, wearing a helmet and racing attire. |
| 🏇🏻 | horse racing: light skin tone | A jockey with light skin is racing on a horse, leaning forward in a riding posture, wearing a helmet. |
| 🏇🏼 | horse racing: medium-light skin tone | A jockey with medium-light skin is riding a horse, showing focus and wearing a helmet. |
| 🏇🏽 | horse racing: medium skin tone | A jockey with medium skin is racing on a horse, leaning forward in a determined posture. |
| 🏇🏾 | horse racing: medium-dark skin tone | A jockey with medium-dark skin is riding a galloping horse, focused and wearing a helmet. |
| 🏇🏿 | horse racing: dark skin tone | A jockey with dark skin is riding a horse, leaning forward with determination, wearing a helmet. |
| ⛷️ | skier | A skier is in a crouched position, wearing a helmet and ski gear, ready to descend a slope. |
| 🏂 | snowboarder | A snowboarder is in a dynamic pose, balancing on a snowboard while descending a slope. |
| 🏂🏻 | snowboarder: light skin tone | A snowboarder with light skin is riding down a slope, wearing a helmet and snow gear. |
| 🏂🏼 | snowboarder: medium-light skin tone | A snowboarder with medium-light skin is in a riding position, wearing a helmet and snow gear. |
| 🏂🏽 | snowboarder: medium skin tone | A snowboarder with medium skin is balancing on a snowboard, wearing a helmet and snow attire. |
| 🏂🏾 | snowboarder: medium-dark skin tone | A snowboarder with medium-dark skin is riding down a slope, focused and wearing snow gear. |
| 🏂🏿 | snowboarder: dark skin tone | A snowboarder with dark skin is in a dynamic pose on a snowboard, wearing a helmet and snow gear. |
| 🏌️ | person golfing | A person is preparing to hit a golf ball, holding a golf club and wearing casual golf attire. |
| 🏌🏻 | person golfing: light skin tone | A person with light skin is about to swing a golf club, dressed in golf attire. |
| 🏌🏼 | person golfing: medium-light skin tone | A person with medium-light skin is preparing to hit a golf ball, wearing golf clothes. |
| 🏌🏽 | person golfing: medium skin tone | A person with medium skin is poised to swing a golf club, dressed in casual golf attire. |
| 🏌🏾 | person golfing: medium-dark skin tone | A person with medium-dark skin is getting ready to hit a golf ball, wearing golf attire. |
| 🏌🏿 | person golfing: dark skin tone | A person with dark skin is about to swing a golf club, dressed in golf clothing. |
| 🏌️♂️ | man golfing | A man is preparing to hit a golf ball, holding a golf club and wearing casual golf attire. |
| 🏌🏻♂️ | man golfing: light skin tone | A man with light skin tone is poised to swing a golf club, wearing a cap and a golf outfit. |
| 🏌🏼♂️ | man golfing: medium-light skin tone | A man with medium-light skin tone stands ready with a golf club, dressed in sporty attire and a cap. |
| 🏌🏽♂️ | man golfing: medium skin tone | A man with medium skin tone is in a golfing stance, holding a golf club, wearing a cap and golf clothing. |
| 🏌🏾♂️ | man golfing: medium-dark skin tone | A man with medium-dark skin tone is positioned to hit a golf ball, wearing a cap and golf outfit. |
| 🏌🏿♂️ | man golfing: dark skin tone | A man with dark skin tone is ready to swing a golf club, dressed in a golf outfit and cap. |
| 🏌️♀️ | woman golfing | A woman is in a golfing stance, holding a golf club, dressed in sporty attire and a cap. |
| 🏌🏻♀️ | woman golfing: light skin tone | A woman with light skin tone is poised to swing a golf club, wearing a cap and golf attire. |
| 🏌🏼♀️ | woman golfing: medium-light skin tone | A woman with medium-light skin tone stands ready with a golf club, dressed in sporty clothing and a cap. |
| 🏌🏽♀️ | woman golfing: medium skin tone | A woman with medium skin tone is in a golfing position, holding a golf club, wearing a cap and golf outfit. |
| 🏌🏾♀️ | woman golfing: medium-dark skin tone | A woman with medium-dark skin tone is prepared to hit a golf ball, dressed in a cap and golf attire. |
| 🏌🏿♀️ | woman golfing: dark skin tone | A woman with dark skin tone is ready to swing a golf club, wearing a cap and golf outfit. |
| 🏄 | person surfing | A person is riding a surfboard on a wave, arms outstretched for balance, wearing swimwear. |
| 🏄🏻 | person surfing: light skin tone | A person with light skin tone is surfing on a wave, arms extended for balance, dressed in swimwear. |
| 🏄🏼 | person surfing: medium-light skin tone | A person with medium-light skin tone is on a surfboard, balancing on a wave in swimwear. |
| 🏄🏽 | person surfing: medium skin tone | A person with medium skin tone is surfing, arms outstretched for balance, wearing swimwear. |
| 🏄🏾 | person surfing: medium-dark skin tone | A person with medium-dark skin tone is riding a wave on a surfboard, arms extended for balance. |
| 🏄🏿 | person surfing: dark skin tone | A person with dark skin tone is surfing on a wave, balancing on a surfboard in swimwear. |
| 🏄♂️ | man surfing | A man is surfing on a wave, arms spread wide for balance, wearing swimwear. |
| 🏄🏻♂️ | man surfing: light skin tone | A man with light skin tone is riding a surfboard on a wave, arms extended for balance, dressed in swimwear. |
| 🏄🏼♂️ | man surfing: medium-light skin tone | A man with medium-light skin tone is surfing, balancing on a wave, wearing swimwear. |
| 🏄🏽♂️ | man surfing: medium skin tone | A man with medium skin tone is on a surfboard, arms outstretched for balance while riding a wave. |
| 🏄🏾♂️ | man surfing: medium-dark skin tone | A man with medium-dark skin tone is surfing on a wave, balancing on a surfboard in swimwear. |
| 🏄🏿♂️ | man surfing: dark skin tone | A man with dark skin tone is riding a surfboard on a wave, arms spread for balance, dressed in swimwear. |
| 🏄♀️ | woman surfing | A woman is surfing on a wave, arms extended for balance, wearing swimwear. |
| 🏄🏻♀️ | woman surfing: light skin tone | A woman with light skin tone is riding a surfboard on a wave, balancing with arms outstretched, dressed in swimwear. |
| 🏄🏼♀️ | woman surfing: medium-light skin tone | A woman with medium-light skin tone is surfing, balancing on a wave in swimwear. |
| 🏄🏽♀️ | woman surfing: medium skin tone | A woman with medium skin tone is on a surfboard, arms outstretched for balance while riding a wave. |
| 🏄🏾♀️ | woman surfing: medium-dark skin tone | A woman with medium-dark skin tone is surfing on a wave, balancing on a surfboard in swimwear. |
| 🏄🏿♀️ | woman surfing: dark skin tone | A woman with dark skin tone is riding a surfboard on a wave, arms spread for balance, dressed in swimwear. |
| 🚣 | person rowing boat | A person is sitting in a small boat, holding an oar, ready to row on the water. |
| 🚣🏻 | person rowing boat: light skin tone | A person with light skin tone is rowing a boat, holding an oar, seated in the boat. |
| 🚣🏼 | person rowing boat: medium-light skin tone | A person with medium-light skin tone is in a boat, rowing with an oar. |
| 🚣🏽 | person rowing boat: medium skin tone | A person with medium skin tone is seated in a boat, holding an oar to row. |
| 🚣🏾 | person rowing boat: medium-dark skin tone | A person with medium-dark skin tone is rowing a boat, seated and holding an oar. |
| 🚣🏿 | person rowing boat: dark skin tone | A person with dark skin tone is in a boat, holding an oar and ready to row. |
| 🚣♂️ | man rowing boat | A man is seated in a small boat, holding an oar, prepared to row. |
| 🚣🏻♂️ | man rowing boat: light skin tone | A man with light skin tone is rowing a boat, seated and gripping an oar. |
| 🚣🏼♂️ | man rowing boat: medium-light skin tone | A man with medium-light skin tone is in a boat, holding an oar to row. |
| 🚣🏽♂️ | man rowing boat: medium skin tone | A man with medium skin tone is seated in a boat, ready to row with an oar. |
| 🚣🏾♂️ | man rowing boat: medium-dark skin tone | A man with medium-dark skin tone is rowing a boat, seated and holding an oar. |
| 🚣🏿♂️ | man rowing boat: dark skin tone | A man with dark skin tone is seated in a small boat, using an oar to row forward, with a focused expression. |
| 🚣♀️ | woman rowing boat | A woman is seated in a small boat, actively rowing with an oar, her hair flowing back as she moves through the water. |
| 🚣🏻♀️ | woman rowing boat: light skin tone | A woman with light skin tone is rowing a boat, gripping an oar with determination, her hair styled back. |
| 🚣🏼♀️ | woman rowing boat: medium-light skin tone | A woman with medium-light skin tone is seated in a boat, rowing with an oar, her expression showing concentration. |
| 🚣🏽♀️ | woman rowing boat: medium skin tone | A woman with medium skin tone is rowing a boat, her oar slicing through the water as she focuses ahead. |
| 🚣🏾♀️ | woman rowing boat: medium-dark skin tone | A woman with medium-dark skin tone is actively rowing a boat, her hair flowing as she maneuvers the oar. |
| 🚣🏿♀️ | woman rowing boat: dark skin tone | A woman with dark skin tone is seated in a boat, rowing with an oar, displaying a determined expression. |
| 🏊 | person swimming | A person is swimming in a freestyle position, arms extended forward, with water splashing around them. |
| 🏊🏻 | person swimming: light skin tone | A person with light skin tone is swimming, arms in motion and a focused expression, creating ripples in the water. |
| 🏊🏼 | person swimming: medium-light skin tone | A person with medium-light skin tone is swimming, arms outstretched in a freestyle stroke, splashing water around. |
| 🏊🏽 | person swimming: medium skin tone | A person with medium skin tone is swimming, their arms moving rhythmically through the water, creating waves. |
| 🏊🏾 | person swimming: medium-dark skin tone | A person with medium-dark skin tone is swimming, showcasing a strong freestyle stroke with water splashing around. |
| 🏊🏿 | person swimming: dark skin tone | A person with dark skin tone is swimming, arms moving powerfully through the water, creating a trail of splashes. |
| 🏊♂️ | man swimming | A man is swimming in a freestyle position, arms extended forward, with water splashing around him. |
| 🏊🏻♂️ | man swimming: light skin tone | A man with light skin tone is swimming, arms moving in a freestyle stroke, creating ripples in the water. |
| 🏊🏼♂️ | man swimming: medium-light skin tone | A man with medium-light skin tone is swimming, his arms in motion and a determined look on his face. |
| 🏊🏽♂️ | man swimming: medium skin tone | A man with medium skin tone is swimming, his arms moving rhythmically through the water, causing splashes. |
| 🏊🏾♂️ | man swimming: medium-dark skin tone | A man with medium-dark skin tone is swimming, showcasing a strong stroke with water splashing around him. |
| 🏊🏿♂️ | man swimming: dark skin tone | A man with dark skin tone is swimming, arms moving powerfully through the water, creating a trail of splashes. |
| 🏊♀️ | woman swimming | A woman is swimming in a freestyle position, arms extended forward, with water splashing around her. |
| 🏊🏻♀️ | woman swimming: light skin tone | A woman with light skin tone is swimming, her arms moving in a freestyle stroke, creating ripples in the water. |
| 🏊🏼♀️ | woman swimming: medium-light skin tone | A woman with medium-light skin tone is swimming, arms in motion and a focused expression, splashing water around. |
| 🏊🏽♀️ | woman swimming: medium skin tone | A woman with medium skin tone is swimming, her arms moving rhythmically through the water, causing waves. |
| 🏊🏾♀️ | woman swimming: medium-dark skin tone | A woman with medium-dark skin tone is swimming, showcasing a strong freestyle stroke with water splashing around her. |
| 🏊🏿♀️ | woman swimming: dark skin tone | A woman with dark skin tone is swimming, arms moving powerfully through the water, creating a trail of splashes. |
| ⛹️ | person bouncing ball | A person is bouncing a basketball, poised in a dynamic stance, with an energetic expression. |
| ⛹🏻 | person bouncing ball: light skin tone | A person with light skin tone is bouncing a basketball, showing enthusiasm and focus in their stance. |
| ⛹🏼 | person bouncing ball: medium-light skin tone | A person with medium-light skin tone is bouncing a basketball, displaying a lively expression and athletic posture. |
| ⛹🏽 | person bouncing ball: medium skin tone | A person with medium skin tone is bouncing a basketball, showcasing energy and determination in their stance. |
| ⛹🏾 | person bouncing ball: medium-dark skin tone | A person with medium-dark skin tone is bouncing a basketball, exuding confidence and focus. |
| ⛹🏿 | person bouncing ball: dark skin tone | A person with dark skin tone is bouncing a basketball, displaying an energetic and dynamic pose. |
| ⛹️♂️ | man bouncing ball | A man is bouncing a basketball, poised in an athletic stance with a determined expression. |
| ⛹🏻♂️ | man bouncing ball: light skin tone | A man with light skin tone is bouncing a basketball, showing enthusiasm and focus in his stance. |
| ⛹🏼♂️ | man bouncing ball: medium-light skin tone | A man with medium-light skin tone is bouncing a basketball, displaying a lively expression and athletic posture. |
| ⛹🏽♂️ | man bouncing ball: medium skin tone | A man with medium skin tone is bouncing a basketball, showcasing energy and determination in his stance. |
| ⛹🏾♂️ | man bouncing ball: medium-dark skin tone | A man with medium-dark skin tone is bouncing a basketball, exuding confidence and focus. |
| ⛹🏿♂️ | man bouncing ball: dark skin tone | A man with dark skin tone is bouncing a basketball, displaying an energetic and dynamic pose. |
| ⛹️♀️ | woman bouncing ball | A woman is bouncing a basketball, poised in a dynamic stance, with an energetic expression. |
| ⛹🏻♀️ | woman bouncing ball: light skin tone | A woman with light skin tone is bouncing a basketball, showing enthusiasm and focus in her stance. |
| ⛹🏼♀️ | woman bouncing ball: medium-light skin tone | A woman with medium-light skin tone is bouncing a basketball, displaying a lively expression and athletic posture. |
| ⛹🏽♀️ | woman bouncing ball: medium skin tone | A woman with medium skin tone is energetically bouncing a basketball, wearing a sporty outfit and showing a focused expression. |
| ⛹🏾♀️ | woman bouncing ball: medium-dark skin tone | A woman with medium-dark skin tone is bouncing a basketball, dressed in athletic wear and displaying a determined look. |
| ⛹🏿♀️ | woman bouncing ball: dark skin tone | A woman with dark skin tone is actively bouncing a basketball, dressed in sports attire and exuding concentration. |
| 🏋️ | person lifting weights | A person is lifting a heavy barbell overhead, showcasing strength and determination with a neutral expression. |
| 🏋🏻 | person lifting weights: light skin tone | A person with light skin tone is lifting a barbell, muscles tense and focused, dressed in athletic gear. |
| 🏋🏼 | person lifting weights: medium-light skin tone | A person with medium-light skin tone is raising a barbell above their head, showing effort and concentration in their expression. |
| 🏋🏽 | person lifting weights: medium skin tone | A person with medium skin tone is lifting a barbell, demonstrating strength with a serious expression. |
| 🏋🏾 | person lifting weights: medium-dark skin tone | A person with medium-dark skin tone is lifting weights above their head, displaying a strong and focused demeanor. |
| 🏋🏿 | person lifting weights: dark skin tone | A person with dark skin tone is lifting a heavy barbell, showing determination and strength in their posture. |
| 🏋️♂️ | man lifting weights | A man is lifting a barbell overhead, showcasing his strength with a determined look on his face. |
| 🏋🏻♂️ | man lifting weights: light skin tone | A man with light skin tone is lifting weights, muscles flexed and focused expression as he exerts effort. |
| 🏋🏼♂️ | man lifting weights: medium-light skin tone | A man with medium-light skin tone is raising a barbell, showing concentration and strength in his expression. |
| 🏋🏽♂️ | man lifting weights: medium skin tone | A man with medium skin tone is lifting weights, displaying effort and determination in his focused expression. |
| 🏋🏾♂️ | man lifting weights: medium-dark skin tone | A man with medium-dark skin tone is lifting a heavy barbell, showing strength and concentration. |
| 🏋🏿♂️ | man lifting weights: dark skin tone | A man with dark skin tone is lifting weights overhead, demonstrating strength and a serious demeanor. |
| 🏋️♀️ | woman lifting weights | A woman is lifting a barbell above her head, showcasing strength and determination with a focused expression. |
| 🏋🏻♀️ | woman lifting weights: light skin tone | A woman with light skin tone is lifting weights, showing effort and concentration in her expression. |
| 🏋🏼♀️ | woman lifting weights: medium-light skin tone | A woman with medium-light skin tone is raising a barbell, demonstrating strength with a serious look. |
| 🏋🏽♀️ | woman lifting weights: medium skin tone | A woman with medium skin tone is lifting weights overhead, displaying determination and focus. |
| 🏋🏾♀️ | woman lifting weights: medium-dark skin tone | A woman with medium-dark skin tone is lifting a barbell, showing strength and concentration. |
| 🏋🏿♀️ | woman lifting weights: dark skin tone | A woman with dark skin tone is lifting weights, demonstrating effort and a serious expression. |
| 🚴 | person biking | A person is riding a bicycle, leaning slightly forward with a focused expression, dressed in sporty attire. |
| 🚴🏻 | person biking: light skin tone | A person with light skin tone is biking, leaning forward with determination, wearing athletic clothing. |
| 🚴🏼 | person biking: medium-light skin tone | A person with medium-light skin tone is riding a bike, showing focus and wearing cycling gear. |
| 🚴🏽 | person biking: medium skin tone | A person with medium skin tone is biking, leaning forward with concentration, dressed in sporty attire. |
| 🚴🏾 | person biking: medium-dark skin tone | A person with medium-dark skin tone is riding a bicycle, displaying focus and determination in their expression. |
| 🚴🏿 | person biking: dark skin tone | A person with dark skin tone is biking, leaning forward with a serious look, dressed in athletic wear. |
| 🚴♂️ | man biking | A man is riding a bicycle, leaning forward with a focused expression, dressed in sporty clothing. |
| 🚴🏻♂️ | man biking: light skin tone | A man with light skin tone is biking, showing determination and wearing athletic gear. |
| 🚴🏼♂️ | man biking: medium-light skin tone | A man with medium-light skin tone is riding a bike, demonstrating focus and wearing cycling attire. |
| 🚴🏽♂️ | man biking: medium skin tone | A man with medium skin tone is biking, leaning forward with concentration, dressed in sporty clothing. |
| 🚴🏾♂️ | man biking: medium-dark skin tone | A man with medium-dark skin tone is riding a bicycle, showing determination and focus. |
| 🚴🏿♂️ | man biking: dark skin tone | A man with dark skin tone is biking, leaning forward with a serious expression, dressed in athletic wear. |
| 🚴♀️ | woman biking | A woman is riding a bicycle, leaning slightly forward with a focused look, dressed in sporty attire. |
| 🚴🏻♀️ | woman biking: light skin tone | A woman with light skin tone is biking, showing determination and wearing athletic clothing. |
| 🚴🏼♀️ | woman biking: medium-light skin tone | A woman with medium-light skin tone is riding a bike, demonstrating focus and wearing cycling gear. |
| 🚴🏽♀️ | woman biking: medium skin tone | A woman with medium skin tone is biking, leaning forward with concentration, dressed in sporty attire. |
| 🚴🏾♀️ | woman biking: medium-dark skin tone | A woman with medium-dark skin tone is riding a bicycle, showing determination and focus. |
| 🚴🏿♀️ | woman biking: dark skin tone | A woman with dark skin tone is biking, leaning forward with a serious expression, dressed in athletic wear. |
| 🚵 | person mountain biking | A person is mountain biking, navigating rough terrain with a focused expression and wearing protective gear. |
| 🚵🏻 | person mountain biking: light skin tone | A person with light skin tone is riding a mountain bike, wearing a helmet, and leaning forward as they navigate a rugged terrain. |
| 🚵🏼 | person mountain biking: medium-light skin tone | A person with medium-light skin tone is mountain biking, sporting a helmet and an enthusiastic posture as they ride over a challenging path. |
| 🚵🏽 | person mountain biking: medium skin tone | A person with medium skin tone is actively mountain biking, wearing a helmet and appearing focused as they tackle the trail. |
| 🚵🏾 | person mountain biking: medium-dark skin tone | A person with medium-dark skin tone is seen mountain biking, leaning into the ride with a helmet on, showcasing determination. |
| 🚵🏿 | person mountain biking: dark skin tone | A person with dark skin tone is riding a mountain bike, helmet securely fastened, and exhibiting a strong posture as they navigate the terrain. |
| 🚵♂️ | man mountain biking | A man is mountain biking, wearing a helmet and leaning forward on his bike as he rides over uneven ground. |
| 🚵🏻♂️ | man mountain biking: light skin tone | A man with light skin tone is mountain biking, wearing a helmet and showing excitement as he rides downhill. |
| 🚵🏼♂️ | man mountain biking: medium-light skin tone | A man with medium-light skin tone is riding a mountain bike, helmet on, with a determined expression as he maneuvers through the landscape. |
| 🚵🏽♂️ | man mountain biking: medium skin tone | A man with medium skin tone is mountain biking, leaning forward with a helmet, displaying focus and energy on the trail. |
| 🚵🏾♂️ | man mountain biking: medium-dark skin tone | A man with medium-dark skin tone is seen mountain biking, wearing a helmet and showing determination as he rides over rough terrain. |
| 🚵🏿♂️ | man mountain biking: dark skin tone | A man with dark skin tone is actively mountain biking, helmet on, with a strong posture as he navigates the trail. |
| 🚵♀️ | woman mountain biking | A woman is mountain biking, wearing a helmet and leaning forward on her bike as she tackles a rugged path. |
| 🚵🏻♀️ | woman mountain biking: light skin tone | A woman with light skin tone is mountain biking, helmet securely fastened, and showing excitement as she rides downhill. |
| 🚵🏼♀️ | woman mountain biking: medium-light skin tone | A woman with medium-light skin tone is riding a mountain bike, wearing a helmet and appearing focused as she navigates the trail. |
| 🚵🏽♀️ | woman mountain biking: medium skin tone | A woman with medium skin tone is mountain biking, leaning forward with a helmet, displaying energy and enthusiasm. |
| 🚵🏾♀️ | woman mountain biking: medium-dark skin tone | A woman with medium-dark skin tone is seen mountain biking, wearing a helmet and showing determination as she rides through the terrain. |
| 🚵🏿♀️ | woman mountain biking: dark skin tone | A woman with dark skin tone is actively mountain biking, helmet on, and exhibiting a strong posture as she navigates the trail. |
| 🤸 | person cartwheeling | A person is performing a cartwheel, arms and legs extended in a dynamic pose, showcasing excitement and energy. |
| 🤸🏻 | person cartwheeling: light skin tone | A person with light skin tone is cartwheeling, arms and legs spread wide, displaying joy and enthusiasm. |
| 🤸🏼 | person cartwheeling: medium-light skin tone | A person with medium-light skin tone is seen mid-cartwheel, with limbs extended and a joyful expression. |
| 🤸🏽 | person cartwheeling: medium skin tone | A person with medium skin tone is performing a cartwheel, limbs outstretched, exuding energy and excitement. |
| 🤸🏾 | person cartwheeling: medium-dark skin tone | A person with medium-dark skin tone is cartwheeling, arms and legs extended in a lively pose, radiating enthusiasm. |
| 🤸🏿 | person cartwheeling: dark skin tone | A person with dark skin tone is seen mid-cartwheel, limbs spread wide, showcasing an energetic and joyful expression. |
| 🤸♂️ | man cartwheeling | A man is performing a cartwheel, arms and legs extended in a dynamic pose, showcasing excitement and athleticism. |
| 🤸🏻♂️ | man cartwheeling: light skin tone | A man with light skin tone is cartwheeling, limbs outstretched and a cheerful expression on his face. |
| 🤸🏼♂️ | man cartwheeling: medium-light skin tone | A man with medium-light skin tone is seen mid-cartwheel, arms and legs extended, displaying joy and energy. |
| 🤸🏽♂️ | man cartwheeling: medium skin tone | A man with medium skin tone is performing a cartwheel, limbs spread wide, exuding enthusiasm and excitement. |
| 🤸🏾♂️ | man cartwheeling: medium-dark skin tone | A man with medium-dark skin tone is cartwheeling, arms and legs extended in a lively pose, radiating energy. |
| 🤸🏿♂️ | man cartwheeling: dark skin tone | A man with dark skin tone is seen mid-cartwheel, limbs outstretched, showcasing an energetic and joyful expression. |
| 🤸♀️ | woman cartwheeling | A woman is performing a cartwheel, arms and legs extended in a dynamic pose, showcasing excitement and energy. |
| 🤸🏻♀️ | woman cartwheeling: light skin tone | A woman with light skin tone is cartwheeling, limbs outstretched and a cheerful expression on her face. |
| 🤸🏼♀️ | woman cartwheeling: medium-light skin tone | A woman with medium-light skin tone is seen mid-cartwheel, arms and legs extended, displaying joy and energy. |
| 🤸🏽♀️ | woman cartwheeling: medium skin tone | A woman with medium skin tone is performing a cartwheel, limbs spread wide, exuding enthusiasm and excitement. |
| 🤸🏾♀️ | woman cartwheeling: medium-dark skin tone | A woman with medium-dark skin tone is cartwheeling, arms and legs extended in a lively pose, radiating energy. |
| 🤸🏿♀️ | woman cartwheeling: dark skin tone | A woman with dark skin tone is seen mid-cartwheel, limbs outstretched, showcasing an energetic and joyful expression. |
| 🤼 | people wrestling | Two people are grappling in a wrestling match, both in dynamic poses, showcasing strength and competition. |
| 🤼♂️ | men wrestling | Two men are wrestling, engaged in a competitive grapple, showcasing physical strength and determination. |
| 🤼♀️ | women wrestling | Two women are wrestling, both in dynamic poses, displaying strength and competitive spirit. |
| 🤽 | person playing water polo | A person is playing water polo, poised with a ball in one hand, ready to make a play in the water. |
| 🤽🏻 | person playing water polo: light skin tone | A person with light skin tone is seen playing water polo, holding a ball and appearing focused and ready to make a move. |
| 🤽🏼 | person playing water polo: medium-light skin tone | A person with medium-light skin tone is in a dynamic pose, holding a water polo ball above their head, ready to throw it. |
| 🤽🏽 | person playing water polo: medium skin tone | A person with medium skin tone is poised to throw a water polo ball, displaying a determined expression. |
| 🤽🏾 | person playing water polo: medium-dark skin tone | A person with medium-dark skin tone is in an athletic stance, gripping a water polo ball, showcasing focus and energy. |
| 🤽🏿 | person playing water polo: dark skin tone | A person with dark skin tone is actively engaged in water polo, holding a ball high, exuding confidence and readiness. |
| 🤽♂️ | man playing water polo | A man is depicted in mid-action, preparing to throw a water polo ball, showcasing a competitive spirit. |
| 🤽🏻♂️ | man playing water polo: light skin tone | A man with light skin tone is in a throwing position, holding a water polo ball with a focused expression. |
| 🤽🏼♂️ | man playing water polo: medium-light skin tone | A man with medium-light skin tone is captured in a dynamic pose, ready to launch a water polo ball. |
| 🤽🏽♂️ | man playing water polo: medium skin tone | A man with medium skin tone is in an active stance, gripping a water polo ball, displaying determination. |
| 🤽🏾♂️ | man playing water polo: medium-dark skin tone | A man with medium-dark skin tone is poised to throw a water polo ball, showing concentration and athleticism. |
| 🤽🏿♂️ | man playing water polo: dark skin tone | A man with dark skin tone is depicted in a competitive pose, holding a water polo ball high, ready to make a move. |
| 🤽♀️ | woman playing water polo | A woman is shown in an athletic stance, preparing to throw a water polo ball with a determined expression. |
| 🤽🏻♀️ | woman playing water polo: light skin tone | A woman with light skin tone is in a dynamic pose, holding a water polo ball above her head, ready to throw. |
| 🤽🏼♀️ | woman playing water polo: medium-light skin tone | A woman with medium-light skin tone is depicted in mid-action, gripping a water polo ball with focus. |
| 🤽🏽♀️ | woman playing water polo: medium skin tone | A woman with medium skin tone is poised to throw a water polo ball, showcasing determination and athleticism. |
| 🤽🏾♀️ | woman playing water polo: medium-dark skin tone | A woman with medium-dark skin tone is actively engaged in a water polo game, holding a ball high with confidence. |
| 🤽🏿♀️ | woman playing water polo: dark skin tone | A woman with dark skin tone is depicted in a competitive pose, ready to launch a water polo ball. |
| 🤾 | person playing handball | A person is shown in mid-throw, hurling a handball with a focused expression, embodying athletic energy. |
| 🤾🏻 | person playing handball: light skin tone | A person with light skin tone is depicted in an action pose, preparing to throw a handball with determination. |
| 🤾🏼 | person playing handball: medium-light skin tone | A person with medium-light skin tone is in a dynamic stance, gripping a handball, ready to make a play. |
| 🤾🏽 | person playing handball: medium skin tone | A person with medium skin tone is shown in an athletic pose, holding a handball, exuding focus and energy. |
| 🤾🏾 | person playing handball: medium-dark skin tone | A person with medium-dark skin tone is depicted in mid-action, preparing to throw a handball with intensity. |
| 🤾🏿 | person playing handball: dark skin tone | A person with dark skin tone is in a competitive stance, gripping a handball, ready to make a decisive move. |
| 🤾♂️ | man playing handball | A man is shown in mid-throw, hurling a handball with an intense expression, showcasing athleticism. |
| 🤾🏻♂️ | man playing handball: light skin tone | A man with light skin tone is depicted in a throwing position, focused on the handball he is about to throw. |
| 🤾🏼♂️ | man playing handball: medium-light skin tone | A man with medium-light skin tone is in an athletic pose, gripping a handball with determination. |
| 🤾🏽♂️ | man playing handball: medium skin tone | A man with medium skin tone is shown in a dynamic stance, ready to throw a handball with intensity. |
| 🤾🏾♂️ | man playing handball: medium-dark skin tone | A man with medium-dark skin tone is depicted in mid-action, preparing to hurl a handball with focus. |
| 🤾🏿♂️ | man playing handball: dark skin tone | A man with dark skin tone is in a competitive pose, gripping a handball, ready to make a decisive throw. |
| 🤾♀️ | woman playing handball | A woman is shown in an athletic stance, preparing to throw a handball with a determined expression. |
| 🤾🏻♀️ | woman playing handball: light skin tone | A woman with light skin tone is depicted in mid-action, holding a handball above her head, ready to throw. |
| 🤾🏼♀️ | woman playing handball: medium-light skin tone | A woman with medium-light skin tone is in a dynamic pose, gripping a handball with focus. |
| 🤾🏽♀️ | woman playing handball: medium skin tone | A woman with medium skin tone is poised to throw a handball, showcasing determination and athleticism. |
| 🤾🏾♀️ | woman playing handball: medium-dark skin tone | A woman with medium-dark skin tone is actively engaged in handball, holding a ball high with confidence. |
| 🤾🏿♀️ | woman playing handball: dark skin tone | A woman with dark skin tone is depicted in a competitive pose, ready to launch a handball. |
| 🤹 | person juggling | A person is shown juggling multiple objects, balancing them skillfully with a focused expression. |
| 🤹🏻 | person juggling: light skin tone | A person with light skin tone is depicted in mid-juggle, skillfully balancing colorful objects in the air. |
| 🤹🏼 | person juggling: medium-light skin tone | A person with medium-light skin tone is in an action pose, juggling several items with concentration. |
| 🤹🏽 | person juggling: medium skin tone | A person with medium skin tone is shown in a dynamic juggling pose, expertly handling multiple objects. |
| 🤹🏾 | person juggling: medium-dark skin tone | A person with medium-dark skin tone is depicted in mid-juggle, skillfully balancing colorful items with focus. |
| 🤹🏿 | person juggling: dark skin tone | A person with dark skin tone is shown juggling various objects, displaying skill and concentration. |
| 🤹♂️ | man juggling | A man with dark hair is juggling three colorful balls, standing upright with a focused expression. |
| 🤹🏻♂️ | man juggling: light skin tone | A man with light skin and dark hair is juggling three colorful balls, standing upright with a focused expression. |
| 🤹🏼♂️ | man juggling: medium-light skin tone | A man with medium-light skin and dark hair is juggling three colorful balls, standing upright with a focused expression. |
| 🤹🏽♂️ | man juggling: medium skin tone | A man with medium skin and dark hair is juggling three colorful balls, standing upright with a focused expression. |
| 🤹🏾♂️ | man juggling: medium-dark skin tone | A man with medium-dark skin and dark hair is juggling three colorful balls, standing upright with a focused expression. |
| 🤹🏿♂️ | man juggling: dark skin tone | A man with dark skin and dark hair is juggling three colorful balls, standing upright with a focused expression. |
| 🤹♀️ | woman juggling | A woman with dark hair is juggling three colorful balls, standing upright with a focused expression. |
| 🤹🏻♀️ | woman juggling: light skin tone | A woman with light skin and dark hair is juggling three colorful balls, standing upright with a focused expression. |
| 🤹🏼♀️ | woman juggling: medium-light skin tone | A woman with medium-light skin and dark hair is juggling three colorful balls, standing upright with a focused expression. |
| 🤹🏽♀️ | woman juggling: medium skin tone | A woman with medium skin and dark hair is juggling three colorful balls, standing upright with a focused expression. |
| 🤹🏾♀️ | woman juggling: medium-dark skin tone | A woman with medium-dark skin and dark hair is juggling three colorful balls, standing upright with a focused expression. |
| 🤹🏿♀️ | woman juggling: dark skin tone | A woman with dark skin and dark hair is juggling three colorful balls, standing upright with a focused expression. |
| 🧘 | person in lotus position | A person sits cross-legged in a lotus position, eyes closed, with a serene expression, symbolizing meditation. |
| 🧘🏻 | person in lotus position: light skin tone | A person with light skin sits cross-legged in a lotus position, eyes closed, with a serene expression, symbolizing meditation. |
| 🧘🏼 | person in lotus position: medium-light skin tone | A person with medium-light skin sits cross-legged in a lotus position, eyes closed, with a serene expression, symbolizing meditation. |
| 🧘🏽 | person in lotus position: medium skin tone | A person with medium skin sits cross-legged in a lotus position, eyes closed, with a serene expression, symbolizing meditation. |
| 🧘🏾 | person in lotus position: medium-dark skin tone | A person with medium-dark skin sits cross-legged in a lotus position, eyes closed, with a serene expression, symbolizing meditation. |
| 🧘🏿 | person in lotus position: dark skin tone | A person with dark skin sits cross-legged in a lotus position, eyes closed, with a serene expression, symbolizing meditation. |
| 🧘♂️ | man in lotus position | A man sits cross-legged in a lotus position, eyes closed, with a serene expression, symbolizing meditation. |
| 🧘🏻♂️ | man in lotus position: light skin tone | A man with light skin sits cross-legged in a lotus position, eyes closed, with a serene expression, symbolizing meditation. |
| 🧘🏼♂️ | man in lotus position: medium-light skin tone | A man with medium-light skin sits cross-legged in a lotus position, eyes closed, with a serene expression, symbolizing meditation. |
| 🧘🏽♂️ | man in lotus position: medium skin tone | A man with medium skin sits cross-legged in a lotus position, eyes closed, with a serene expression, symbolizing meditation. |
| 🧘🏾♂️ | man in lotus position: medium-dark skin tone | A man with medium-dark skin sits cross-legged in a lotus position, eyes closed, with a serene expression, symbolizing meditation. |
| 🧘🏿♂️ | man in lotus position: dark skin tone | A man with dark skin sits cross-legged in a lotus position, eyes closed, with a serene expression, symbolizing meditation. |
| 🧘♀️ | woman in lotus position | A woman sits cross-legged in a lotus position, eyes closed, with a serene expression, symbolizing meditation. |
| 🧘🏻♀️ | woman in lotus position: light skin tone | A woman with light skin sits cross-legged in a lotus position, eyes closed, with a serene expression, symbolizing meditation. |
| 🧘🏼♀️ | woman in lotus position: medium-light skin tone | A woman with medium-light skin sits cross-legged in a lotus position, eyes closed, with a serene expression, symbolizing meditation. |
| 🧘🏽♀️ | woman in lotus position: medium skin tone | A woman with medium skin sits cross-legged in a lotus position, eyes closed, with a serene expression, symbolizing meditation. |
| 🧘🏾♀️ | woman in lotus position: medium-dark skin tone | A woman with medium-dark skin sits cross-legged in a lotus position, eyes closed, with a serene expression, symbolizing meditation. |
| 🧘🏿♀️ | woman in lotus position: dark skin tone | A woman with dark skin sits cross-legged in a lotus position, eyes closed, with a serene expression, symbolizing meditation. |
| 🛀 | person taking bath | A person is relaxing in a bathtub filled with water, with bubbles around them, appearing content. |
| 🛀🏻 | person taking bath: light skin tone | A person with light skin is relaxing in a bathtub filled with water, with bubbles around them, appearing content. |
| 🛀🏼 | person taking bath: medium-light skin tone | A person with medium-light skin is relaxing in a bathtub filled with water, with bubbles around them, appearing content. |
| 🛀🏽 | person taking bath: medium skin tone | A person with medium skin is relaxing in a bathtub filled with water, with bubbles around them, appearing content. |
| 🛀🏾 | person taking bath: medium-dark skin tone | A person with medium-dark skin is relaxing in a bathtub filled with water, with bubbles around them, appearing content. |
| 🛀🏿 | person taking bath: dark skin tone | A person with dark skin is relaxing in a bathtub filled with water, with bubbles around them, appearing content. |
| 🛌 | person in bed | A person is lying in bed under a blanket, appearing relaxed and ready for sleep. |
| 🛌🏻 | person in bed: light skin tone | A person with light skin is lying in bed under a blanket, appearing relaxed and ready for sleep. |
| 🛌🏼 | person in bed: medium-light skin tone | A person with medium-light skin is lying in bed under a blanket, appearing relaxed and ready for sleep. |
| 🛌🏽 | person in bed: medium skin tone | A person with medium skin is lying in bed under a blanket, appearing relaxed and ready for sleep. |
| 🛌🏾 | person in bed: medium-dark skin tone | A person with medium-dark skin tone lying on a bed, appearing relaxed and resting. |
| 🛌🏿 | person in bed: dark skin tone | A person with dark skin tone lying on a bed, looking peaceful and at rest. |
| 🧑🤝🧑 | people holding hands | Two people of varying skin tones holding hands, facing each other with friendly expressions. |
| 🧑🏻🤝🧑🏻 | people holding hands: light skin tone | Two people with light skin tones holding hands, smiling at each other. |
| 🧑🏻🤝🧑🏼 | people holding hands: light skin tone, medium-light skin tone | A person with light skin tone holding hands with another person of medium-light skin tone, both looking happy. |
| 🧑🏻🤝🧑🏽 | people holding hands: light skin tone, medium skin tone | A light-skinned person and a medium-skinned person holding hands, both smiling warmly. |
| 🧑🏻🤝🧑🏾 | people holding hands: light skin tone, medium-dark skin tone | A light-skinned person holding hands with a medium-dark skinned person, both appearing cheerful. |
| 🧑🏻🤝🧑🏿 | people holding hands: light skin tone, dark skin tone | A light-skinned person holding hands with a dark-skinned person, both looking content. |
| 🧑🏼🤝🧑🏻 | people holding hands: medium-light skin tone, light skin tone | A medium-light skinned person holding hands with a light-skinned person, both smiling at each other. |
| 🧑🏼🤝🧑🏼 | people holding hands: medium-light skin tone | Two people with medium-light skin tones holding hands, both looking happy. |
| 🧑🏼🤝🧑🏽 | people holding hands: medium-light skin tone, medium skin tone | A medium-light skinned person holding hands with a medium-skinned person, both smiling warmly. |
| 🧑🏼🤝🧑🏾 | people holding hands: medium-light skin tone, medium-dark skin tone | A medium-light skinned person holding hands with a medium-dark skinned person, both appearing joyful. |
| 🧑🏼🤝🧑🏿 | people holding hands: medium-light skin tone, dark skin tone | A medium-light skinned person holding hands with a dark-skinned person, both looking pleased. |
| 🧑🏽🤝🧑🏻 | people holding hands: medium skin tone, light skin tone | A medium-skinned person holding hands with a light-skinned person, both smiling at each other. |
| 🧑🏽🤝🧑🏼 | people holding hands: medium skin tone, medium-light skin tone | A medium-skinned person holding hands with a medium-light skinned person, both appearing cheerful. |
| 🧑🏽🤝🧑🏽 | people holding hands: medium skin tone | Two people with medium skin tones holding hands, both looking happy. |
| 🧑🏽🤝🧑🏾 | people holding hands: medium skin tone, medium-dark skin tone | A medium-skinned person holding hands with a medium-dark skinned person, both smiling. |
| 🧑🏽🤝🧑🏿 | people holding hands: medium skin tone, dark skin tone | A medium-skinned person holding hands with a dark-skinned person, both looking content. |
| 🧑🏾🤝🧑🏻 | people holding hands: medium-dark skin tone, light skin tone | A medium-dark skinned person holding hands with a light-skinned person, both appearing joyful. |
| 🧑🏾🤝🧑🏼 | people holding hands: medium-dark skin tone, medium-light skin tone | A medium-dark skinned person holding hands with a medium-light skinned person, both smiling. |
| 🧑🏾🤝🧑🏽 | people holding hands: medium-dark skin tone, medium skin tone | A medium-dark skinned person holding hands with a medium-skinned person, both looking happy. |
| 🧑🏾🤝🧑🏾 | people holding hands: medium-dark skin tone | Two people with medium-dark skin tones holding hands, both smiling at each other. |
| 🧑🏾🤝🧑🏿 | people holding hands: medium-dark skin tone, dark skin tone | A medium-dark skinned person holding hands with a dark-skinned person, both appearing pleased. |
| 🧑🏿🤝🧑🏻 | people holding hands: dark skin tone, light skin tone | A dark-skinned person holding hands with a light-skinned person, both looking happy. |
| 🧑🏿🤝🧑🏼 | people holding hands: dark skin tone, medium-light skin tone | A dark-skinned person holding hands with a medium-light skinned person, both smiling. |
| 🧑🏿🤝🧑🏽 | people holding hands: dark skin tone, medium skin tone | A dark-skinned person holding hands with a medium-skinned person, both appearing cheerful. |
| 🧑🏿🤝🧑🏾 | people holding hands: dark skin tone, medium-dark skin tone | A dark-skinned person holding hands with a medium-dark skinned person, both looking content. |
| 🧑🏿🤝🧑🏿 | people holding hands: dark skin tone | Two people with dark skin tones holding hands, both smiling at each other. |
| 👭 | women holding hands | Two women holding hands, both smiling and looking at each other affectionately. |
| 👭🏻 | women holding hands: light skin tone | Two women with light skin tones holding hands, both appearing joyful. |
| 👩🏻🤝👩🏼 | women holding hands: light skin tone, medium-light skin tone | A light-skinned woman holding hands with a medium-light skinned woman, both smiling at each other. |
| 👩🏻🤝👩🏽 | women holding hands: light skin tone, medium skin tone | A light-skinned woman holding hands with a medium-skinned woman, both looking happy. |
| 👩🏻🤝👩🏾 | women holding hands: light skin tone, medium-dark skin tone | A light-skinned woman holding hands with a medium-dark skinned woman, both appearing cheerful. |
| 👩🏻🤝👩🏿 | women holding hands: light skin tone, dark skin tone | A light-skinned woman holding hands with a dark-skinned woman, both looking pleased. |
| 👩🏼🤝👩🏻 | women holding hands: medium-light skin tone, light skin tone | A medium-light skinned woman holding hands with a light-skinned woman, both smiling at each other. |
| 👭🏼 | women holding hands: medium-light skin tone | Two women with medium-light skin tones holding hands, both looking happy. |
| 👩🏼🤝👩🏽 | women holding hands: medium-light skin tone, medium skin tone | A medium-light skinned woman holding hands with a medium-skinned woman, both appearing joyful. |
| 👩🏼🤝👩🏾 | women holding hands: medium-light skin tone, medium-dark skin tone | A medium-light skinned woman holding hands with a medium-dark skinned woman, both smiling. |
| 👩🏼🤝👩🏿 | women holding hands: medium-light skin tone, dark skin tone | A medium-light skinned woman holding hands with a dark-skinned woman, both looking content. |
| 👩🏽🤝👩🏻 | women holding hands: medium skin tone, light skin tone | A medium-skinned woman holding hands with a light-skinned woman, both smiling at each other. |
| 👩🏽🤝👩🏼 | women holding hands: medium skin tone, medium-light skin tone | Two women holding hands, one with medium skin tone and the other with medium-light skin tone, both smiling and standing side by side. |
| 👭🏽 | women holding hands: medium skin tone | Two women with medium skin tone holding hands, both smiling and facing forward. |
| 👩🏽🤝👩🏾 | women holding hands: medium skin tone, medium-dark skin tone | Two women holding hands, one with medium skin tone and the other with medium-dark skin tone, both smiling and standing together. |
| 👩🏽🤝👩🏿 | women holding hands: medium skin tone, dark skin tone | Two women holding hands, one with medium skin tone and the other with dark skin tone, both smiling and standing close. |
| 👩🏾🤝👩🏻 | women holding hands: medium-dark skin tone, light skin tone | Two women holding hands, one with medium-dark skin tone and the other with light skin tone, both smiling and standing together. |
| 👩🏾🤝👩🏼 | women holding hands: medium-dark skin tone, medium-light skin tone | Two women holding hands, one with medium-dark skin tone and the other with medium-light skin tone, both smiling and standing side by side. |
| 👩🏾🤝👩🏽 | women holding hands: medium-dark skin tone, medium skin tone | Two women holding hands, one with medium-dark skin tone and the other with medium skin tone, both smiling and facing each other. |
| 👭🏾 | women holding hands: medium-dark skin tone | Two women with medium-dark skin tone holding hands, both smiling and facing forward. |
| 👩🏾🤝👩🏿 | women holding hands: medium-dark skin tone, dark skin tone | Two women holding hands, one with medium-dark skin tone and the other with dark skin tone, both smiling and standing side by side. |
| 👩🏿🤝👩🏻 | women holding hands: dark skin tone, light skin tone | Two women holding hands, one with dark skin tone and the other with light skin tone, both smiling and standing together. |
| 👩🏿🤝👩🏼 | women holding hands: dark skin tone, medium-light skin tone | Two women holding hands, one with dark skin tone and the other with medium-light skin tone, both smiling and facing each other. |
| 👩🏿🤝👩🏽 | women holding hands: dark skin tone, medium skin tone | Two women holding hands, one with dark skin tone and the other with medium skin tone, both smiling and standing close. |
| 👩🏿🤝👩🏾 | women holding hands: dark skin tone, medium-dark skin tone | Two women holding hands, one with dark skin tone and the other with medium-dark skin tone, both smiling and facing forward. |
| 👭🏿 | women holding hands: dark skin tone | Two women with dark skin tone holding hands, both smiling and standing side by side. |
| 👫 | woman and man holding hands | A woman and a man holding hands, both smiling and facing forward, with the woman on the left. |
| 👫🏻 | woman and man holding hands: light skin tone | A woman and a man with light skin tone holding hands, both smiling and standing together. |
| 👩🏻🤝👨🏼 | woman and man holding hands: light skin tone, medium-light skin tone | A woman with light skin tone and a man with medium-light skin tone holding hands, both smiling and standing side by side. |
| 👩🏻🤝👨🏽 | woman and man holding hands: light skin tone, medium skin tone | A woman with light skin tone and a man with medium skin tone holding hands, both smiling and facing each other. |
| 👩🏻🤝👨🏾 | woman and man holding hands: light skin tone, medium-dark skin tone | A woman with light skin tone and a man with medium-dark skin tone holding hands, both smiling and standing together. |
| 👩🏻🤝👨🏿 | woman and man holding hands: light skin tone, dark skin tone | A woman with light skin tone and a man with dark skin tone holding hands, both smiling and facing forward. |
| 👩🏼🤝👨🏻 | woman and man holding hands: medium-light skin tone, light skin tone | A woman with medium-light skin tone and a man with light skin tone holding hands, both smiling and standing together. |
| 👫🏼 | woman and man holding hands: medium-light skin tone | A woman and a man with medium-light skin tone holding hands, both smiling and facing forward. |
| 👩🏼🤝👨🏽 | woman and man holding hands: medium-light skin tone, medium skin tone | A woman with medium-light skin tone and a man with medium skin tone holding hands, both smiling and standing side by side. |
| 👩🏼🤝👨🏾 | woman and man holding hands: medium-light skin tone, medium-dark skin tone | A woman with medium-light skin tone and a man with medium-dark skin tone holding hands, both smiling and facing each other. |
| 👩🏼🤝👨🏿 | woman and man holding hands: medium-light skin tone, dark skin tone | A woman with medium-light skin tone and a man with dark skin tone holding hands, both smiling and standing together. |
| 👩🏽🤝👨🏻 | woman and man holding hands: medium skin tone, light skin tone | A woman with medium skin tone and a man with light skin tone holding hands, both smiling and facing forward. |
| 👩🏽🤝👨🏼 | woman and man holding hands: medium skin tone, medium-light skin tone | A woman with medium skin tone and a man with medium-light skin tone holding hands, both smiling and standing close. |
| 👫🏽 | woman and man holding hands: medium skin tone | A woman and a man with medium skin tone holding hands, both smiling and facing each other. |
| 👩🏽🤝👨🏾 | woman and man holding hands: medium skin tone, medium-dark skin tone | A woman with medium skin tone and a man with medium-dark skin tone holding hands, both smiling and standing together. |
| 👩🏽🤝👨🏿 | woman and man holding hands: medium skin tone, dark skin tone | A woman with medium skin tone and a man with dark skin tone holding hands, both smiling and facing forward. |
| 👩🏾🤝👨🏻 | woman and man holding hands: medium-dark skin tone, light skin tone | A woman with medium-dark skin tone and a man with light skin tone holding hands, both smiling and standing close. |
| 👩🏾🤝👨🏼 | woman and man holding hands: medium-dark skin tone, medium-light skin tone | A woman with medium-dark skin tone and a man with medium-light skin tone holding hands, both smiling and facing each other. |
| 👩🏾🤝👨🏽 | woman and man holding hands: medium-dark skin tone, medium skin tone | A woman with medium-dark skin tone and a man with medium skin tone holding hands, both smiling and standing together. |
| 👫🏾 | woman and man holding hands: medium-dark skin tone | A woman and a man with medium-dark skin tone holding hands, both smiling and facing forward. |
| 👩🏾🤝👨🏿 | woman and man holding hands: medium-dark skin tone, dark skin tone | A woman with medium-dark skin tone and a man with dark skin tone holding hands, both smiling and standing side by side. |
| 👩🏿🤝👨🏻 | woman and man holding hands: dark skin tone, light skin tone | A woman with dark skin tone and a man with light skin tone holding hands, both smiling and facing each other. |
| 👩🏿🤝👨🏼 | woman and man holding hands: dark skin tone, medium-light skin tone | A woman with dark skin tone and a man with medium-light skin tone holding hands, both smiling and standing together. |
| 👩🏿🤝👨🏽 | woman and man holding hands: dark skin tone, medium skin tone | A woman with dark skin tone and a man with medium skin tone holding hands, both smiling and facing forward. |
| 👩🏿🤝👨🏾 | woman and man holding hands: dark skin tone, medium-dark skin tone | A woman with dark skin tone and a man with medium-dark skin tone holding hands, both smiling and standing side by side. |
| 👫🏿 | woman and man holding hands: dark skin tone | A woman and a man with dark skin tone holding hands, both smiling and standing together. |
| 👬 | men holding hands | Two men standing side by side, holding hands, both with neutral expressions. |
| 👬🏻 | men holding hands: light skin tone | Two men with light skin tones standing side by side, holding hands. |
| 👨🏻🤝👨🏼 | men holding hands: light skin tone, medium-light skin tone | One man with light skin and one man with medium-light skin, both holding hands. |
| 👨🏻🤝👨🏽 | men holding hands: light skin tone, medium skin tone | One man with light skin and one man with medium skin, both holding hands. |
| 👨🏻🤝👨🏾 | men holding hands: light skin tone, medium-dark skin tone | One man with light skin and one man with medium-dark skin, both holding hands. |
| 👨🏻🤝👨🏿 | men holding hands: light skin tone, dark skin tone | One man with light skin and one man with dark skin, both holding hands. |
| 👨🏼🤝👨🏻 | men holding hands: medium-light skin tone, light skin tone | One man with medium-light skin and one man with light skin, both holding hands. |
| 👬🏼 | men holding hands: medium-light skin tone | Two men with medium-light skin tones standing side by side, holding hands. |
| 👨🏼🤝👨🏽 | men holding hands: medium-light skin tone, medium skin tone | One man with medium-light skin and one man with medium skin, both holding hands. |
| 👨🏼🤝👨🏾 | men holding hands: medium-light skin tone, medium-dark skin tone | One man with medium-light skin and one man with medium-dark skin, both holding hands. |
| 👨🏼🤝👨🏿 | men holding hands: medium-light skin tone, dark skin tone | One man with medium-light skin and one man with dark skin, both holding hands. |
| 👨🏽🤝👨🏻 | men holding hands: medium skin tone, light skin tone | One man with medium skin and one man with light skin, both holding hands. |
| 👨🏽🤝👨🏼 | men holding hands: medium skin tone, medium-light skin tone | One man with medium skin and one man with medium-light skin, both holding hands. |
| 👬🏽 | men holding hands: medium skin tone | Two men with medium skin tones standing side by side, holding hands. |
| 👨🏽🤝👨🏾 | men holding hands: medium skin tone, medium-dark skin tone | One man with medium skin and one man with medium-dark skin, both holding hands. |
| 👨🏽🤝👨🏿 | men holding hands: medium skin tone, dark skin tone | One man with medium skin and one man with dark skin, both holding hands. |
| 👨🏾🤝👨🏻 | men holding hands: medium-dark skin tone, light skin tone | One man with medium-dark skin and one man with light skin, both holding hands. |
| 👨🏾🤝👨🏼 | men holding hands: medium-dark skin tone, medium-light skin tone | One man with medium-dark skin and one man with medium-light skin, both holding hands. |
| 👨🏾🤝👨🏽 | men holding hands: medium-dark skin tone, medium skin tone | One man with medium-dark skin and one man with medium skin, both holding hands. |
| 👬🏾 | men holding hands: medium-dark skin tone | Two men with medium-dark skin tones standing side by side, holding hands. |
| 👨🏾🤝👨🏿 | men holding hands: medium-dark skin tone, dark skin tone | One man with medium-dark skin and one man with dark skin, both holding hands. |
| 👨🏿🤝👨🏻 | men holding hands: dark skin tone, light skin tone | One man with dark skin and one man with light skin, both holding hands. |
| 👨🏿🤝👨🏼 | men holding hands: dark skin tone, medium-light skin tone | One man with dark skin and one man with medium-light skin, both holding hands. |
| 👨🏿🤝👨🏽 | men holding hands: dark skin tone, medium skin tone | One man with dark skin and one man with medium skin, both holding hands. |
| 👨🏿🤝👨🏾 | men holding hands: dark skin tone, medium-dark skin tone | One man with dark skin and one man with medium-dark skin, both holding hands. |
| 👬🏿 | men holding hands: dark skin tone | Two men with dark skin tones standing side by side, holding hands. |
| 💏 | kiss | A couple leaning towards each other, about to kiss, with soft expressions. |
| 💏🏻 | kiss: light skin tone | A couple with light skin tones leaning towards each other, about to kiss. |
| 💏🏼 | kiss: medium-light skin tone | A couple with medium-light skin tones leaning towards each other, about to kiss. |
| 💏🏽 | kiss: medium skin tone | A couple with medium skin tones leaning towards each other, about to kiss. |
| 💏🏾 | kiss: medium-dark skin tone | A couple with medium-dark skin tones leaning towards each other, about to kiss. |
| 💏🏿 | kiss: dark skin tone | A couple with dark skin tones leaning towards each other, about to kiss. |
| 🧑🏻❤️💋🧑🏼 | kiss: person, person, light skin tone, medium-light skin tone | Two people, one with light skin and one with medium-light skin, leaning in for a kiss. |
| 🧑🏻❤️💋🧑🏽 | kiss: person, person, light skin tone, medium skin tone | Two people, one with light skin and one with medium skin, leaning in for a kiss. |
| 🧑🏻❤️💋🧑🏾 | kiss: person, person, light skin tone, medium-dark skin tone | Two people, one with light skin and one with medium-dark skin, leaning in for a kiss. |
| 🧑🏻❤️💋🧑🏿 | kiss: person, person, light skin tone, dark skin tone | Two people, one with light skin and one with dark skin, leaning in for a kiss. |
| 🧑🏼❤️💋🧑🏻 | kiss: person, person, medium-light skin tone, light skin tone | Two people, one with medium-light skin and one with light skin, leaning in for a kiss. |
| 🧑🏼❤️💋🧑🏽 | kiss: person, person, medium-light skin tone, medium skin tone | Two people, one with medium-light skin and one with medium skin, leaning in for a kiss. |
| 🧑🏼❤️💋🧑🏾 | kiss: person, person, medium-light skin tone, medium-dark skin tone | Two people, one with medium-light skin and one with medium-dark skin, leaning in for a kiss. |
| 🧑🏼❤️💋🧑🏿 | kiss: person, person, medium-light skin tone, dark skin tone | Two people, one with medium-light skin and one with dark skin, leaning in for a kiss. |
| 🧑🏽❤️💋🧑🏻 | kiss: person, person, medium skin tone, light skin tone | Two people are kissing, one with medium skin tone and the other with light skin tone, both have neutral facial expressions. |
| 🧑🏽❤️💋🧑🏼 | kiss: person, person, medium skin tone, medium-light skin tone | Two people are kissing, one with medium skin tone and the other with medium-light skin tone, both have soft smiles. |
| 🧑🏽❤️💋🧑🏾 | kiss: person, person, medium skin tone, medium-dark skin tone | Two people are kissing, one with medium skin tone and the other with medium-dark skin tone, both appear content. |
| 🧑🏽❤️💋🧑🏿 | kiss: person, person, medium skin tone, dark skin tone | Two people are kissing, one with medium skin tone and the other with dark skin tone, both show affection. |
| 🧑🏾❤️💋🧑🏻 | kiss: person, person, medium-dark skin tone, light skin tone | Two people are kissing, one with medium-dark skin tone and the other with light skin tone, both have gentle expressions. |
| 🧑🏾❤️💋🧑🏼 | kiss: person, person, medium-dark skin tone, medium-light skin tone | Two people are kissing, one with medium-dark skin tone and the other with medium-light skin tone, both look happy. |
| 🧑🏾❤️💋🧑🏽 | kiss: person, person, medium-dark skin tone, medium skin tone | Two people are kissing, one with medium-dark skin tone and the other with medium skin tone, both express warmth. |
| 🧑🏾❤️💋🧑🏿 | kiss: person, person, medium-dark skin tone, dark skin tone | Two people are kissing, one with medium-dark skin tone and the other with dark skin tone, both appear loving. |
| 🧑🏿❤️💋🧑🏻 | kiss: person, person, dark skin tone, light skin tone | Two people are kissing, one with dark skin tone and the other with light skin tone, both have soft smiles. |
| 🧑🏿❤️💋🧑🏼 | kiss: person, person, dark skin tone, medium-light skin tone | Two people are kissing, one with dark skin tone and the other with medium-light skin tone, both look affectionate. |
| 🧑🏿❤️💋🧑🏽 | kiss: person, person, dark skin tone, medium skin tone | Two people are kissing, one with dark skin tone and the other with medium skin tone, both express joy. |
| 🧑🏿❤️💋🧑🏾 | kiss: person, person, dark skin tone, medium-dark skin tone | Two people are kissing, one with dark skin tone and the other with medium-dark skin tone, both show tenderness. |
| 👩❤️💋👨 | kiss: woman, man | A woman and a man are kissing, both have neutral expressions and appear intimate. |
| 👩🏻❤️💋👨🏻 | kiss: woman, man, light skin tone | A woman and a man are kissing, both with light skin tones, showing affection with gentle smiles. |
| 👩🏻❤️💋👨🏼 | kiss: woman, man, light skin tone, medium-light skin tone | A woman and a man are kissing, the woman has light skin tone and the man has medium-light skin tone, both look happy. |
| 👩🏻❤️💋👨🏽 | kiss: woman, man, light skin tone, medium skin tone | A woman and a man are kissing, the woman has light skin tone and the man has medium skin tone, both appear loving. |
| 👩🏻❤️💋👨🏾 | kiss: woman, man, light skin tone, medium-dark skin tone | A woman and a man are kissing, the woman has light skin tone and the man has medium-dark skin tone, both express joy. |
| 👩🏻❤️💋👨🏿 | kiss: woman, man, light skin tone, dark skin tone | A woman and a man are kissing, the woman has light skin tone and the man has dark skin tone, both look affectionate. |
| 👩🏼❤️💋👨🏻 | kiss: woman, man, medium-light skin tone, light skin tone | A woman and a man are kissing, the woman has medium-light skin tone and the man has light skin tone, both smile softly. |
| 👩🏼❤️💋👨🏼 | kiss: woman, man, medium-light skin tone | A woman and a man are kissing, both have medium-light skin tones, showing warmth and affection. |
| 👩🏼❤️💋👨🏽 | kiss: woman, man, medium-light skin tone, medium skin tone | A woman and a man are kissing, the woman has medium-light skin tone and the man has medium skin tone, both appear joyful. |
| 👩🏼❤️💋👨🏾 | kiss: woman, man, medium-light skin tone, medium-dark skin tone | A woman and a man are kissing, the woman has medium-light skin tone and the man has medium-dark skin tone, both express tenderness. |
| 👩🏼❤️💋👨🏿 | kiss: woman, man, medium-light skin tone, dark skin tone | A woman and a man are kissing, the woman has medium-light skin tone and the man has dark skin tone, both look affectionate. |
| 👩🏽❤️💋👨🏻 | kiss: woman, man, medium skin tone, light skin tone | A woman and a man are kissing, the woman has medium skin tone and the man has light skin tone, both have gentle smiles. |
| 👩🏽❤️💋👨🏼 | kiss: woman, man, medium skin tone, medium-light skin tone | A woman and a man are kissing, the woman has medium skin tone and the man has medium-light skin tone, both appear happy. |
| 👩🏽❤️💋👨🏽 | kiss: woman, man, medium skin tone | A woman and a man are kissing, both have medium skin tones, showing affection and joy. |
| 👩🏽❤️💋👨🏾 | kiss: woman, man, medium skin tone, medium-dark skin tone | A woman and a man are kissing, the woman has medium skin tone and the man has medium-dark skin tone, both express warmth. |
| 👩🏽❤️💋👨🏿 | kiss: woman, man, medium skin tone, dark skin tone | A woman and a man are kissing, the woman has medium skin tone and the man has dark skin tone, both look loving. |
| 👩🏾❤️💋👨🏻 | kiss: woman, man, medium-dark skin tone, light skin tone | A woman and a man are kissing, the woman has medium-dark skin tone and the man has light skin tone, both smile gently. |
| 👩🏾❤️💋👨🏼 | kiss: woman, man, medium-dark skin tone, medium-light skin tone | A woman and a man are kissing, the woman has medium-dark skin tone and the man has medium-light skin tone, both appear joyful. |
| 👩🏾❤️💋👨🏽 | kiss: woman, man, medium-dark skin tone, medium skin tone | A woman and a man are kissing, the woman has medium-dark skin tone and the man has medium skin tone, both express affection. |
| 👩🏾❤️💋👨🏾 | kiss: woman, man, medium-dark skin tone | A woman and a man are kissing, both have medium-dark skin tones, showing warmth and intimacy. |
| 👩🏾❤️💋👨🏿 | kiss: woman, man, medium-dark skin tone, dark skin tone | A woman and a man are kissing, the woman has medium-dark skin tone and the man has dark skin tone, both look affectionate. |
| 👩🏿❤️💋👨🏻 | kiss: woman, man, dark skin tone, light skin tone | A woman and a man are kissing, the woman has dark skin tone and the man has light skin tone, both smile softly. |
| 👩🏿❤️💋👨🏼 | kiss: woman, man, dark skin tone, medium-light skin tone | A woman and a man are kissing, the woman has dark skin tone and the man has medium-light skin tone, both appear happy. |
| 👩🏿❤️💋👨🏽 | kiss: woman, man, dark skin tone, medium skin tone | A woman and a man are kissing, the woman has dark skin tone and the man has medium skin tone, both express joy. |
| 👩🏿❤️💋👨🏾 | kiss: woman, man, dark skin tone, medium-dark skin tone | A woman and a man are kissing, the woman has dark skin tone and the man has medium-dark skin tone, both show tenderness. |
| 👩🏿❤️💋👨🏿 | kiss: woman, man, dark skin tone | A woman and a man are kissing, both have dark skin tones, expressing love and affection. |
| 👨❤️💋👨 | kiss: man, man | Two men are kissing, both have neutral expressions and appear intimate. |
| 👨🏻❤️💋👨🏻 | kiss: man, man, light skin tone | Two men are kissing, both with light skin tones, showing affection with gentle smiles. |
| 👨🏻❤️💋👨🏼 | kiss: man, man, light skin tone, medium-light skin tone | Two men are kissing, with one having light skin and the other medium-light skin, both smiling gently. |
| 👨🏻❤️💋👨🏽 | kiss: man, man, light skin tone, medium skin tone | Two men are kissing, featuring one with light skin and the other with medium skin tone, both appearing affectionate. |
| 👨🏻❤️💋👨🏾 | kiss: man, man, light skin tone, medium-dark skin tone | Two men are kissing, one with light skin and the other with medium-dark skin, sharing a tender moment. |
| 👨🏻❤️💋👨🏿 | kiss: man, man, light skin tone, dark skin tone | Two men are kissing, with one having light skin and the other dark skin, both looking loving. |
| 👨🏼❤️💋👨🏻 | kiss: man, man, medium-light skin tone, light skin tone | Two men are kissing, one with medium-light skin and the other with light skin, both displaying warmth. |
| 👨🏼❤️💋👨🏼 | kiss: man, man, medium-light skin tone | Two men are kissing, both having medium-light skin tones, radiating affection. |
| 👨🏼❤️💋👨🏽 | kiss: man, man, medium-light skin tone, medium skin tone | Two men are kissing, with one having medium-light skin and the other medium skin, both appearing joyful. |
| 👨🏼❤️💋👨🏾 | kiss: man, man, medium-light skin tone, medium-dark skin tone | Two men are kissing, featuring one with medium-light skin and the other with medium-dark skin, both looking content. |
| 👨🏼❤️💋👨🏿 | kiss: man, man, medium-light skin tone, dark skin tone | Two men are kissing, one with medium-light skin and the other dark skin, showcasing love. |
| 👨🏽❤️💋👨🏻 | kiss: man, man, medium skin tone, light skin tone | Two men are kissing, one with medium skin and the other with light skin, both smiling sweetly. |
| 👨🏽❤️💋👨🏼 | kiss: man, man, medium skin tone, medium-light skin tone | Two men are kissing, featuring one with medium skin and the other with medium-light skin, both looking affectionate. |
| 👨🏽❤️💋👨🏽 | kiss: man, man, medium skin tone | Two men are kissing, both having medium skin tones, radiating warmth and love. |
| 👨🏽❤️💋👨🏾 | kiss: man, man, medium skin tone, medium-dark skin tone | Two men are kissing, one with medium skin and the other with medium-dark skin, both appearing happy. |
| 👨🏽❤️💋👨🏿 | kiss: man, man, medium skin tone, dark skin tone | Two men are kissing, one with medium skin and the other dark skin, both showing affection. |
| 👨🏾❤️💋👨🏻 | kiss: man, man, medium-dark skin tone, light skin tone | Two men are kissing, one with medium-dark skin and the other with light skin, both smiling gently. |
| 👨🏾❤️💋👨🏼 | kiss: man, man, medium-dark skin tone, medium-light skin tone | Two men are kissing, with one having medium-dark skin and the other medium-light skin, both looking loving. |
| 👨🏾❤️💋👨🏽 | kiss: man, man, medium-dark skin tone, medium skin tone | Two men are kissing, featuring one with medium-dark skin and the other with medium skin, both appearing affectionate. |
| 👨🏾❤️💋👨🏾 | kiss: man, man, medium-dark skin tone | Two men are kissing, both having medium-dark skin tones, radiating warmth. |
| 👨🏾❤️💋👨🏿 | kiss: man, man, medium-dark skin tone, dark skin tone | Two men are kissing, one with medium-dark skin and the other dark skin, both showcasing love. |
| 👨🏿❤️💋👨🏻 | kiss: man, man, dark skin tone, light skin tone | Two men are kissing, one with dark skin and the other with light skin, both smiling sweetly. |
| 👨🏿❤️💋👨🏼 | kiss: man, man, dark skin tone, medium-light skin tone | Two men are kissing, one with dark skin and the other with medium-light skin, both looking affectionate. |
| 👨🏿❤️💋👨🏽 | kiss: man, man, dark skin tone, medium skin tone | Two men are kissing, one with dark skin and the other with medium skin, both appearing loving. |
| 👨🏿❤️💋👨🏾 | kiss: man, man, dark skin tone, medium-dark skin tone | Two men are kissing, one with dark skin and the other medium-dark skin, both radiating warmth. |
| 👨🏿❤️💋👨🏿 | kiss: man, man, dark skin tone | Two men are kissing, both having dark skin tones, showcasing affection. |
| 👩❤️💋👩 | kiss: woman, woman | Two women are kissing, both smiling gently and looking affectionate. |
| 👩🏻❤️💋👩🏻 | kiss: woman, woman, light skin tone | Two women are kissing, both with light skin tones, radiating warmth and love. |
| 👩🏻❤️💋👩🏼 | kiss: woman, woman, light skin tone, medium-light skin tone | Two women are kissing, one with light skin and the other with medium-light skin, both appearing joyful. |
| 👩🏻❤️💋👩🏽 | kiss: woman, woman, light skin tone, medium skin tone | Two women are kissing, one with light skin and the other with medium skin, both looking affectionate. |
| 👩🏻❤️💋👩🏾 | kiss: woman, woman, light skin tone, medium-dark skin tone | Two women are kissing, one with light skin and the other with medium-dark skin, both smiling sweetly. |
| 👩🏻❤️💋👩🏿 | kiss: woman, woman, light skin tone, dark skin tone | Two women are kissing, one with light skin and the other with dark skin, both showcasing love. |
| 👩🏼❤️💋👩🏻 | kiss: woman, woman, medium-light skin tone, light skin tone | Two women are kissing, one with medium-light skin and the other with light skin, both radiating affection. |
| 👩🏼❤️💋👩🏼 | kiss: woman, woman, medium-light skin tone | Two women are kissing, both having medium-light skin tones, looking loving. |
| 👩🏼❤️💋👩🏽 | kiss: woman, woman, medium-light skin tone, medium skin tone | Two women are kissing, one with medium-light skin and the other with medium skin, both appearing joyful. |
| 👩🏼❤️💋👩🏾 | kiss: woman, woman, medium-light skin tone, medium-dark skin tone | Two women are kissing, one with medium-light skin and the other with medium-dark skin, both smiling gently. |
| 👩🏼❤️💋👩🏿 | kiss: woman, woman, medium-light skin tone, dark skin tone | Two women are kissing, one with medium-light skin and the other with dark skin, both looking affectionate. |
| 👩🏽❤️💋👩🏻 | kiss: woman, woman, medium skin tone, light skin tone | Two women are kissing, one with medium skin and the other with light skin, both radiating warmth. |
| 👩🏽❤️💋👩🏼 | kiss: woman, woman, medium skin tone, medium-light skin tone | Two women are kissing, one with medium skin and the other with medium-light skin, both appearing loving. |
| 👩🏽❤️💋👩🏽 | kiss: woman, woman, medium skin tone | Two women are kissing, both having medium skin tones, showcasing affection. |
| 👩🏽❤️💋👩🏾 | kiss: woman, woman, medium skin tone, medium-dark skin tone | Two women are kissing, one with medium skin and the other with medium-dark skin, both smiling sweetly. |
| 👩🏽❤️💋👩🏿 | kiss: woman, woman, medium skin tone, dark skin tone | Two women are kissing, one with medium skin and the other dark skin, both looking affectionate. |
| 👩🏾❤️💋👩🏻 | kiss: woman, woman, medium-dark skin tone, light skin tone | Two women are kissing, one has medium-dark skin and the other has light skin, both are smiling gently. |
| 👩🏾❤️💋👩🏼 | kiss: woman, woman, medium-dark skin tone, medium-light skin tone | Two women are kissing, one has medium-dark skin and the other has medium-light skin, both appear joyful. |
| 👩🏾❤️💋👩🏽 | kiss: woman, woman, medium-dark skin tone, medium skin tone | Two women are kissing, one has medium-dark skin and the other has medium skin, both share a loving expression. |
| 👩🏾❤️💋👩🏾 | kiss: woman, woman, medium-dark skin tone | Two women are kissing, both have medium-dark skin and are smiling affectionately. |
| 👩🏾❤️💋👩🏿 | kiss: woman, woman, medium-dark skin tone, dark skin tone | Two women are kissing, one has medium-dark skin and the other has dark skin, both look happy. |
| 👩🏿❤️💋👩🏻 | kiss: woman, woman, dark skin tone, light skin tone | Two women are kissing, one has dark skin and the other has light skin, both are smiling warmly. |
| 👩🏿❤️💋👩🏼 | kiss: woman, woman, dark skin tone, medium-light skin tone | Two women are kissing, one has dark skin and the other has medium-light skin, both appear content. |
| 👩🏿❤️💋👩🏽 | kiss: woman, woman, dark skin tone, medium skin tone | Two women are kissing, one has dark skin and the other has medium skin, both look lovingly at each other. |
| 👩🏿❤️💋👩🏾 | kiss: woman, woman, dark skin tone, medium-dark skin tone | Two women are kissing, both have dark skin, sharing a sweet moment together. |
| 👩🏿❤️💋👩🏿 | kiss: woman, woman, dark skin tone | Two women are kissing, both have dark skin and are expressing affection with smiles. |
| 💑 | couple with heart | A couple stands together, both facing forward with a heart between them, symbolizing love. |
| 💑🏻 | couple with heart: light skin tone | A couple with light skin tones stands together, a heart symbolizing their love between them. |
| 💑🏼 | couple with heart: medium-light skin tone | A couple with medium-light skin tones stands side by side, a heart symbolizing their connection between them. |
| 💑🏽 | couple with heart: medium skin tone | A couple with medium skin tones stands together, a heart representing their love placed between them. |
| 💑🏾 | couple with heart: medium-dark skin tone | A couple with medium-dark skin tones stands closely together, a heart symbolizing their affection between them. |
| 💑🏿 | couple with heart: dark skin tone | A couple with dark skin tones stands together, a heart symbolizing their bond placed between them. |
| 🧑🏻❤️🧑🏼 | couple with heart: person, person, light skin tone, medium-light skin tone | Two people stand closely together, one with light skin and the other with medium-light skin, a heart symbolizing their love between them. |
| 🧑🏻❤️🧑🏽 | couple with heart: person, person, light skin tone, medium skin tone | Two people stand together, one with light skin and the other with medium skin, a heart representing their affection between them. |
| 🧑🏻❤️🧑🏾 | couple with heart: person, person, light skin tone, medium-dark skin tone | Two people stand together, one with light skin and the other with medium-dark skin, a heart symbolizing their connection between them. |
| 🧑🏻❤️🧑🏿 | couple with heart: person, person, light skin tone, dark skin tone | Two people stand closely, one with light skin and the other with dark skin, a heart representing their love between them. |
| 🧑🏼❤️🧑🏻 | couple with heart: person, person, medium-light skin tone, light skin tone | Two people stand together, one with medium-light skin and the other with light skin, a heart symbolizing their affection between them. |
| 🧑🏼❤️🧑🏽 | couple with heart: person, person, medium-light skin tone, medium skin tone | Two people stand closely, one with medium-light skin and the other with medium skin, a heart representing their bond between them. |
| 🧑🏼❤️🧑🏾 | couple with heart: person, person, medium-light skin tone, medium-dark skin tone | Two people stand together, one with medium-light skin and the other with medium-dark skin, a heart symbolizing their love between them. |
| 🧑🏼❤️🧑🏿 | couple with heart: person, person, medium-light skin tone, dark skin tone | Two people stand closely, one with medium-light skin and the other with dark skin, a heart representing their connection between them. |
| 🧑🏽❤️🧑🏻 | couple with heart: person, person, medium skin tone, light skin tone | Two people stand together, one with medium skin and the other with light skin, a heart symbolizing their affection between them. |
| 🧑🏽❤️🧑🏼 | couple with heart: person, person, medium skin tone, medium-light skin tone | Two people stand closely, one with medium skin and the other with medium-light skin, a heart representing their bond between them. |
| 🧑🏽❤️🧑🏾 | couple with heart: person, person, medium skin tone, medium-dark skin tone | Two people stand together, one with medium skin and the other with medium-dark skin, a heart symbolizing their love between them. |
| 🧑🏽❤️🧑🏿 | couple with heart: person, person, medium skin tone, dark skin tone | Two people stand closely, one with medium skin and the other with dark skin, a heart representing their connection between them. |
| 🧑🏾❤️🧑🏻 | couple with heart: person, person, medium-dark skin tone, light skin tone | Two people stand together, one with medium-dark skin and the other with light skin, a heart symbolizing their affection between them. |
| 🧑🏾❤️🧑🏼 | couple with heart: person, person, medium-dark skin tone, medium-light skin tone | Two people stand closely, one with medium-dark skin and the other with medium-light skin, a heart representing their bond between them. |
| 🧑🏾❤️🧑🏽 | couple with heart: person, person, medium-dark skin tone, medium skin tone | Two people stand together, one with medium-dark skin and the other with medium skin, a heart symbolizing their love between them. |
| 🧑🏾❤️🧑🏿 | couple with heart: person, person, medium-dark skin tone, dark skin tone | Two people stand closely, one with medium-dark skin and the other with dark skin, a heart representing their connection between them. |
| 🧑🏿❤️🧑🏻 | couple with heart: person, person, dark skin tone, light skin tone | Two people stand together, one with dark skin and the other with light skin, a heart symbolizing their affection between them. |
| 🧑🏿❤️🧑🏼 | couple with heart: person, person, dark skin tone, medium-light skin tone | Two people stand closely, one with dark skin and the other with medium-light skin, a heart representing their bond between them. |
| 🧑🏿❤️🧑🏽 | couple with heart: person, person, dark skin tone, medium skin tone | Two people stand together, one with dark skin and the other with medium skin, a heart symbolizing their love between them. |
| 🧑🏿❤️🧑🏾 | couple with heart: person, person, dark skin tone, medium-dark skin tone | Two people stand closely, one with dark skin and the other with medium-dark skin, a heart representing their connection between them. |
| 👩❤️👨 | couple with heart: woman, man | A woman and a man stand together, facing forward with a heart between them, symbolizing their love. |
| 👩🏻❤️👨🏻 | couple with heart: woman, man, light skin tone | A woman with light skin and a man with light skin stand together, a heart symbolizing their affection between them. |
| 👩🏻❤️👨🏼 | couple with heart: woman, man, light skin tone, medium-light skin tone | A woman with light skin and a man with medium-light skin stand closely, a heart representing their bond between them. |
| 👩🏻❤️👨🏽 | couple with heart: woman, man, light skin tone, medium skin tone | A woman with light skin and a man with medium skin stand together, a heart symbolizing their love placed between them. |
| 👩🏻❤️👨🏾 | couple with heart: woman, man, light skin tone, medium-dark skin tone | A woman with light skin tone and a man with medium-dark skin tone are facing each other, both smiling, with a red heart symbol between them. |
| 👩🏻❤️👨🏿 | couple with heart: woman, man, light skin tone, dark skin tone | A woman with light skin tone and a man with dark skin tone are gazing at each other, both smiling, with a red heart symbol connecting them. |
| 👩🏼❤️👨🏻 | couple with heart: woman, man, medium-light skin tone, light skin tone | A woman with medium-light skin tone and a man with light skin tone are looking at each other, both smiling, with a red heart symbol between them. |
| 👩🏼❤️👨🏼 | couple with heart: woman, man, medium-light skin tone | A woman and a man, both with medium-light skin tones, are smiling at each other with a red heart symbol between them. |
| 👩🏼❤️👨🏽 | couple with heart: woman, man, medium-light skin tone, medium skin tone | A woman with medium-light skin tone and a man with medium skin tone are smiling at each other, with a red heart symbol connecting them. |
| 👩🏼❤️👨🏾 | couple with heart: woman, man, medium-light skin tone, medium-dark skin tone | A woman with medium-light skin tone and a man with medium-dark skin tone are facing each other, both smiling, with a red heart symbol between them. |
| 👩🏼❤️👨🏿 | couple with heart: woman, man, medium-light skin tone, dark skin tone | A woman with medium-light skin tone and a man with dark skin tone are looking at each other, both smiling, with a red heart symbol connecting them. |
| 👩🏽❤️👨🏻 | couple with heart: woman, man, medium skin tone, light skin tone | A woman with medium skin tone and a man with light skin tone are smiling at each other, with a red heart symbol between them. |
| 👩🏽❤️👨🏼 | couple with heart: woman, man, medium skin tone, medium-light skin tone | A woman with medium skin tone and a man with medium-light skin tone are gazing at each other, both smiling, with a red heart symbol connecting them. |
| 👩🏽❤️👨🏽 | couple with heart: woman, man, medium skin tone | A woman and a man, both with medium skin tones, are smiling at each other with a red heart symbol between them. |
| 👩🏽❤️👨🏾 | couple with heart: woman, man, medium skin tone, medium-dark skin tone | A woman with medium skin tone and a man with medium-dark skin tone are facing each other, both smiling, with a red heart symbol connecting them. |
| 👩🏽❤️👨🏿 | couple with heart: woman, man, medium skin tone, dark skin tone | A woman with medium skin tone and a man with dark skin tone are looking at each other, both smiling, with a red heart symbol between them. |
| 👩🏾❤️👨🏻 | couple with heart: woman, man, medium-dark skin tone, light skin tone | A woman with medium-dark skin tone and a man with light skin tone are smiling at each other, with a red heart symbol between them. |
| 👩🏾❤️👨🏼 | couple with heart: woman, man, medium-dark skin tone, medium-light skin tone | A woman with medium-dark skin tone and a man with medium-light skin tone are gazing at each other, both smiling, with a red heart symbol connecting them. |
| 👩🏾❤️👨🏽 | couple with heart: woman, man, medium-dark skin tone, medium skin tone | A woman with medium-dark skin tone and a man with medium skin tone are smiling at each other, with a red heart symbol between them. |
| 👩🏾❤️👨🏾 | couple with heart: woman, man, medium-dark skin tone | A woman and a man, both with medium-dark skin tones, are looking at each other with a red heart symbol between them. |
| 👩🏾❤️👨🏿 | couple with heart: woman, man, medium-dark skin tone, dark skin tone | A woman with medium-dark skin tone and a man with dark skin tone are smiling at each other, with a red heart symbol connecting them. |
| 👩🏿❤️👨🏻 | couple with heart: woman, man, dark skin tone, light skin tone | A woman with dark skin tone and a man with light skin tone are facing each other, both smiling, with a red heart symbol between them. |
| 👩🏿❤️👨🏼 | couple with heart: woman, man, dark skin tone, medium-light skin tone | A woman with dark skin tone and a man with medium-light skin tone are gazing at each other, both smiling, with a red heart symbol connecting them. |
| 👩🏿❤️👨🏽 | couple with heart: woman, man, dark skin tone, medium skin tone | A woman with dark skin tone and a man with medium skin tone are smiling at each other, with a red heart symbol between them. |
| 👩🏿❤️👨🏾 | couple with heart: woman, man, dark skin tone, medium-dark skin tone | A woman with dark skin tone and a man with medium-dark skin tone are looking at each other, both smiling, with a red heart symbol connecting them. |
| 👩🏿❤️👨🏿 | couple with heart: woman, man, dark skin tone | A woman and a man, both with dark skin tones, are smiling at each other with a red heart symbol between them. |
| 👨❤️👨 | couple with heart: man, man | Two men are facing each other, both smiling, with a red heart symbol between them. |
| 👨🏻❤️👨🏻 | couple with heart: man, man, light skin tone | Two men with light skin tones are smiling at each other, with a red heart symbol connecting them. |
| 👨🏻❤️👨🏼 | couple with heart: man, man, light skin tone, medium-light skin tone | A man with light skin tone and a man with medium-light skin tone are looking at each other, both smiling, with a red heart symbol between them. |
| 👨🏻❤️👨🏽 | couple with heart: man, man, light skin tone, medium skin tone | A man with light skin tone and a man with medium skin tone are smiling at each other, with a red heart symbol connecting them. |
| 👨🏻❤️👨🏾 | couple with heart: man, man, light skin tone, medium-dark skin tone | A man with light skin tone and a man with medium-dark skin tone are gazing at each other, both smiling, with a red heart symbol between them. |
| 👨🏻❤️👨🏿 | couple with heart: man, man, light skin tone, dark skin tone | A man with light skin tone and a man with dark skin tone are smiling at each other, with a red heart symbol connecting them. |
| 👨🏼❤️👨🏻 | couple with heart: man, man, medium-light skin tone, light skin tone | A man with medium-light skin tone and a man with light skin tone are smiling at each other, with a red heart symbol between them. |
| 👨🏼❤️👨🏼 | couple with heart: man, man, medium-light skin tone | Two men with medium-light skin tones are looking at each other, both smiling, with a red heart symbol connecting them. |
| 👨🏼❤️👨🏽 | couple with heart: man, man, medium-light skin tone, medium skin tone | A man with medium-light skin tone and a man with medium skin tone are smiling at each other, with a red heart symbol between them. |
| 👨🏼❤️👨🏾 | couple with heart: man, man, medium-light skin tone, medium-dark skin tone | A man with medium-light skin tone and a man with medium-dark skin tone are gazing at each other, both smiling, with a red heart symbol connecting them. |
| 👨🏼❤️👨🏿 | couple with heart: man, man, medium-light skin tone, dark skin tone | A man with medium-light skin tone and a man with dark skin tone are smiling at each other, with a red heart symbol between them. |
| 👨🏽❤️👨🏻 | couple with heart: man, man, medium skin tone, light skin tone | A man with medium skin tone and a man with light skin tone are looking at each other, both smiling, with a red heart symbol connecting them. |
| 👨🏽❤️👨🏼 | couple with heart: man, man, medium skin tone, medium-light skin tone | A man with medium skin tone and a man with medium-light skin tone are smiling at each other, with a red heart symbol between them. |
| 👨🏽❤️👨🏽 | couple with heart: man, man, medium skin tone | Two men with medium skin tones are gazing at each other, both smiling, with a red heart symbol connecting them. |
| 👨🏽❤️👨🏾 | couple with heart: man, man, medium skin tone, medium-dark skin tone | A man with medium skin tone and a man with medium-dark skin tone are smiling at each other, with a red heart symbol between them. |
| 👨🏽❤️👨🏿 | couple with heart: man, man, medium skin tone, dark skin tone | A man with medium skin tone and a man with dark skin tone are looking at each other, both smiling, with a red heart symbol connecting them. |
| 👨🏾❤️👨🏻 | couple with heart: man, man, medium-dark skin tone, light skin tone | A man with medium-dark skin tone and a man with light skin tone are smiling at each other, with a red heart symbol between them. |
| 👨🏾❤️👨🏼 | couple with heart: man, man, medium-dark skin tone, medium-light skin tone | A man with medium-dark skin tone and a man with medium-light skin tone are gazing at each other, both smiling, with a red heart symbol connecting them. |
| 👨🏾❤️👨🏽 | couple with heart: man, man, medium-dark skin tone, medium skin tone | Two men are embracing each other, one with medium-dark skin tone and the other with medium skin tone, surrounded by a heart symbol. |
| 👨🏾❤️👨🏾 | couple with heart: man, man, medium-dark skin tone | Two men with medium-dark skin tones are holding each other close, with a heart symbol between them. |
| 👨🏾❤️👨🏿 | couple with heart: man, man, medium-dark skin tone, dark skin tone | Two men are shown together, one with medium-dark skin tone and the other with dark skin tone, both connected by a heart symbol. |
| 👨🏿❤️👨🏻 | couple with heart: man, man, dark skin tone, light skin tone | A heart connects two men, one with dark skin tone and the other with light skin tone, as they lean towards each other. |
| 👨🏿❤️👨🏼 | couple with heart: man, man, dark skin tone, medium-light skin tone | Two men are depicted, one with dark skin tone and the other with medium-light skin tone, sharing a heart symbol between them. |
| 👨🏿❤️👨🏽 | couple with heart: man, man, dark skin tone, medium skin tone | A heart symbolizes the bond between two men, one with dark skin tone and the other with medium skin tone. |
| 👨🏿❤️👨🏾 | couple with heart: man, man, dark skin tone, medium-dark skin tone | Two men, one with dark skin tone and the other with medium-dark skin tone, are shown together with a heart symbol. |
| 👨🏿❤️👨🏿 | couple with heart: man, man, dark skin tone | Two men with dark skin tones are embracing, connected by a heart symbol. |
| 👩❤️👩 | couple with heart: woman, woman | Two women are depicted embracing each other, surrounded by a heart symbol. |
| 👩🏻❤️👩🏻 | couple with heart: woman, woman, light skin tone | Two women with light skin tones are holding each other close, connected by a heart symbol. |
| 👩🏻❤️👩🏼 | couple with heart: woman, woman, light skin tone, medium-light skin tone | A heart connects two women, one with light skin tone and the other with medium-light skin tone, as they lean towards each other. |
| 👩🏻❤️👩🏽 | couple with heart: woman, woman, light skin tone, medium skin tone | Two women are shown together, one with light skin tone and the other with medium skin tone, sharing a heart symbol. |
| 👩🏻❤️👩🏾 | couple with heart: woman, woman, light skin tone, medium-dark skin tone | A heart symbolizes the bond between two women, one with light skin tone and the other with medium-dark skin tone. |
| 👩🏻❤️👩🏿 | couple with heart: woman, woman, light skin tone, dark skin tone | Two women, one with light skin tone and the other with dark skin tone, are depicted together with a heart symbol. |
| 👩🏼❤️👩🏻 | couple with heart: woman, woman, medium-light skin tone, light skin tone | A heart connects two women, one with medium-light skin tone and the other with light skin tone, as they embrace. |
| 👩🏼❤️👩🏼 | couple with heart: woman, woman, medium-light skin tone | Two women with medium-light skin tones are shown embracing, surrounded by a heart symbol. |
| 👩🏼❤️👩🏽 | couple with heart: woman, woman, medium-light skin tone, medium skin tone | A heart connects two women, one with medium-light skin tone and the other with medium skin tone, as they lean towards each other. |
| 👩🏼❤️👩🏾 | couple with heart: woman, woman, medium-light skin tone, medium-dark skin tone | Two women are depicted, one with medium-light skin tone and the other with medium-dark skin tone, sharing a heart symbol. |
| 👩🏼❤️👩🏿 | couple with heart: woman, woman, medium-light skin tone, dark skin tone | A heart symbolizes the bond between two women, one with medium-light skin tone and the other with dark skin tone. |
| 👩🏽❤️👩🏻 | couple with heart: woman, woman, medium skin tone, light skin tone | A heart connects two women, one with medium skin tone and the other with light skin tone, as they embrace. |
| 👩🏽❤️👩🏼 | couple with heart: woman, woman, medium skin tone, medium-light skin tone | Two women are shown together, one with medium skin tone and the other with medium-light skin tone, surrounded by a heart symbol. |
| 👩🏽❤️👩🏽 | couple with heart: woman, woman, medium skin tone | Two women with medium skin tones are depicted embracing, connected by a heart symbol. |
| 👩🏽❤️👩🏾 | couple with heart: woman, woman, medium skin tone, medium-dark skin tone | A heart connects two women, one with medium skin tone and the other with medium-dark skin tone, as they lean towards each other. |
| 👩🏽❤️👩🏿 | couple with heart: woman, woman, medium skin tone, dark skin tone | Two women are shown together, one with medium skin tone and the other with dark skin tone, sharing a heart symbol. |
| 👩🏾❤️👩🏻 | couple with heart: woman, woman, medium-dark skin tone, light skin tone | A heart connects two women, one with medium-dark skin tone and the other with light skin tone, as they embrace. |
| 👩🏾❤️👩🏼 | couple with heart: woman, woman, medium-dark skin tone, medium-light skin tone | Two women are depicted, one with medium-dark skin tone and the other with medium-light skin tone, sharing a heart symbol. |
| 👩🏾❤️👩🏽 | couple with heart: woman, woman, medium-dark skin tone, medium skin tone | A heart symbolizes the bond between two women, one with medium-dark skin tone and the other with medium skin tone. |
| 👩🏾❤️👩🏾 | couple with heart: woman, woman, medium-dark skin tone | Two women with medium-dark skin tones are embracing, connected by a heart symbol. |
| 👩🏾❤️👩🏿 | couple with heart: woman, woman, medium-dark skin tone, dark skin tone | A heart connects two women, one with medium-dark skin tone and the other with dark skin tone, as they lean towards each other. |
| 👩🏿❤️👩🏻 | couple with heart: woman, woman, dark skin tone, light skin tone | Two women are depicted, one with dark skin tone and the other with light skin tone, sharing a heart symbol. |
| 👩🏿❤️👩🏼 | couple with heart: woman, woman, dark skin tone, medium-light skin tone | A heart connects two women, one with dark skin tone and the other with medium-light skin tone, as they embrace. |
| 👩🏿❤️👩🏽 | couple with heart: woman, woman, dark skin tone, medium skin tone | Two women are shown together, one with dark skin tone and the other with medium skin tone, surrounded by a heart symbol. |
| 👩🏿❤️👩🏾 | couple with heart: woman, woman, dark skin tone, medium-dark skin tone | A heart symbolizes the bond between two women, one with dark skin tone and the other with medium-dark skin tone. |
| 👩🏿❤️👩🏿 | couple with heart: woman, woman, dark skin tone | Two women with dark skin tones are embracing, connected by a heart symbol. |
| 👨👩👦 | family: man, woman, boy | A family unit is depicted with a man, a woman, and a boy, standing together. |
| 👨👩👧 | family: man, woman, girl | A family unit is shown with a man, a woman, and a girl, standing together. |
| 👨👩👧👦 | family: man, woman, girl, boy | A family of four is depicted, consisting of a man, a woman, a girl, and a boy, standing together. |
| 👨👩👦👦 | family: man, woman, boy, boy | A family unit is shown with a man, a woman, and two boys, standing together. |
| 👨👩👧👧 | family: man, woman, girl, girl | A family of four is depicted, consisting of a man, a woman, and two girls, standing together. |
| 👨👨👦 | family: man, man, boy | A family unit is depicted with two men and a boy, standing together. |
| 👨👨👧 | family: man, man, girl | Two men stand side by side, with a young girl between them, all depicted in a simple, cartoonish style. |
| 👨👨👧👦 | family: man, man, girl, boy | Two men are positioned next to each other, with a girl and a boy in front of them, representing a family group. |
| 👨👨👦👦 | family: man, man, boy, boy | Two men stand together, with two boys in front, forming a family unit in a playful, stylized manner. |
| 👨👨👧👧 | family: man, man, girl, girl | Two men are shown alongside two girls, creating a family scene with a cheerful vibe. |
| 👩👩👦 | family: woman, woman, boy | Two women are depicted together with a boy, symbolizing a family with a nurturing atmosphere. |
| 👩👩👧 | family: woman, woman, girl | Two women stand side by side, with a girl between them, representing a loving family dynamic. |
| 👩👩👧👦 | family: woman, woman, girl, boy | Two women are shown with a girl and a boy, illustrating a diverse family structure. |
| 👩👩👦👦 | family: woman, woman, boy, boy | Two women stand with two boys in front of them, creating a warm family portrait. |
| 👩👩👧👧 | family: woman, woman, girl, girl | Two women are depicted with two girls, forming a close-knit family image. |
| 👨👦 | family: man, boy | A man stands with a boy beside him, showcasing a father-son relationship. |
| 👨👦👦 | family: man, boy, boy | A man is shown with two boys, illustrating a family of three with a playful interaction. |
| 👨👧 | family: man, girl | A man stands with a girl, representing a father-daughter bond. |
| 👨👧👦 | family: man, girl, boy | A man is depicted with a girl and a boy, symbolizing a caring family environment. |
| 👨👧👧 | family: man, girl, girl | A man stands with two girls, showcasing a loving father-daughter relationship. |
| 👩👦 | family: woman, boy | A woman is depicted with a boy, representing a nurturing mother-son bond. |
| 👩👦👦 | family: woman, boy, boy | A woman is shown with two boys, illustrating a family unit with a playful atmosphere. |
| 👩👧 | family: woman, girl | A woman stands with a girl beside her, symbolizing a mother-daughter relationship. |
| 👩👧👦 | family: woman, girl, boy | A woman is depicted with a girl and a boy, representing a caring family dynamic. |
| 👩👧👧 | family: woman, girl, girl | A woman stands with two girls, showcasing a loving mother-daughter relationship. |
| 🗣️ | speaking head | A head with an open mouth suggests speaking or vocalizing, depicted in a simple, cartoon style. |
| 👤 | bust in silhouette | A silhouette of a person’s bust, with no distinct features, representing anonymity. |
| 👥 | busts in silhouette | Two silhouettes of people side by side, suggesting companionship or friendship. |
| 🫂 | people hugging | Two figures are shown embracing each other in a warm and comforting hug. |
| 👪 | family | A simple representation of a family unit, featuring two adults and a child. |
| 🧑🧑🧒 | family: adult, adult, child | Two adults stand together with a child, symbolizing a modern family structure. |
| 🧑🧑🧒🧒 | family: adult, adult, child, child | Two adults are depicted with two children, representing a larger family unit. |
| 🧑🧒 | family: adult, child | An adult stands with a child, illustrating a parent-child relationship. |
| 🧑🧒🧒 | family: adult, child, child | An adult is shown with two children, symbolizing a nurturing family dynamic. |
| 👣 | footprints | Two footprints are depicted side by side, suggesting movement or a journey. |
| | fingerprint | A detailed fingerprint is shown, representing identity or forensic evidence. |
Animals & Nature (159)
| Emoji | Name | Description |
|---|---|---|
| 🐵 | monkey face | A cartoonish monkey face with a round head, wide eyes, and a playful expression. |
| 🐒 | monkey | A playful monkey with a long tail and a cheerful demeanor, depicted in a simple style. |
| 🦍 | gorilla | A strong gorilla with a broad face and muscular build, showcasing its powerful presence. |
| 🦧 | orangutan | An orangutan with a round face and long limbs, depicted in a friendly and approachable manner. |
| 🐶 | dog face | A cute dog face with floppy ears, big eyes, and a friendly expression. |
| 🐕 | dog | A full-body depiction of a dog, standing upright and looking alert, with a wagging tail. |
| 🦮 | guide dog | A guide dog depicted in a standing position, symbolizing assistance and support. |
| 🐕🦺 | service dog | A service dog shown in a standing pose, representing support and companionship for those in need. |
| 🐩 | poodle | A fluffy poodle with a curly coat, depicted in a stylish and elegant manner. |
| 🐺 | wolf | A wolf with a sharp face and pointed ears, showcasing a fierce yet majestic expression. |
| 🦊 | fox | A small, orange fox with a white-tipped tail and a white underbelly, featuring pointed ears and a sly expression. |
| 🦝 | raccoon | A raccoon with gray fur, black markings around its eyes, and a bushy tail with black rings, looking curious and slightly mischievous. |
| 🐱 | cat face | A cute cat face with pointed ears, whiskers, and a small mouth, typically colored in shades of gray, brown, or orange. |
| 🐈 | cat | A full-bodied cat, often depicted in various colors, with a long tail and an alert posture, representing a domestic feline. |
| 🐈⬛ | black cat | A sleek black cat with bright eyes, sitting gracefully, embodying a mysterious and elegant demeanor. |
| 🦁 | lion | A majestic lion with a golden mane, fierce eyes, and a strong jaw, exuding a sense of power and authority. |
| 🐯 | tiger face | A tiger’s face featuring bold orange and black stripes, with piercing eyes and a fierce expression, showcasing its predatory nature. |
| 🐅 | tiger | A full-bodied tiger with striking orange fur and black stripes, poised and powerful, often depicted in a natural habitat. |
| 🐆 | leopard | A leopard with a spotted coat, showcasing a blend of yellow and black, embodying stealth and grace as it prowls. |
| 🐴 | horse face | A horse’s face with a long mane, large eyes, and a strong jaw, often depicted in brown or black, exuding strength and beauty. |
| 🫎 | moose | A large moose with impressive antlers, brown fur, and a long face, standing tall in a natural setting. |
| 🫏 | donkey | A donkey with long ears, a grayish-brown coat, and a gentle expression, often depicted with a slightly lowered head. |
| 🐎 | horse | A full-bodied horse, often shown in motion with a flowing mane and tail, representing grace and speed. |
| 🦄 | unicorn | A whimsical unicorn with a spiraled horn and a flowing mane, often depicted in pastel colors, symbolizing magic and rarity. |
| 🦓 | zebra | A zebra with distinctive black and white stripes, standing upright, showcasing its unique pattern and playful demeanor. |
| 🦌 | deer | A deer with a graceful posture, featuring large ears and a slender body, typically depicted in brown or tan tones. |
| 🦬 | bison | A bison with a shaggy brown coat and a massive build, often shown in a grazing position, symbolizing strength and resilience. |
| 🐮 | cow face | A cow’s face with large eyes, a broad nose, and black and white patches, often representing farm life. |
| 🐂 | ox | A strong bull with a muscular body, typically depicted with large horns and a sturdy stance, symbolizing power. |
| 🐃 | water buffalo | A water buffalo with a dark coat and large curved horns, often shown in a relaxed pose, representing farm life. |
| 🐄 | cow | A full-bodied cow, usually in black and white, standing calmly, representing agricultural life. |
| 🐷 | pig face | A pig’s face with a round snout, large ears, and a cheerful expression, often depicted in pink. |
| 🐖 | pig | A full-bodied pig, often shown in a playful stance with a curly tail, representing farm animals. |
| 🐗 | boar | A wild boar with coarse fur and sharp tusks, depicted in a rugged stance, symbolizing strength and wildness. |
| 🐽 | pig nose | A pig’s snout, round and flat, with nostrils, often depicted in pink, representing the animal’s playful nature. |
| 🐏 | ram | A ram with a thick, curly coat and large, spiraled horns, standing proudly, symbolizing strength and determination. |
| 🐑 | ewe | A fluffy ewe with a soft, white coat and a gentle expression, often depicted in a grazing position. |
| 🐐 | goat | A goat with a short coat, often shown with a playful demeanor and small horns, representing farm life. |
| 🐪 | camel | A camel with a single hump, featuring a light brown coat and long legs, often depicted in a desert setting. |
| 🐫 | two-hump camel | A two-hump camel with a sturdy build and a light brown coat, standing tall in a desert environment. |
| 🦙 | llama | A llama with a long neck and fluffy coat, often depicted in white or light brown, showcasing a calm demeanor. |
| 🦒 | giraffe | A tall giraffe with a long neck and distinctive brown spots, looking down with large, gentle eyes. |
| 🐘 | elephant | A large elephant with gray skin, big ears, and a long trunk, depicted in a majestic pose. |
| 🦣 | mammoth | A woolly mammoth with long, curved tusks and a thick coat, representing prehistoric strength. |
| 🦏 | rhinoceros | A rhinoceros with thick gray skin and a prominent horn, standing robustly, symbolizing power. |
| 🦛 | hippopotamus | A hippopotamus with a large, rounded body and a wide mouth, often depicted partially submerged in water. |
| 🐭 | mouse face | A small mouse face with large ears and a tiny nose, often depicted in gray or brown, looking curious. |
| 🐁 | mouse | A small mouse with a rounded body and long tail, often shown in a playful stance. |
| 🐀 | rat | A rat with a long tail and sharp features, typically depicted in gray or brown, representing urban wildlife. |
| 🐹 | hamster | A hamster with a round face and small ears, often shown with a cheerful expression, representing a pet. |
| 🐰 | rabbit face | A round-faced rabbit with large ears, soft white fur, and a gentle expression. |
| 🐇 | rabbit | A small rabbit with long ears and a fluffy tail, depicted in a hopping pose. |
| 🐿️ | chipmunk | A small chipmunk with brown and white stripes running down its back, looking alert. |
| 🦫 | beaver | A beaver with a broad, flat tail, brown fur, and prominent front teeth, often depicted sitting. |
| 🦔 | hedgehog | A hedgehog with a round body covered in spiky quills and a small, pointed face. |
| 🦇 | bat | A bat with outstretched wings, a rounded body, and a small face, often shown hanging upside down. |
| 🐻 | bear | A large bear with a broad face, dark brown fur, and a slightly open mouth, suggesting a growl. |
| 🐻❄️ | polar bear | A polar bear with white fur and a large, round head, often depicted standing on ice. |
| 🐨 | koala | A koala with large ears, a round face, and a nose, often shown clinging to a tree. |
| 🐼 | panda | A panda with black and white fur, round ears, and a gentle expression, often shown munching on bamboo. |
| 🦥 | sloth | A sloth with long limbs, a relaxed expression, and a slow, hanging pose from a tree branch. |
| 🦦 | otter | An otter with a sleek body, playful demeanor, and often depicted floating on its back. |
| 🦨 | skunk | A skunk with a black body and distinctive white stripes, often shown with a raised tail. |
| 🦘 | kangaroo | A kangaroo with strong hind legs, a long tail, and a pouch, depicted in a jumping pose. |
| 🦡 | badger | A badger with a stocky body, black and white facial markings, and a determined expression. |
| 🐾 | paw prints | Two paw prints showing the shape of animal paws, with rounded toes and a slight indentation. |
| 🦃 | turkey | A turkey with a rounded body, colorful fan of feathers, and a distinctive wattle. |
| 🐔 | chicken | A chicken with a rounded body, yellow feathers, and a small comb on its head. |
| 🐓 | rooster | A rooster with vibrant plumage, a prominent comb, and a proud stance. |
| 🐣 | hatching chick | A chick breaking out of an egg, with a small yellow body and a curious expression. |
| 🐤 | baby chick | A small, fluffy yellow chick with a round body and bright eyes. |
| 🐥 | front-facing baby chick | A baby chick facing forward, with soft yellow feathers and a tiny beak. |
| 🐦 | bird | A small bird with a rounded body and a short beak, often depicted in a perched position. |
| 🐧 | penguin | A penguin with a black and white body, flipper-like wings, and a waddling stance. |
| 🕊️ | dove | A dove with smooth white feathers and a gentle expression, often depicted in flight. |
| 🦅 | eagle | An eagle with a powerful beak, sharp eyes, and outstretched wings, soaring high. |
| 🦆 | duck | A duck with a rounded body, webbed feet, and a flat bill, often shown swimming. |
| 🦢 | swan | A swan with a long neck, elegant body, and white feathers, often gliding on water. |
| 🦉 | owl | An owl with large, round eyes, a flat face, and feathered tufts, often depicted perched. |
| 🦤 | dodo | A dodo, a large, flightless bird with a stout body, a hooked beak, and a curious expression. |
| 🪶 | feather | A feather with a delicate, elongated shape, often shown floating or resting. |
| 🦩 | flamingo | A flamingo with long legs, a curved neck, and bright pink feathers, often standing on one leg. |
| 🦚 | peacock | A peacock with a vibrant, colorful tail that fans out in an extravagant display. |
| 🦜 | parrot | A parrot with bright feathers, a curved beak, and a playful pose, often shown perched. |
| 🪽 | wing | A single bird wing with feathers, depicted in a graceful, upward position. |
| 🐦⬛ | black bird | A black bird with a sleek body and sharp beak, often depicted in a perched position. |
| 🪿 | goose | A goose with a long neck, rounded body, and webbed feet, often shown waddling. |
| 🐦🔥 | phoenix | A phoenix with fiery plumage, depicted in a dynamic pose, symbolizing rebirth. |
| 🐸 | frog | A frog with a smooth, green body, bulging eyes, and a wide mouth, often shown sitting. |
| 🐊 | crocodile | A crocodile with a long snout, scaly green skin, and sharp teeth, often depicted in water. |
| 🐢 | turtle | A green turtle with a rounded shell and a small head, looking slightly to the side. |
| 🦎 | lizard | A small, green lizard with a long body and a pointed snout, resting on a surface. |
| 🐍 | snake | A long, coiled snake with smooth scales, typically depicted in green or brown, with a forked tongue flicking out. |
| 🐲 | dragon face | A dragon face with large, pointed ears, sharp teeth, and fierce red eyes, often depicted with a scaly texture. |
| 🐉 | dragon | A full-bodied dragon with a long tail, large wings, and a fierce expression, often shown in shades of green or red. |
| 🦕 | sauropod | A long-necked dinosaur, resembling a sauropod, with a large body and a gentle expression, typically in green. |
| 🦖 | T-Rex | A small, ferocious T-Rex with tiny arms and a wide mouth filled with sharp teeth, usually depicted in green or brown. |
| 🐳 | spouting whale | A large, dark blue whale with a rounded body and a spout of water shooting from its blowhole. |
| 🐋 | whale | A massive whale with a smooth, dark blue body, floating gracefully in the ocean. |
| 🐬 | dolphin | A sleek, playful dolphin with a curved dorsal fin and a friendly smile, typically shown in shades of blue or gray. |
| 🦭 | seal | A rounded seal with a smooth, gray body and whiskers, often shown lounging on a rock. |
| 🐟 | fish | A simple fish shape with a pointed head and a forked tail, usually depicted in bright colors. |
| 🐠 | tropical fish | A vibrant tropical fish with a rounded body and colorful patterns, often shown in shades of orange and blue. |
| 🐡 | blowfish | A round, puffy blowfish with large eyes and a small mouth, often depicted with a spiky texture. |
| 🦈 | shark | A sleek shark with a pointed snout and a prominent dorsal fin, typically shown in gray. |
| 🐙 | octopus | An octopus with a bulbous head and eight long, flexible arms, often depicted in purple or blue. |
| 🐚 | spiral shell | A spiral-shaped shell with a smooth surface, often shown in shades of beige and brown. |
| 🪸 | coral | A colorful coral structure resembling branching fingers, often depicted in shades of pink or orange. |
| 🪼 | jellyfish | A translucent jellyfish with a bell-shaped body and trailing tentacles, usually shown in light blue or pink. |
| 🦀 | crab | A crab with a hard shell, two large claws, and a sideways stance, typically in shades of red or brown. |
| 🦞 | lobster | A lobster with large claws and a long body, often depicted in bright red, resembling a cooked lobster. |
| 🦐 | shrimp | A small shrimp with a curved body and long antennae, often shown in pink or orange. |
| 🦑 | squid | A squid with a bulbous head and long tentacles, typically depicted in shades of purple or blue. |
| 🦪 | oyster | An oyster with a rough, irregular shell, often shown partially open to reveal a pearl inside. |
| 🐌 | snail | A snail with a coiled shell and a soft, elongated body, typically depicted in light brown or beige. |
| 🦋 | butterfly | A butterfly with colorful wings, often shown in vibrant patterns of blue, orange, and yellow. |
| 🐛 | bug | A small caterpillar with a segmented body and tiny legs, usually depicted in green. |
| 🐜 | ant | A small black ant with a segmented body and six legs, typically shown in a crawling position. |
| 🐝 | honeybee | A fuzzy honeybee with yellow and black stripes, large wings, and a stinger, often depicted in a hovering position. |
| 🪲 | beetle | A beetle with a shiny, rounded body and antennae, typically shown in dark colors. |
| 🐞 | lady beetle | A ladybug with a round, red body and black spots, often depicted with tiny legs and antennae. |
| 🦗 | cricket | A cricket with long antennae and large hind legs, typically shown in a green or brown color. |
| 🪳 | cockroach | A cockroach with a flat, oval body and long antennae, often depicted in dark brown. |
| 🕷️ | spider | A spider with eight long legs and a small body, often shown in black or brown. |
| 🕸️ | spider web | A spider web with intricate, delicate strands forming a circular pattern. |
| 🦂 | scorpion | A scorpion with a curved tail and pincers, often depicted in dark brown or black. |
| 🦟 | mosquito | A mosquito with a slender body, long legs, and a pointed proboscis, typically shown in dark colors. |
| 🪰 | fly | A fly with a small, rounded body and large wings, often depicted in black or gray. |
| 🪱 | worm | A worm with a long, cylindrical body, typically shown in shades of brown or pink. |
| 🦠 | microbe | A microscopic microbe with an irregular shape, often depicted in green or blue. |
| 💐 | bouquet | A colorful bouquet of various flowers, predominantly pink, yellow, and white, arranged together with green leaves. |
| 🌸 | cherry blossom | A delicate cherry blossom with soft pink petals and a light yellow center, representing spring. |
| 💮 | white flower | A simple white flower with five petals, often depicted with a subtle outline. |
| 🪷 | lotus | A serene lotus flower, typically shown with multiple layers of soft pink or white petals, floating on a green leaf. |
| 🏵️ | rosette | A decorative rosette with a circular shape, often featuring a layered design in vibrant colors. |
| 🌹 | rose | A classic red rose with velvety petals tightly curled at the center, symbolizing love and beauty. |
| 🥀 | wilted flower | A wilted flower with drooping petals, often depicted in muted colors, indicating decay. |
| 🌺 | hibiscus | A large, bright hibiscus flower with prominent petals, usually in shades of red or pink. |
| 🌻 | sunflower | A tall sunflower with a large, round yellow face and dark brown center, surrounded by green leaves. |
| 🌼 | blossom | A cheerful yellow blossom with a round center and multiple petal layers, resembling a daisy. |
| 🌷 | tulip | A tulip with a smooth, cup-shaped bloom, typically in vibrant colors like red, pink, or yellow. |
| 🪻 | hyacinth | A cluster of hyacinth flowers, usually depicted in shades of purple or blue, with tightly packed petals. |
| 🌱 | seedling | A small green seedling with two leaves emerging from the soil, symbolizing growth. |
| 🪴 | potted plant | A potted plant with lush green leaves, placed in a decorative pot. |
| 🌲 | evergreen tree | A tall evergreen tree with a conical shape, featuring dark green needles. |
| 🌳 | deciduous tree | A broad deciduous tree with a thick trunk and a full canopy of green leaves. |
| 🌴 | palm tree | A slender palm tree with long, arching fronds, often associated with tropical environments. |
| 🌵 | cactus | A green cactus with a rounded body and several upward-reaching spines, representing desert flora. |
| 🌾 | sheaf of rice | A sheaf of rice, depicted as a bundle of golden stalks with small grains at the top. |
| 🌿 | herb | A sprig of herb with small green leaves, often representing freshness and flavor. |
| ☘️ | shamrock | A three-leaf shamrock, typically in bright green, symbolizing good luck. |
| 🍀 | four leaf clover | A four-leaf clover, bright green and rare, symbolizing luck and prosperity. |
| 🍁 | maple leaf | A vibrant red maple leaf, shaped with pointed lobes, representing autumn. |
| 🍂 | fallen leaf | A brown fallen leaf, curled and dried, symbolizing the change of seasons. |
| 🍃 | leaf fluttering in wind | A green leaf fluttering in the wind, depicted with a slight curve to suggest movement. |
| 🪹 | empty nest | An empty nest made of twigs and grass, resting on a branch, symbolizing home. |
| 🪺 | nest with eggs | A nest containing several eggs, nestled among twigs, indicating new life. |
| 🍄 | mushroom | A mushroom with a rounded cap, often depicted in red with white spots, growing from the ground. |
| | leafless tree | A leafless tree with bare branches, representing a barren landscape. |
Food & Drink (131)
| Emoji | Name | Description |
|---|---|---|
| 🍇 | grapes | A bunch of purple grapes, round and plump, hanging together on a vine. |
| 🍈 | melon | A cantaloupe melon, round and orange on the inside, with a rough, tan exterior. |
| 🍉 | watermelon | A large watermelon, green on the outside with a bright red interior filled with black seeds. |
| 🍊 | tangerine | A small, round tangerine with a bright orange skin, representing citrus fruit. |
| 🍋 | lemon | A bright yellow lemon, oval-shaped with a dimpled skin, known for its sour taste. |
| 🍋🟩 | lime | A lime, small and round, with a vibrant green skin, often used in cocktails. |
| 🍌 | banana | A curved yellow banana with a smooth skin, known for its sweet taste. |
| 🍍 | pineapple | A tropical pineapple with a rough, spiky exterior and a tuft of green leaves on top. |
| 🥭 | mango | A ripe mango, oval-shaped with a smooth skin that transitions from green to yellow-orange. |
| 🍎 | red apple | A shiny red apple, round and crisp, symbolizing health and freshness. |
| 🍏 | green apple | A bright green apple, round and smooth, representing a tart flavor. |
| 🍐 | pear | A green pear with a rounded bottom and a narrow top, featuring a small brown stem. |
| 🍑 | peach | A fuzzy, round peach with a gradient of yellow to pink, showcasing a small indentation at the top. |
| 🍒 | cherries | A pair of bright red cherries, each with a glossy surface, connected by slender green stems. |
| 🍓 | strawberry | A vibrant red strawberry with a green leafy crown and tiny seeds scattered across its surface. |
| 🫐 | blueberries | A cluster of dark blue blueberries, round and smooth, resembling small marbles. |
| 🥝 | kiwi fruit | A brown, fuzzy kiwi fruit cut in half, revealing its bright green interior with tiny black seeds. |
| 🍅 | tomato | A bright red tomato, round and smooth, with a small green stem at the top. |
| 🫒 | olive | A single dark green olive, oval in shape, with a shiny surface and a small pit inside. |
| 🥥 | coconut | A brown coconut with a rough outer shell, partially cracked open to reveal the white flesh inside. |
| 🥑 | avocado | A halved avocado showing its creamy green flesh and a large brown pit in the center. |
| 🍆 | eggplant | A glossy, deep purple eggplant with a green leafy cap at the top. |
| 🥔 | potato | A light brown potato with a rough, uneven surface and small eyes. |
| 🥕 | carrot | An orange carrot with a tapered shape and green leafy tops sprouting from one end. |
| 🌽 | ear of corn | An ear of corn with yellow kernels arranged in rows, covered by green husks. |
| 🌶️ | hot pepper | A bright red hot pepper, elongated and slightly curved, with a green stem. |
| 🫑 | bell pepper | A shiny, green bell pepper, round and smooth with a thick wall. |
| 🥒 | cucumber | A long, dark green cucumber with a smooth surface and slightly bumpy texture. |
| 🥬 | leafy green | A bunch of leafy greens, vibrant green in color, resembling kale or lettuce. |
| 🥦 | broccoli | A green broccoli floret with a thick stem and a bushy top resembling a tree. |
| 🧄 | garlic | A bulb of garlic with a papery white skin, consisting of several cloves. |
| 🧅 | onion | A round onion with a brownish skin and a slightly bulbous shape. |
| 🥜 | peanuts | A handful of light brown peanuts, some in their shells and some shelled. |
| 🫘 | beans | A small pile of brown beans, oval-shaped and smooth. |
| 🌰 | chestnut | A brown chestnut with a glossy surface, partially enclosed in a spiky green husk. |
| 🫚 | ginger root | A knobby ginger root with a light brown skin and a twisted shape. |
| 🫛 | pea pod | A green pea pod, curved and filled with small round peas inside. |
| 🍄🟫 | brown mushroom | A brown mushroom with a smooth cap and a short, thick stem. |
| | root vegetable | A round root vegetable, resembling a beet, with a reddish-brown skin. |
| 🍞 | bread | A loaf of golden-brown bread with a soft, fluffy texture and a crusty exterior. |
| 🥐 | croissant | A buttery, crescent-shaped croissant with a golden-brown, flaky surface. |
| 🥖 | baguette bread | A long, thin baguette with a crispy crust and a soft interior. |
| 🫓 | flatbread | A round flatbread, resembling a thick tortilla, with a slightly browned surface. |
| 🥨 | pretzel | A twisted pretzel with a golden-brown color and a glossy finish. |
| 🥯 | bagel | A round bagel with a hole in the center, golden-brown and slightly chewy. |
| 🥞 | pancakes | A stack of fluffy pancakes, golden-brown and slightly thick, often served with syrup. |
| 🧇 | waffle | A square waffle with a grid pattern, golden-brown and slightly crispy. |
| 🧀 | cheese wedge | A triangular wedge of cheese, yellow in color with a smooth surface. |
| 🍖 | meat on bone | A piece of meat on a bone, with a rich brown color and visible marbling. |
| 🍗 | poultry leg | A chicken drumstick, golden-brown and crispy, with a bone protruding from one end. |
| 🥩 | cut of meat | A thick cut of red meat, marbled with fat, displaying a fresh and juicy appearance. |
| 🥓 | bacon | A crispy, cooked strip of bacon, with a reddish-brown color and a slightly curled shape. |
| 🍔 | hamburger | A hamburger with a brown beef patty nestled between a golden-brown sesame seed bun, often topped with green lettuce, red tomato, and yellow cheese. |
| 🍟 | french fries | A serving of golden, crispy French fries, arranged in a pile, with a slightly irregular shape. |
| 🍕 | pizza | A triangular slice of pizza with a golden-brown crust, topped with melted cheese and red pepperoni slices. |
| 🌭 | hot dog | A hot dog in a soft, light-colored bun, with a brown sausage peeking out, often garnished with yellow mustard. |
| 🥪 | sandwich | A sandwich made with two slices of bread, filled with various ingredients, often visible at the edges. |
| 🌮 | taco | A taco with a folded, yellow corn tortilla, filled with colorful ingredients like lettuce, meat, and salsa. |
| 🌯 | burrito | A burrito wrapped in a soft, beige tortilla, with the filling visible at one end, often containing rice and beans. |
| 🫔 | tamale | A tamale wrapped in a green corn husk, with a soft, yellow filling that may be visible at the ends. |
| 🥙 | stuffed flatbread | A stuffed flatbread, often wrapped around fillings like falafel or vegetables, with the edges tucked in. |
| 🧆 | falafel | A round, deep-fried falafel ball, with a golden-brown exterior and a slightly rough texture. |
| 🥚 | egg | A simple, white egg with a smooth surface, oval shape, and a slightly shiny appearance. |
| 🍳 | cooking | A frying pan with a sunny-side-up egg, featuring a bright yellow yolk and white edges, sizzling in the pan. |
| 🥘 | shallow pan of food | A shallow pan filled with a colorful mix of food, often resembling a casserole or paella, with various ingredients visible. |
| 🍲 | pot of food | A pot filled with steaming soup or stew, with a rich, brown broth and chunks of vegetables or meat inside. |
| 🫕 | fondue | A fondue pot filled with melted cheese or chocolate, with skewers resting on the edge, ready for dipping. |
| 🥣 | bowl with spoon | A bowl filled with cereal or oatmeal, accompanied by a silver spoon resting inside. |
| 🥗 | green salad | A bowl of green salad, filled with various leafy greens and colorful vegetables, looking fresh and vibrant. |
| 🍿 | popcorn | A container overflowing with fluffy, white popcorn, with some kernels spilling out over the edges. |
| 🧈 | butter | A stick of butter, yellow in color, often wrapped in paper, with a smooth, shiny surface. |
| 🧂 | salt | A small salt shaker, typically white or clear, with a metal top and a few holes for dispensing salt. |
| 🥫 | canned food | A cylindrical can of food, often with a label on the front, typically metallic in color. |
| 🍱 | bento box | A bento box with compartments, filled with various types of food, often colorful and neatly arranged. |
| 🍘 | rice cracker | A round, flat rice cracker, typically light brown or beige, with a slightly crispy texture. |
| 🍙 | rice ball | A triangular rice ball wrapped in a green seaweed sheet, often with a filling in the center. |
| 🍚 | cooked rice | A bowl of fluffy, white cooked rice, steaming and piled high, often served plain. |
| 🍛 | curry rice | A plate of curry rice, featuring a mound of brown curry sauce poured over white rice, often with vegetables. |
| 🍜 | steaming bowl | A steaming bowl of noodles, often topped with green onions and served with chopsticks resting on the side. |
| 🍝 | spaghetti | A plate of spaghetti, with long strands of pasta twirled together, often topped with meatballs and sauce. |
| 🍠 | roasted sweet potato | A roasted sweet potato, with a reddish-brown skin and a soft, orange interior, often slightly caramelized. |
| 🍢 | oden | A skewer of oden, featuring various ingredients like fish cakes and vegetables, often simmered in broth. |
| 🍣 | sushi | A piece of sushi, typically a small roll of rice wrapped around fish or vegetables, often garnished with wasabi. |
| 🍤 | fried shrimp | A piece of fried shrimp, golden-brown and crispy, often with a tail still attached. |
| 🍥 | fish cake with swirl | A fish cake with a pink swirl pattern on top, often round and resembling a pastry. |
| 🥮 | moon cake | A round moon cake, often with a golden-brown crust and intricate designs on its surface. |
| 🍡 | dango | A skewer of dango, featuring three colorful rice dumplings, typically served sweet. |
| 🥟 | dumpling | A plump dumpling, often folded and filled with meat or vegetables, with a slightly shiny surface. |
| 🥠 | fortune cookie | A fortune cookie, shaped like a crescent, with a light brown, crispy shell and a slip of paper inside. |
| 🥡 | takeout box | A takeout box, typically white with a wire handle, often filled with Asian food and slightly folded at the top. |
| 🍦 | soft ice cream | A soft-serve ice cream cone, with a swirl of creamy, light-colored ice cream on top of a crispy cone. |
| 🍧 | shaved ice | A colorful mound of shaved ice, typically in shades of blue and pink, served in a small bowl or cup. |
| 🍨 | ice cream | A scoop of ice cream, usually white or cream-colored, often sitting in a cone or bowl. |
| 🍩 | doughnut | A round doughnut with a hole in the center, often glazed and sprinkled with colorful toppings. |
| 🍪 | cookie | A round cookie, typically golden brown with chocolate chips scattered throughout. |
| 🎂 | birthday cake | A multi-layered birthday cake, often frosted in pastel colors and topped with candles. |
| 🍰 | shortcake | A slice of shortcake, featuring layers of sponge cake and cream, often garnished with fruit. |
| 🧁 | cupcake | A cupcake topped with a swirl of colorful frosting and often decorated with sprinkles. |
| 🥧 | pie | A pie with a golden brown crust, typically filled with fruit or custard, and often has a lattice top. |
| 🍫 | chocolate bar | A rectangular chocolate bar, dark brown in color, often wrapped in shiny foil. |
| 🍬 | candy | A piece of candy, usually brightly colored and shiny, often in a wrapper. |
| 🍭 | lollipop | A lollipop with a round, colorful candy head mounted on a stick. |
| 🍮 | custard | A smooth, creamy custard dessert, often caramel-colored and served in a small dish. |
| 🍯 | honey pot | A round jar filled with golden honey, often with a honey dipper resting on the side. |
| 🍼 | baby bottle | A baby bottle, typically white with a colored cap and a nipple on top. |
| 🥛 | glass of milk | A tall glass filled with white milk, often depicted with a slight sheen. |
| ☕ | hot beverage | A steaming cup of coffee or tea, usually brown or black, served in a simple cup. |
| 🫖 | teapot | A traditional teapot, often rounded with a spout and a handle, typically in a solid color. |
| 🍵 | teacup without handle | A small teacup without a handle, usually filled with green tea. |
| 🍶 | sake | A bottle of sake, typically slender and ceramic, often with a small cup beside it. |
| 🍾 | bottle with popping cork | A champagne bottle with a cork that is popping out, often depicted with bubbles. |
| 🍷 | wine glass | A wine glass filled with red or white wine, typically with a long stem. |
| 🍸 | cocktail glass | A cocktail glass with a triangular shape, often garnished with an olive or a twist. |
| 🍹 | tropical drink | A tropical drink in a curved glass, often colorful and garnished with a slice of fruit. |
| 🍺 | beer mug | A large beer mug filled with frothy beer, typically depicted with a handle. |
| 🍻 | clinking beer mugs | Two clinking beer mugs, both filled with golden beer and froth spilling over the tops. |
| 🥂 | clinking glasses | Two champagne glasses raised in a toast, filled with bubbly drink. |
| 🥃 | tumbler glass | A short tumbler glass filled with dark liquor, often depicted with ice cubes. |
| 🫗 | pouring liquid | A pitcher pouring liquid, typically depicted with a stream of liquid flowing out. |
| 🥤 | cup with straw | A cup with a straw, often filled with a colorful drink like soda or juice. |
| 🧋 | bubble tea | A cup of bubble tea, typically filled with milk tea and topped with large tapioca pearls. |
| 🧃 | beverage box | A small beverage box, often with a straw, typically filled with juice. |
| 🧉 | mate | A traditional mate drink served in a gourd, often with a metal straw. |
| 🧊 | ice | A cube of ice, typically clear and cold, often depicted with a slight sheen. |
| 🥢 | chopsticks | A pair of chopsticks, usually wooden or black, held together at the top. |
| 🍽️ | fork and knife with plate | A plate with a fork and knife on either side, ready for a meal. |
| 🍴 | fork and knife | A fork and knife crossed, typically depicted in silver or stainless steel. |
| 🥄 | spoon | A simple spoon, often silver or stainless steel, used for eating. |
| 🔪 | kitchen knife | A kitchen knife with a sharp blade and a handle, typically depicted in silver. |
| 🫙 | jar | A glass jar, typically round and clear, often used for storing food or condiments. |
| 🏺 | amphora | An ancient amphora, typically tall and narrow with two handles, often depicted in earthy tones. |
Travel & Places (218)
| Emoji | Name | Description |
|---|---|---|
| 🌍 | globe showing Europe-Africa | A blue and green globe depicting the continents of Europe and Africa, with visible landmasses and swirling white clouds. |
| 🌎 | globe showing Americas | A blue and green globe showing the Americas, with the landmasses in green and the oceans in blue. |
| 🌏 | globe showing Asia-Australia | A blue and green globe featuring Asia and Australia, with green landmasses and blue oceans. |
| 🌐 | globe with meridians | A globe with a grid of meridians and parallels, colored in blue and green, representing the Earth. |
| 🗺️ | world map | A flat, detailed map with various geographical features and markings, typically in earthy tones. |
| 🗾 | map of Japan | A detailed map outline of Japan, featuring its distinct shape and coastal lines, typically in a light color. |
| 🧭 | compass | A classic compass with a round face, a needle pointing north, and a decorative outer ring, often in metallic colors. |
| 🏔️ | snow-capped mountain | A tall, snow-capped mountain with rocky peaks, depicted in shades of grey and white. |
| ⛰️ | mountain | A rugged mountain silhouette, typically in dark grey or brown, with a jagged peak. |
| 🌋 | volcano | A volcano with a conical shape, often illustrated with a red lava flow and smoke billowing from the top. |
| 🗻 | mount fuji | A stylized depiction of Mount Fuji, with a snow-capped peak and a symmetrical shape, often in shades of blue and white. |
| 🏕️ | camping | A tent set up in a natural setting, typically depicted in earthy colors, often surrounded by trees. |
| 🏖️ | beach with umbrella | A sandy beach scene featuring a colorful beach umbrella and gentle waves in the background. |
| 🏜️ | desert | A vast desert landscape with rolling sand dunes, typically depicted in warm yellow and brown tones. |
| 🏝️ | desert island | A small, tropical island surrounded by blue water, featuring palm trees and sandy beaches. |
| 🏞️ | national park | A picturesque national park scene with lush greenery, hills, and possibly a body of water. |
| 🏟️ | stadium | A large, open stadium with tiered seating and a playing field, often depicted in a circular shape. |
| 🏛️ | classical building | An ancient-style building with columns and a pediment, often resembling a temple or classical structure. |
| 🏗️ | building construction | A construction site with a partially built structure, featuring scaffolding and construction equipment. |
| 🧱 | brick | A single red brick, rectangular in shape, often showing a rough texture. |
| 🪨 | rock | A large, solid rock or boulder, typically depicted in grey or brown tones, with a rugged surface. |
| 🪵 | wood | A log or piece of timber, typically depicted in brown with visible wood grain. |
| 🛖 | hut | A simple hut or shelter, often round in shape and made of natural materials like wood or thatch. |
| 🏘️ | houses | A cluster of houses, typically depicted in various colors and styles, representing a small neighborhood. |
| 🏚️ | derelict house | A dilapidated house with a crumbling structure, often shown in dark, muted colors. |
| 🏠 | house | A simple house with a triangular roof, typically depicted in warm colors, representing a cozy home. |
| 🏡 | house with garden | A house with a garden, featuring a small yard and flowers, often depicted in bright colors. |
| 🏢 | office building | A tall office building with a modern design, typically shown in grey or glass colors. |
| 🏣 | Japanese post office | A traditional Japanese post office building, often featuring a distinctive roof and red accents. |
| 🏤 | post office | A European-style post office building with ornate architecture, typically depicted in light colors. |
| 🏥 | hospital | A hospital building with a red cross symbol, often shown in white or light colors. |
| 🏦 | bank | A bank building with a classical design, often depicted in grey or stone colors. |
| 🏨 | hotel | A multi-story hotel building, typically shown in a modern style with large windows. |
| 🏩 | love hotel | A love hotel with a romantic design, often depicted in soft colors and decorative elements. |
| 🏪 | convenience store | A convenience store building, typically small and brightly colored, often with a sign indicating 24-hour service. |
| 🏫 | school | A school building with a traditional design, often depicted in light colors with a bell tower. |
| 🏬 | department store | A large department store building, typically shown with multiple floors and large windows. |
| 🏭 | factory | A factory building with smokestacks, often depicted in grey or industrial colors. |
| 🏯 | Japanese castle | A Japanese castle with tiered roofs and traditional architecture, often depicted in vibrant colors. |
| 🏰 | castle | A grand European castle with tall towers and turrets, often illustrated in a fairy-tale style. |
| 💒 | wedding | A small, white chapel with a pointed roof and two bell towers, adorned with a heart symbol, representing love and weddings. |
| 🗼 | Tokyo tower | A tall, red and white tower with a distinctive lattice structure, resembling the iconic Tokyo Tower. |
| 🗽 | Statue of Liberty | A green statue of a woman holding a torch in her right hand, representing freedom, standing on a pedestal. |
| ⛪ | church | A white church building with a cross on top, featuring a steep roof and arched windows. |
| 🕌 | mosque | A mosque with a large dome and a crescent moon on top, flanked by two tall minarets. |
| 🛕 | hindu temple | A traditional Hindu temple with ornate architecture, featuring a tall spire and intricate carvings. |
| 🕍 | synagogue | A synagogue with a large dome and two towers, characterized by its Star of David symbol. |
| ⛩️ | shinto shrine | A traditional Japanese Shinto shrine, marked by a distinctive red torii gate leading to a wooden structure. |
| 🕋 | kaaba | A black cube-shaped building, known as the Kaaba, draped in a gold-embroidered black cloth, located in Mecca. |
| ⛲ | fountain | A decorative fountain with water flowing from the top, often surrounded by a circular basin. |
| ⛺ | tent | A simple, triangular tent with a fabric covering, typically used for camping. |
| 🌁 | foggy | A city skyline partially obscured by fog, with a bridge visible in the foreground. |
| 🌃 | night with stars | A night scene featuring a city skyline illuminated by stars and city lights against a dark sky. |
| 🏙️ | cityscape | A cityscape showcasing tall buildings and skyscrapers, representing an urban environment. |
| 🌄 | sunrise over mountains | A sunrise casting warm orange and yellow hues over a range of mountains, signaling the start of a new day. |
| 🌅 | sunrise | A vibrant sunrise with bright yellow and orange colors reflecting on a calm body of water. |
| 🌆 | cityscape at dusk | A cityscape at dusk, with buildings silhouetted against a colorful sky as the sun sets. |
| 🌇 | sunset | A sunset scene with the sun dipping below the horizon, casting a warm glow over buildings. |
| 🌉 | bridge at night | A bridge illuminated against the night sky, with the city skyline visible in the background. |
| ♨️ | hot springs | A steaming hot spring, often depicted with wavy lines to represent steam rising from the water. |
| 🎠 | carousel horse | A colorful carousel horse, often painted with bright colors and adorned with a saddle, ready for a ride. |
| 🛝 | playground slide | A playground slide, typically a curved metal slide leading down from a raised platform. |
| 🎡 | ferris wheel | A Ferris wheel with colorful cabins, turning slowly against the backdrop of a fairground. |
| 🎢 | roller coaster | A roller coaster with steep drops and twists, featuring cars zooming along the tracks. |
| 💈 | barber pole | A barber pole with red, white, and blue stripes, symbolizing a barber shop. |
| 🎪 | circus tent | A large circus tent with bright colors and a peaked top, often associated with performances and entertainment. |
| 🚂 | locomotive | A classic steam locomotive with a large front smokestack and a series of connected cars. |
| 🚃 | railway car | A railway car with windows and doors, typically used for passenger transport on trains. |
| 🚄 | high-speed train | A sleek high-speed train with a streamlined design, representing modern rail travel. |
| 🚅 | bullet train | A bullet train with a pointed nose, designed for high-speed travel on railways. |
| 🚆 | train | A traditional train with several connected cars, often depicted in motion on railway tracks. |
| 🚇 | metro | A subway train, typically depicted as a compact, underground transport vehicle. |
| 🚈 | light rail | A light rail vehicle, often resembling a modern tram, designed for urban transport. |
| 🚉 | station | A railway station building, usually featuring a platform and a roof for passenger shelter. |
| 🚊 | tram | A tram with overhead wires, designed for urban public transport on tracks. |
| 🚝 | monorail | A monorail train running on a single elevated track, often seen in theme parks or cities. |
| 🚞 | mountain railway | A mountain railway train designed for steep inclines, featuring a vintage look. |
| 🚋 | tram car | A tram car with open sides, designed for urban transport, often seen in cities. |
| 🚌 | bus | A bus with large windows and a rectangular shape, typically used for public transport. |
| 🚍 | oncoming bus | An oncoming bus with a similar rectangular shape, approaching from the opposite direction. |
| 🚎 | trolleybus | A trolleybus with a rounded body, painted in a bright yellow color with a gray roof, featuring overhead wires for power. |
| 🚐 | minibus | A compact minibus with a boxy shape, typically colored white with a dark blue stripe, designed for passenger transport. |
| 🚑 | ambulance | An ambulance with a white body and red cross markings, featuring a prominent light bar on top and a rear compartment for patients. |
| 🚒 | fire engine | A fire engine in bright red, equipped with a ladder on top and various emergency lights, designed for firefighting. |
| 🚓 | police car | A police car with a sleek design, primarily black and white, featuring a light bar on top and police insignia on the sides. |
| 🚔 | oncoming police car | An oncoming police car with a black and white color scheme, highlighted by a flashing light bar on top, facing towards the viewer. |
| 🚕 | taxi | A yellow taxi cab with a square shape, featuring a taxi sign on the roof and a checkerboard pattern along the sides. |
| 🚖 | oncoming taxi | An oncoming yellow taxi with a flat roof sign, approaching from the front, designed for passenger pick-up. |
| 🚗 | automobile | A standard automobile with a rounded shape, typically in a bright color like red or blue, designed for personal transport. |
| 🚘 | oncoming automobile | An oncoming automobile with a sleek design, facing the viewer, often in a vibrant color like blue or silver. |
| 🚙 | sport utility vehicle | A sport utility vehicle with a robust appearance, often in dark green or black, designed for off-road driving. |
| 🛻 | pickup truck | A pickup truck with an open flatbed, usually in a metallic color like silver or red, designed for transporting goods. |
| 🚚 | delivery truck | A large delivery truck with a boxy shape, often white or yellow, designed for transporting cargo with a rear loading area. |
| 🚛 | articulated lorry | An articulated lorry with a long trailer attached to a cab, typically in bright colors like red or blue, designed for heavy transport. |
| 🚜 | tractor | A tractor with large rear wheels and a compact body, usually in green or red, designed for agricultural purposes. |
| 🏎️ | racing car | A racing car with a low profile and aerodynamic shape, often in bright colors like red or blue, designed for speed. |
| 🏍️ | motorcycle | A motorcycle with a sleek design, typically black or chrome, featuring two wheels and a seat for one or two riders. |
| 🛵 | motor scooter | A motor scooter with a compact body, often in pastel colors, featuring a step-through frame and a seat for one or two riders. |
| 🦽 | manual wheelchair | A manual wheelchair with large rear wheels and smaller front wheels, designed for mobility assistance, often in gray or black. |
| 🦼 | motorized wheelchair | A motorized wheelchair with a sleek design, featuring a comfortable seat and joystick controls, often in a neutral color. |
| 🛺 | auto rickshaw | An auto rickshaw with a three-wheeled design, typically painted in bright colors like yellow and green, designed for urban transport. |
| 🚲 | bicycle | A bicycle with two wheels, a frame, and handlebars, often in bright colors, designed for cycling. |
| 🛴 | kick scooter | A kick scooter with a narrow deck and two wheels, typically in bright colors like blue or pink, designed for riding by pushing off the ground. |
| 🛹 | skateboard | A skateboard with a flat board and four wheels, often in colorful designs, designed for tricks and riding. |
| 🛼 | roller skate | A pair of roller skates with four wheels on each boot, often in bright colors, designed for skating on smooth surfaces. |
| 🚏 | bus stop | A bus stop sign with a blue background and white bus icon, often accompanied by a shelter for waiting passengers. |
| 🛣️ | motorway | A motorway depicted as a wide road with lanes, often represented in gray with dashed lines for lanes. |
| 🛤️ | railway track | A railway track shown as two parallel lines with wooden ties, typically in brown or gray, designed for trains. |
| 🛢️ | oil drum | An oil drum, typically depicted as a cylindrical container in black with a lid, designed for storing oil. |
| ⛽ | fuel pump | A fuel pump with a nozzle and digital display, often in bright colors like green or red, designed for dispensing fuel. |
| 🛞 | wheel | A wheel depicted as a circular tire with a tread pattern, typically in black, designed for vehicles. |
| 🚨 | police car light | A police car light with a rotating beacon, often in red and blue, designed to signal emergencies. |
| 🚥 | horizontal traffic light | A horizontal traffic light with red, yellow, and green lights arranged in a row, designed to control traffic flow. |
| 🚦 | vertical traffic light | A vertical traffic light with red, yellow, and green lights stacked on top of each other, designed for traffic regulation. |
| 🛑 | stop sign | A stop sign in the shape of an octagon, typically in red with white lettering, designed to alert drivers to stop. |
| 🚧 | construction | A construction barrier depicted as a striped orange and white cone, designed to indicate road work. |
| ⚓ | anchor | An anchor with a heavy, curved shape and flukes at the bottom, typically in dark gray or black, designed for securing boats. |
| 🛟 | ring buoy | A ring buoy, often in bright orange, designed for rescue at sea, featuring a rope around the edge. |
| ⛵ | sailboat | A sailboat with a triangular sail and a hull, typically depicted in white with a blue or colorful sail, designed for sailing. |
| 🛶 | canoe | A canoe with a narrow, elongated shape, typically in bright colors like red or yellow, designed for paddling. |
| 🚤 | speedboat | A sleek, white speedboat with a pointed bow and a small windshield, often depicted with waves beneath it. |
| 🛳️ | passenger ship | A large, multi-deck passenger ship with a wide hull, typically shown with smokestacks and lifeboats. |
| ⛴️ | ferry | A sturdy ferry boat with a flat deck, designed to carry vehicles and passengers across water, often shown with a ramp. |
| 🛥️ | motor boat | A compact motorboat with a streamlined shape, usually depicted with a small cabin and an outboard motor. |
| 🚢 | ship | A large ship with multiple decks, a tall structure at the back, and often depicted with waves around it. |
| ✈️ | airplane | A commercial airplane with a sleek fuselage, wings, and tail, usually shown in flight with clouds beneath. |
| 🛩️ | small airplane | A small airplane with a single propeller and short wings, typically depicted in flight against a clear sky. |
| 🛫 | airplane departure | An airplane taking off, shown with its nose tilted upwards and wheels lifted off the ground. |
| 🛬 | airplane arrival | An airplane landing, depicted with its wheels down and nose angled towards the ground. |
| 🪂 | parachute | A parachute with a round canopy, typically shown with a person suspended below it, ready to land. |
| 💺 | seat | An airplane seat, represented as a simple chair with armrests, often shown in a reclining position. |
| 🚁 | helicopter | A helicopter with a rounded body, two main rotors on top, and a tail rotor, often depicted hovering in the air. |
| 🚟 | suspension railway | A suspension railway train, shown as a sleek vehicle suspended from overhead cables, gliding above the ground. |
| 🚠 | mountain cableway | A mountain cableway gondola, depicted as a small enclosed cabin hanging from a cable, with mountains in the background. |
| 🚡 | aerial tramway | An aerial tramway car, shown as a small enclosed cabin on a cable, usually depicted against a mountainous backdrop. |
| 🛰️ | satellite | A satellite with a rectangular body and solar panels extending from its sides, typically shown in orbit around Earth. |
| 🚀 | rocket | A rocket with a pointed tip and fins at the base, depicted launching upwards with flames and smoke trailing behind. |
| 🛸 | flying saucer | A flying saucer with a domed top and a flat bottom, often shown hovering with lights around its edge. |
| 🛎️ | bellhop bell | A shiny bellhop bell, round and metallic with a raised dome, typically depicted on a small base. |
| 🧳 | luggage | A rectangular suitcase with a handle, often shown in a dark color, symbolizing travel and luggage. |
| ⌛ | hourglass done | An hourglass with a wooden frame, filled with sand that has settled at the bottom, indicating time has run out. |
| ⏳ | hourglass not done | An hourglass with sand flowing from the top to the bottom, showing that time is still passing. |
| ⌚ | watch | A wristwatch with a round face, typically displayed with numbers and hands indicating the time. |
| ⏰ | alarm clock | An alarm clock with a round face, two bells on top, and hands pointing to the current time, often depicted ringing. |
| ⏱️ | stopwatch | A stopwatch with a round face and a start/stop button on top, typically shown with hands indicating elapsed time. |
| ⏲️ | timer clock | A timer clock with a round face, often depicted with a countdown feature, showing the remaining time. |
| 🕰️ | mantelpiece clock | A mantelpiece clock with a decorative case, a round face, and ornate details, typically shown on a shelf. |
| 🕛 | twelve o’clock | A clock showing twelve o’clock, with the hour hand pointing to twelve and the minute hand also at twelve. |
| 🕧 | twelve-thirty | A clock showing twelve-thirty, with the hour hand slightly past twelve and the minute hand pointing to six. |
| 🕐 | one o’clock | A clock showing one o’clock, with the hour hand pointing to one and the minute hand at twelve. |
| 🕜 | one-thirty | A clock showing one-thirty, with the hour hand halfway between one and two and the minute hand at six. |
| 🕑 | two o’clock | A clock showing two o’clock, with the hour hand pointing to two and the minute hand at twelve. |
| 🕝 | two-thirty | A clock showing two-thirty, with the hour hand halfway between two and three and the minute hand at six. |
| 🕒 | three o’clock | A clock showing three o’clock, with the hour hand pointing to three and the minute hand at twelve. |
| 🕞 | three-thirty | A clock showing three-thirty, with the hour hand halfway between three and four and the minute hand at six. |
| 🕓 | four o’clock | A clock showing four o’clock, with the hour hand pointing to four and the minute hand at twelve. |
| 🕟 | four-thirty | A clock showing four-thirty, with the hour hand halfway between four and five and the minute hand at six. |
| 🕔 | five o’clock | A clock showing five o’clock, with the hour hand pointing to five and the minute hand at twelve. |
| 🕠 | five-thirty | A clock showing five-thirty, with the hour hand halfway between five and six and the minute hand at six. |
| 🕕 | six o’clock | A clock showing six o’clock, with the hour hand pointing to six and the minute hand at twelve. |
| 🕡 | six-thirty | A round clock face showing the time as six-thirty, with the hour hand pointing slightly past six and the minute hand pointing directly at six. |
| 🕖 | seven o’clock | A round clock face indicating seven o’clock, with the hour hand pointing directly at seven and the minute hand pointing at twelve. |
| 🕢 | seven-thirty | A clock face displaying seven-thirty, with the hour hand halfway between seven and eight and the minute hand pointing directly at six. |
| 🕗 | eight o’clock | A round clock face showing eight o’clock, with the hour hand pointing directly at eight and the minute hand at twelve. |
| 🕣 | eight-thirty | A clock face indicating eight-thirty, with the hour hand slightly past eight and the minute hand pointing directly at six. |
| 🕘 | nine o’clock | A round clock face displaying nine o’clock, with the hour hand pointing directly at nine and the minute hand at twelve. |
| 🕤 | nine-thirty | A clock face showing nine-thirty, with the hour hand halfway between nine and ten and the minute hand pointing directly at six. |
| 🕙 | ten o’clock | A round clock face indicating ten o’clock, with the hour hand pointing directly at ten and the minute hand at twelve. |
| 🕥 | ten-thirty | A clock face showing ten-thirty, with the hour hand slightly past ten and the minute hand pointing directly at six. |
| 🕚 | eleven o’clock | A round clock face indicating eleven o’clock, with the hour hand pointing directly at eleven and the minute hand at twelve. |
| 🕦 | eleven-thirty | A clock face displaying eleven-thirty, with the hour hand halfway between eleven and twelve and the minute hand pointing directly at six. |
| 🌑 | new moon | A completely dark circle representing the new moon, with no visible features. |
| 🌒 | waxing crescent moon | A crescent moon with a thin, bright edge on the right side, the rest of the moon shaded dark. |
| 🌓 | first quarter moon | A half-moon where the right half is illuminated and the left half is dark. |
| 🌔 | waxing gibbous moon | A gibbous moon that is mostly bright on the right side, with a small dark section on the left. |
| 🌕 | full moon | A full moon depicted as a bright, round white circle with no shadows. |
| 🌖 | waning gibbous moon | A gibbous moon that is mostly dark on the left side, with a bright right side. |
| 🌗 | last quarter moon | A half-moon where the left half is illuminated and the right half is dark. |
| 🌘 | waning crescent moon | A crescent moon with a thin, bright edge on the left side, the rest of the moon shaded dark. |
| 🌙 | crescent moon | A crescent moon that is bright on the right side, with a small dark section on the left. |
| 🌚 | new moon face | A dark moon face with a subtle smile and closed eyes, giving a serene expression. |
| 🌛 | first quarter moon face | A smiling moon face with a bright crescent shape, eyes closed and a gentle smile. |
| 🌜 | last quarter moon face | A moon face with a serene expression, eyes closed and a gentle smile, representing the last quarter moon. |
| 🌡️ | thermometer | A thermometer with a red liquid inside, indicating temperature, displayed vertically. |
| ☀️ | sun | A bright yellow sun with rays extending outward in all directions. |
| 🌝 | full moon face | A full moon face with a bright, smiling expression and rosy cheeks. |
| 🌞 | sun with face | A cheerful sun with a face, radiating warmth with bright yellow rays. |
| 🪐 | ringed planet | A planet with a prominent ring encircling it, suggesting a resemblance to Saturn. |
| ⭐ | star | A simple five-pointed star in white, representing a celestial body. |
| 🌟 | glowing star | A five-pointed star that glows with a sparkling effect, suggesting brightness. |
| 🌠 | shooting star | A star depicted as falling or shooting across the sky, leaving a trail behind. |
| 🌌 | milky way | A depiction of the Milky Way, showing a band of stars across a dark background. |
| ☁️ | cloud | A fluffy, white cloud with a soft, rounded shape. |
| ⛅ | sun behind cloud | A sun partially hidden behind a fluffy cloud, suggesting a mix of sun and clouds. |
| ⛈️ | cloud with lightning and rain | A dark cloud with jagged lightning bolts and raindrops falling from it. |
| 🌤️ | sun behind small cloud | A small fluffy cloud with the sun shining brightly behind it. |
| 🌥️ | sun behind large cloud | A large fluffy cloud with the sun shining dimly behind it. |
| 🌦️ | sun behind rain cloud | A sun peeking out from behind a rain cloud, suggesting a mix of sun and rain. |
| 🌧️ | cloud with rain | A cloud filled with rain, depicted with droplets falling from it. |
| 🌨️ | cloud with snow | A cloud with snowflakes falling from it, indicating snowy weather. |
| 🌩️ | cloud with lightning | A dark gray cloud with a jagged yellow lightning bolt striking down from it. |
| 🌪️ | tornado | A swirling, funnel-shaped tornado depicted in shades of gray and white, tapering to a point at the ground. |
| 🌫️ | fog | A thick, white fog that appears to obscure visibility, creating a misty atmosphere. |
| 🌬️ | wind face | A face blowing air, with a round mouth and swirling lines representing wind coming from it. |
| 🌀 | cyclone | A blue and white spiral resembling a cyclone or whirlpool, with a swirling motion indicated by the design. |
| 🌈 | rainbow | A vibrant arc of colors in the sky, displaying red, orange, yellow, green, blue, and purple in a smooth gradient. |
| 🌂 | closed umbrella | A closed umbrella with a dark handle and a rounded canopy, typically in a solid color. |
| ☂️ | umbrella | An open umbrella featuring a curved handle and a rounded canopy, often depicted in a solid color. |
| ☔ | umbrella with rain drops | An open umbrella with rain droplets falling around it, suggesting a rainy weather scenario. |
| ⛱️ | umbrella on ground | A beach umbrella with a colorful canopy, resting on the ground, often depicted in a striped pattern. |
| ⚡ | high voltage | A bright yellow lightning bolt, sharp and jagged, symbolizing high voltage or electricity. |
| ❄️ | snowflake | A delicate, six-pointed snowflake, typically illustrated in white with intricate patterns. |
| ☃️ | snowman | A cheerful snowman with a round body, a carrot nose, and coal eyes, often wearing a scarf. |
| ⛄ | snowman without snow | A snowman without snow, represented as a simple figure with a round head and body, often with a hat. |
| ☄️ | comet | A comet with a bright head and a long, glowing tail trailing behind it, suggesting movement through space. |
| 🔥 | fire | A bright orange and red flame, flickering upwards, representing fire and heat. |
| 💧 | droplet | A single blue droplet of water, shaped like a teardrop, suggesting freshness or moisture. |
| 🌊 | water wave | A stylized wave of blue water, curling and cresting, representing the ocean or surf. |
Activities (85)
| Emoji | Name | Description |
|---|---|---|
| 🎃 | jack-o-lantern | A carved pumpkin with a grinning face, glowing from within, typically associated with Halloween. |
| 🎄 | Christmas tree | A green Christmas tree adorned with colorful decorations and a star on top, symbolizing the holiday season. |
| 🎆 | fireworks | Colorful fireworks bursting in the night sky, with bright trails and explosions of light. |
| 🎇 | sparkler | A sparkling firework in the form of a handheld sparkler, emitting bright sparks in all directions. |
| 🧨 | firecracker | A small red firecracker with a fuse, often depicted with a bright explosion effect. |
| ✨ | sparkles | A cluster of small, shining stars or sparkles, radiating a magical or festive feel. |
| 🎈 | balloon | A bright, round balloon, typically in a solid color, with a string attached, suggesting celebration. |
| 🎉 | party popper | A party popper with colorful confetti bursting out, symbolizing celebration and excitement. |
| 🎊 | confetti ball | A round ball filled with colorful confetti, representing celebration and festive occasions. |
| 🎋 | tanabata tree | A tall, slender tree decorated with colorful streamers and ornaments, representing the Tanabata festival. |
| 🎍 | pine decoration | A decorative arrangement of pine and bamboo, often used for New Year celebrations in Japan. |
| 🎎 | Japanese dolls | Two traditional Japanese dolls, dressed in colorful kimonos, representing a festival celebration. |
| 🎏 | carp streamer | A colorful carp streamer, typically depicted flying in the wind, symbolizing celebration. |
| 🎐 | wind chime | A wind chime with hanging bells, producing soothing sounds when blown by the wind. |
| 🎑 | moon viewing ceremony | A ceremonial display for moon viewing, featuring a decorated table with offerings. |
| 🧧 | red envelope | A red envelope, often decorated with gold symbols, used for gifting money during celebrations. |
| 🎀 | ribbon | A decorative ribbon, typically in a bright color, symbolizing celebration or gift wrapping. |
| 🎁 | wrapped gift | A wrapped gift box with a bow on top, often depicted in bright colors for festive occasions. |
| 🎗️ | reminder ribbon | A simple ribbon, often in a solid color, used as a symbol of remembrance or awareness. |
| 🎟️ | admission tickets | A ticket with a perforated edge, often used for admission to events or attractions. |
| 🎫 | ticket | A rectangular ticket, typically with printed details, used for entry or admission purposes. |
| 🎖️ | military medal | A military medal, often depicted with a ribbon, symbolizing honor and achievement. |
| 🏆 | trophy | A shiny gold trophy with a wide base and two handles, symbolizing victory and achievement. |
| 🏅 | sports medal | A round sports medal with a gold color, featuring a ribbon at the top, awarded to winners in competitions. |
| 🥇 | 1st place medal | A gold medal shaped like a circle, with a ribbon attached, signifying first place in a competition. |
| 🥈 | 2nd place medal | A silver medal shaped like a circle, with a ribbon attached, representing second place in a competition. |
| 🥉 | 3rd place medal | A bronze medal shaped like a circle, with a ribbon attached, denoting third place in a competition. |
| ⚽ | soccer ball | A classic black and white patterned soccer ball, round and designed for kicking in the sport of soccer. |
| ⚾ | baseball | A white baseball with red stitching, round and used in the sport of baseball. |
| 🥎 | softball | A yellow softball with red stitching, larger than a baseball, used in the sport of softball. |
| 🏀 | basketball | An orange basketball with black lines, round and designed for bouncing and shooting in the sport of basketball. |
| 🏐 | volleyball | A white volleyball with a distinctive pattern, round and used in the sport of volleyball. |
| 🏈 | american football | An elongated brown American football with white laces, designed for throwing and catching in American football. |
| 🏉 | rugby football | A brown rugby ball with pointed ends, used in the sport of rugby, designed for passing and kicking. |
| 🎾 | tennis | A bright green tennis ball, round and fuzzy, used in the sport of tennis. |
| 🥏 | flying disc | A flat, circular flying disc, often colored brightly, used in games like ultimate frisbee. |
| 🎳 | bowling | A white bowling ball with three finger holes, used in the sport of bowling, typically heavy and round. |
| 🏏 | cricket game | A cricket bat and ball, with a wooden bat and a small white ball, used in the game of cricket. |
| 🏑 | field hockey | A field hockey stick with a curved end and a small ball, used in the sport of field hockey. |
| 🏒 | ice hockey | A hockey stick with a flat blade and a puck, used in ice hockey on an ice rink. |
| 🥍 | lacrosse | A lacrosse stick with a netted head and a small ball, used in the sport of lacrosse. |
| 🏓 | ping pong | A ping pong paddle with a round, white ball, used in the sport of table tennis. |
| 🏸 | badminton | A badminton racquet with a shuttlecock, used in the sport of badminton. |
| 🥊 | boxing glove | A padded boxing glove, typically red or blue, used in the sport of boxing. |
| 🥋 | martial arts uniform | A white martial arts uniform, often worn in disciplines like karate or judo. |
| 🥅 | goal net | A goal net, typically rectangular and used in various sports to catch balls. |
| ⛳ | flag in hole | A small flag placed in a hole on a golf course, indicating the location of the hole. |
| ⛸️ | ice skate | A single ice skate, featuring a blade and a boot, used for skating on ice. |
| 🎣 | fishing pole | A fishing pole with a reel and line, often used in recreational fishing. |
| 🤿 | diving mask | A diving mask with snorkel, designed for underwater exploration and scuba diving. |
| 🎽 | running shirt | A sleeveless running shirt, often brightly colored, worn during athletic events. |
| 🎿 | skis | A pair of long skis, typically used for gliding down snow-covered slopes. |
| 🛷 | sled | A sled, often with runners and designed for sliding down snowy hills. |
| 🥌 | curling stone | A curling stone, round and heavy, used in the sport of curling on ice. |
| 🎯 | bullseye | A circular dartboard with a bullseye in the center, used for target games. |
| 🪀 | yo-yo | A classic yo-yo, typically round and two-toned, used as a toy for tricks. |
| 🪁 | kite | A colorful kite with a tail, designed to soar in the wind. |
| 🔫 | water pistol | A small water pistol, resembling a handgun, used for playful water fights. |
| 🎱 | pool 8 ball | An eight ball, black with the number 8 on it, used in billiards and pool games. |
| 🔮 | crystal ball | A crystal ball, transparent and round, often associated with fortune-telling. |
| 🪄 | magic wand | A magic wand, typically slender and sparkly, used by magicians and wizards. |
| 🎮 | video game | A video game controller, featuring buttons and joysticks for interactive gaming. |
| 🕹️ | joystick | A gray joystick with a black top and a red button, typically used for gaming. |
| 🎰 | slot machine | A colorful slot machine with three spinning reels, featuring symbols like fruits and bars, and a lever on the side. |
| 🎲 | game die | A white die with black dots, showing the number six on the visible face. |
| 🧩 | puzzle piece | A single puzzle piece in bright colors, shaped with interlocking edges. |
| 🧸 | teddy bear | A soft, brown teddy bear with a stitched nose and round ears, often used as a toy. |
| 🪅 | piñata | A colorful piñata shaped like a donkey, decorated with bright paper and filled with candy. |
| 🪩 | mirror ball | A shiny, disco ball covered in small mirrors, reflecting light in various directions. |
| 🪆 | nesting dolls | A set of traditional Russian nesting dolls, each one painted with floral designs and vibrant colors. |
| ♠️ | spade suit | A black spade symbol, shaped like a heart with a stem at the bottom. |
| ♥️ | heart suit | A red heart symbol, representing love and affection. |
| ♦️ | diamond suit | A red diamond shape, pointed at the top and bottom, often used in playing cards. |
| ♣️ | club suit | A black club symbol, resembling a three-leaf clover with a stem. |
| ♟️ | chess pawn | A solid black chess pawn, a simple figure with a rounded top and a circular base. |
| 🃏 | joker | A colorful joker card featuring a jester with a playful expression and a hat with bells. |
| 🀄 | mahjong red dragon | A white mahjong tile with a red dragon symbol, often used in the game of mahjong. |
| 🎴 | flower playing cards | A playing card with a floral design, typically associated with Japanese card games. |
| 🎭 | performing arts | A theatrical mask, half white and half black, symbolizing the performing arts. |
| 🖼️ | framed picture | A rectangular picture frame, typically gold or ornate, enclosing a blank space for a photo or artwork. |
| 🎨 | artist palette | An artist’s palette with several blobs of colorful paint and a paintbrush resting on it. |
| 🧵 | thread | A spool of thread, often in a vibrant color, with a needle threaded through it. |
| 🪡 | sewing needle | A sewing needle, slender and sharp, with a small hole at one end for threading. |
| 🧶 | yarn | A ball of yarn, usually in a bright color, used for knitting or crocheting. |
| 🪢 | knot | A simple knot made from a piece of rope or cord, with loops and twists. |
Objects (264)
| Emoji | Name | Description |
|---|---|---|
| 👓 | glasses | A pair of eyeglasses with a thin frame, designed to fit over the eyes. |
| 🕶️ | sunglasses | A pair of dark sunglasses with a wide frame, designed to protect the eyes from sunlight. |
| 🥽 | goggles | A pair of protective goggles, typically with a clear lens and a strap for securing around the head. |
| 🥼 | lab coat | A white lab coat, typically worn by doctors or scientists, featuring a collar and pockets. |
| 🦺 | safety vest | A bright yellow safety vest, often worn for visibility and protection in hazardous environments. |
| 👔 | necktie | A formal necktie, typically in a solid color or pattern, designed to be worn with a dress shirt. |
| 👕 | t-shirt | A casual blue t-shirt with short sleeves and a round neckline. |
| 👖 | jeans | A pair of blue denim jeans, featuring pockets and a straight-leg cut. |
| 🧣 | scarf | A long, knitted scarf, often wrapped around the neck for warmth. |
| 🧤 | gloves | A pair of gloves, typically made of fabric or leather, designed to cover and protect the hands. |
| 🧥 | coat | A warm coat, often with a collar and buttons, designed to keep the wearer warm in cold weather. |
| 🧦 | socks | A pair of socks, typically made of fabric, designed to cover the feet. |
| 👗 | dress | A stylish dress, often colorful or patterned, designed to be worn by women. |
| 👘 | kimono | A traditional kimono, often made of silk, featuring intricate patterns and a wide belt. |
| 🥻 | sari | A sari, a long piece of fabric draped elegantly around the body, often colorful and patterned. |
| 🩱 | one-piece swimsuit | A one-piece swimsuit, typically fitted and designed for swimming or beachwear. |
| 🩲 | briefs | A pair of briefs, often made of soft fabric, designed as swimwear or underwear. |
| 🩳 | shorts | A pair of knee-length shorts in a light blue color, typically worn for casual or beach activities. |
| 👙 | bikini | A two-piece bikini swimsuit, often featuring bright colors and patterns, designed for beach or pool wear. |
| 👚 | woman’s clothes | A short-sleeved blouse, usually in a soft color, featuring a collar and a feminine design. |
| 🪭 | folding hand fan | A folding hand fan made of thin slats, often decorated with vibrant colors, used for cooling oneself. |
| 👛 | purse | A small, elegant purse, typically in a bright color, often with a clasp or zipper, used for carrying personal items. |
| 👜 | handbag | A stylish handbag, usually larger than a purse, featuring handles and often made of leather or fabric. |
| 👝 | clutch bag | A small clutch bag, typically rectangular, often used for formal occasions, and usually made of shiny material. |
| 🛍️ | shopping bags | Two shopping bags, often depicted in a neutral color, with handles, used for carrying purchased items. |
| 🎒 | backpack | A sturdy backpack, often colorful, with two shoulder straps, used for carrying books or supplies. |
| 🩴 | thong sandal | A simple thong sandal, usually in a bright color, featuring a flat sole and a Y-shaped strap between the toes. |
| 👞 | man’s shoe | A classic brown dress shoe with a rounded toe and laces, designed for formal or business wear. |
| 👟 | running shoe | A sporty running shoe, typically in bright colors, featuring a cushioned sole and a breathable upper. |
| 🥾 | hiking boot | A rugged hiking boot, usually brown, designed for outdoor activities, featuring a high ankle for support. |
| 🥿 | flat shoe | A flat shoe, resembling ballet flats, often in a soft color, designed for comfort and ease of wear. |
| 👠 | high-heeled shoe | A stylish high-heeled shoe, often in black or red, featuring a pointed toe and a slender heel. |
| 👡 | woman’s sandal | A woman’s sandal, typically featuring a strap over the toes and an open back, often in bright colors. |
| 🩰 | ballet shoes | A pair of ballet shoes, usually pink or light-colored, designed for dance with a soft sole. |
| 👢 | woman’s boot | A stylish woman’s boot, often knee-high, featuring a sleek design and typically made of leather. |
| 🪮 | hair pick | A hair pick, often with a wide-toothed design, used for grooming textured hair, usually in a bright color. |
| 👑 | crown | A decorative crown, often gold or jeweled, symbolizing royalty, with points and embellishments. |
| 👒 | woman’s hat | A wide-brimmed woman’s hat, often in a light color, typically adorned with a ribbon or floral decoration. |
| 🎩 | top hat | A tall, black top hat, often associated with formal wear or magic acts, featuring a flat top and a wide brim. |
| 🎓 | graduation cap | A black graduation cap with a flat square top and a tassel, symbolizing academic achievement. |
| 🧢 | billed cap | A casual baseball cap, often in a solid color with a curved brim, typically worn for sun protection. |
| 🪖 | military helmet | A military helmet, usually olive green, designed for protection in combat situations. |
| ⛑️ | rescue worker’s helmet | A bright red rescue worker’s helmet, often featuring a cross symbol, used for safety in emergencies. |
| 📿 | prayer beads | A string of prayer beads, often colorful, used for meditation or religious practices. |
| 💄 | lipstick | A tube of lipstick, typically in a bright red color, used for applying color to the lips. |
| 💍 | ring | A gold ring, often featuring a large gemstone, symbolizing engagement or marriage. |
| 💎 | gem stone | A sparkling diamond, typically clear and multifaceted, representing luxury or preciousness. |
| 🔇 | muted speaker | A muted speaker icon, represented as a speaker with a slash through it, indicating silence. |
| 🔈 | speaker low volume | A speaker icon with sound waves, depicted in a low volume setting, indicating soft sound. |
| 🔉 | speaker medium volume | A speaker icon with sound waves, depicted in a medium volume setting, indicating moderate sound. |
| 🔊 | speaker high volume | A speaker icon with sound waves, depicted in a high volume setting, indicating loud sound. |
| 📢 | loudspeaker | A loudspeaker, often depicted in a cone shape, used for amplifying sound in public settings. |
| 📣 | megaphone | A megaphone, typically in a cone shape, used for amplifying a person’s voice, often seen at events. |
| 📯 | postal horn | A postal horn, curved and often gold or brass in color, used for signaling or announcing. |
| 🔔 | bell | A traditional bell, often gold or silver, with a rounded shape and a clapper inside for ringing. |
| 🔕 | bell with slash | A bell icon with a slash through it, indicating that the bell is muted or not to be rung. |
| 🎼 | musical score | A musical score, depicted as sheets of music with notes, representing written music. |
| 🎵 | musical note | A single black musical note symbol with a curved stem and a rounded head, often depicted on a white background. |
| 🎶 | musical notes | Two black musical notes, one with a curved stem and the other with a straight stem, positioned closely together, representing harmony and melody. |
| 🎙️ | studio microphone | A silver studio microphone with a round top and a textured grille, mounted on a black stand, used for recording audio. |
| 🎚️ | level slider | A rectangular audio level slider with a vertical track and a movable knob, often depicted in gray, used for adjusting sound levels. |
| 🎛️ | control knobs | A panel with multiple circular control knobs, typically in various colors, used for adjusting sound effects or levels in music production. |
| 🎤 | microphone | A classic black microphone with a rounded top, often associated with singing or public speaking, held by a hand or on a stand. |
| 🎧 | headphone | A pair of over-ear headphones, typically black or gray, with a padded headband and large ear cups, designed for listening to music. |
| 📻 | radio | A vintage-style radio with a rectangular shape, featuring a speaker grill, knobs for tuning, and often depicted in brown or silver. |
| 🎷 | saxophone | A shiny gold saxophone with a curved body and multiple keys, representing jazz music and often associated with smooth melodies. |
| 🪗 | accordion | A rectangular accordion with bellows and keys, often depicted in bright colors, used for playing folk and traditional music. |
| 🎸 | guitar | An electric guitar with a sleek body, typically in colors like red or black, featuring strings and a neck for playing music. |
| 🎹 | musical keyboard | A black and white keyboard with piano keys, often depicted in a rectangular shape, used for playing various musical notes. |
| 🎺 | trumpet | A shiny brass trumpet with a flared bell and three valves, often associated with jazz and classical music performances. |
| 🎻 | violin | A wooden violin with a curved body and four strings, typically depicted in brown, often associated with orchestral music. |
| 🪕 | banjo | A banjo with a round body, a long neck, and strings, often depicted in brown or yellow, used in folk and bluegrass music. |
| 🥁 | drum | A classic drum, typically depicted in red or brown, with a circular shape and two drumsticks resting on top. |
| 🪘 | long drum | A tall, cylindrical drum with a wide body, often depicted in brown, used for playing rhythmic beats. |
| 🪇 | maracas | A pair of maracas, typically depicted in bright colors, with a rounded shape and handles, used for creating rhythmic sounds. |
| 🪈 | flute | A long, slender flute, often depicted in silver or gold, with finger holes along its body, used for playing melodic tunes. |
| | harp | A harp with a triangular frame, strings, and a curved top, often depicted in gold or wood tones, associated with classical music. |
| 📱 | mobile phone | A sleek mobile phone with a rectangular shape and a touchscreen, typically depicted in black or silver. |
| 📲 | mobile phone with arrow | A mobile phone with an arrow pointing to it, indicating an action such as downloading or sending, typically in black or silver. |
| ☎️ | telephone | A traditional telephone with a rotary dial and a handset, often depicted in black or gray. |
| 📞 | telephone receiver | A telephone receiver, typically depicted in black, with a curved shape designed for holding to the ear. |
| 📟 | pager | A small pager with a rectangular shape and a screen, often depicted in gray or black, used for receiving messages. |
| 📠 | fax machine | A fax machine with a flat top and a paper tray, typically depicted in gray, used for sending and receiving documents. |
| 🔋 | battery | A green battery icon with a positive and negative terminal, representing power storage. |
| 🪫 | low battery | A battery icon with a red warning symbol indicating low power, typically depicted in green with a red outline. |
| 🔌 | electric plug | An electric plug with two prongs, typically depicted in black or gray, used for connecting devices to a power source. |
| 💻 | laptop | A laptop computer with a rectangular screen and keyboard, often depicted in silver or black. |
| 🖥️ | desktop computer | A desktop computer with a monitor and a separate keyboard, typically depicted in gray or black. |
| 🖨️ | printer | A printer with a flat top and paper tray, often depicted in gray, used for printing documents. |
| ⌨️ | keyboard | A computer keyboard with a rectangular shape and multiple keys, typically depicted in black or gray. |
| 🖱️ | computer mouse | A computer mouse with a rounded shape and two buttons, typically depicted in black or gray. |
| 🖲️ | trackball | A trackball with a spherical top that can be rotated, typically depicted in gray, used for navigating a computer screen. |
| 💽 | computer disk | A small, round computer disk, often depicted in blue, used for data storage. |
| 💾 | floppy disk | A floppy disk with a square shape and a metal shutter, typically depicted in gray, used for storing data. |
| 💿 | optical disk | An optical disk, typically depicted in silver or blue, used for storing digital data like music or videos. |
| 📀 | dvd | A DVD with a shiny surface, typically depicted in silver, used for storing movies or other digital content. |
| 🧮 | abacus | An abacus with a wooden frame and colorful beads on rods, used for performing calculations. |
| 🎥 | movie camera | A black movie camera with a large lens and a small viewfinder, resembling a classic film camera. |
| 🎞️ | film frames | A strip of film frames, showing a series of small rectangular images, typically in black and white. |
| 📽️ | film projector | A vintage film projector with a large lens and reels on either side, often depicted in gray or black. |
| 🎬 | clapper board | A clapperboard, typically black and white, with a hinged top that is used to mark the start of a scene in filming. |
| 📺 | television | A retro television set with a rectangular screen, typically black with knobs and antennas on top. |
| 📷 | camera | A classic camera with a large lens and a flash, usually depicted in black or gray. |
| 📸 | camera with flash | A camera with a flash, showing a lens and a bright flash symbol, often in black and silver. |
| 📹 | video camera | A handheld video camera with a lens and a small viewfinder, typically in gray or black. |
| 📼 | videocassette | An old-fashioned videocassette tape, usually depicted in black with a label on the front. |
| 🔍 | magnifying glass tilted left | A magnifying glass with a circular lens and a long handle, tilted to the left, typically in silver or black. |
| 🔎 | magnifying glass tilted right | A magnifying glass with a circular lens and a long handle, tilted to the right, typically in silver or black. |
| 🕯️ | candle | A simple candle with a tall, thin body and a flame flickering at the top, usually in yellow or white. |
| 💡 | light bulb | A light bulb, typically depicted in a bright yellow or white, with a classic bulb shape. |
| 🔦 | flashlight | A flashlight with a cylindrical body and a round lens at the front, often in black or silver. |
| 🏮 | red paper lantern | A red paper lantern, round in shape, with a handle at the top, often used for decoration. |
| 🪔 | diya lamp | A diya lamp, a small oil lamp with a wide base and a flame at the top, often depicted in brown or gold. |
| 📔 | notebook with decorative cover | A notebook with a decorative cover, typically in a bright color with intricate designs. |
| 📕 | closed book | A closed book, usually depicted in red with a simple cover design. |
| 📖 | open book | An open book with visible pages, typically in a light color, suggesting knowledge or storytelling. |
| 📗 | green book | A green book, closed with a smooth cover, often representing education or reading. |
| 📘 | blue book | A blue book with a smooth cover, typically closed and representing education or literature. |
| 📙 | orange book | An orange book, closed with a bright cover, often used to symbolize reading or knowledge. |
| 📚 | books | A stack of books in various colors, symbolizing knowledge and education. |
| 📓 | notebook | A simple notebook, typically with a plain cover and lined pages. |
| 📒 | ledger | A ledger, resembling a notebook but often depicted with a more formal cover. |
| 📃 | page with curl | A page of paper with a slight curl at the top, suggesting a document or report. |
| 📜 | scroll | A scroll, rolled up at both ends, often depicted with ancient writing or designs. |
| 📄 | page facing up | A single sheet of paper facing upwards, typically plain and white. |
| 📰 | newspaper | A folded newspaper, usually depicted with text and images on the front, representing news. |
| 🗞️ | rolled-up newspaper | A rolled-up newspaper, tightly rolled and often depicted with a visible headline. |
| 📑 | bookmark tabs | Bookmark tabs, typically shown as several small colored tabs sticking out from the side of a book. |
| 🔖 | bookmark | A bookmark, usually depicted as a ribbon or tag that marks a place in a book. |
| 🏷️ | label | A simple label, often depicted as a rectangular tag with a string attached. |
| 💰 | money bag | A green money bag, typically overflowing with coins or cash, symbolizing wealth. |
| 🪙 | coin | A gold coin, round and shiny, often representing currency or money. |
| 💴 | yen banknote | A yen banknote, typically green with intricate designs and symbols representing currency. |
| 💵 | dollar banknote | A dollar banknote, usually green with a portrait and other designs symbolizing currency. |
| 💶 | euro banknote | A euro banknote, typically depicted in a light color with various designs and symbols. |
| 💷 | pound banknote | A pound banknote, usually in a purple or blue color with intricate designs representing currency. |
| 💸 | money with wings | A banknote with wings, symbolizing money flying away, often depicted in green. |
| 💳 | credit card | A rectangular credit card with a blue and white design, featuring a chip on the left side. |
| 🧾 | receipt | A white receipt with printed text and a slight curl at the top, resembling a rolled-up paper. |
| 💹 | chart increasing with yen | A graph chart with a rising green line, overlaid on a background featuring the yen symbol in yellow. |
| ✉️ | envelope | A simple white envelope with a pointed flap, representing traditional mail. |
| 📧 | An envelope with a blue outline and a white letter symbol inside, indicating electronic mail. | |
| 📨 | incoming envelope | An envelope with a downward arrow, suggesting an incoming message, depicted in a light blue color. |
| 📩 | envelope with arrow | A white envelope with a green arrow pointing downwards, indicating a message being sent. |
| 📤 | outbox tray | A tray with an open top, containing letters or documents, symbolizing outgoing mail. |
| 📥 | inbox tray | A tray with an open top, filled with letters or documents, representing incoming mail. |
| 📦 | package | A brown cardboard box with flaps, suggesting a package ready for delivery. |
| 📫 | closed mailbox with raised flag | A closed mailbox with a red flag raised, indicating that there is mail to be sent. |
| 📪 | closed mailbox with lowered flag | A closed mailbox with a red flag lowered, indicating no outgoing mail. |
| 📬 | open mailbox with raised flag | An open mailbox with a red flag raised, suggesting that there is mail inside. |
| 📭 | open mailbox with lowered flag | An open mailbox with a red flag lowered, indicating it is empty. |
| 📮 | postbox | A red postbox with a rounded top, typically used for mailing letters. |
| 🗳️ | ballot box with ballot | A ballot box with a slot on top and a ballot paper inserted, symbolizing voting. |
| ✏️ | pencil | A yellow pencil with a sharpened tip and an eraser at the end, used for writing. |
| ✒️ | black nib | A black fountain pen with a nib, designed for elegant writing. |
| 🖋️ | fountain pen | A fountain pen with a sleek design, featuring a shiny body and a pointed nib. |
| 🖊️ | pen | A blue ink pen with a smooth barrel and a pointed tip, used for writing. |
| 🖌️ | paintbrush | A paintbrush with a wooden handle and bristles, used for painting. |
| 🖍️ | crayon | A crayon with a pointed tip, typically in bright colors, used for coloring. |
| 📝 | memo | A notepad with a pencil resting on it, suggesting notes or memos being taken. |
| 💼 | briefcase | A black briefcase with a handle, typically used for carrying documents or a laptop. |
| 📁 | file folder | A yellow file folder, slightly open, used for organizing documents. |
| 📂 | open file folder | An open file folder, revealing documents inside, typically in a light color. |
| 🗂️ | card index dividers | A set of card index dividers, arranged vertically, used for organizing files. |
| 📅 | calendar | A wall calendar with a grid layout, displaying dates, typically in white and blue. |
| 📆 | tear-off calendar | A tear-off calendar with pages hanging down, showing the current date. |
| 🗒️ | spiral notepad | A spiral notepad with pages bound at the top, suggesting notes or lists. |
| 🗓️ | spiral calendar | A spiral calendar with a grid layout, typically showing dates and months. |
| 📇 | card index | A card index with a set of cards, used for organizing contacts or information. |
| 📈 | chart increasing | A graph chart with a rising line in green, indicating growth or increase. |
| 📉 | chart decreasing | A graph chart with a declining line in red, indicating a decrease. |
| 📊 | bar chart | A bar chart with vertical bars in different colors, representing data visually. |
| 📋 | clipboard | A clipboard with a sheet of paper attached, used for holding notes or lists. |
| 📌 | pushpin | A red pushpin with a sharp point, used for attaching papers to a board. |
| 📍 | round pushpin | A round pushpin in red, typically used for marking locations on a map. |
| 📎 | paperclip | A silver paperclip, shaped like an elongated oval, used for holding papers together. |
| 🖇️ | linked paperclips | Two linked paperclips, interlocked in a chain-like fashion, used for organizing papers. |
| 📏 | straight ruler | A straight ruler, typically rectangular and flat, often gray or metallic, with measurement markings along one edge. |
| 📐 | triangular ruler | A triangular ruler shaped like a right triangle, usually in a bright color like blue or yellow, with measurement markings along its edges. |
| ✂️ | scissors | A pair of scissors with shiny metal blades and red or black handles, positioned open as if ready to cut. |
| 🗃️ | card file box | A card file box, resembling a small, rectangular container with a lid, often depicted in a light brown or beige color. |
| 🗄️ | file cabinet | A file cabinet, typically a tall, gray or metallic structure with multiple drawers for storing documents. |
| 🗑️ | wastebasket | A wastebasket, usually cylindrical and depicted in a dark color like black or gray, with an open top. |
| 🔒 | locked | A padlock, shown in a metallic color, with a curved shackle at the top and a solid body, indicating it is locked. |
| 🔓 | unlocked | An unlocked padlock, similar in shape to the locked version but with the shackle raised, indicating it’s open. |
| 🔏 | locked with pen | A padlock with a pen, showing a metallic lock body with a pen nib inserted into the top, symbolizing privacy. |
| 🔐 | locked with key | A padlock with a keyhole, depicted in a metallic color with a key inserted, indicating it is securely locked. |
| 🔑 | key | A key, typically gold or silver, with a distinctive shape featuring a long shaft and a head with grooves. |
| 🗝️ | old key | An old-fashioned key, often depicted in a darker metallic color with an ornate design and a distinctive bow. |
| 🔨 | hammer | A hammer with a wooden or metallic handle and a flat striking face, often shown in a brown or gray color. |
| 🪓 | axe | An axe with a wooden handle and a shiny metal blade, angled as if ready to chop wood. |
| ⛏️ | pick | A pickaxe, featuring a long handle and a pointed metal head, often depicted in dark colors. |
| ⚒️ | hammer and pick | Crossed tools consisting of a hammer and a pickaxe, both shown in metallic colors, symbolizing labor. |
| 🛠️ | hammer and wrench | A combination of a hammer and a wrench, depicted together, with metallic colors representing tools. |
| 🗡️ | dagger | A dagger with a slender, pointed blade and a decorative hilt, often shown in silver or gray. |
| ⚔️ | crossed swords | Crossed swords, each with a long blade and a hilt, depicted in metallic colors, symbolizing combat. |
| 💣 | bomb | A bomb, typically round and black with a lit fuse on top, suggesting an impending explosion. |
| 🪃 | boomerang | A boomerang, shaped like a curved, angular piece of wood, often depicted in earthy colors. |
| 🏹 | bow and arrow | A bow with a taut string and an arrow nocked, shown in natural wood colors, symbolizing archery. |
| 🛡️ | shield | A shield, typically round or oval, shown in metallic colors, often with a decorative emblem. |
| 🪚 | carpentry saw | A carpentry saw with a serrated blade and a handle, depicted in metallic and wooden colors. |
| 🔧 | wrench | A wrench, shown in a metallic color with an adjustable jaw, symbolizing tools for tightening or loosening. |
| 🪛 | screwdriver | A screwdriver with a flat or Phillips head, depicted in metallic colors with a distinctive handle. |
| 🔩 | nut and bolt | A nut and bolt, shown together, with the bolt having a threaded shaft and the nut being a hexagonal shape. |
| ⚙️ | gear | A gear, typically circular with teeth around the edge, depicted in metallic colors, symbolizing machinery. |
| 🗜️ | clamp | A clamp, shown as a metallic tool with a screw mechanism, used to hold objects tightly together. |
| ⚖️ | balance scale | A balance scale, depicted with two pans suspended from a horizontal beam, symbolizing fairness and justice. |
| 🦯 | white cane | A white cane, slender and straight, often depicted with a red tip, symbolizing accessibility for the visually impaired. |
| 🔗 | link | A link, shown as a chain link in metallic colors, representing connection or attachment. |
| ⛓️💥 | broken chain | A broken chain, depicted with links that are separated, suggesting a disruption or failure. |
| ⛓️ | chains | Chains, shown as interconnected links, typically in metallic colors, symbolizing bondage or connection. |
| 🪝 | hook | A hook, depicted as a curved piece of metal with a pointed end, often used for catching or holding. |
| 🧰 | toolbox | A toolbox, typically rectangular and red, with a handle on top, containing various tools. |
| 🧲 | magnet | A magnet, often shaped like a horseshoe, depicted in red and silver, symbolizing attraction. |
| 🪜 | ladder | A ladder, depicted with several rungs and two side rails, usually in a wooden or metallic color. |
| | shovel | A shovel, shown with a broad, flat blade and a long handle, often depicted in earthy colors. |
| ⚗️ | alembic | An alembic, a laboratory glass apparatus with a round bottom and a long neck, used for distillation. |
| 🧪 | test tube | A glass test tube filled with a colored liquid, typically cylindrical with a rounded bottom and a narrow neck. |
| 🧫 | petri dish | A shallow, round petri dish with a transparent lid, often used for culturing bacteria or cells. |
| 🧬 | dna | A double helix structure representing DNA, consisting of two intertwined strands with a series of colored base pairs. |
| 🔬 | microscope | A microscope with a round base and an adjustable lens, often depicted in silver or gray, used for magnifying small objects. |
| 🔭 | telescope | A telescope with a long tube and a tripod stand, often shown in dark colors, used for observing distant objects in space. |
| 📡 | satellite antenna | A satellite antenna with a large, circular dish mounted on a pole, often depicted in gray or metallic colors. |
| 💉 | syringe | A syringe with a clear barrel and a sharp needle, typically shown filled with a liquid, often used for injections. |
| 🩸 | drop of blood | A single drop of red blood, round and glossy, representing a small amount of blood. |
| 💊 | pill | A capsule-shaped pill, typically shown in two colors, representing medication. |
| 🩹 | adhesive bandage | An adhesive bandage, typically tan or beige, with a central pad and rounded edges for covering wounds. |
| 🩼 | crutch | A crutch, usually depicted in wood or metal, with a curved top and a straight shaft for support. |
| 🩺 | stethoscope | A stethoscope with two earpieces connected to a flexible tube leading to a round chest piece, often shown in black or dark blue. |
| 🩻 | x-ray | An x-ray image showing a skeletal structure, typically in shades of gray, representing bones. |
| 🚪 | door | A rectangular door, often shown in brown or white, with a simple handle, leading to another space. |
| 🛗 | elevator | An elevator, depicted as a small box with doors, usually shown in metallic colors, moving vertically. |
| 🪞 | mirror | A rectangular mirror with a decorative frame, reflecting the surroundings. |
| 🪟 | window | A window with a rectangular frame, often depicted with transparent glass, allowing light to pass through. |
| 🛏️ | bed | A simple bed with a mattress and a headboard, typically shown in neutral colors. |
| 🛋️ | couch and lamp | A couch with soft cushions and a lamp beside it, often depicted in warm colors. |
| 🪑 | chair | A simple chair with a backrest, often shown in wood or plastic, designed for sitting. |
| 🚽 | toilet | A white toilet bowl, typically depicted with a seat and a flush handle, used in bathrooms. |
| 🪠 | plunger | A plunger with a rubber suction cup at the end of a wooden handle, used for unclogging drains. |
| 🚿 | shower | A showerhead with water droplets, typically shown in silver, used for bathing. |
| 🛁 | bathtub | A bathtub, usually depicted in white, filled with water, used for relaxing baths. |
| 🪤 | mouse trap | A mouse trap with a wooden base and a metal spring mechanism, often shown with cheese as bait. |
| 🪒 | razor | A razor with a sharp blade and a handle, typically shown in silver or gray, used for shaving. |
| 🧴 | lotion bottle | A lotion bottle with a pump or squeeze top, often shown in pastel colors, used for dispensing lotion. |
| 🧷 | safety pin | A safety pin, typically metallic, with a pointed end and a clasp, used for fastening fabric. |
| 🧹 | broom | A broom with a long handle and a bundle of bristles at the end, often depicted in brown or natural colors. |
| 🧺 | basket | A woven basket, typically round or oval, often shown with a handle, used for carrying items. |
| 🧻 | roll of paper | A roll of paper towels or toilet paper, typically white, wound around a cardboard tube. |
| 🪣 | bucket | A bucket, usually depicted in bright colors, with a handle for carrying liquids or items. |
| 🧼 | soap | A bar of soap, typically rectangular and white or colored, used for cleaning. |
| 🫧 | bubbles | A cluster of floating bubbles, often shown in translucent colors, representing soap bubbles. |
| 🪥 | toothbrush | A toothbrush with bristles at one end and a long handle, often shown in bright colors. |
| 🧽 | sponge | A sponge, typically depicted as a porous, yellow or beige object, used for cleaning. |
| 🧯 | fire extinguisher | A fire extinguisher, usually red, with a nozzle and a handle, used for putting out fires. |
| 🛒 | shopping cart | A shopping cart with a wire frame and wheels, typically shown in gray or metallic colors, used for carrying groceries. |
| 🚬 | cigarette | A cigarette, typically shown as a small white cylinder with a brown filter, representing smoking. |
| ⚰️ | coffin | A coffin, typically depicted as a rectangular box, often shown in dark colors, used for burial. |
| 🪦 | headstone | A gray headstone with a rounded top, often found in cemeteries, symbolizing a grave or memorial. |
| ⚱️ | funeral urn | A simple, elegant urn, typically in a muted color, used for holding ashes, with a narrow neck and a rounded body. |
| 🧿 | nazar amulet | A blue, eye-shaped amulet with a black center, often used as a charm to ward off evil, resembling an eye with a circular outline. |
| 🪬 | hamsa | A hand-shaped amulet, often depicted in a light color, with a prominent thumb and fingers, symbolizing protection and good fortune. |
| 🗿 | moai | A large, stone statue with a solemn face, characterized by a flat nose and deep-set eyes, resembling the famous moai of Easter Island. |
| 🪧 | placard | A rectangular placard, typically in a bright color, used for demonstrations or notices, held up by a stick. |
| 🪪 | identification card | An identification card, usually rectangular, displaying personal information and often featuring a photo, in a simple design. |
Symbols (224)
| Emoji | Name | Description |
|---|---|---|
| 🏧 | ATM sign | A blue sign with a white depiction of an ATM, indicating a location where cash can be withdrawn. |
| 🚮 | litter in bin sign | A sign showing a trash bin with a hand dropping litter into it, emphasizing the importance of disposing of waste properly. |
| 🚰 | potable water | A sign featuring a water droplet with a glass, indicating that the water is safe to drink. |
| ♿ | wheelchair symbol | A blue symbol of a wheelchair, indicating accessibility for individuals with mobility challenges. |
| 🚹 | men’s room | A sign depicting a male figure, indicating the men’s restroom, often in a simple silhouette style. |
| 🚺 | women’s room | A sign depicting a female figure, indicating the women’s restroom, often in a simple silhouette style. |
| 🚻 | restroom | A sign featuring both a male and female figure, indicating a unisex or general restroom. |
| 🚼 | baby symbol | A symbol of a baby, often shown as a simple outline, indicating a baby changing area. |
| 🚾 | water closet | A sign indicating a water closet, featuring a toilet icon, typically used to denote restroom facilities. |
| 🛂 | passport control | A symbol representing passport control, often depicted with a person and a passport, indicating border security. |
| 🛃 | customs | A customs symbol featuring a suitcase and a person, indicating a checkpoint for declaring goods. |
| 🛄 | baggage claim | A baggage claim sign, featuring a suitcase, indicating where to collect checked luggage after a flight. |
| 🛅 | left luggage | A left luggage sign, often depicting a suitcase, indicating a place to store bags temporarily. |
| ⚠️ | warning | A yellow triangle with a black exclamation mark inside, signaling caution or warning. |
| 🚸 | children crossing | A sign showing a child walking, indicating a pedestrian crossing zone for children. |
| ⛔ | no entry | A red circle with a diagonal line crossing it, indicating no entry or forbidden access. |
| 🚫 | prohibited | A red circle with a diagonal line, indicating that something is prohibited, often used for smoking or entry. |
| 🚳 | no bicycles | A red circle with a bicycle and a diagonal line, indicating that bicycles are not allowed in this area. |
| 🚭 | no smoking | A red circle with a cigarette and a diagonal line, indicating that smoking is prohibited. |
| 🚯 | no littering | A red circle with a trash bin and a diagonal line, indicating that littering is not allowed. |
| 🚱 | non-potable water | A red circle with a water droplet and a diagonal line, indicating that the water is non-potable or unsafe to drink. |
| 🚷 | no pedestrians | A red circle with a pedestrian and a diagonal line, indicating that pedestrians are not allowed in this area. |
| 📵 | no mobile phones | A red circle with a mobile phone and a diagonal line, indicating that mobile phones are prohibited. |
| 🔞 | no one under eighteen | A red circle with the number 18 inside, indicating that access is restricted to those 18 years and older. |
| ☢️ | radioactive | A symbol depicting three black triangular shapes radiating from a central circle, indicating radioactive materials. |
| ☣️ | biohazard | A symbol featuring three interlocking circles with a central biohazard symbol, indicating biohazardous materials. |
| ⬆️ | up arrow | An upward-pointing arrow, typically in a solid color, indicating direction. |
| ↗️ | up-right arrow | An arrow pointing diagonally up and to the right, indicating direction. |
| ➡️ | right arrow | A right-pointing arrow, typically in a solid color, indicating direction. |
| ↘️ | down-right arrow | An arrow pointing diagonally down and to the right, indicating direction. |
| ⬇️ | down arrow | A downward-pointing arrow, typically in a solid color, indicating direction. |
| ↙️ | down-left arrow | An arrow pointing diagonally down and to the left, indicating direction. |
| ⬅️ | left arrow | A left-pointing arrow, typically in a solid color, indicating direction. |
| ↖️ | up-left arrow | An arrow pointing diagonally up and to the left, with a simple triangular shape. |
| ↕️ | up-down arrow | An arrow with a vertical line and two triangular heads, one pointing up and the other down. |
| ↔︎️ | left-right arrow | A horizontal arrow with a straight line and two triangular heads, one pointing left and the other right. |
| ↩︎️ | right arrow curving left | An arrow that curves to the left, with a straight shaft and a triangular head, indicating a return direction. |
| ↪️ | left arrow curving right | An arrow that curves to the right, featuring a straight shaft and a triangular head, suggesting a change in direction. |
| ⤴️ | right arrow curving up | An arrow curving upwards to the right, with a straight shaft and a pointed tip, indicating an upward turn. |
| ⤵️ | right arrow curving down | An arrow curving downwards to the right, featuring a straight shaft and a pointed tip, suggesting a downward turn. |
| 🔃 | clockwise vertical arrows | Two vertical arrows forming a circle, indicating a clockwise rotation or refresh action. |
| 🔄 | counterclockwise arrows button | Two arrows forming a circular shape in a counterclockwise direction, symbolizing a repeat or reload action. |
| 🔙 | BACK arrow | A left-pointing arrow with a simple triangular head, indicating a backward direction. |
| 🔚 | END arrow | A right-pointing arrow with a triangular head, suggesting an endpoint or conclusion. |
| 🔛 | ON! arrow | An arrow pointing to the right with an exclamation mark, indicating an active or ‘on’ status. |
| 🔜 | SOON arrow | An arrow pointing to the right with the word ‘SOON,’ suggesting something is forthcoming. |
| 🔝 | TOP arrow | An upward-pointing arrow with a triangular head, indicating the top or highest point. |
| 🛐 | place of worship | A symbol representing a place of worship, depicted as a structure with a dome and a flag atop. |
| ⚛️ | atom symbol | A stylized atom symbol, featuring a central dot surrounded by three elliptical orbits. |
| 🕉️ | om | The ‘Om’ symbol, consisting of a stylized representation of the sacred sound in Hinduism. |
| ✡️ | star of David | A six-pointed star, formed by two overlapping triangles, often associated with Judaism. |
| ☸️ | wheel of dharma | A wheel with eight spokes, representing the wheel of dharma in Buddhism. |
| ☯️ | yin yang | A circular symbol divided into two swirling sections, one black and one white, representing yin and yang. |
| ✝️ | latin cross | A simple cross shape, representing the Latin cross, commonly associated with Christianity. |
| ☦️ | orthodox cross | An ornate cross with a longer vertical shaft and two shorter horizontal bars, representing the Orthodox Christian cross. |
| ☪️ | star and crescent | A crescent moon with a five-pointed star, symbolizing Islam. |
| ☮️ | peace symbol | A peace symbol, featuring a circle with three lines radiating downward, representing peace and anti-nuclear movements. |
| 🕎 | menorah | A menorah, a seven-branched candelabrum, with a central shaft and six branches, often used in Jewish traditions. |
| 🔯 | dotted six-pointed star | A six-pointed star made up of dots, often associated with Jewish symbolism. |
| 🪯 | khanda | The khanda symbol, featuring a double-edged sword in the center, flanked by two single-edged swords and a circular emblem, representing Sikhism. |
| ♈ | Aries | A symbol resembling a ram’s horns, representing the zodiac sign Aries. |
| ♉ | Taurus | A symbol depicting a bull’s head, representing the zodiac sign Taurus. |
| ♊ | Gemini | Two figures resembling twins, representing the zodiac sign Gemini. |
| ♋ | Cancer | A symbol resembling a crab, representing the zodiac sign Cancer. |
| ♌ | Leo | A lion’s head, representing the zodiac sign Leo. |
| ♍ | Virgo | A stylized letter ‘M’ or a maiden, representing the zodiac sign Virgo. |
| ♎ | Libra | A symbol resembling a balance scale, representing the zodiac sign Libra. |
| ♏ | Scorpio | A scorpion shape, representing the zodiac sign Scorpio. |
| ♐ | Sagittarius | An arrow pointing upward, representing an archer, symbolizing the zodiac sign Sagittarius. |
| ♑ | Capricorn | A goat with a fish tail, representing the zodiac sign Capricorn. |
| ♒ | Aquarius | Wavy lines representing water, symbolizing the zodiac sign Aquarius. |
| ♓ | Pisces | Two fish swimming in opposite directions, representing the zodiac sign Pisces. |
| ⛎ | Ophiuchus | A symbol depicting a serpent entwined around a staff, representing the zodiac sign Ophiuchus. |
| 🔀 | shuffle tracks button | Two arrows crossing each other, one pointing left and the other pointing right, both in a dark color, suggesting a shuffle action. |
| 🔁 | repeat button | A circular arrow pointing clockwise, indicating a repeat action, often depicted in a dark color. |
| 🔂 | repeat single button | A circular arrow pointing clockwise with a small arrow inside, representing a single repeat action, shown in a dark color. |
| ▶️ | play button | A right-pointing triangle, symbolizing the play action, typically in a dark color. |
| ⏩ | fast-forward button | Two right-pointing triangles side by side, representing fast-forward, depicted in a dark color. |
| ⏭️ | next track button | A right-pointing triangle with a vertical line next to it, indicating the next track, usually in a dark color. |
| ⏯️ | play or pause button | A combination of a right-pointing triangle and two vertical bars, representing play or pause, shown in a dark color. |
| ◀️ | reverse button | A left-pointing triangle, symbolizing reverse action, typically in a dark color. |
| ⏪ | fast reverse button | Two left-pointing triangles side by side, indicating fast reverse, depicted in a dark color. |
| ⏮️ | last track button | A left-pointing triangle with a vertical line next to it, representing the last track, usually in a dark color. |
| 🔼 | upwards button | An upward-pointing arrow, colored red, indicating an upwards action. |
| ⏫ | fast up button | Two upward-pointing arrows stacked, representing a fast up action, shown in a dark color. |
| 🔽 | downwards button | A downward-pointing arrow, colored red, indicating a downwards action. |
| ⏬ | fast down button | Two downward-pointing arrows stacked, representing a fast down action, depicted in a dark color. |
| ⏸️ | pause button | Two vertical bars, symbolizing a pause action, usually in a dark color. |
| ⏹️ | stop button | A square shape, representing a stop action, typically in a dark color. |
| ⏺️ | record button | A red circle, symbolizing a record action. |
| ⏏️ | eject button | An open rectangle with a small triangle above it, representing an eject action, usually in a dark color. |
| 🎦 | cinema | A film camera icon, featuring a camera lens and film reel, typically in dark colors. |
| 🔅 | dim button | A dim button icon, represented by a sun symbol with downward rays, indicating low brightness. |
| 🔆 | bright button | A bright button icon, represented by a sun symbol with upward rays, indicating high brightness. |
| 📶 | antenna bars | A series of vertical bars increasing in height, representing signal strength or antenna bars. |
| 🛜 | wireless | A symbol resembling a wireless signal icon, depicting connectivity with radiating lines. |
| 📳 | vibration mode | A mobile phone icon with vibration lines, indicating vibration mode. |
| 📴 | mobile phone off | A mobile phone icon with a crossed-out symbol, indicating the phone is off. |
| ♀️ | female sign | A circular symbol with a cross extending downwards, representing the female gender. |
| ♂️ | male sign | A circular symbol with an arrow pointing upwards, representing the male gender. |
| ⚧️ | transgender symbol | A combination of male and female symbols with an additional line, representing the transgender identity. |
| ✖️ | multiply | A bold, dark cross symbol, representing multiplication. |
| ➕ | plus | A bold, dark plus sign, representing addition. |
| ➖ | minus | A bold, dark minus sign, representing subtraction. |
| ➗ | divide | A bold, dark division sign, represented by a horizontal line with dots above and below. |
| 🟰 | heavy equals sign | A thick, dark equals sign, representing equality. |
| ♾️ | infinity | A symbol resembling a sideways figure eight, representing infinity. |
| ‼️ | double exclamation mark | Two exclamation marks stacked vertically, emphasizing urgency. |
| ⁉️ | exclamation question mark | An exclamation mark above a question mark, indicating a surprised question. |
| ❓ | red question mark | A red question mark, indicating inquiry or uncertainty. |
| ❔ | white question mark | A white question mark, outlined and representing inquiry. |
| ❕ | white exclamation mark | A white exclamation mark, outlined and indicating emphasis. |
| ❗ | red exclamation mark | A red exclamation mark, indicating strong emphasis or warning. |
| 〰️ | wavy dash | A wavy line that resembles a squiggly dash, often used to indicate a pause or a decorative element. |
| 💱 | currency exchange | Two arrows forming a circular shape, one pointing up and the other down, with a dollar sign in the center, representing currency exchange. |
| 💲 | heavy dollar sign | A bold dollar sign in green, symbolizing money or financial transactions. |
| ⚕️ | medical symbol | A simple staff with a snake wrapped around it, representing medicine and healthcare. |
| ♻️ | recycling symbol | A circular symbol made of three arrows forming a triangle, indicating recycling and sustainability. |
| ⚜️ | fleur-de-lis | A decorative emblem resembling a stylized lily, often associated with royalty and elegance. |
| 🔱 | trident emblem | A trident with three prongs, often depicted in a decorative style, symbolizing power and authority. |
| 📛 | name badge | A rectangular badge with rounded corners, typically displaying a name or identification, often used in conferences. |
| 🔰 | Japanese symbol for beginner | A green symbol resembling a chevron or leaf, often used to indicate a beginner or novice. |
| ⭕ | hollow red circle | A large, hollow circle in bright red, symbolizing an empty or unfilled space. |
| ✅ | check mark button | A green check mark inside a square button, indicating something is correct or completed. |
| ☑️ | check box with check | A square box with a check mark inside, symbolizing a completed task or selection. |
| ✔️ | check mark | A simple check mark, often in green, indicating approval or correctness. |
| ❌ | cross mark | A bold red cross mark, resembling an ‘X’, used to indicate cancellation or error. |
| ❎ | cross mark button | A red cross mark inside a button, similar to the previous one, indicating a negative response. |
| ➰ | curly loop | A curly loop that twists and turns, resembling a decorative swirl. |
| ➿ | double curly loop | Two intertwined curly loops, creating a double spiral effect. |
| 〽️ | part alternation mark | A symbol resembling a combination of wavy lines, often used in musical notation. |
| ✳️ | eight-spoked asterisk | An eight-spoked asterisk, resembling a starburst or decorative star. |
| ✴️ | eight-pointed star | An eight-pointed star, symmetrical and sharp, often used for decoration. |
| ❇️ | sparkle | A sparkling starburst, giving the impression of something shining or glittering. |
| ©️ | copyright | A simple letter ‘C’ enclosed in a circle, representing copyright. |
| ®️ | registered | A letter ‘R’ enclosed in a circle, indicating a registered trademark. |
| ™️ | trade mark | A letter ‘TM’ in a small font, indicating a trademark. |
| | splatter | A colorful splatter resembling a paint drip, often associated with messiness or creativity. |
| #️⃣ | keycap: # | A keycap symbol with a pound sign, resembling a button on a keypad. |
| *️⃣ | keycap: * | A keycap symbol with an asterisk, resembling a button on a keypad. |
| 0️⃣ | keycap: 0 | A keycap symbol displaying the number zero, resembling a button on a keypad. |
| 1️⃣ | keycap: 1 | A keycap symbol displaying the number one, resembling a button on a keypad. |
| 2️⃣ | keycap: 2 | A keycap symbol displaying the number two, resembling a button on a keypad. |
| 3️⃣ | keycap: 3 | A keycap symbol displaying the number three, resembling a button on a keypad. |
| 4️⃣ | keycap: 4 | A keycap symbol displaying the number four, resembling a button on a keypad. |
| 5️⃣ | keycap: 5 | A keycap symbol displaying the number five, resembling a button on a keypad. |
| 6️⃣ | keycap: 6 | A keycap symbol displaying the number six, resembling a button on a keypad. |
| 7️⃣ | keycap: 7 | A keycap symbol displaying the number seven, resembling a button on a keypad. |
| 8️⃣ | keycap: 8 | A keycap symbol displaying the number eight, resembling a button on a keypad. |
| 9️⃣ | keycap: 9 | A keycap symbol displaying the number nine, resembling a button on a keypad. |
| 🔟 | keycap: 10 | A keycap symbol displaying the number ten, resembling a button on a keypad. |
| 🔠 | input latin uppercase | An input symbol featuring uppercase Latin letters, indicating a switch to capital letters. |
| 🔡 | input latin lowercase | An input symbol featuring lowercase Latin letters, indicating a switch to small letters. |
| 🔢 | input numbers | A square icon featuring the numbers 1, 2, 3, and 4 in white on a blue background. |
| 🔣 | input symbols | A square icon displaying various symbols like &, %, and a musical note on a blue background. |
| 🔤 | input latin letters | A square icon with the letters A, B, and C in white on a blue background. |
| 🅰️ | A button (blood type) | A red square with a white letter A inside, often used to represent blood type A. |
| 🆎 | AB button (blood type) | A red square displaying the letters A and B in white, representing blood type AB. |
| 🅱️ | B button (blood type) | A red square featuring a white letter B, commonly associated with blood type B. |
| 🆑 | CL button | A blue square with the letters C and L in white, often used to denote ‘CL’. |
| 🆒 | COOL button | A blue square with the word ‘COOL’ in white, indicating something trendy or fashionable. |
| 🆓 | FREE button | A blue square featuring the word ‘FREE’ in white, suggesting no cost. |
| ℹ️ | information | A blue circle with a white lowercase ‘i’ inside, symbolizing information. |
| 🆔 | ID button | A blue square displaying the letters I and D in white, representing identification. |
| Ⓜ️ | circled M | A green circle with a white letter M inside, often used to indicate a subway station. |
| 🆕 | NEW button | A blue square with the word ‘NEW’ in white, indicating something recent or novel. |
| 🆖 | NG button | A blue square displaying the letters N and G in white, often used to indicate ‘not good’. |
| 🅾️ | O button (blood type) | A red square featuring a white letter O, commonly associated with blood type O. |
| 🆗 | OK button | A blue square with the letters O and K in white, indicating approval or agreement. |
| 🅿️ | P button | A red square with a white letter P inside, often used to denote parking. |
| 🆘 | SOS button | A blue square displaying the letters S, O, and S in white, indicating a distress signal. |
| 🆙 | UP! button | A blue square with the word ‘UP!’ in white, suggesting an upward direction or increase. |
| 🆚 | VS button | A blue square featuring the letters V and S in white, indicating a versus matchup. |
| 🈁 | Japanese “here” button | A red square with a white katakana character representing ‘here’ in Japanese. |
| 🈂️ | Japanese “service charge” button | A red square with a white symbol indicating ‘service charge’ in Japanese. |
| 🈷️ | Japanese “monthly amount” button | A red square displaying a white symbol representing ‘monthly amount’ in Japanese. |
| 🈶 | Japanese “not free of charge” button | A red square with a white symbol indicating ‘not free of charge’ in Japanese. |
| 🈯 | Japanese “reserved” button | A red square displaying a white symbol for ‘reserved’ in Japanese. |
| 🉐 | Japanese “bargain” button | A red square with a white symbol indicating ‘bargain’ in Japanese. |
| 🈹 | Japanese “discount” button | A red square displaying a white symbol indicating ‘discount’ in Japanese. |
| 🈚 | Japanese “free of charge” button | A red square with a white symbol indicating ‘free of charge’ in Japanese. |
| 🈲 | Japanese “prohibited” button | A red square displaying a white symbol indicating ‘prohibited’ in Japanese. |
| 🉑 | Japanese “acceptable” button | A red square with a white symbol indicating ‘acceptable’ in Japanese. |
| 🈸 | Japanese “application” button | A red square displaying a white symbol for ‘application’ in Japanese. |
| 🈴 | Japanese “passing grade” button | A red square with a white symbol indicating ‘passing grade’ in Japanese. |
| 🈳 | Japanese “vacancy” button | A red square displaying a white symbol indicating ‘vacancy’ in Japanese. |
| ㊗️ | Japanese “congratulations” button | A red square with a white symbol representing ‘congratulations’ in Japanese. |
| ㊙️ | Japanese “secret” button | A red square with a white symbol indicating ‘secret’ in Japanese. |
| 🈺 | Japanese “open for business” button | A red square displaying a white symbol indicating ‘open for business’ in Japanese. |
| 🈵 | Japanese “no vacancy” button | A red square with a white symbol indicating ‘no vacancy’ in Japanese. |
| 🔴 | red circle | A solid red circle, representing the color red. |
| 🟠 | orange circle | A solid orange circle, representing the color orange. |
| 🟡 | yellow circle | A solid yellow circle, representing the color yellow. |
| 🟢 | green circle | A solid green circle. |
| 🔵 | blue circle | A solid blue circle. |
| 🟣 | purple circle | A solid purple circle. |
| 🟤 | brown circle | A solid brown circle. |
| ⚫ | black circle | A solid black circle. |
| ⚪ | white circle | A solid white circle. |
| 🟥 | red square | A solid red square. |
| 🟧 | orange square | A solid orange square. |
| 🟨 | yellow square | A solid yellow square. |
| 🟩 | green square | A solid green square. |
| 🟦 | blue square | A solid blue square. |
| 🟪 | purple square | A solid purple square. |
| 🟫 | brown square | A solid brown square. |
| ⬛ | black large square | A large solid black square. |
| ⬜ | white large square | A large solid white square. |
| ◼️ | black medium square | A medium solid black square. |
| ◻️ | white medium square | A medium solid white square. |
| ◾ | black medium-small square | A medium-small solid black square. |
| ◽ | white medium-small square | A medium-small solid white square. |
| ▪️ | black small square | A small solid black square. |
| ▫️ | white small square | A small solid white square. |
| 🔶 | large orange diamond | A large orange diamond shape. |
| 🔷 | large blue diamond | A large blue diamond shape. |
| 🔸 | small orange diamond | A small orange diamond shape. |
| 🔹 | small blue diamond | A small blue diamond shape. |
| 🔺 | red triangle pointed up | A red triangle pointing upwards. |
| 🔻 | red triangle pointed down | A red triangle pointing downwards. |
| 💠 | diamond with a dot | A diamond shape with a dot in the center. |
| 🔘 | radio button | A circular radio button. |
| 🔳 | white square button | A white square button outlined in black. |
| 🔲 | black square button | A black square button. |
Flags (270)
| Emoji | Name | Description |
|---|---|---|
| 🏁 | chequered flag | A checkered flag, typically used to signal the end of a race. |
| 🚩 | triangular flag | A triangular flag, often used for marking locations. |
| 🎌 | crossed flags | Two crossed flags, often representing a celebration. |
| 🏴 | black flag | A solid black flag, often associated with piracy. |
| 🏳️ | white flag | A solid white flag. |
| 🏳️🌈 | rainbow flag | A rainbow flag with horizontal stripes of various colors. |
| 🏳️⚧️ | transgender flag | A transgender pride flag with pink, blue, and white stripes. |
| 🏴☠️ | pirate flag | A pirate flag featuring a skull and crossbones. |
| 🇦🇨 | flag: Ascension Island | The flag of Ascension Island, featuring a blue field with a Union Jack and a coat of arms. |
| 🇦🇩 | flag: Andorra | A vertical tricolor flag with blue on the left, yellow in the center, and red on the right, featuring a coat of arms in the yellow section. |
| 🇦🇪 | flag: United Arab Emirates | A horizontal tricolor flag with red on the left, green in the center, and black on the right, with a vertical white stripe on the left. |
| 🇦🇫 | flag: Afghanistan | A vertical tricolor flag with black on the top, red in the middle, and green on the bottom, featuring a white emblem with a mosque and two flags in the center. |
| 🇦🇬 | flag: Antigua & Barbuda | A horizontal flag with a black triangle on the left, a red triangle on the right, and a yellow stripe in the middle, featuring a coat of arms in the center. |
| 🇦🇮 | flag: Anguilla | A blue flag with a white circle in the center, containing a red shield with a white dolphin and a yellow sun above it. |
| 🇦🇱 | flag: Albania | A red flag featuring a black, double-headed eagle in the center. |
| 🇦🇲 | flag: Armenia | A horizontal tricolor flag with red on the top, blue in the middle, and orange on the bottom. |
| 🇦🇴 | flag: Angola | A horizontal flag divided horizontally into red and black with a yellow half gear and a machete crossed with a hoe in the center. |
| 🇦🇶 | flag: Antarctica | A blue and white flag with a blue field and a white silhouette of a penguin in the center. |
| 🇦🇷 | flag: Argentina | A horizontal flag with light blue stripes on the top and bottom and a white stripe in the middle, featuring a yellow sun with a face in the center. |
| 🇦🇸 | flag: American Samoa | A blue flag with a red triangle on the left side, containing a white star, and a white stripe on the right side. |
| 🇦🇹 | flag: Austria | A horizontal tricolor flag with red on the top, white in the middle, and red on the bottom. |
| 🇦🇺 | flag: Australia | A blue flag featuring the Union Jack in the top left corner and a large white star with smaller stars on the right side. |
| 🇦🇼 | flag: Aruba | A horizontal flag with a blue field, a red triangle on the left, and a yellow star in the center of the triangle. |
| 🇦🇽 | flag: Åland Islands | A blue flag with a white cross and a red triangle on the left, featuring a yellow star in the center of the triangle. |
| 🇦🇿 | flag: Azerbaijan | A horizontal tricolor flag with blue on the top, red in the middle, and green on the bottom, featuring a white crescent and an eight-pointed star. |
| 🇧🇦 | flag: Bosnia & Herzegovina | A flag with a blue field, a yellow triangle on the left, and white stars along the hypotenuse of the triangle. |
| 🇧🇧 | flag: Barbados | A vertical flag with a blue field on the top and bottom, and a yellow stripe in the center, featuring a black trident head in the middle. |
| 🇧🇩 | flag: Bangladesh | A green flag with a red circle slightly off-center to the left. |
| 🇧🇪 | flag: Belgium | A vertical tricolor flag with black on the left, yellow in the center, and red on the right. |
| 🇧🇫 | flag: Burkina Faso | A horizontal flag with red on the top, green in the middle, and a yellow star in the center. |
| 🇧🇬 | flag: Bulgaria | A horizontal tricolor flag with white on the top, green in the middle, and red on the bottom. |
| 🇧🇭 | flag: Bahrain | A red flag with a white serrated band on the left side. |
| 🇧🇮 | flag: Burundi | A vertical flag with red on the top, yellow in the middle, and green on the bottom, featuring a white star in the upper left corner. |
| 🇧🇯 | flag: Benin | A vertical flag with green on the left, yellow in the center, and red on the right, featuring a white star in the green section. |
| 🇧🇱 | flag: St. Barthélemy | A red flag with a blue field on the left side, featuring a white star in the center. |
| 🇧🇲 | flag: Bermuda | A red flag featuring a Union Jack in the top left corner and a coat of arms on the right. |
| 🇧🇳 | flag: Brunei | A diagonal bicolor flag with yellow on the top left, black on the bottom right, and a red triangle on the left side. |
| 🇧🇴 | flag: Bolivia | A horizontal tricolor flag with red on the top, yellow in the middle, and green on the bottom, featuring a coat of arms in the center. |
| 🇧🇶 | flag: Caribbean Netherlands | A flag with a blue field and a white star in the center, surrounded by a red circle. |
| 🇧🇷 | flag: Brazil | A green flag with a large yellow diamond in the center, featuring a blue globe with stars and a white band with the national motto. |
| 🇧🇸 | flag: Bahamas | A horizontal flag with a black triangle on the left, and two horizontal stripes of aquamarine and gold. |
| 🇧🇹 | flag: Bhutan | A horizontal flag with a yellow stripe on the top, a red stripe in the middle, and a green stripe on the bottom, featuring a dragon in the center. |
| 🇧🇻 | flag: Bouvet Island | A red flag with a white cross and a blue field in the upper left corner. |
| 🇧🇼 | flag: Botswana | A horizontal flag with light blue on the top, black in the center, and white on the bottom. |
| 🇧🇾 | flag: Belarus | A vertical flag with red on the top, green on the bottom, and a white ornament pattern on the left. |
| 🇧🇿 | flag: Belize | A blue flag with a white circle in the center, containing a coat of arms surrounded by green leaves. |
| 🇨🇦 | flag: Canada | A red flag with a white square in the center, featuring a red maple leaf with eleven points. |
| 🇨🇨 | flag: Cocos (Keeling) Islands | A flag with a green field and a white circle in the center, featuring a red star. |
| 🇨🇩 | flag: Congo - Kinshasa | A vertical flag with blue on the left, yellow in the center, and red on the right, featuring a yellow star in the center. |
| 🇨🇫 | flag: Central African Republic | A vertical tricolor of blue, white, and green with a red stripe on the left side, featuring a yellow star in the blue section. |
| 🇨🇬 | flag: Congo - Brazzaville | A vertical tricolor of green, yellow, and red with a coat of arms in the center. |
| 🇨🇭 | flag: Switzerland | A horizontal tricolor of red, white, and red with a white cross in the center. |
| 🇨🇮 | flag: Côte d’Ivoire | Three vertical stripes of orange, white, and green, with the orange stripe on the left. |
| 🇨🇰 | flag: Cook Islands | A blue field with a circle of white stars in the upper hoist corner and a green and yellow stripe at the bottom. |
| 🇨🇱 | flag: Chile | A horizontal stripe of blue, white, and red, with a white star in the blue section on the left. |
| 🇨🇲 | flag: Cameroon | A vertical tricolor of green, red, and yellow with a yellow star in the center of the red stripe. |
| 🇨🇳 | flag: China | A red field with five yellow stars in the top left corner, one large star surrounded by four smaller ones. |
| 🇨🇴 | flag: Colombia | Three horizontal stripes of yellow, blue, and red, with yellow on top. |
| 🇨🇵 | flag: Clipperton Island | A blue field with a white silhouette of a palm tree and a yellow sun. |
| 🇨🇶 | flag: Sark | A red field with a white cross and a blue canton containing a white star. |
| 🇨🇷 | flag: Costa Rica | A horizontal stripe of blue, white, and red, with two blue stripes on the top and bottom and a red stripe in the middle. |
| 🇨🇺 | flag: Cuba | A horizontal stripe of blue and white with a red triangle on the left containing a white star. |
| 🇨🇻 | flag: Cape Verde | A horizontal tricolor of blue, white, and red with a yellow star in the center. |
| 🇨🇼 | flag: Curaçao | A blue field with a yellow star and a red triangle on the left side. |
| 🇨🇽 | flag: Christmas Island | A green field with a white stripe and a red stripe at the bottom. |
| 🇨🇾 | flag: Cyprus | A white field with a map of Cyprus in orange and two olive branches below it. |
| 🇨🇿 | flag: Czechia | A horizontal stripe of white and red with a blue triangle on the left. |
| 🇩🇪 | flag: Germany | Three horizontal stripes of black, red, and yellow from top to bottom. |
| 🇩🇬 | flag: Diego Garcia | A blue field with a white silhouette of a palm tree and a yellow sun. |
| 🇩🇯 | flag: Djibouti | A blue field with a red triangle on the left and a white star inside it. |
| 🇩🇰 | flag: Denmark | A red field with a white cross that extends to the edges. |
| 🇩🇲 | flag: Dominica | A green field with a yellow star and a red triangle on the left side. |
| 🇩🇴 | flag: Dominican Republic | A red field with a white cross and a blue and yellow shield in the center. |
| 🇩🇿 | flag: Algeria | A green field with a white stripe and a red crescent and star. |
| 🇪🇦 | flag: Ceuta & Melilla | A horizontal stripe of red and yellow with a coat of arms on the left. |
| 🇪🇨 | flag: Ecuador | A horizontal tricolor of yellow, blue, and red with a coat of arms in the center. |
| 🇪🇪 | flag: Estonia | Three horizontal stripes of black, blue, and white from top to bottom. |
| 🇪🇬 | flag: Egypt | A horizontal stripe of red, white, and black with a golden eagle in the center. |
| 🇪🇭 | flag: Western Sahara | A red and white striped flag with a green triangle. |
| 🇪🇷 | flag: Eritrea | A horizontal stripe of green, red, and yellow with a blue triangle on the left. |
| 🇪🇸 | flag: Spain | Three horizontal stripes of red, yellow, and red with the coat of arms on the left. |
| 🇪🇹 | flag: Ethiopia | A green, yellow, and red horizontal stripe with a blue circle and a yellow star in the center. |
| 🇪🇺 | flag: European Union | A blue field with a circle of twelve yellow stars. |
| 🇫🇮 | flag: Finland | A white field with a blue Nordic cross that extends to the edges. |
| 🇫🇯 | flag: Fiji | A blue field with a Union Jack in the top left corner and a coat of arms on the right. |
| 🇫🇰 | flag: Falkland Islands | A blue field with a Union Jack in the top left corner and a coat of arms featuring a sheep and a fish. |
| 🇫🇲 | flag: Micronesia | A blue field with a white star and a red stripe at the bottom. |
| 🇫🇴 | flag: Faroe Islands | A blue field with a red cross outlined in white. |
| 🇫🇷 | flag: France | A vertical tricolor of blue, white, and red from left to right. |
| 🇬🇦 | flag: Gabon | A vertical tricolor of green, yellow, and blue stripes, with green on the top, yellow in the middle, and blue on the bottom. |
| 🇬🇧 | flag: United Kingdom | A combination of red, white, and blue, featuring a red cross edged in white superimposed on a blue field with a diagonal red and white cross. |
| 🇬🇩 | flag: Grenada | A red field with a green diagonal stripe and a yellow triangle on the left side, featuring a black star in the center of the triangle. |
| 🇬🇪 | flag: Georgia | A white field with a red cross, intersected by a red vertical stripe, and four smaller red crosses in each quadrant. |
| 🇬🇫 | flag: French Guiana | A blue field with a yellow diagonal stripe, featuring a red square in the top left corner with a white star. |
| 🇬🇬 | flag: Guernsey | A red cross on a yellow background, with a coat of arms featuring a lion and three gold crowns at the top. |
| 🇬🇭 | flag: Ghana | A horizontal tricolor of red, yellow, and green stripes, with a black star in the center of the yellow stripe. |
| 🇬🇮 | flag: Gibraltar | A white field with a red vertical stripe on the left, featuring a castle and two red towers on the top. |
| 🇬🇱 | flag: Greenland | A red and white field, with a blue circle featuring a white polar bear in the center. |
| 🇬🇲 | flag: Gambia | A horizontal tricolor of red, blue, and green stripes, with a thin white stripe separating the blue from the red and green. |
| 🇬🇳 | flag: Guinea | A vertical tricolor of red, yellow, and green stripes, with red on the left, yellow in the middle, and green on the right. |
| 🇬🇵 | flag: Guadeloupe | A blue field with a yellow cross, featuring a green palm tree and a red flower in each quadrant. |
| 🇬🇶 | flag: Equatorial Guinea | A vertical tricolor of green, yellow, and red stripes, with a yellow triangle on the left side containing a red star. |
| 🇬🇷 | flag: Greece | A blue and white striped field with a blue canton featuring a white cross. |
| 🇬🇸 | flag: South Georgia & South Sandwich Islands | A blue field with a red triangle on the left, featuring a white star and a red and white striped border. |
| 🇬🇹 | flag: Guatemala | A vertical stripe of blue and white, with a coat of arms featuring a quetzal bird and two crossed rifles in the center. |
| 🇬🇺 | flag: Guam | A blue field with a yellow triangle on the left, featuring a red and white coat of arms in the center. |
| 🇬🇼 | flag: Guinea-Bissau | A vertical tricolor of yellow, red, and green stripes, with a black star on the left side. |
| 🇬🇾 | flag: Guyana | A horizontal tricolor of green, yellow, and red stripes, with a black triangle on the left side. |
| 🇭🇰 | flag: Hong Kong SAR China | A red field with a white flower design in the center, symbolizing the region’s culture. |
| 🇭🇲 | flag: Heard & McDonald Islands | A blue field with a red triangle on the left, featuring a white star and a red and white striped border. |
| 🇭🇳 | flag: Honduras | A horizontal tricolor of blue and white stripes, with a coat of arms featuring a mountain and a rainbow in the center. |
| 🇭🇷 | flag: Croatia | A red, white, and blue checkered pattern in the center, with a coat of arms featuring a shield and five smaller shields above it. |
| 🇭🇹 | flag: Haiti | A blue and red field with a white coat of arms featuring a palm tree, cannons, and flags. |
| 🇭🇺 | flag: Hungary | A horizontal tricolor of red, white, and green stripes. |
| 🇮🇨 | flag: Canary Islands | A horizontal tricolor of white, red, and yellow stripes, with a blue emblem in the center. |
| 🇮🇩 | flag: Indonesia | A horizontal bicolor of red on the top and white on the bottom. |
| 🇮🇪 | flag: Ireland | A vertical tricolor of green, white, and orange stripes, with green on the left, white in the middle, and orange on the right. |
| 🇮🇱 | flag: Israel | A white field with a blue Star of David in the center and two horizontal blue stripes at the top and bottom. |
| 🇮🇲 | flag: Isle of Man | A red field with a coat of arms featuring a three-legged figure in the center. |
| 🇮🇳 | flag: India | A horizontal tricolor of saffron, white, and green, with a blue Ashoka Chakra in the center. |
| 🇮🇴 | flag: British Indian Ocean Territory | A blue field with a red triangle on the left, featuring a white star in the center. |
| 🇮🇶 | flag: Iraq | A red, white, and black horizontal tricolor with the Arabic script for ‘God is great’ in green in the center. |
| 🇮🇷 | flag: Iran | A horizontal tricolor of green, white, and red stripes, with a red emblem featuring a stylized representation of a tulip in the center. |
| 🇮🇸 | flag: Iceland | A blue field with a red cross edged in white, intersecting in the center. |
| 🇮🇹 | flag: Italy | A vertical tricolor of green, white, and red stripes, with green on the left, white in the middle, and red on the right. |
| 🇯🇪 | flag: Jersey | A red cross on a white field, with a gold crown above the cross. |
| 🇯🇲 | flag: Jamaica | A diagonal black, green, and yellow pattern, with the black on the top and bottom, and green and yellow forming a ‘V’ shape in the center. |
| 🇯🇴 | flag: Jordan | A horizontal tricolor of black, white, and green stripes, with a red triangle on the left. |
| 🇯🇵 | flag: Japan | A white field with a red circle in the center, symbolizing the sun. |
| 🇰🇪 | flag: Kenya | A vertical tricolor of black, red, and green with a white outline, featuring a Maasai shield and two crossed spears at the center. |
| 🇰🇬 | flag: Kyrgyzstan | A red flag with a yellow sun and a circular pattern of 40 rays, surrounded by a blue and yellow border. |
| 🇰🇭 | flag: Cambodia | A blue stripe at the top, a red stripe in the middle, and a white stripe at the bottom, featuring a white temple in the center. |
| 🇰🇮 | flag: Kiribati | A diagonal red stripe with a yellow triangle on the left, containing three yellow stars, set against a blue background. |
| 🇰🇲 | flag: Comoros | A vertical tricolor of green, white, and red with a blue triangle on the left, featuring a yellow crescent and four stars. |
| 🇰🇳 | flag: St. Kitts & Nevis | A diagonal green stripe with a yellow triangle on the left, featuring a yellow sun and two green stars. |
| 🇰🇵 | flag: North Korea | A horizontal red stripe with a blue stripe on the top and bottom, featuring a white circle with a red star in the center. |
| 🇰🇷 | flag: South Korea | A white field with a red and blue yin-yang symbol in the center, surrounded by four black trigrams in each corner. |
| 🇰🇼 | flag: Kuwait | A horizontal black stripe on the top, green in the middle, and red at the bottom, with a vertical white stripe on the left. |
| 🇰🇾 | flag: Cayman Islands | A blue field with a yellow circle and two green turtle silhouettes, set against a white background. |
| 🇰🇿 | flag: Kazakhstan | A sky blue flag featuring a golden sun with a soaring eagle below it, along with a vertical national ornament on the left. |
| 🇱🇦 | flag: Laos | A horizontal red stripe on the top and bottom, with a blue stripe in the center, featuring a white circle in the middle. |
| 🇱🇧 | flag: Lebanon | A red stripe at the top and bottom, with a white stripe in the center, featuring a green cedar tree in the middle. |
| 🇱🇨 | flag: St. Lucia | A blue field with a white triangle on the left, containing a yellow triangle and a black outline. |
| 🇱🇮 | flag: Liechtenstein | A blue field with a red stripe at the bottom, featuring a coat of arms in the top left corner. |
| 🇱🇰 | flag: Sri Lanka | A golden lion holding a sword on a maroon background, with green and orange vertical stripes on the left. |
| 🇱🇷 | flag: Liberia | A horizontal red and white striped flag with a blue square in the top left corner, containing a white star. |
| 🇱🇸 | flag: Lesotho | A blue field with a red stripe at the bottom, featuring a white crown in the top left corner. |
| 🇱🇹 | flag: Lithuania | A horizontal tricolor of yellow, green, and red, with equal-sized stripes. |
| 🇱🇺 | flag: Luxembourg | A horizontal tricolor of red, white, and light blue, with the red stripe on top. |
| 🇱🇻 | flag: Latvia | A horizontal red stripe at the top and bottom, with a white stripe in the center. |
| 🇱🇾 | flag: Libya | A horizontal red stripe at the top, black in the middle, and green at the bottom. |
| 🇲🇦 | flag: Morocco | A red field featuring a green five-pointed star in the center. |
| 🇲🇨 | flag: Monaco | A vertical red and white striped flag with a coat of arms in the top left corner. |
| 🇲🇩 | flag: Moldova | A vertical tricolor of red, yellow, and blue, featuring a coat of arms in the center. |
| 🇲🇪 | flag: Montenegro | A red field with a golden lion and a crown in the center. |
| 🇲🇫 | flag: St. Martin | A blue field with a red stripe at the top and a white stripe at the bottom, featuring a white star. |
| 🇲🇬 | flag: Madagascar | A vertical tricolor of green, white, and red, with a green stripe on the left. |
| 🇲🇭 | flag: Marshall Islands | A blue field with a diagonal orange stripe, featuring a white star in the top left corner. |
| 🇲🇰 | flag: North Macedonia | A red field with a golden sun and eight rays extending outward. |
| 🇲🇱 | flag: Mali | A vertical tricolor of green, yellow, and red. |
| 🇲🇲 | flag: Myanmar (Burma) | A horizontal tricolor of yellow, green, and red, with a white star in the top left corner. |
| 🇲🇳 | flag: Mongolia | A red field with a blue stripe on the left, featuring a golden soyombo symbol. |
| 🇲🇴 | flag: Macao SAR China | A white field with a green lotus flower and a red border. |
| 🇲🇵 | flag: Northern Mariana Islands | A blue field with a white star in the center, surrounded by red and white stripes. |
| 🇲🇶 | flag: Martinique | A green field with a red stripe at the top, featuring a yellow star in the center. |
| 🇲🇷 | flag: Mauritania | A green field with a yellow crescent and a five-pointed star in the center. |
| 🇲🇸 | flag: Montserrat | A blue field with a red stripe at the top, featuring a white star in the top left corner. |
| 🇲🇹 | flag: Malta | A vertical bicolor of white and red, featuring a George Cross in the top left corner. |
| 🇲🇺 | flag: Mauritius | A horizontal tricolor of red, blue, yellow, and green stripes. |
| 🇲🇻 | flag: Maldives | A rectangular flag with a green rectangle in the center, surrounded by a red field, featuring a white crescent moon facing right. |
| 🇲🇼 | flag: Malawi | A horizontal tricolor flag with black on top, red in the middle, and green at the bottom, featuring a yellow sun with a black outline in the top left corner. |
| 🇲🇽 | flag: Mexico | A vertical tricolor flag with green on the left, white in the middle, and red on the right, displaying a national coat of arms featuring an eagle perched on a cactus with a snake in its beak. |
| 🇲🇾 | flag: Malaysia | A flag with 14 red and white stripes, representing the states, and a blue canton with a yellow crescent and a 14-pointed star. |
| 🇲🇿 | flag: Mozambique | A diagonal tricolor flag with green on the top, black in the middle, and yellow on the bottom, featuring a red triangle on the left that contains a yellow star and a book. |
| 🇳🇦 | flag: Namibia | A horizontal tricolor flag with blue on the top, yellow in the middle, and red on the bottom, featuring a sun with 12 rays in the top left corner. |
| 🇳🇨 | flag: New Caledonia | A flag with a blue field, a yellow diagonal stripe from the bottom left to the top right, and a red triangle on the left side containing a white star. |
| 🇳🇪 | flag: Niger | A horizontal tricolor flag with orange on the top, white in the middle, and green on the bottom, featuring a green circle in the center. |
| 🇳🇫 | flag: Norfolk Island | A flag with a blue field, featuring a green silhouette of a palm tree in the center and a small British flag in the top left corner. |
| 🇳🇬 | flag: Nigeria | A vertical flag with green stripes on the sides and a white stripe in the center. |
| 🇳🇮 | flag: Nicaragua | A horizontal blue and white striped flag with a coat of arms in the center, featuring a triangle with five volcanoes and a rainbow above it. |
| 🇳🇱 | flag: Netherlands | A horizontal tricolor flag with red on the top, white in the middle, and blue on the bottom. |
| 🇳🇴 | flag: Norway | A red flag with a blue cross outlined in white, extending to the edges. |
| 🇳🇵 | flag: Nepal | A unique non-rectangular flag shaped like two stacked triangles, red with a blue border, featuring a white moon and a white sun. |
| 🇳🇷 | flag: Nauru | A green flag with a yellow border and a white star in the center, surrounded by two olive branches. |
| 🇳🇺 | flag: Niue | A blue field with a yellow diamond shape in the center, containing a white star. |
| 🇳🇿 | flag: New Zealand | A blue flag with a Union Jack in the top left corner and four red stars with white borders on the right side. |
| 🇴🇲 | flag: Oman | A red flag with a vertical white stripe on the left, featuring a white khanjar (dagger) and two crossed swords above it. |
| 🇵🇦 | flag: Panama | A flag divided into four quadrants, with blue and red squares and a white background, featuring a blue star in the top left and a red star in the bottom right. |
| 🇵🇪 | flag: Peru | A vertical red and white striped flag with a coat of arms in the center, depicting a llama, a cinchona tree, and a cornucopia. |
| 🇵🇫 | flag: French Polynesia | A flag with a blue field featuring a white star and a red and white striped triangle on the left. |
| 🇵🇬 | flag: Papua New Guinea | A black and red flag with a yellow triangle on the left, containing five white stars representing the Southern Cross. |
| 🇵🇭 | flag: Philippines | A horizontal flag with blue on the top, red on the bottom, and a white triangle on the left containing a sun and three stars. |
| 🇵🇰 | flag: Pakistan | A green flag with a white crescent moon and a five-pointed star, symbolizing Islam. |
| 🇵🇱 | flag: Poland | A horizontal flag with white on the top and red on the bottom. |
| 🇵🇲 | flag: St. Pierre & Miquelon | A flag with a blue field, featuring a small French flag in the top left corner and a red and white striped triangle on the right. |
| 🇵🇳 | flag: Pitcairn Islands | A blue flag with a yellow diamond shape in the center, containing a small Union Jack. |
| 🇵🇷 | flag: Puerto Rico | A flag with five horizontal stripes, alternating red and white, and a blue triangle on the left with a white star. |
| 🇵🇸 | flag: Palestinian Territories | A flag with three horizontal stripes of black, white, and green, with a red triangle on the left. |
| 🇵🇹 | flag: Portugal | A flag with green on the left and red on the right, featuring a coat of arms with a shield and seven castles. |
| 🇵🇼 | flag: Palau | A blue flag with a yellow diamond shape in the center, containing a white star. |
| 🇵🇾 | flag: Paraguay | A horizontal tricolor flag with red on the top, white in the middle, and blue on the bottom, featuring a coat of arms in the center. |
| 🇶🇦 | flag: Qatar | A maroon flag with a white serrated vertical stripe on the left side. |
| 🇷🇪 | flag: Réunion | A blue flag with a yellow sun in the center and a green palm tree. |
| 🇷🇴 | flag: Romania | A vertical tricolor flag with blue on the left, yellow in the middle, and red on the right. |
| 🇷🇸 | flag: Serbia | A horizontal tricolor flag with red on the top, blue in the middle, and white on the bottom, featuring a coat of arms on the left. |
| 🇷🇺 | flag: Russia | A horizontal tricolor flag with white on the top, blue in the middle, and red on the bottom. |
| 🇷🇼 | flag: Rwanda | A flag with a blue field on the top, yellow in the middle, and green on the bottom, featuring a yellow sun with 24 rays. |
| 🇸🇦 | flag: Saudi Arabia | A green flag with white Arabic script and a white sword beneath it. |
| 🇸🇧 | flag: Solomon Islands | A flag with a blue field, featuring a yellow triangle on the left and a red triangle on the right. |
| 🇸🇨 | flag: Seychelles | A flag with five diagonal stripes in blue, yellow, red, white, and green, representing the Seychelles. |
| 🇸🇩 | flag: Sudan | A flag with three horizontal stripes in red, white, and black, representing Sudan. |
| 🇸🇪 | flag: Sweden | A blue flag with a yellow Scandinavian cross, representing Sweden. |
| 🇸🇬 | flag: Singapore | A red flag with a white crescent and five white stars, representing Singapore. |
| 🇸🇭 | flag: St. Helena | A flag with a blue field featuring the Union Jack in the top left corner and a coat of arms, representing St. Helena. |
| 🇸🇮 | flag: Slovenia | A tricolor flag with horizontal stripes of white, blue, and red, featuring the coat of arms on the left side, representing Slovenia. |
| 🇸🇯 | flag: Svalbard & Jan Mayen | A flag with a blue field featuring a red and white cross, representing Svalbard and Jan Mayen. |
| 🇸🇰 | flag: Slovakia | A flag with horizontal stripes of white, blue, and red, with a coat of arms on the left, representing Slovakia. |
| 🇸🇱 | flag: Sierra Leone | A green, white, and blue tricolor flag with a coat of arms on the left, representing Sierra Leone. |
| 🇸🇲 | flag: San Marino | A flag with a white field featuring a blue cross and a red triangle, representing San Marino. |
| 🇸🇳 | flag: Senegal | A flag with three horizontal stripes of green, yellow, and red, with a black star in the center, representing Senegal. |
| 🇸🇴 | flag: Somalia | A light blue flag with a white star in the center, representing Somalia. |
| 🇸🇷 | flag: Suriname | A flag with three horizontal stripes of green, white, and red, with a yellow star in the center, representing Suriname. |
| 🇸🇸 | flag: South Sudan | A flag with horizontal stripes of red, white, and black, representing South Sudan. |
| 🇸🇹 | flag: São Tomé & Príncipe | A green flag with a yellow triangle and two black stars, representing São Tomé and Príncipe. |
| 🇸🇻 | flag: El Salvador | A blue and white flag with a coat of arms in the center, representing El Salvador. |
| 🇸🇽 | flag: Sint Maarten | A flag with a blue field and a white cross, representing Sint Maarten. |
| 🇸🇾 | flag: Syria | A flag with three horizontal stripes of red, white, and black, representing Syria. |
| 🇸🇿 | flag: Eswatini | A flag with horizontal stripes of blue, yellow, and green, representing Eswatini. |
| 🇹🇦 | flag: Tristan da Cunha | A flag with a blue field and a red triangle containing a white cross, representing Tristan da Cunha. |
| 🇹🇨 | flag: Turks & Caicos Islands | A flag with a blue field featuring a white star and a red and white stripe, representing the Turks and Caicos Islands. |
| 🇹🇩 | flag: Chad | A flag with three vertical stripes of blue, yellow, and red, representing Chad. |
| 🇹🇫 | flag: French Southern Territories | A flag with a blue field and a white star, representing the French Southern Territories. |
| 🇹🇬 | flag: Togo | A flag with horizontal stripes of green, yellow, and red, with a white star in the top left corner, representing Togo. |
| 🇹🇭 | flag: Thailand | A flag with horizontal stripes of red, white, and blue, representing Thailand. |
| 🇹🇯 | flag: Tajikistan | A flag with a blue field featuring a white crescent and a star, representing Tajikistan. |
| 🇹🇰 | flag: Tokelau | A flag with a blue field and a yellow star, representing Tokelau. |
| 🇹🇱 | flag: Timor-Leste | A flag with horizontal stripes of red, yellow, and green, representing Timor-Leste. |
| 🇹🇲 | flag: Turkmenistan | A flag with a green field featuring a red triangle and a white star, representing Turkmenistan. |
| 🇹🇳 | flag: Tunisia | A flag with a red field featuring a white circle and a red crescent, representing Tunisia. |
| 🇹🇴 | flag: Tonga | A red flag with a white cross in the top left corner, representing Tonga. |
| 🇹🇷 | flag: Türkiye | A red flag with a white star and crescent, representing Türkiye. |
| 🇹🇹 | flag: Trinidad & Tobago | A flag with a black diagonal stripe bordered in white on a red field, representing Trinidad and Tobago. |
| 🇹🇻 | flag: Tuvalu | A flag with a blue field and a white star, representing Tuvalu. |
| 🇹🇼 | flag: Taiwan | A blue flag featuring a white sun with twelve rays, representing Taiwan. |
| 🇹🇿 | flag: Tanzania | A flag with diagonal stripes of green, yellow, black, and blue, representing Tanzania. |
| 🇺🇦 | flag: Ukraine | A flag with horizontal stripes of blue and yellow, representing Ukraine. |
| 🇺🇬 | flag: Uganda | A flag with horizontal stripes of black, yellow, and red, featuring a crane in the center, representing Uganda. |
| 🇺🇲 | flag: U.S. Outlying Islands | A flag with a blue field featuring white stars and red and white stripes, representing U.S. Outlying Islands. |
| 🇺🇳 | flag: United Nations | A light blue flag featuring a world map surrounded by olive branches, representing the United Nations. |
| 🇺🇸 | flag: United States | A rectangular flag with 13 horizontal stripes alternating red and white, and a blue rectangle in the top left corner featuring 50 white stars arranged in nine rows. |
| 🇺🇾 | flag: Uruguay | A flag with nine horizontal stripes alternating white and blue, with a white square in the upper left corner containing a yellow sun with a face and 16 rays. |
| 🇺🇿 | flag: Uzbekistan | A flag with three horizontal stripes of light blue, white, and green, featuring a crescent moon and 12 stars in the blue stripe, and two red stripes bordering the white stripe. |
| 🇻🇦 | flag: Vatican City | A vertical bicolor flag with yellow on the hoist side and white on the fly side, featuring the Papal Tiara and crossed keys in the center. |
| 🇻🇨 | flag: St. Vincent & Grenadines | A flag with a diagonal yellow triangle pointing down from the hoist side, flanked by green and red triangles, with a black border around the yellow triangle. |
| 🇻🇪 | flag: Venezuela | A flag with three horizontal stripes of yellow, blue, and red, featuring seven white stars in an arc on the blue stripe. |
| 🇻🇬 | flag: British Virgin Islands | A green flag with a vertical blue stripe on the hoist side, containing the Union Jack in the upper corner, and a coat of arms featuring a white cross and a blue shield with the Virgin Islands’ patroness. |
| 🇻🇮 | flag: U.S. Virgin Islands | A blue flag featuring the Union Jack in the upper left corner and a coat of arms depicting a white cross and a blue shield with the Virgin Islands’ patroness. |
| 🇻🇳 | flag: Vietnam | A red flag with a large yellow star in the center, surrounded by a thin red border. |
| 🇻🇺 | flag: Vanuatu | A flag with three horizontal stripes of blue, yellow, and red, featuring a black triangle on the left side with a white star. |
| 🇼🇫 | flag: Wallis & Futuna | A blue flag with a red cross and a white background, featuring a white star in each of the four quadrants created by the cross. |
| 🇼🇸 | flag: Samoa | A blue flag with a white star in the upper left corner, and two horizontal stripes of red and white below it. |
| 🇽🇰 | flag: Kosovo | A blue flag with a yellow map of Kosovo in the center, and six white stars arranged in an arc above the map. |
| 🇾🇪 | flag: Yemen | A horizontal tricolor flag with red on the top, white in the middle, and black on the bottom. |
| 🇾🇹 | flag: Mayotte | A flag with a blue background and a white crescent and star in the center. |
| 🇿🇦 | flag: South Africa | A flag with a green Y-shape, black triangle on the left, and horizontal stripes of red, yellow, and blue. |
| 🇿🇲 | flag: Zambia | A rectangular flag with green, red, and black horizontal stripes, featuring an orange eagle on a black background in the upper left corner. |
| 🇿🇼 | flag: Zimbabwe | A flag with horizontal stripes of green, yellow, red, and black, featuring a white triangle with a red five-pointed star and a black Zimbabwe Bird. |
| 🏴 | flag: England | A flag with a white background and a red cross that extends to the edges, representing England. |
| 🏴 | flag: Scotland | A blue flag with a white diagonal cross, representing Scotland. |
| 🏴 | flag: Wales | A red flag with a white cross, representing Wales. |
Format
The Format menu handles presentation and markup-aware editing of existing text.
Case operations live in the Change Case submenu:
- Upper Case
- Lower Case
- Title Case
- Sentence Case
- Toggle Case
Comment and indentation tools:
- Toggle Line Comment
- Toggle Block Comment
- Indent
- Outdent
Line operations:
- Move Line Up
- Move Line Down
- Duplicate Line
- Delete Line
- Join Lines
Inline emphasis:
- Bold
- Italic
Rich formatting with hidden codes (new in 0.8.1 Beta 1). Beyond Bold and Italic, the Format menu now applies real document formatting that stays invisible in your editor: Underline, Strikethrough, Superscript, Subscript, Font (family), Size (point size), Text Colour, Highlight, and paragraph Alignment (Left / Centre / Right / Justify), line spacing, indent, and named styles. The idea is hidden codes: your editing buffer stays clean, fast, plain text — the formatting is stored as invisible markup, never as on-screen clutter — and is materialised into real formatting only when you export. So you read and edit clean prose, and the document still becomes a properly formatted Word, RTF, or HTML file on save.
- Apply it from the Format menu’s Font / Size / Align / Colour / Highlight items, or from the accessible Font… dialog, which gathers font family, point size, colour, and highlight in one place. With text selected, the formatting applies to the selection; with no selection it applies as you type.
- Hear what’s there. Because the codes are hidden, Describe Formatting at Cursor speaks exactly what is in effect at the caret — for example “Arial, 14 point, centred, bold”. Turn on Announce formatting on caret move (Settings → Accessibility) to hear formatting changes as you arrow through a document.
- It exports faithfully. On Save As
(or Export) to Word (.docx), Rich Text
(.rtf), or HTML, the hidden codes become real
formatting — font, size, colour, highlight, alignment, and the rest.
Word export uses a native writer when the optional
python-docxcomponent is present and falls back to Pandoc otherwise. If a target format genuinely cannot carry something, Quill tells you before you commit rather than dropping it silently; saving to plain text drops the formatting with the same honest warning.
Everything that makes Quill fast still works on the same clean text: undo, search, the outline, word counts, read-aloud, and the AI tools all operate on your prose, not on markup.
The Transform Lines submenu gathers every line and text transform in one place: Number Lines…, Number Lines (Advanced)…, Hard-Wrap Lines…, Sort Lines Ascending, Sort Lines Descending, Reverse Lines, Remove Duplicate Lines, Trim Trailing Whitespace, Normalize Whitespace, Convert Indentation to Spaces, and Convert Indentation to Tabs. Number Lines (Advanced)… adds a starting number, increment, digit or Roman-numeral style, zero-padding width, a custom suffix, and left or right alignment, for cases the simple version doesn’t cover.
Two blank-line commands, and the names say which is which. The Format menu offers Trim Blank Lines at the Ends, which removes only the blank lines before the first line of text and after the last one, and Remove Every Blank Line, which removes all of them including the ones separating your paragraphs. Trimming the ends is what you want before pasting a fragment into something else; removing every one is what you want after copying text out of a web page that arrived double-spaced. A line of nothing but spaces counts as blank to both of them, because it is blank to everyone reading the document. They used to be called Trim Blank Lines and Remove Blank Lines, which are the same phrase read aloud, so the names now say where rather than leaving you to try them.
The Format menu adds three more sorts for structured
lists, each working on the selected lines or the whole document:
Sort Lines Numerically (by the first number on each
line), Sort Lines by Length, and Sort Lines by
Date. Sort Lines by Date recognizes the common
date styles — ISO (2020-03-05), slash and dot forms
(03/04/2020, 5.1.2020), and English month
names (Jan 5, 2020, 5 January 2020,
March 3rd, 1999) — and works out day/month order for an
ambiguous numeric date the way your region does: US English reads it
month-first (03/04 = March 4th), everywhere else day-first
(03/04 = 4 March), and an unambiguous value like
25/12 is always read correctly whichever region you use.
Lines with no recognizable date stay together at the bottom in their
original order, so nothing is lost. All three are unbound by default and
can be given a shortcut from the Keymap Editor.
Navigate
The Navigate menu is one of Quill’s strongest differentiators. It assumes you may need to move through large, dense, or extracted material without visual scanning.
Core location commands:
- Go To Line…
- Go To Page…
- Back Location (default:
Alt+Lefton Windows,Cmd+[on macOS — see Fixes in 0.7.0 Beta 2 for why the macOS chord changed in 0.7.0 Beta 2) - Forward Location (default:
Alt+Righton Windows,Cmd+]on macOS — see Fixes in 0.7.0 Beta 2)
Structural movement commands:
- Next Heading
- Previous Heading
- Next Block
- Previous Block
- Outline Navigator…
- Heading Organizer…
(
Ctrl+Shift+Grave, O) for heading-level edits, section reorder, and heading validation - Match Bracket
- Next Structure
- Previous Structure
- Next Region
- Previous Region
Bookmark and position commands. The bookmark commands live together in the Bookmarks submenu:
- Bookmarks > Set Bookmark…
- Bookmarks > Go To Bookmark…
- Bookmarks > List Bookmarks…
- Bookmarks > Set Temporary Bookmark
(
Ctrl+J) - Bookmarks > Go to Temporary Bookmark
(
Ctrl+Shift+J) - Go to Percent…
- First Non-Blank
- Last Non-Blank
Bookmarks are per document and persist between sessions: each named jump point is remembered for the specific file it was set in, so when you reopen that document its bookmarks are still there. QUILL also remembers your last cursor position in each saved document and returns you to it when you reopen the file. (Untitled, never- saved documents keep their bookmarks for the current session only, since there is no file to attach them to yet — saving the document makes them persistent.)
Bookmarks survive edits. As well as a position, each bookmark quietly remembers the text around it, so jumping to a bookmark takes you to where that text actually is now — even after you’ve inserted or deleted paragraphs above it. A bookmark no longer drifts to the wrong spot the way a plain position marker would. If the bookmarked text was itself deleted, the jump falls back to the remembered position. This works for named bookmarks and the numbered quick bookmarks alike, and needs nothing from you.
Temporary bookmark (one keystroke, no dialog)
For the times you just want to mark “right here” and come straight back — no name, no picker, no dialog — use the temporary bookmark. Both commands are on the Navigate > Bookmarks submenu, just under List Bookmarks…, and in the command palette:
- Set Temporary Bookmark (Ctrl+J) sets it at the cursor.
- Go to Temporary Bookmark (Ctrl+Shift+J) jumps back to it.
(During the 0.9.0 betas these lived on Ctrl+Shift+K and
Alt+Shift+K; those chords now belong to Unquote Lines and
Keep Unique Lines, so the temporary bookmark moved to the J chords for
1.0.0.)
It is a one-shot, unnamed jump point: set it, move away, jump back. Setting a new temporary bookmark silently replaces the old one, and unlike named bookmarks, it does not persist between sessions — it is disposable scratch state by design, not a place you’d want to find again next week. Use named bookmarks for that; use the temporary bookmark when you’re actively working and just need to step away and come right back.
Numbered quick bookmarks (0-9)
Ten fixed jump slots, one per digit, each reachable in a single direct keystroke — no menu, no sub-mode to enter first:
- Alt+Shift+0 through Alt+Shift+9 sets the jump point for that slot at the cursor.
- Ctrl+Alt+Shift+0 through Ctrl+Alt+Shift+9 jumps straight to that slot.
They are stored the same way named bookmarks are — under generated names like “Quick 3” — so they persist per document with no separate storage to manage. Jumping to a slot that has not been set announces that clearly rather than failing silently.
Marks, bookmarks, and selecting a block — which is which
These three are easy to confuse because they all “mark a spot,” so here is exactly what each one is and the command that drives it.
Bookmarks are named, saved places. A bookmark is a permanent jump point that travels with the file (see above). Commands: Set Bookmark…, Go To Bookmark…, List Bookmarks…. Use these when you want to name a location and come back to it days later.
The mark ring is temporary jump points — navigation only, not selection. The mark ring is a short stack of scratch positions that lasts only for the current session and is never saved. Commands:
- Set Mark — drop a temporary point at the cursor (the status bar confirms “Mark ring point set at line …, column … (temporary jump)”).
- Pop Mark — jump back to the most recent mark (and remove it from the ring).
- Exchange Point and Mark — move the cursor to the mark.
- List Marks — show the marks currently in the ring.
The important clarification: these commands only move the cursor. They do not select text and they do not copy anything. Unlike some editors (and unlike what an older tutorial may have implied), QUILL’s mark is not a drop-an-anchor, move-away, then-cut/copy tool. It is purely a way to leave a breadcrumb and jump back to it.
To copy or cut from one point to another, use an ordinary selection. Put the cursor at the start, then either hold Shift while you move to the end (arrows, Ctrl+arrows, Page keys, Home/End), or use a structural selection command, and then Copy (Ctrl+C) or Cut (Ctrl+X). There is no separate “copy from the mark to the cursor” command — the selection is the region you copy.
Selecting a block (or a line, or a paragraph). A “block” here means the indented block at the cursor — a run of lines at the same indentation, the kind of thing you get inside a list item or a code block — not an arbitrary group you picked. The selection commands (in Edit → Selection) are:
- Select Line — the current line.
- Select Paragraph — the paragraph around the cursor.
- Select Block (Ctrl+Shift+B) — the indented block at the cursor.
- Select to Start/End of Line and Select to Start/End of Document.
- Expand Selection — grow the current selection outward to the next larger structural unit (word → line → paragraph → block → document), announcing the new scope each time.
Each announces what it selected and how many words, so you always know the exact extent before you copy or delete it.
“Structure” versus “heading.” These are both navigation, at different grains:
- Next Heading / Previous Heading move between
Markdown headings only (the
#,##,###lines) — the document’s table of contents. - Next Structure / Previous Structure move between all structural elements — headings plus list items, code blocks, tables, and block quotes — so you step through the document’s full outline, not just its headings.
- Next Region / Previous Region cycle the larger top-level regions of the window.
So a heading is one kind of structure; “Next Structure” is the broader sweep, “Next Heading” is the heading-only subset.
Favorite folders — a short, curated list for instant access
A short list of folders you mark as favorites, distinct from Windows’ recent-folders list. Recent folders tracks what you recently opened; favorites tracks what you actually want fast access to — a folder you use constantly but haven’t touched in months still belongs here, even though it long ago aged out of any recency-based list.
- Ctrl+Alt+Shift+A — Add Favorite Folder. Adds the current document’s folder. (Save the document first if it’s untitled.)
- Ctrl+Alt+Shift+R — Remove Favorite Folder… Choose one from your current favorites to remove.
- Ctrl+Alt+Shift+O — Open From Favorite Folder… Opens Quick Open, described next.
All three also live on File → Favorite Folders.
Open From Favorite Folder — a VSCode-style Quick Open
Ctrl+Alt+Shift+O opens a small dialog with a text box already focused. Start typing part of a filename and the list below filters live, case-insensitively, across every favorite folder at once — arrow to a match (each entry shows which favorite folder it came from) and press Enter, or OK, to open it.
By default the scan is top-level files only within each favorite folder, not recursive — this keeps the filter instant even if a favorite happens to contain a large nested tree, matching the “short, curated list” idea favorites are built around. Tick the Include subfolders checkbox in the dialog to search every subfolder too; it’s capped at a few thousand files so even a very large favorite can’t hang the dialog.
Code folding (accessible)
Fold a heading section or a fenced code block
(```…```) to reduce clutter while you work,
without ever losing access to what’s folded:
- Ctrl+Alt+Shift+F — Toggle Fold. Folds or unfolds the smallest foldable region containing the cursor, announcing what happened: “Folded: 14 lines under ‘Chapter Two’” or “Unfolded: ‘Chapter Two’.”
- Alt+Shift+] / Alt+Shift+[ — Next Fold / Previous Fold. Jump between foldable region boundaries, folded or not, announcing the region’s label, fold state, and line count on arrival.
- Ctrl+Alt+Shift+L — List Folds. Opens a dialog listing every foldable region in the document with its current state and line count — pick one to jump straight to it, or toggle it from there.
QUILL’s folding is deliberately built differently from folding in most other editors. There, folding hides lines visually, and arrow-key navigation silently skips right over a folded block — a screen reader user has no way to tell whether content vanished or was just collapsed. QUILL never does that: folding never changes the document text, and ordinary arrow, word, and line navigation is never intercepted. Fold state is purely something the structural commands above announce and act on. Arrow through a folded region character by character and you will read every word in it, exactly as if it were not folded — folding only changes what a jump command does, never what you can reach by moving normally.
Inline notes (sticky comments)
Inline notes are private comments you attach to a line or a selection — for queries, reminders, and running commentary while you draft. They live under Tools → Writing and have four commands (default keys shown; all remappable in the Keymap Editor):
- Add Inline Note… (
Alt+Shift+I) — note the selected text, or the current line if nothing is selected. Type the note and Save. - Next Inline Note (
Alt+Shift+J) and Previous Inline Note (Alt+Shift+G) — move the cursor to the next / previous noted text; QUILL announces the note. - Speak Inline Note (
Alt+Shift+H) — read aloud the note at the cursor. Press it again quickly (a double-press) to open the note to view, edit, or delete it.
Inline notes are anchored to your content: each remembers the exact text it was placed on (plus a little surrounding context), so it follows that text as you edit and is restored when you reopen the document (per document, saved between sessions, just like bookmarks). If the text a note was on is later deleted, the note is kept rather than silently lost. Untitled documents keep their notes for the session until you save. Notes are private to you and never written into the document itself.
If your work involves transcripts, legal text, long Markdown notes, HTML source, or extracted PDFs, spend time here. This is the menu that turns Quill from a text box into a navigable workspace. (Find Next, Find Previous, and Find All Matches now live in Edit, beside Find and Replace.)
Search
The Search menu is the across-files and pattern hub. In-document Find and Replace live in Edit; this menu covers multi-file and regular-expression work.
- Search in Files… and Replace Across Files… search and replace across a folder of documents.
- Count Regex Matches… and Extract Regex Matches… report or pull out every match of a regular expression.
- Lines in First Block Only and Lines Common to Both Blocks filter lines by block membership (set operations between two marked blocks).
Tools
The Tools menu is Quill’s workshop. It contains high-value actions that are not best understood as raw editing.
Discovery and command access
- Command Palette…
The palette is one of the fastest ways to learn Quill. It supports query modes:
- normal search or
>for general command search :to search command IDs?to favor bound commands~to emphasize recently used commands
The palette also learns from usage. Commands you use more often rise naturally.
Story Studio — organize a whole book
Tools → Story Studio… (also on the command palette as Story Studio) opens a binder for a project folder — a keyboard-navigable tree of your whole project:
- Manuscript — your chapters and scenes, derived from the Markdown headings in your manuscript files. Press Enter on a chapter to open its file at that heading.
- Characters, Places, Plot threads, Research, Brainstorm — one entry per element file. Press Enter to open it.
Two buttons act on the binder:
- Edit details… — with an element selected, opens an accessible form for that element’s structured fields (a character’s Role, Goal, Motivation, Arc; a plot thread’s Status; tags). The values are saved as front matter at the top of the element’s file; blank fields are dropped and unknown keys you added by hand are preserved.
- Compile manuscript… — concatenates every manuscript file, in order, into a new document (front matter stripped). Use File → Export on that document to save it as Markdown, HTML, Word, DAISY, and more.
A Story project is just a folder of plain-text files plus a small
project.quillstory.json companion that records the binder
order and element groups. The companion is advisory, so deleting it
never loses any writing. Story Studio is optional and additive — it
changes nothing about ordinary editing.
Vault — linked notes, search, tags, and more
Tools → Vault brings a full linked-notes workspace to QUILL — links and backlinks, search, tags, embeds, templates, daily notes, and a website export — all built for the keyboard and the ear rather than a visual graph. It is optional and additive: until you open a vault, nothing about ordinary editing changes.
Getting around your notes
- Open Vault… — choose a folder of notes; QUILL scans and indexes it, remembers it, and announces “Vault name: N notes, M links.” Do this once per notes folder.
- Follow Wikilink — put the cursor on a
[[Note]]link and run this to open that note (a[[Note#Heading]]opens at the heading,[[Note#^block]]at the block). If the note does not exist yet, QUILL offers to create it; if several notes share the name, QUILL asks which one — it never guesses. - Show Backlinks — lists every note that links to the note you are in, each read aloud with the sentence the link sits in; press Enter on one to open it at that mention. QUILL announces how many notes link here.
- Note Neighborhood — one list of both directions at once: the notes this one links out to (read with a “→”) and the notes that link back to it (read with a “←”), so you can step through everything connected to where you are. Enter opens the one you land on.
- Unlinked Mentions — finds places in your other notes that mention this note by name but have not linked it yet — the “you could link this” spots — each read with its sentence; Enter opens that note at the mention so you can turn it into a link.
- Insert Link to Note… — pick a note by title from a
list and QUILL inserts
[[Title]]at the cursor. - Rename Note… — give the current note a new name.
QUILL first tells you how many links in how many other notes point to it
and asks you to confirm; then it updates all of those
[[links]]for you, renames the file, and fixes the note’s own top heading — so nothing breaks. It never changes anything until you say yes, and stops if a note with the new name already exists. - Vault Explorer… — a keyboard tree of every note, grouped by folder. Arrow through it and press Enter on a note to open it.
- Complete Link or Tag… — start typing
[[(for a note) or#(for a tag), run this, and pick from a filtered list that narrows as you type; QUILL inserts your choice and, for a link, adds the closing]]. A spoken, focused alternative to a pop-up that appears as you type. - Go to Note… — a jump-to-note switcher. Start typing part of a title and the list narrows as you go (QUILL speaks the running count); press Down to move into the list, or just press Enter to open the closest match.
- Search Vault… — search across every note. Type a word or phrase and hear the number of results; each result reads as its note title, line number, and the matching text. Turn on Regex for pattern searches or Whole word to skip partial matches. Enter opens a result at its exact line.
Tags, embeds, and templates
- Show Tags… — the tag pane. Filter your
#tags(each with a note count), open a tag, and get the list of notes that carry it. Nested tags roll up, so#areaalso finds notes tagged#area/sub. - Speak Embed at Cursor — with the cursor on an
![[Other Note]]embed, hear the note (or the specific heading/block) it pulls in, without changing your text. - Resolve Embed Inline — replace that
![[embed]]with the actual content, as a single change you can undo with Ctrl+Z. - Insert Template… — pick a template from a
Templatesfolder inside your vault. QUILL fills in{{date}},{{time}}, and{{title}}, asks you any{{prompt:Question}}it finds (spoken), inserts the result, and puts the cursor where you marked{{cursor}}. - Open Today’s Note, Previous Daily
Note, Next Daily Note — open (creating if
needed) the dated note for today, and step back and forward through the
days. Daily notes live at
Journal/YYYY-MM-DD.mdby default.
Sharing your vault
- Export Vault as Website… — choose an output folder
and QUILL writes a small, self-contained website: one accessible page
per note, with your
[[links]]turned into real links between the pages, your![[embeds]]filled in, and an index page listing everything. It runs in the background and tells you how many pages it wrote. - Sync Vault — if your vault folder is a Git repository with a remote you control, this commits your changes, pulls anyone else’s, and pushes — all in the background. If the same note changed in both places, QUILL lists the conflicts and stops rather than overwriting anything. (Disabled in Safe Mode.) The same engine works on any folder, not just a vault — see QUILL Sync below.
- Vault Settings… — choose which folder your
templates live in (default
Templates) and the pattern for daily-note filenames (defaultJournal/{{date:YYYY-MM-DD}}.md). Leave a box empty to keep the default.
Write links by typing [[Note Title]] yourself, or use
Insert Link to Note…. Links are plain text in your file
— nothing is hidden — and resolve when you follow them, export, or open
a website build. When you preview a note that lives in
your vault, QUILL shows it resolved — [[links]] read as
their titles and ![[embeds]] filled in — and every time you
save a note in the vault, its links, backlinks, tags,
and search are updated right away, no reopening needed. A vault is just
a folder of Markdown files plus a small .quill cache;
delete the cache and nothing is lost. Every command here is on the
command palette and can be given a keyboard shortcut in the Keymap
Editor.
QUILL Sync — carrying your work between devices
QUILL does not run its own sync service — no QUILL cloud account, no QUILL-hosted storage. Instead it leans on two things that already solve syncing well: a folder your cloud provider already mirrors, and git. Two features, both optional:
Sync your settings via a folder. Open Help → Personalise QUILL (or Preferences) and look at “Where should QUILL store your data?” — the same page the first-run wizard shows. Choose “Choose a folder:” and pick a folder that OneDrive, Dropbox, Google Drive, or iCloud already keeps in sync across your devices (or a folder on a USB drive you carry between computers). QUILL writes its settings, snippets, dictionaries, and keymap there; your cloud provider or removable drive carries them to your other devices the same way it already carries everything else in that folder. There is nothing new to learn about QUILL for this — it is the existing Data Location setting, now documented as a sync strategy because that is exactly what it already does. One important limit: QUILL has no way to merge changes made on two devices at once, so don’t run QUILL from two machines pointed at the same synced folder at the same time — treat it like any shared file, one writer at a time.
Sync a folder with GitHub. Tools → Git and GitHub → GitHub → Sync Folder with GitHub… works on any folder — a writing project, a research folder, anything — not just a Vault. Point it at a folder:
- If the folder is already a git repository with a remote configured, QUILL commits your changes, pulls anyone else’s, and pushes, all in the background, and tells you when it’s done.
- If it isn’t set up yet, QUILL says so plainly and asks first — for
example, “This folder is not a git repository yet. QUILL can set it
up: this runs ‘git init’ in the folder, then adds the remote repository
you provide as ‘origin’. Continue?” Say yes, paste in your
repository’s URL (for example
https://github.com/you/your-repo.git), and QUILL sets it up and syncs. - If the same file changed in both places, QUILL lists the conflicts and stops rather than guessing — resolve them yourself, then run Sync Folder with GitHub again.
This is the exact same engine Sync Vault (above) already uses, opened up to any folder rather than only your vault — if you already use Sync Vault, this will feel identical. Both rely on your own git installation and its own saved credentials (an SSH key, or a login your system’s git credential manager already remembers) — QUILL does not ask for or store a separate GitHub password or token for this. Disabled in Safe Mode.
Writing and language
- Word Count…
- Spell Check…
- Next Misspelling
- Thesaurus…
- Dictionary Status…
- AI Hub…
- Writing Assistant…
- Prompt Studio…
- Agent Center…
- Rewrite Selection
- Summarize Selection
- Continue Writing
- Fix Grammar
- Run Python…
- Quill Eraser…
- Quill Eraser on Selection…
The Writing Assistant shell ranks Quill commands from your prompt, offers preset prompts for rewrite/summarize/continue/grammar flows, and Run Python… executes a restricted-Python transform against the current document text and selection. This restriction is an import allowlist and resource limits, not a security boundary — only run Python code you trust or wrote yourself. Prompt Studio lets you build reusable custom prompts with template variables, and Agent Center generates guided task plans that you can review before sending to the Writing Assistant.
The quick writing actions work with or without a selection:
- Rewrite Selection and Fix Grammar act on your selection if you have one; otherwise they use the paragraph at the cursor.
- Summarize Selection acts on your selection if you have one; otherwise it summarizes the whole document. On the on-device model, Summarize works in two passes — one pass pulls the plain observations out of your text, and a second pass writes a short, word-budgeted summary from those observations with the source out of view. This keeps a small local model much closer to what your text actually says, instead of inventing interpretation. Cloud providers keep a single pass, which they do not need this for.
- Continue Writing uses your selection as the lead-in if you have one; otherwise it continues from the full document.
- Quill announces the scope it chose, for example “Rewrite paragraph (42 words)”, so you always know what the action will change.
- If there is nothing to act on, Quill says so (for example “Nothing to rewrite”) instead of sending an empty request.
- If AI is turned off, these actions announce “AI is turned off. Enable ‘Use Artificial Intelligence’ in the AI menu.” and do nothing else.
Use AI > AI Hub… for a single control surface that links provider verification, model discovery, Prompt Studio, Agent Center, and Writing Assistant.
Trust and privacy baseline:
- On first run, Quill shows a trust and privacy consent acknowledgement.
- Quill does not persist AI chat session transcripts by default.
- Cloud requests happen only when you explicitly invoke an AI action.
- API keys are stored in Windows Credential Manager when available, with DPAPI-encrypted fallback storage.
AI connection flow:
- Open AI Hub and choose provider
(
Ollama (local),Ollama Cloud,OpenAI,Claude,OpenRouter,Google Gemini, orCustom OpenAI-compatible). - Confirm host URL and model.
- Enter key only when your endpoint requires authentication.
- Use Verify Connection to test endpoint and credentials.
- Use List Models to fetch endpoint models, then use the search box to filter quickly.
- Use Recommend Model to pick a model profile aligned to your hardware/task framing.
- Save settings. Quill auto-runs verification and updates the AI status line in the AI menu.
Most cloud providers are pre-configured with default host URLs so setup is key-first, not URL-first. For advanced OpenAI-compatible endpoints, use Custom and override host/model explicitly.
Quill stores optional keys in the Windows Credential Manager, with a DPAPI-encrypted file as a fallback, and announces the verification result in plain language for immediate screen-reader feedback.
Connection status messages tell you exactly what to do next:
- “Authentication failed. Check your API key.” means the key was rejected (HTTP 401). Re-enter the key.
- “Access denied. Your API key is valid but lacks permission for this model or region.” means the key works but is not allowed for that model, region, or billing tier (HTTP 403). Check the provider’s model access, billing, or quota.
- “The AI provider is warming up. Try again in a moment.” means the model is still loading. Quill retries briefly on its own before reporting this.
- “The local AI server is not running. Start Ollama and try again.” means Quill could not reach your local endpoint.
- “Rate limited by the AI provider. Wait a moment and try again.” means you sent requests too quickly.
- “Your saved API key could not be unlocked on this device. Open AI Connection and enter the key again.” appears in the AI status line when a saved key cannot be decrypted, which can happen after moving a portable install to a different Windows account or machine. Open AI Connection and re-enter the key.
For policy details, see the repository’s
docs/legal/PRIVACY.md and
docs/legal/RESPONSIBLE_AI_USE.md.
These help you stay inside the editor instead of breaking flow for small writing chores.
Ask Quill Chat setup (on-device AI)
Ask Quill Chat (AI > Writing Assistant…) is a message-style assistant that can answer, draft text, propose edits, and run Quill commands with approval before changes are applied.
Runtime backends:
- Windows and Linux:
llama.cpp(llama-cpp-python, GGUF model) - macOS (Apple Silicon, macOS 26+): Apple Foundation Models
Setup:
- Install dependencies:
pip install -r requirements.txt - Put a
.ggufmodel in%APPDATA%\\Quill\\models\\(Windows) or setQUILL_LLAMA_MODELto a full path. - Open AI > Writing Assistant… and send a prompt.
Accessibility:
- The whole conversation renders as an accessible WebView document:
each turn is a heading (speaker) you can jump between, new replies are
announced automatically, and the message box lives inside the page.
Press
Escapeto close the chat. Verified in NVDA, JAWS, and VoiceOver. - You can also connect optional providers (Ollama local/cloud, or a custom endpoint) instead of the on-device model.
Choosing the provider and model from the chat:
- A bar at the top of Ask Quill always shows the active provider and model so you know what is answering.
- Select Change provider or model to reveal the inline picker. Choose a provider and model, enter a key if needed, and Save — this also sets that choice as the default, so the next chat uses it.
Asking out loud, and choosing how Quill answers:
- Press Ctrl+F9 in Ask Quill to ask a question by voice. Press it once to start recording and again to stop; Quill transcribes what you said on your own machine and sends the text. Nothing you record leaves the computer.
- AI > Voice Reply Settings… chooses how the
answer comes back. The setting applies to every reply, however you
asked:
- Announce a short summary — the default. Brief, spoken by your screen reader, offline and free.
- Show as text only — nothing is spoken; read the reply in the transcript.
- Read aloud with QUILL’s own voice — the full reply, in whichever offline voice you use for Read Aloud (Kokoro, Piper, eSpeak, DECtalk, SAPI). Offline and free.
- Read aloud with the AI voice — the full reply, in a voice from OpenAI or Google Gemini.
- When a reply is spoken you hear all of it. The length limit exists to keep an announcement short; cutting speech off mid-sentence would be worse than not speaking, so it applies only to announcements. Set the limit to 0 to hear the whole reply announced too.
- The length you set applies to everything Ask Quill announces — answers, error messages, and the summary of an edit it proposes. It used to be fixed at 140 characters with no way to change it. Errors and edit proposals stay announcements whichever reply mode you pick, because having a long error read out in full is rarely useful; they just follow your chosen length.
- Choosing AI voice shows the provider, model, and voice. The voice list always matches the provider you picked, so you cannot accidentally pair an OpenAI provider with a Gemini voice. Preview this voice reads a sample line so you can hear it before committing.
- The AI voices cost money and are not private in the way the other options are: the reply text is sent to OpenAI or Google to be spoken, and you are billed per character. The dialog says so and estimates the cost of a typical reply. Nothing selects an AI voice for you.
- If an AI voice cannot be used — no API key for that provider, for instance — Quill reads the reply in an offline voice instead and tells you why. Your answer is never lost because a voice was unavailable.
Putting chat content into your document:
- The Insert into document controls at the bottom let you drop chat content straight into the editor.
- Choose the scope — Last response or Entire transcript — and the format — Plain text, Markdown, or HTML — then select Insert. The whole transcript includes the speaker labels; the last response is inserted as just its content.
- Copy Last Response copies the most recent reply to the clipboard.
Behavior notes:
- The assistant answers in chat by default; greetings and questions are never turned into document edits.
- Proposed actions (insert, replace, run a command) use an explicit
ApproveorDiscardstep before anything changes your document. - If model/runtime is unavailable, Quill reports this clearly and does not apply destructive changes.
- Train Writing Style (AI > Train Writing Style…) lets you teach the assistant your own writing style from samples or the current document.
The AI Hub (one place to configure every provider)
The AI Hub is now the single place to set up and
manage AI. The former separate AI Model and Connection
and Forget API Key menu items were merged into it, so
there is one home for providers, models, keys, and testing. Open it from
AI > AI Hub....
The Hub lets you work through every provider, each with its own key and default model — switching providers never loses another provider’s configuration:
- Choose a provider:
Ollama (local),Ollama Cloud,OpenAI,Claude,OpenRouter,Google Gemini, or aCustom OpenAI-compatibleendpoint. - The host, default model, and that provider’s saved key fill in automatically. Cloud hosts are prefilled, so setup is usually just a key and a model. The Model field is an editable dropdown: pick a recommended model (the free option leads for OpenRouter) or type any id, and use List models to load everything the account or device offers. Changing the provider refreshes the suggestions.
- Enter the API key (only cloud providers need one). It is stored securely on this device and kept per provider.
- Verify Connection checks the endpoint and credentials.
- List Models fetches the endpoint’s models with a search filter; Recommend Model suggests a model tuned to your hardware or task.
- Test Chat sends a tiny prompt and confirms the selected provider and model actually answer — quick quality confirmation before you rely on them.
- Forget this provider’s key clears just that one provider’s key.
- On-device model… opens the local model (GGUF) settings for llama.cpp.
- Save (OK). The chosen provider/model becomes active immediately and Quill announces plain-language verification feedback (ready, auth failure, timeout, or endpoint unreachable).
Use Prompt Studio to save reusable templates and
Agent Center to generate guided task prompts. Ollama
Cloud’s free personal-use tier (with lower limits) is available here
too.
For release-safe beta validation, Word and CSV open in the normal plain-text editor surface; AI connection and chat flows remain available.
AI engines — bring the agent you already use
QUILL’s agent (the reviewable, multi-step help behind Ask Quill and the AI Library agents) can run on more than one engine. The built-in Native engine always works, using whichever provider you connected above. If you already pay for GitHub Copilot, you can use that subscription directly — a short spoken device code signs you in, no API key at all, running on your plan’s models. The Claude Agent and OpenAI Agents engines connect with the Anthropic or OpenAI API key you already have (they do not use ChatGPT or Claude chat subscriptions — those plans do not include API access).
You choose the engine on the AI Hub → Engines tab:
- Pick GitHub Copilot, OpenAI Agents, or Claude Agent (or leave it on Native).
- Select Set Up / Install…. QUILL installs the small connector on demand (the first time only) and, for Copilot, signs you in to GitHub — using a short spoken device code in your browser when available, or the Copilot/GitHub CLI sign-in otherwise. OpenAI Agents and Claude Agent authenticate differently — with your own API key rather than a sign-in — so once the connector is installed, Set Up instead opens a small dialog to paste, save, or remove that key. It applies immediately, with no restart, and the dialog also reports whether a key is already saved.
- Select Set as Active Engine. From then on, Ask Quill and the agents run on your chosen engine, and a status line names it.
The AI Setup Wizard offers this too: choose “Use an AI agent you already pay for” and it takes you straight to the Engines tab when it finishes.
The safety is identical to everything else in QUILL. No matter which engine you pick, QUILL owns every edit: the engine proposes, and each change lands as an accessible accept/reject preview and a single undo step. The vendor agents run in a text-only mode — their own file-editing and shell tools are switched off — so they can think, but only QUILL can touch your document, and only with your approval. Everything is optional, off until you turn it on, and disabled in Safe Mode.
(Tip for administrators packaging QUILL: the most seamless
Copilot sign-in — a spoken in-app device code — activates when the build
provides a GitHub OAuth App client id via
QUILL_GITHUB_CLIENT_ID. Without it, Copilot still works
through the Copilot/GitHub CLI sign-in.)
AI Language Tools
QUILL’s AI language tools extend the standard AI Assistant with document-aware language actions you invoke directly from the AI menu.
Improve Reading Order (AI)
Some documents come to you with their text in the wrong order — a PDF laid out in two columns that extracts as one jumbled stream, a page with sidebars or text boxes, or lines that arrive out of sequence. AI > More > Improve Reading Order… (also on the command palette) sends the current document’s text to your configured AI provider and asks it to put the text back into natural reading order: it merges columns into a single flow, joins lines broken mid-sentence, and infers headings, lists, and tables — while keeping your exact wording (it never summarizes, adds, or removes content).
- It always asks first. Before anything is sent, QUILL shows a confirmation that names the provider and its host and the document’s approximate page size. Choose No and nothing is sent.
- Your document is never changed. The improved version opens as a new, unsaved document; pressing Ctrl+S there offers Save As so you decide whether and where to keep it. Your original stays exactly as it was.
- Guards. The command refuses a document larger than
the page limit (Settings ›
reading_order_max_pages, default 40) so a huge, slow, or costly request can’t happen by accident, and it is unavailable in Safe Mode. - What it needs — your own AI provider. Improve Reading Order is not tied to any one service. It uses whichever AI backend you have set up in AI > Set Up AI: OpenAI, Claude, Google Gemini, OpenRouter, Ollama (local), Ollama Cloud, or any custom OpenAI-compatible endpoint — you bring the account and key; QUILL bundles none and adds nothing to your bill. If you have not configured a cloud provider, QUILL falls back to its bundled, on-device model (Apple’s on-device model on a supported Mac, otherwise a local model that runs on your CPU), so the whole repair can happen entirely on your computer with nothing uploaded. The confirmation always names the exact provider and host it is about to use, so you know before anything is sent — and if AI isn’t set up at all, QUILL offers the setup wizard instead of failing silently.
For a scanned PDF (an image with no text layer at all), use File > Import > Import / Convert Document (OCR) instead — that path recognizes the page images and can structure the result. Improve Reading Order is for a document that already has text, just in the wrong order.
Spelling Review (F7)
F7 starts QUILL’s guided local spelling review — no AI provider, no network connection, nothing uploaded.
- Scope. If you have text selected, QUILL checks only the selection. With no selection, QUILL reviews the entire document starting at your caret.
- Dialog. The Spelling Review dialog opens with focus in a read-only Context field. The misspelled word is selected within the surrounding sentence so you can hear it in context, navigate it character by character with arrow keys, or copy the text — just like a read-only document.
- Tab order. Context → Change to → Suggestions → Change → Change All → Ignore Once → Ignore All → Read Sentence → Add to Dictionary → Undo Last → Close.
- Suggestions — arrow through spelling recommendations; selecting one fills Change to automatically.
- Change replaces the current occurrence and advances to the next issue. Pressing Enter in the Change to field also triggers Change.
- Change All replaces every remaining occurrence in
scope, preserving capitalisation (
teh → the,Teh → The,TEH → THE). - Ignore Once skips this occurrence. Ignore All skips all occurrences for the current session only.
- Add to Dictionary adds the word to your personal dictionary permanently.
- Undo Last reverses the most recent spelling action without closing the dialog. It is disabled when nothing has been done yet.
- Alt+W returns focus to Context and reselects the current word at any point — useful after arrowing around the context text.
- Read Sentence (Ctrl+R) reads the whole sentence surrounding the misspelling aloud, so you can hear the word in context without leaving the dialog. The Read Sentence button does the same thing.
- When all issues have been handled, QUILL shows a summary (changed, ignored, added to dictionary) and returns focus to the editor.
Verbosity settings
(Settings > Spelling Review):
- Concise — progress numbers and action results only.
- Balanced (default) — issue type, current word, progress, and results.
- Detailed — adds control hints and scope reminders.
- Spell word aloud — after announcing the misspelling, QUILL reads it letter by letter. The pause before spelling starts is configurable.
Spell Check Word (Alt+F7) — instant, single-word check
If you have used the “press F7 on a focused word” workflow in other word processors, Alt+F7 is that, for QUILL: it checks only the word at your cursor, with no full-document review.
- If the word is spelled correctly, QUILL announces that and nothing else happens — no dialog for the common case.
- If it is misspelled, a small list opens with the same choices you would get from the right-click spelling menu: suggested corrections, Add to Dictionary, and Ignore. Pick one and you are back to typing.
Use F7 (Spelling Review) when you want to work through a whole document or selection systematically; use Alt+F7 when you just want to check the one word you are looking at right now.
Spell check as you type stays quiet in code files
When spell check as you type is on, QUILL watches
for a misspelling as you finish each word. It deliberately says nothing
in source and configuration files — .py,
.json, .js, .css,
.ps1, .log, .yml and the rest of
the coding extensions — because every identifier, key and flag in one of
those is a word no dictionary has. A live checker there is a wall of
alerts that are all wrong, and each one costs an earcon and a status
line to read past.
Markdown is prose, so .md is checked;
the fenced code blocks, inline code spans, URLs and email addresses
inside it are skipped instead, which is the right granularity for a file
that is mostly writing.
The setting is
spellcheck_skip_code_files, on by default.
Turn it off if you want the live check to run everywhere regardless of
file type.
F7 is never affected by this. The guided review checks whatever document you run it on, including a source file: skipping is a decision about what to do when you have not said anything, and pressing F7 is saying something.
Ranked spelling (Ctrl+Shift+L) — misspellings sorted by frequency
Ctrl+Shift+L opens the misspelling list in a different order than the regular Misspelling List (Alt+Shift+L): instead of document order, the word that recurs the most comes first, with an occurrence count shown for each entry — “teh (Ln 12, Col 4, 8 occurrences).”
A single OCR misread or a repeated typo is usually the fastest thing to fix first, since resolving one entry — mentally, or via Add to Dictionary — effectively clears every occurrence of that word at once. Arrow through the list and press Enter to jump to any occurrence, exactly like the regular list. The document-order list on Alt+Shift+L is unchanged and remains the default.
Ranked Spelling Review (Alt+Shift+F7) — the full guided review, ranked
Alt+Shift+F7 is the other half of ranked spelling: the entire guided F7 Spelling Review — Change, Change All, Ignore Once, Ignore All, Add to Dictionary, Undo Last — but walking issues most-frequent-word-first instead of top-to-bottom.
This is built for genuinely messy documents: a rough OCR scan, or a document with one systematic error repeated many times. Press Change All on the top entry and the ranking re-evaluates immediately — whatever word is now most frequent among what’s left rises to the front, so you clear a document’s worst offenders first instead of hunting for them in reading order. F7 and Alt+Shift+F7 use the exact same dialog and the exact same actions; only the review order differs.
Spell check a document before saving
Turn on Settings → Editing → Spell check a document before saving (off by default) and QUILL opens the same Spelling Review (F7) automatically whenever you save, so you can correct misspellings before the file is written. Review or skip the issues as usual; the save then proceeds with your corrections. This applies to Save and Save As for the document you are editing.
Spell check as you type
With spell check as you type on, finishing a word that the dictionary does not recognize plays a soft, distinct spelling sound (from the active sound pack; if the pack has no spelling sound, QUILL falls back to the system beep) and puts “Possible misspelling” with the word on the status line. A sound rather than speech is deliberate: it never interrupts what your screen reader is saying mid-sentence.
The live alert also knows when to stay quiet. Words inside web addresses and email addresses, inside Markdown inline code (backticks), and inside fenced code blocks do not alert — those regions are wall-to-wall “misspellings” that a sighted user filters out visually, so QUILL filters them for you. The F7 review still covers the whole document; only the ambient alert is filtered.
The alert fires on a word you have finished – a space, a comma, a new line – not on one you are still in the middle of typing. Without that rule the checker judges “recie” on the way to “receive” and cries wolf before every long word.
You can turn the spelling sound on or off independently in Tools → Sound Scheme (look for “Possible misspelling as you type”), and the whole live mode with the spell-check-as-you-type toggle.
How a misspelling is said
A misspelling is the one thing in an editor that speech alone cannot convey. “receive” and “recieve” are the same sound: being told the word tells you nothing, and the letters are the answer. So when you land on a misspelling – with Next or Previous Misspelling, or in the F7 review – QUILL says the word and then, after a pause, spells it out.
The pause is the whole mechanism. It is a second utterance, not one long one, so it can be interrupted: press the next key and the spelling is cancelled unheard. A fast reader pays nothing for a feature a careful reader needs.
Twelve settings under Spelling in Settings control all of it, and QuillLite stores the same twelve under Tools ▸ Spelling ▸ Announcements, so tuning this once tunes both.
While you are typing. spelling_alert_sound plays the falling blip when you finish a misspelled word; turn it off for silence. spelling_alert_speech also speaks the word, and is off by default – an interruption while you are composing costs more than it tells you. spelling_alert_repeat_ms is the shortest gap before the same word is reported again, so one stubborn proper noun does not become a drum; zero means every time.
Spelling a word out. spell_aloud_enabled is the master switch. spell_aloud_style chooses how the letters are said: plain letters are fastest, the phonetic alphabet (romeo, echo, charlie) is unambiguous where B, D, E, P, T and V are one sound with a rumour attached, and both is for learning a word rather than checking one. spell_aloud_capitals prefixes an upper-case letter with “cap”, so MacDonald and Macdonald are told apart – worth having, because letters are spoken in upper case whatever the word does (several voices read a lone lower-case letter as a word).
When the letters follow. Three pauses, because the right pause is not the same in three places. spell_aloud_delay_ms is the one in the F7 review, where you are stopped and deciding – 800 ms by default. spell_aloud_on_navigation and spell_aloud_navigation_delay_ms cover Next and Previous Misspelling, where you may be travelling rather than deciding, so the default is shorter. spell_aloud_suggestions and spell_aloud_suggestion_delay_ms spell whichever correction you arrow onto, because choosing between two spellings by ear is exactly as impossible in a list as it was in the document. spell_aloud_first_suggestion also spells the top suggestion when the review reaches a new word; it is off by default because it doubles the arrival announcement.
Starting with a blank document, or not
QUILL opens an empty Untitled document when nothing else is being opened, which is what most editors do and what most people expect. It is a setting – open_blank_document_at_startup, under General – because “off” is a real preference that had no way to be expressed: somebody who always opens an existing file was handed a blank document to close on every single launch.
Turning it off changes only that one case. A file you double-clicked, a file named on the command line, last session’s documents and recovered unsaved work all still open, because every one of those is somebody asking for a document. QuillLite has the same setting, under the same name, in Preferences.
Quiet mode
Alt+Shift+M silences every sound at once; press it again to bring them back. One key, because “make it stop” is something you need while the noise is happening – on a call, in a quiet room, or having had enough of an earcon today. A feature you have to go and find is one that does not help at the moment you need it. The setting is shared with QuillLite, so silencing one editor silences both.
The Sound Scheme window
Tools → Sound Scheme is every sound QUILL can make, in a list you can hear.
Arrowing through the list plays each event as you land on it. That is what turns a list of a hundred and forty earcon names into a catalogue you can actually browse, and it is a checkbox under the list rather than a rule, because somebody hunting for one row should be able to pass forty in silence.
Every row says everything about itself – the group it belongs to, the event, whether it is switched on, which file it plays and how long that file is – so a screen reader reads the whole state on arrival rather than making you Tab away to find it. The buttons underneath act on whichever row you are on:
| Button | What it does |
|---|---|
| Play | Play this event now, even when the event is switched off |
| Switched on | Silence this one event without changing which sound it has |
| Browse… | Use a WAV file of your own |
| No Sound | Remove the sound from this event entirely |
| Use Default | Put this one event back to the sound the scheme ships |
A file that is not a WAV, or is longer than ten seconds, or is bigger than two megabytes, is refused when you choose it and QUILL says why. That is deliberate: a sound that fails when it plays fails silently, and a silent event is impossible to tell from one nobody set.
Save As Scheme saves the whole set under a name of your own, as an ordinary folder with the sounds copied into it – so it survives you tidying your Downloads folder, and you can zip it and send it to somebody. Delete Scheme removes one of yours; the shipped ones cannot be deleted. Restore All Defaults puts every event back and switches them all on, and it cannot half-succeed, because the sounds QUILL ships are never overwritten in the first place.
QuillLite opens the same window over the same schemes, so a scheme you build in one is offered in the other.
The sounds themselves
The bundled Ink pack now covers every event, including the ones every desktop suite has had since the nineties and QUILL did not: open, close, cut, copy, paste, delete, undo, redo, print, information, question and task finished. Those were the events most in need of a sound and the last to get one, because they are exactly the moments a screen reader says nothing about – nothing is announced when a paste lands.
Related sounds share a timbre and differ by direction, so a family is learned once rather than a cue at a time. Undo and redo are the same figure played backwards from each other. Open and close are one bell pair rising and falling; so are app start and app exit, one note longer. Cut, copy and paste are one dry wooden tick in three gestures, and delete is the same tick dropped an octave and a half with a breath of noise under it. Nothing-to-undo does not move in pitch at all, because the undo stack did not move either.
Spell-check language
Tools → Spell Check Language… chooses the language the spell checker validates against — it affects both the F7 review and check-as-you-type. English (United States) ships built in and works offline immediately. Other languages are downloaded on demand: pick, for example, Spanish (Spain) or French (France) and QUILL fetches that dictionary the first time from its own verified source (checksum-checked, with a cancelable progress window), then it works offline like English. Your choice is remembered between sessions. If you are offline or the download is cancelled, English keeps working and nothing else is affected. The downloaded dictionaries are stored under your QUILL data folder, so reinstalling or upgrading QUILL never makes you fetch them again.
Editor shortcuts (without opening the dialog):
| Key | Action |
|---|---|
F7 |
Open Spelling Review dialog |
Ctrl+F7 |
Jump to next misspelling in editor |
Ctrl+Shift+F7 |
Jump to previous misspelling in editor |
Shift+F7 |
Thesaurus |
AI Spell Check
QUILL can also send your document to your configured AI provider for a cloud-assisted spelling check. An AI connection must be configured and turned on; no text is sent until you invoke the command.
- AI Spell Check
(
AI > AI Spell Check...) sends your document to your configured AI provider and returns a list of corrections. A review dialog lets you accept, skip, or override each suggestion before any change is made. - AI Spell Check Interactive
(
AI > AI Spell Check Interactive...) works paragraph by paragraph. Corrections for each paragraph are fetched in the background while you review the previous one, keeping the dialog responsive on long documents.
AI Grammar and Style Check (Ctrl+Alt+Shift+G)
AI > AI Grammar and Style Check...
(Ctrl+Alt+Shift+G) analyses the document for grammar,
punctuation, clarity, style, and word choice. Issues appear in a list
grouped by category. The same proofread, translate, compare-navigation,
and dark-mode shortcuts now reach the command they advertise instead of
appearing inert. You can:
- Filter to a single category (Grammar, Punctuation, Clarity, Style, Word Choice).
- Accept or skip individual issues.
- Accept or skip an entire category at once.
- Accept all remaining issues.
- Press Apply and Close to apply accepted fixes as a single undo step.
Translate Selection and Translate Document (Ctrl+Alt+Shift+T)
AI > Translate Selection...
(Ctrl+Alt+Shift+T) and
AI > Translate Document... translate your text into a
language you choose from the dialog.
Providers:
AI Assistant (default): uses your configured cloud or local LLM. Works with any provider that can follow instructions (OpenAI, Claude, Gemini, Ollama, and compatible endpoints).
LibreTranslate: a free, open-source translation engine that can run entirely on your own machine — no internet connection required once installed.
Install LibreTranslate locally:
pip install libretranslate libretranslateThen enter
http://localhost:5000as the URL in the translation dialog. This is the most private option: your text never leaves your machine.
After translation:
- Copy to Clipboard: copies the result without changing your document.
- Replace Original: replaces the selection or document with the translation.
- Open as New Document: opens the translation as a new unsaved document tab.
Transcribe Audio File
AI > Transcribe Audio File... opens a file picker and
sends the chosen audio file to OpenAI Whisper for transcription.
Supported formats: MP3, MP4, M4A, WAV, WEBM, OGG, FLAC (maximum 25
MB).
Options:
- Language: auto-detect or pick a specific language for better accuracy.
- Speaker diarization (uses Deepgram): identifies who is speaking when. The transcript labels each turn with Speaker 1, Speaker 2, and so on, plus timestamps. Requires a Deepgram API key configured in AI Hub.
- Translate to English: transcribes audio in any language and returns an English translation in one step (Whisper translation mode).
When the transcript is ready, QUILL asks “What would you like me to make of this?” and offers a short, context-aware list of Transcript Actions (see the next section). Choose one and QUILL turns the transcript into a finished document — meeting minutes, action items, study notes, a clean draft — and opens it for you to review and edit. Or choose “Just keep the transcript” to land in the viewer dialog, where you can copy, insert at the cursor, or open the transcript as a new document. If AI is turned off, you go straight to the viewer.
AI > Translate Audio File to English... goes directly
to the Whisper translation flow, bypassing the language selection
step.
Transcript Actions — turning sound into a finished document
A transcript is rarely the thing you actually need; the minutes, the action items, or the clean draft are. Transcript Actions make that last step one keystroke. They are reachable in two places:
- Right after transcription, in the “What would you like me to make of this?” chooser described above.
- Anytime, on the text you are already looking at,
via
AI > Transcribe Audio > Transcript Actions.... Paste any transcript or notes (or select part of your document) and pick an action.
The built-in actions are:
- Meeting Minutes — attendees, decisions, action items with owners, follow-ups.
- Action Items — every task and commitment as a numbered, actionable list.
- Executive Summary — a concise briefing for leadership.
- Interview Notes — questions, responses, strengths, concerns, an assessment.
- Study Notes — a lecture or talk turned into organized notes.
- Q&A Extraction — every question and its answer in clean Q&A format.
- Clean Up & Draft — spoken rambling turned into a clean, readable draft.
- Follow-Up Email — a warm, ready-to-send recap with next steps.
- Key Quotes — the most notable verbatim quotes, with who said them.
- Decisions Log — just the decisions made, each with its rationale and owner.
QUILL orders the list for the recording in front of you — a multi-speaker meeting leads with Minutes and Action Items, a single voice with Clean Up & Draft — but every action is always available. The finished document opens in a new window so your original transcript is never overwritten. Transcript Actions use whichever AI provider you have configured in the AI Hub.
Setting up AI — the gentle wizard
The first item in the &AI menu is Set Up
AI… (labeled “start here” until you’ve done it). It opens a
short, friendly wizard that gets you from nothing to a working AI in
seconds, with no jargon:
- Welcome — a plain-language note on what QUILL’s AI does and that it is optional, previewed, and private by default.
- How would you like AI to run? — one choice:
- On your device with Ollama — private and free; runs on your computer with no account or key. QUILL connects to a local Ollama install.
- Use an AI account — the most capable models; connect Claude, OpenAI, Gemini, OpenRouter, or Ollama Cloud with a key you paste once and QUILL stores securely on this device.
- Not right now — keep AI off; set it up any time later.
- Connect — for an account, pick a provider, paste your key, and Test connection before continuing. For on-device, QUILL points itself at Ollama.
- You’re all set — a short summary of what you can now do, and a Keep it simple checkbox that turns on Basic mode.
QUILL also offers this wizard at the moment you reach for AI before it’s set up — for example, choosing to make minutes from a transcript — so you are never stuck at a dead end. You can re-run Set Up AI any time to change providers or switch modes.
Basic mode keeps the AI menu small for newcomers: the everyday features (Ask Quill, Transcribe, Proofread, Translate, Read Aloud, the AI Library) stay, while the power-user, agentic entries (“What can I do here?”, “Rewrite & Improve”, and “Run Agent”) are hidden until you’re ready. Turn them on any time with Show advanced AI features near the bottom of the AI menu. Existing users keep the full menu — Basic mode applies only if you choose it.
Using AI for free
You never have to pay to use QUILL’s AI. The Connect step of the wizard shows two strongly recommended free paths and picks good defaults for you:
- Most private, free — pick Ollama (on your device). It runs a model on your own computer: no account, no key, works offline, and nothing you write ever leaves your machine. Quality is more modest than the big cloud models. (You’ll need Ollama installed from ollama.com with a model pulled; the wizard checks this for you.)
- Best quality, free — pick OpenRouter. Choose Get API key to open OpenRouter’s key page in your browser, create a free key, paste it back, and QUILL preselects a strong free writing model for you (currently a Llama 3.3 70B free model). The model description says Free so you always know a choice costs nothing.
Every provider that needs a key has a Get API key button next to the key box that opens the right signup page — no hunting for where to sign up.
A few honest notes so there are no surprises:
- Free cloud models can be slower and are rate-limited. Because you use your own free key, that limit is yours alone — there’s no shared cap and no cost to anyone else.
- Free hosted models may keep or train on what you send, under their own terms. If your writing is confidential, use the private on-device option instead.
- What works on free models: everyday help — Rewrite, Summarize, Expand, Continue, Fix Grammar, Table of Contents, translate, proofread — all work well. Ask Quill works too; on a small model it automatically keeps its steps simple so it answers rather than stalling. The most involved multi-step agent tasks are where a stronger (paid) model still shows its advantage — QUILL will tell you when a task would benefit from one, but never blocks you from trying on a free model.
- QUILL cleans up on-device output for you. Small on-device models have a few predictable habits, so when you use the generative writing tools — Rewrite, Summarize, Expand, Continue, Shorten — on the on-device model, QUILL primes the model with worked examples and then quietly checks its answer for hedging (“it seems”, “arguably”), editorializing (“clearly”, “obviously”), and filler openers (“In today’s world”, “It is important to note”), doing one quick retry to remove them. Fix Grammar and Improve Reading Order are left alone, so your own wording is never changed. This runs only on the on-device model; cloud providers already write cleanly and are left untouched.
You can change your provider or model any time from Set Up AI or the AI Hub.
The AI Library — Prompts, Skills, and Agents in one place
AI > AI Library... is the single home for everything
QUILL can do with AI on your writing. It has three tabs, all sharing the
same buttons (Run, Edit, Enable/Disable, Import, Export):
- Prompts — single instructions you run on the current selection or document (“Rewrite warmly”, “Summarize”). New, Edit, Delete, and Promote a prompt into a Skill.
- Skills — multi-step workflows saved as shareable
.sqppacks. Run them, Import/Export them, Remove them, and Promote a Skill into an Agent. - Agents — the catalog of tool-using agents (Writing Companion, Reviewer, Code Doctor, and more) plus any you have saved yourself. Run them through the reviewed gateway, or Validate one against the agent standard.
The three are points on one continuum of saved AI intent. Promote lets a Prompt grow into a Skill and a Skill grow into an Agent, so you can start simple and add power only when you need it. Anything you build is yours to Export and share, and a teammate can Import it.
Build an AI Action (no syntax required)
On the Skills tab, Build Action… opens a friendly, form-based builder — the easiest way to teach QUILL something new:
- Name your action (“My Monday standup notes”).
- Start from a built-in example (Meeting Minutes, Action Items, and the rest) or a blank page. Choosing an example fills in the instructions for you to adjust.
- Describe what you want in plain language. That is the whole “programming” — no Markdown, no metadata, no syntax.
- Attach a reference (optional) — an agenda, your house style, or a past good example — and QUILL will match its format and terminology. “Make minutes that look like last month’s.”
- Save. Your action becomes a real Skill in the Library, ready to Run on any document, adjust later, Promote to an Agent, or share.
Automate transcription with watch folders
A watch folder turns “drop a file here and it just gets handled” into
a rule you set once. In Tools > Watch Folders, a
transcribe profile can now chain an AI Action onto each
recording:
- Point a profile at a folder (for example, Meetings).
- Choose a transcribe action (offline or OpenAI Whisper).
- Under Then make, pick a Transcript Action — say, Meeting Minutes.
From then on, every recording that lands in that folder is
transcribed and the minutes document is written next to it
automatically, named like standup-meeting-minutes.md. If AI
is off or no provider is configured, you still get the transcript — the
action step is simply skipped with a note, never an error. Watch folders
respect Do Not Disturb and run quietly in the background.
Offline transcription (Tools > Speech)
QUILL can also transcribe entirely on your computer, with no cloud account and without uploading your audio. No AI account or key is required — you do not need to enable Artificial Intelligence to use these features. They live under Tools > Speech:
- Manage Speech Models… lists local speech models
with their download size, accuracy, and speed, and helps you pick one
that will actually run well on your computer. The dialog opens with a
one-line summary of your machine (RAM, and whether a GPU was found).
Each model shows roughly how much memory it needs; a model that is too
big for your RAM is flagged, the best fit for your computer is marked
“Recommended for your computer,” and a larger model
warns you when no GPU is present (it will be slow on the CPU).
- Choosing what to do. Pick a model, then choose an action: Download this model if it is not installed, or Remove this model from my computer if it is. (Deletion is now an explicit choice, so it is easy to find.) Before a download starts, QUILL warns you if there is not enough free disk space.
- Downloads run in the background and show progress. A download no longer freezes QUILL: it runs while you keep working, shows a percentage in a progress window you can Cancel at any time, and announces progress as it goes. Cancelling cleans up the partial file. Models come over a secure connection from the Hugging Face Hub and are stored on your computer. Downloading is disabled in Safe Mode.
- Transcribe Audio or Video (Offline)… asks for an audio or video file and a transcript format — plain text, Markdown, or HTML — then transcribes locally and opens the result as an editable draft document. The work runs in the background so you can keep editing; QUILL announces when it is done and how many words were produced.
- Supported formats. You can pick MP3, M4A, AAC,
FLAC, OGG, Opus, WMA, WAV, MP4, M4V, MOV, MKV, WebM, or AVI. If
ffmpeg is installed, QUILL converts the file
automatically before transcribing — you do not have to make a WAV
yourself. QUILL does not ship ffmpeg, but it can fetch it for you:
Tools > Speech > Download FFmpeg… downloads the
official build (about 110 MB, with a cancelable progress bar) and sets
it up; or install it yourself once (for example,
winget install Gyan.FFmpeg) and QUILL finds it on your PATH. ffmpeg is open-source (GPL/LGPL) and fetched directly from the official builder; QUILL never bundles or redistributes it. Without ffmpeg, the whisper.cpp engine needs a 16 kHz mono WAV, while the Faster Whisper engine handles the other formats on its own. - Download Offline Speech Engine… The private, on-device speech engine (whisper.cpp) is not bundled in the installer; the first time you use offline dictation or transcription, QUILL offers to download it for you (about 8 MB, checksum-verified, with a cancelable progress bar; disabled in Safe Mode). You can also fetch it any time from Tools > Speech > Download Offline Speech Engine…, or from the all-in-one Help > Download Optional Components list (below). If you are upgrading from a version that bundled the engine, your existing copy is kept and keeps working — nothing to download.
- Download Vosk… Vosk is a tiny, very-low-resource offline dictation and transcription engine for older or low-memory computers with no graphics card. It is not bundled; Tools > Speech > Download Vosk (or the Optional Components list below) installs it on demand — checksum-verified, disabled in Safe Mode — from QUILL’s own verified download, falling back to the public package index. whisper.cpp is the default engine; Vosk is the lightweight fallback when you need it.
Download Optional Components (Help menu)
To keep the installer small, QUILL fetches several large or optional pieces only when you want them. Help > Download Optional Components… is the single place to see, get, test, and remove them all. It lists each component — most important first: Pandoc (document conversion for Word, ODT, EPUB, and RTF), PDF and Office text extraction (MarkItDown, pdfplumber, and pypdf — lets Import read text out of Word, PowerPoint, Excel, and PDF documents natively, without Pandoc or LibreOffice installed; scanned/image-only PDFs still need File > Import > OCR either way), the braille translation pack (liblouis tables and BRF profiles for the Translation submenu and BRF/embossing export), Dictation (offline speech) (a guided setup covering Whisper.cpp, Faster Whisper, and Vosk — see below), Kokoro and Piper neural voices, eSpeak NG and DECtalk voices, Audio: export, playback & chapters (FFmpeg for exporting compressed audio, the mpv playback engine, and MP3 audiobook chapter markers — all in one place, each piece fetched only when its feature is first used), the MathCAT math-speech engine, Git and the GitHub CLI (portable fallback copies for Tools > Git and GitHub > Local Git and Tools > GitHub’s Codespaces/Copilot commands — see Downloading git and the GitHub CLI below), the Node.js runtime (for Node Quillins and the Developer Console’s TypeScript interface — listed last, as the least-used extra), and any non-English spell-check dictionaries. Each row shows whether it is Installed or Available to download and its size, and selecting a row fills a plain-language description of what it enables and its impact.
On macOS, several of these come from Homebrew rather than a
QUILL download. The braille translation pack download ships a
Windows lou_translate binary, so on macOS it points you to
brew install liblouis instead — QUILL detects a Homebrew
liblouis automatically, so no download is needed there. Pandoc and
Tesseract work the same way: install them with Homebrew
(brew install pandoc, brew install tesseract)
and QUILL finds them. LibreOffice — used to import legacy Office formats
and Apple Pages — is found automatically at its standard
/Applications/LibreOffice.app install on macOS (it is never
on PATH there); install it from libreoffice.org or with
brew install --cask libreoffice if you need those import
routes.
- Download fetches a not-yet-installed component — checksum-verified, with its own progress. The Dictation (offline speech) row opens a guided setup instead of a bare download, and walks you through one step at a time — a banner at the top always shows which step you are on and the single next thing to do: 1. pick and install an engine (Whisper.cpp, light and fast; Faster Whisper, most accurate; Parakeet 3, the most reliable for dictation — see below; or Vosk, tiny and best for old or low-memory machines); 2. download a model, with the best fit for your computer already selected; 3. Test dictation to confirm it works, then set it as your default. QUILL remembers the engine you chose, so the setup reopens where you left off instead of resetting to the built-in engine.
- Test proves an installed component works, so you can be confident before you rely on it: a voice speaks a short sample so you actually hear it; the offline speech engine transcribes a spoken phrase and tells you what it heard; tools report their version. If a component just needs one more piece, Test takes you straight to get it — the guided engine-and-model picker for offline speech, or Manage Voices for a voice engine with no voice yet — rather than treating a normal not-yet-finished setup as an error. QUILL only offers to send a bug report when a test genuinely fails.
- Remove deletes QUILL’s downloaded copy of an installed component and turns its features back off (removing a voice engine you were using, for example, switches Read Aloud back to the system voice). It only ever removes copies QUILL downloaded — never a system tool or a shared install.
- Set as Default: for a voice engine (Kokoro, Piper, and the other Read Aloud engines), a Set as Default button right here in the Download Optional Components hub makes that engine — and a voice you pick from it — your Read Aloud default without opening a separate speech dialog. The button only lights up for a component that can actually be a Read Aloud default, and only once it is installed. The same Set as Default also lives in Manage Speech Models and Manage Voices (with a right-click option on the list) for the offline dictation model and for voices. Downloading a model or voice engine sets it as the default automatically; use any of these when you want to switch back to one you already have. (Voice previews also stop cleanly when you move on to another before the first finishes.)
Everything here is optional — the base app, and Windows’ built-in SAPI 5 voices, work without any of it — so download only what you need. In portable mode, components install into your portable data folder, so your whole setup travels with you on the drive.
Pandoc downloads itself when you need it. You do not have to visit this dialog first: the moment you Import or Export a Word, ODT, EPUB, or RTF document (or run Convert File) without Pandoc present, QUILL offers to download the official, pinned build right there — about 45 MB, verified, with a progress bar — and the conversion is ready as soon as it finishes. Plain-text and Markdown editing never needs it, which is why it is no longer bundled.
Running light on modest machines (Performance and Memory)
QUILL is built to run its full AI and speech feature set on a modest, CPU-only computer with limited memory — never by turning features off, only by being careful with memory. Two settings under Settings > Performance and Memory control this:
- Unload idle models after (minutes) frees the memory of an AI, read-aloud, or dictation model you have stopped using; the next time you need it, QUILL reloads it automatically. Set it to 0 to keep models loaded until you close QUILL.
- Low-resource mode keeps only one model loaded at a time and prefers the smallest model that fits. It never disables AI or speech — it simply loads them one at a time, trading a moment of reloading for a much smaller memory footprint. On a machine with very little memory it turns on automatically and tells you once, out loud, so the behaviour is never a surprise.
You do not have to touch these — QUILL picks sensible defaults for your machine — but they are there if you want to tune how much memory QUILL uses.
- Speaker attribution. If you download the “Small English with speaker detection” model (in Manage Speech Models), QUILL marks who is speaking when — each turn is labelled “Speaker 1”, “Speaker 2”, and so on in the transcript (shown in bold in Markdown and HTML). Speaker detection identifies separate turns; it does not name the people.
- Generate Captions (Offline)… transcribes a file with timestamps and saves the result as SRT or VTT caption files.
- Dictate (Offline) speaks straight into your document. Run it (or press QUILL Key + Shift + D) to start: QUILL plays a distinct start tone and shows “Dictation listening” in the status bar. Run it again to stop; QUILL plays a stop tone, transcribes what you said in the background, and inserts the text at your cursor as a single undoable edit (the status bar shows the word count).
- Dictation Microphone… chooses which microphone dictation uses, or the system default.
Locked Dictation (Ctrl+F9)
One keyboard-only way to dictate without opening a dialog or leaving the editor. It uses the same on-device Whisper engine and microphone as Dictate (Offline), so nothing is uploaded. (An earlier press-and-hold F9 mode was removed: a held key repeats and announces itself endlessly under a screen reader, so the single locked gesture is the reliable one.)
- Locked Dictation — Ctrl+F9. Press Ctrl+F9 to start a hands-free session; QUILL announces “Locked dictation on.” Speak as long as you like — across sentences and paragraphs — then press Ctrl+F9 again to finish. QUILL transcribes and inserts the text at the cursor as one undoable edit.
- Stopping safely. While recording, Escape stops and keeps your speech for transcription; Shift+Escape cancels and discards it. A session also stops automatically after five minutes, and stops and preserves your audio if QUILL loses focus.
- Pause and status. Ctrl+Shift+F9 pauses or resumes the session; Alt+F9 speaks the current state without changing it.
- Nothing is lost. Audio is saved to a recovery folder before transcription starts, and a transcript that cannot be safely inserted is kept for review.
- Dictation Settings. Tools > Speech > Locked Dictation > Dictation Settings… exposes the knobs the dictation engine reads: the session time limit, stop-and-keep-speech when QUILL loses focus, intelligent insertion spacing, and a reset that shows the one-time first-use hint again.
- Dictation History & Review. Tools > Speech > Locked Dictation > Dictation History & Review… lists every recording whose transcript was never inserted — crash orphans and transcripts that couldn’t be placed safely — so you can insert one at the cursor, copy it, or discard it (Enter inserts the selected row). If anything is awaiting review at startup, QUILL announces it and points you here, so dictated speech is never silently lost.
- Parakeet 3: the most reliable dictation engine, and QUILL prefers it once you install it. Whisper has a famous flaw for dictation: fed silence — a pause while you think, a breath before you stop — it sometimes invents text, most famously a phantom “thank you”. Parakeet 3 (an NVIDIA model, 25 languages, automatic language detection, CPU-only, about a 650 MB download from Manage Speech Models) is a different kind of engine that emits words only when it actually hears them, so silence produces nothing rather than fiction. Once its model is installed, dictation switches to it automatically; your explicit engine choice, if you have made one, is always respected, and removing the model simply returns you to Whisper. Nothing else changes — same keys, same review flow, same recovery guarantees.
- Silence is trimmed before transcription. QUILL now removes the quiet lead-in and tail from each dictation take before the engine hears it, and a recording that contains no speech at all is answered honestly with the “no speech” sound instead of being handed to an engine that might make something up. This applies to every engine, Whisper included, with no setting to manage.
- Teach dictation your words. A small file called
dictation.mdin your QUILL data folder lets you add your own vocabulary (so names and jargon come back spelled right), spoken-to-written replacements (like “new line” → an actual line break), and custom spoken command phrases. It applies to Locked Dictation and the Dictate (Offline) toggle. Your vocabulary now works twice as hard: engines that accept a hint (Whisper) are biased toward your words before transcription, and every engine — including Parakeet 3, which takes no hints — gets a fuzzy correction pass afterwards that recognises near-misses by spelling and sound, so “charge b” comes back as “ChargeBee” exactly as you wrote it, capital letters and all. Split names, run-together words, and “R&D” heard as “r and d” are all repaired; ordinary words are left strictly alone. See the Voice Interaction guide, “Teaching dictation your words,” for the format and for choosing a speech engine (Whisper’s small models, Parakeet 3, or Nemotron). - Filler words can be removed — carefully, and only if you
ask. A new option (off by default) strips hesitations like “uh”
and “hmm” from transcripts. It is deliberately language-aware: “um” is
only removed when your dictation language says it is safe, because in
Portuguese “um” means “a/an” and in German it means “at/around” — words,
not noises. With no language evidence, only the sounds that are fillers
in every language are touched. Turn it on with the
dictation_remove_fillerssetting. - Distinct sound, one-time hint. Locked Dictation plays its own earcons, and the very first time you dictate QUILL speaks a brief one-time hint about the keys.
- Remappable. Ctrl+F9 and the rest are defaults; change them in the Keymap Editor (Settings > Keyboard). You need an offline speech model installed (Tools > Speech > Manage Speech Models) and the optional microphone-capture support; in Safe Mode dictation is disabled.
- Hugging Face Token… is optional. QUILL’s speech models are open-source (MIT) and need no Hugging Face account to download. But if you fetch many models and hit Hugging Face’s rate limits, a free access token raises them. The first time you open this, QUILL explains the steps — sign in or sign up at huggingface.co, open Settings > Access Tokens, create a token with the Read role — and offers to open the token page in your browser; then you paste the token. It is entered masked and stored in Windows Credential Manager (never in a settings file); leave the box blank to remove a saved token.
Choosing a speech engine. QUILL ships with the whisper.cpp engine and uses it by default — nothing extra to install. You can add two more optional engines, each by installing its dependency:
- Faster Whisper (
fasterwhisperdependency) — a higher-throughput multilingual engine that runs in-process and uses your GPU automatically when one is present. - Vosk (
voskdependency) — a very low-resource, CPU-only English engine that runs on a ~40 MB model with no GPU. Ideal for older or constrained machines where the other engines are impractical. Models download from alphacephei.com (verified HTTPS, integrity-checked) via Manage Speech Models.
Manage Speech Models is the Dictation (Offline) tab of the Speech Settings dialog; when more than one local engine is available, it asks which Speech Engine to use, and a Set as Default button (or a right-click option) lets you pick which downloaded model QUILL uses without switching engines. QUILL remembers your choice and applies it to transcription, captions, and dictation. Each engine has its own models, so download a model after switching. All engines run entirely on your computer. Note that Faster Whisper does not label speakers — for speaker attribution, use the whisper.cpp speaker-detection model.
The offline speech engine ships with QUILL: enable
the offline speech engine (whisper.cpp) component in the
installer, or place the executable under
tools\speech\whispercpp in a portable copy — you do not
need to install anything separately or change your PATH. Then download a
model from Manage Speech Models. Offline dictation also
needs microphone-capture support (the optional sounddevice
package); if it is missing, QUILL tells you and you can still use
Windows dictation. Because automatic transcription is never perfect,
results are always a draft to review.
Cloud transcription providers (optional, via Quillins)
The offline engines above keep everything on your machine. If you want a cloud provider as well — for example OpenAI Whisper for its accuracy — install the OpenAI Whisper Transcription Quillin (a bundled extension) and configure an OpenAI API key in AI Hub. It then appears as a provider on the Dictation (Online) tab of Speech Settings, kept separate from the offline engines above so local (install-once) and cloud (API-key, per-use) options are never mixed in one list. If no cloud provider is installed, that tab explains how to add one instead of showing an empty list.
Cloud providers are opt-in and never silent: audio is uploaded only when you explicitly transcribe a file with that provider, never offline and never in Safe Mode. The Watch Folder offline transcription automation always uses the on-device engines only, so a cloud provider can never auto-upload your audio. Extensions that add a provider ship no code and request no network permission — QUILL itself performs the upload through its audited network path, so the extension never sees your audio or your key. (Developers: see the Quillin guide, “Transcription providers”.)
Read Aloud with AI Voice (OpenAI, Google Gemini, or ElevenLabs)
AI > Read Selection Aloud (AI Voice) and
AI > Read Document Aloud (AI Voice) use a cloud
text-to-speech service to speak your text in a natural, expressive
voice. This complements the on-device Read Aloud (which uses local
voices like SAPI 5, Piper, Kokoro, eSpeak, or DECtalk) with high-quality
cloud voices.
Choose the provider, model, and voice under Settings > Read Aloud:
- OpenAI — 11 voices (Alloy, Ash, Ballad, Coral,
Echo, Fable, Nova, Onyx, Sage, Shimmer, Verse) with
tts-1(fast) ortts-1-hd(higher quality). - Google Gemini — 30 voices (Kore, Puck, Aoede, Fenrir, Zephyr, and more) with Gemini 2.5 Flash (fast) or Pro (higher quality).
- ElevenLabs (export only) — premium, audiobook-grade
narration with Multilingual v2 (high quality) or Turbo v2.5 (fast).
ElevenLabs is used for audio export, not live reading;
it needs the optional
elevenlabspackage (pip install quill[elevenlabs]) and an ElevenLabs API key credential (the same key the ElevenLabs transcription provider uses).
Add the matching API key for your chosen provider in AI Hub (ElevenLabs uses your stored “ElevenLabs API key” credential).
AI > Stop AI Readingcancels playback of the current TTS session.AI > Export Document as Audio...renders the full document to a file you choose — MP3 for OpenAI and ElevenLabs, WAV for Gemini. The status bar shows an estimated cost before the export runs. (If you pick ElevenLabs for live reading, QUILL reminds you it is export-only for now.)
Long documents are split only on sentence boundaries (never mid-word), so the synthesized audio never cuts off at an awkward spot; Gemini exports add a short trailing pause so the final sentence is not clipped.
Privacy: text is sent to the provider you select
(api.openai.com or
generativelanguage.googleapis.com) in sentence-aware
chunks. No audio is stored by QUILL. See AI Privacy Reference for
opt-out options.
AI Thesaurus (Ctrl+Alt+Shift+H)
AI > AI Thesaurus... (Ctrl+Alt+Shift+H)
looks up synonyms for the selected word using your configured AI
provider. Unlike a static thesaurus, it reads the sentence the word
appears in and returns synonyms that match the actual meaning in
context.
To use it:
- Place the cursor on a word, or select it.
- Press Ctrl+Alt+Shift+H or choose AI > AI Thesaurus.
- The dialog opens with the word pre-filled and synonyms loading.
- Arrow through the list; each item shows the synonym and a brief usage note.
- Press Enter or click Replace Word to substitute the word in your document.
- Type a different word in the search box to look up another without closing.
Privacy: only the word (up to 80 characters) and the surrounding sentence (up to 400 characters) are sent. The full document is never sent for thesaurus lookups.
Document Q&A
AI > Document Q&A... opens a persistent
(non-modal) dialog where you can ask questions about your current
document or a PDF/text file you choose.
- The dialog stays open while you work. Switch back to your document or other windows at any time.
- Ask follow-up questions; the conversation accumulates a history of Q&A pairs.
- The AI answers only from the document text (grounded responses only).
- Documents longer than 80 000 characters are analysed at the first 80 000 — and the dialog says exactly how much was used (“the answer used the first 80,000 of its 120,000 characters”), spoken as well as shown, so you always know how much of your document an answer covers. Status changes and errors in this dialog are spoken too.
- Answers include a source excerpt highlighting where in the document the answer comes from.
- Copy or Insert inserts the answer text at the cursor.
To analyse a PDF, click Browse File and select the file. The text is extracted automatically (no internet connection required for extraction).
Reviewing AI changes, word by word
Whenever an AI feature proposes to change your document, QUILL opens the Review AI Changes dialog rather than editing anything directly: a checklist of changes you can accept or reject individually, applied as a single undo step. Nothing touches the document until you say so.
The review now works at word level with sentence context. Instead of hearing an entire changed line twice and hunting for the difference by ear, each change announces itself as what it is: “Changed ‘quick’ to ‘rapid’ at line 3.” The details pane adds the sentence around each change — Sentence before and Sentence after — so you can judge a one-word edit the way a sighted reviewer judges highlighted text, and the full old and new lines remain below for complete review.
When a change really is a rewrite — many scattered edits, or whole passages replaced — QUILL deliberately presents it as lines instead: hearing forty word pairs is worse than hearing the old and new lines whole. Spacing-only changes are also shown as lines, never spoken as word edits.
Suggest Document Metadata — reviewed field by field
Suggest Document Metadata… (in the command palette; bindable in the Keymap Editor) asks your configured AI to propose front matter for the current document: a title, a one-or-two-sentence summary, a handful of topic tags, and a category. The suggestions open in a review dialog where each one stands alone — you hear the field name, what the field currently holds, and the proposed value, then choose Accept, Accept and Next, Skip, or Copy Value.
Two safeguards are built in. A field that already contains something always asks before being replaced, and the default answer is No — accepting an overwrite is a deliberate act. And nothing touches your document while you review: only Apply Accepted writes the fields you approved into the document’s front matter, as one undo step. Close without applying and the document is exactly as it was.
Agentic Document Tasks
The AI menu includes quick agentic actions that run a one-shot AI task on your document or selection and show the result:
| Command | What it does |
|---|---|
| AI > Rewrite Selection | Rewrites the selected text for clarity. |
| AI > Summarize Selection | Produces a concise summary. |
| AI > Expand Selection | Develops a brief outline or passage into fuller prose. |
| AI > Generate Table of Contents | Analyses the document and returns a hierarchical TOC in Markdown list format. |
All four open an Agent Result dialog where you can:
- View the output with a step log (if a refine pass was run).
- Insert at Cursor: inserts the result without replacing anything.
- Replace Selection: replaces the current selection with the result.
- Copy: copies the output to the clipboard.
- Re-Run: reruns the same task (useful if the first output was not right).
AI Hub
AI > AI Hub... is the central configuration panel for
all AI settings. It has five tabs:
- Provider: choose your AI provider (Ollama, OpenAI, Claude, Gemini, OpenRouter, or custom), enter your API key, set the model and host URL, and test the connection.
- On-Device: configure Ollama for fully local AI. Includes recommended models and the Ollama base URL.
- Audio Services: enter your Deepgram API key for speaker diarization, and set the default maximum number of speakers.
- Instructions: read, customise, and share the built-in system prompt for every AI task. See Custom Instructions below.
- Advanced: privacy consent summary listing every action that sends data, safe mode documentation, and a Reset AI Settings button.
For the full provider setup experience (per-provider key management, model listing, and verification), use the Full Connection Settings button in the Provider tab.
Custom Instructions (AI Hub > Instructions tab)
Every AI task in QUILL has a built-in default system prompt that tells the AI how to behave. The Instructions tab in AI Hub lets you read, customise, and share these prompts.
What custom instructions are: Each instruction set is a plain-text system prompt that is automatically prepended to every AI call for that task. For example, the spell check instruction tells the AI to preserve technical terms and not flag British spellings. You can extend, replace, or turn off these instructions.
How to edit them:
- Open
AI > AI Hub...and go to the Instructions tab. - Select a task from the list on the left (e.g. “AI Spell Check”).
- The built-in default appears in the lower panel for reference.
- Type your custom instructions in the editor above it.
- Leave the editor empty to use the built-in default.
- Tasks with a custom override show a
*in the list.
- Use Copy Default to Editor to start from the built-in default and modify it rather than writing from scratch.
- Use Reset to Default to discard your changes and go back to the built-in default.
- Uncheck Enable custom instructions for this task to disable all instruction injection for that task (the AI gets the base prompt only).
- Click OK to save. Changes take effect immediately.
Built-in defaults — what each task gets:
| Task | Default instruction focus |
|---|---|
| Ask Quill / Chat | Calm, direct expert partner; insert-only text returns without preamble |
| AI Spell Check | Copy editor: genuine errors only, preserve technical terms and consistent spellings |
| Grammar and Style | Professional editor: actionable issues, preserve author voice |
| Rewrite | Improve clarity without erasing author voice; no added content |
| Summarize | One-fifth length, same register, core argument only |
| Expand | Develop into richer prose, match tone exactly |
| Table of Contents | Explicit headings only, Markdown hierarchy, no invented structure |
| Translate | Natural expression over literal fidelity, preserve formatting |
| AI Thesaurus | Contextual synonyms ranked by interchangeability, register noted |
| Document Q&A | Grounded answers only; “not in document” stated explicitly |
| Research Agent | Key points, assumptions, gaps, and suggested next actions |
| Accessibility Tune-Up | Plain language, short sentences, descriptive text suggestions |
The Summarize default above is the system prompt used on cloud providers, where the summary is produced in a single pass and aimed at roughly one-fifth of the original length. On the on-device model, Summarize instead runs a two-pass observe-then-rewrite: the second pass writes to a fixed word budget (about 150 words) rather than a fraction of the source, which keeps a small local model from padding or inventing. Your custom instruction still applies to how that final summary reads.
Sharing instructions: Custom instructions are stored
in <AppData>/Quill/ai_custom_instructions.json. You
can copy this file between machines or share individual task prompts
with other QUILL users.
How custom instructions reduce cost: prompt caching
QUILL sends every custom instruction as a separate system message, not mixed into the document text. This lets your AI provider cache the stable instruction prefix across requests, so you are not billed for re-sending the same instructions on every call.
- Anthropic Claude: QUILL marks the system message
with
cache_control: ephemeraland sends the required beta header. Claude caches the prefix for five minutes. Each cache hit is billed at approximately 10% of the normal input token cost. If you run several AI tasks in a session, the instruction text is typically served from cache on every call after the first. - OpenAI (GPT-4o and later): caching is fully automatic. OpenAI caches prompt prefixes that exceed 1024 tokens and re-uses them within a session at approximately 50% of the normal input cost. Because the system message is always the same stable text, it qualifies for caching whenever the threshold is reached.
- Ollama / local models: caching is handled internally by the model server. No special setup is needed; the system message is sent once per connection.
- Gemini: system instructions are sent via the
dedicated
systemInstructionfield. Caching behaviour depends on Google’s current context-caching policy.
You do not need to configure anything to benefit from caching. As long as at least one custom instruction is enabled (or the built-in defaults are active), QUILL automatically uses the caching path for every supported provider.
AI Privacy Reference
Every AI action in QUILL is explicit — nothing runs in the background without your request. This section describes exactly what each action sends and where.
| Action | Data sent | Service | Opt-out |
|---|---|---|---|
| AI Spell Check | Document text (chunked at ~60 000 chars) | Your configured AI provider | Do not invoke the action |
| AI Grammar Check | Document text (chunked at ~40 000 chars) | Your configured AI provider | Do not invoke the action |
| Translate (AI provider) | Selected text or full document | Your configured AI provider | Use LibreTranslate instead |
| Translate (LibreTranslate) | Selected text or full document | Your LibreTranslate server (default: localhost) | — |
| AI Thesaurus | Word being looked up + one sentence of context (no full document) | Your configured AI provider | Do not invoke the action |
| Rewrite / Summarize / Expand / TOC | Selected text or full document | Your configured AI provider | Do not invoke the action |
| Document Q&A | Document text (up to 80 000 chars) + question | Your configured AI provider | Do not invoke the action |
| Read Aloud (AI Voice) | Selected text or document (split on sentence boundaries) | OpenAI (api.openai.com), Google Gemini
(generativelanguage.googleapis.com), or ElevenLabs
(api.elevenlabs.io, audio export only), per your Settings
> Read Aloud choice |
Use a local voice (SAPI 5, Piper, Kokoro, eSpeak, DECtalk) |
| Transcribe Audio | Audio file bytes (up to 25 MB) | OpenAI Whisper (api.openai.com) |
Transcribe locally with a Quillin extension |
| Speaker Diarization | Audio file bytes (up to 2 GB) | Deepgram (api.deepgram.com) |
Disable diarization in the transcription dialog |
What QUILL never does:
- QUILL does not send data in the background. Every AI call is triggered by a specific, intentional user action.
- QUILL does not log your document content, API keys, or AI responses to any Anthropic or QUILL telemetry endpoint. QUILL has no telemetry.
- API keys are stored only on your device (Windows Credential Manager with DPAPI fallback). They are never sent to a QUILL server.
- The crash reporter (Help > Save Diagnostics) redacts API keys, file paths, and any text that looks like a secret before writing the diagnostic bundle.
On-device alternatives:
If you prefer to keep your text on your machine entirely:
- Use Ollama (local) as your AI provider. All spell check, grammar, and translation requests go only to your local Ollama instance.
- Use LibreTranslate (local install) for translation.
- Use Piper or Kokoro for Read Aloud — these are local voice engines.
- Avoid the Transcribe and Diarize actions, which require cloud services.
Reading & Dictation
- Read Aloud submenu for start or pause, stop, and voice selection
- Stop Reading stops current read-aloud immediately
- Say Selected reads the current selection aloud
- Read All reads from the cursor to the end of the document
- Move cursor to follow Read Aloud (Settings → Read Aloud) makes the cursor select each sentence as it is read, so the caret tracks what you hear and stops where the reading stopped. It is off by default: with a screen reader running, moving the selection makes the screen reader announce “selected” over the Read Aloud voice. Sighted and low-vision users who want the cursor to follow the reading can turn it on.
- Voice Command (Offline) (Tools → Speech) is push-to-talk for Quill itself: run it, speak one command — “save file”, “word count”, “next heading” — and run it again to stop and act. Recognition happens entirely on your device with the offline speech engine, and only a safe, non-destructive allowlist of commands can ever be invoked, so a misheard phrase cannot do damage. Say “cancel” or “never mind” to abort. Turn it on with the Voice commands (push-to-talk) setting (it is off by default and always off in Safe Mode).
- Voice Conversation Mode (Tools → Speech) is the hands-free version of the same tool. Run it once and Quill listens for a command, then keeps a short follow-up window open after acting so you can chain commands — “next heading”, then “read aloud”, then “word count” — without arming again between them. A warm audio cue marks every state: a rising chime when conversation mode starts, a soft two-note when the microphone opens, a gentle rise when your command is recognized (with a brief moment to say “cancel” before it runs), a sparkle when the action finishes, a quiet tick while Quill is working, and a calm falling tone if nothing matched. Run it again, or say “stop”, to turn it off. The nine cues are Sound Events you can retune or replace in any sound pack, and four settings — the pause that ends a command, the cancel window, the follow-up window, and the “still working” tick interval — let you pace it to your own rhythm (set any to 0 to switch that part off). It uses the same on-device recognition and the same safe allowlist as Voice Command, and is likewise off in Safe Mode.
- Listen for Hey QUILL (Tools → Speech) turns on always-listening: Quill listens continuously, on your device, for the phrase “Hey QUILL”. Say “Hey QUILL, save file” to run a command straight away, or just “Hey QUILL” to start one. The status bar shows the microphone is live and plays a periodic reminder, so an open mic is never a surprise; run the command again, or say “stop”, to end it. It turns itself off when Quill closes unless you turn on Keep listening for “Hey QUILL” across restarts. Off in Safe Mode.
- Ask a question by voice. In conversation or wake mode, if you speak a question rather than a command — starting with “ask”, or shaped like a question (“how do I save my document”) — Quill hands it to Ask Quill with the question pre-filled and ready to send. You press Enter to send it, so a person is always in the loop for anything that reaches the AI. This needs AI set up; questions are the only thing voice routes to a network service, and never on its own.
For the complete reference — every voice mode, every spoken command, and the privacy rules — see Voice Interaction.
- OCR Image… converts an image to text via optical character recognition.
Watch Folder
- Watch Folder Monitoring (in Settings)… toggles automatic opening of supported files dropped into a configured folder.
- Watch Folder Profiles… configures folder path, subfolders, startup behavior, and polling behavior.
- Watch Folder Queue… shows current runtime state and active configuration.
Each watch profile runs one action on every file it claims. Besides
opening, moving, copying, converting, running a macro or a sandboxed
transform, and OCR, a profile can transcribe arriving
audio: any audio or video file dropped into the folder is
transcribed on your machine with the offline speech engine and a
transcript is written next to it — nothing is uploaded. Choose the
Transcript format in the profile: plain
Text (.txt), SubRip
captions (.srt), WebVTT captions
(.vtt), or Markdown (.md).
The caption formats carry timestamps; if the engine returns no timed
segments they fall back to plain text so you never get an empty caption
file. It needs no consent; if no speech model is installed yet, the
profile tells you to download one from Tools → Speech → Manage
Speech Models. (A separate Transcribe audio (OpenAI
Whisper) action is available for cloud transcription when you
have enabled AI and configured a key.)
Read Aloud is particularly useful for proofreading by ear. OCR Image handles image-to-text work with an explicit consent and progress flow. Watch Folder automation is best for “drop and open” workflows: copy supported files into one folder and let Quill open them in the background.
Comparison
- Compare with File…
- Compare Open Documents
- Next Difference / Previous Difference
- Announce Current Difference
- Difference List…
- Toggle Synchronized Navigation
- Compare Options…
- Create Difference Summary
- Copy Current Difference / Copy All Differences
Quill’s compare model is practical and local. It supports file-to-file review, multi-document review, summary generation, and synchronized movement through differences.
When a comparison is open you can move through it from the keyboard: Ctrl+Alt+Shift+. for the next difference, Ctrl+Alt+Shift+, for the previous one, and Ctrl+Alt+Shift+D to read the current difference. The compare dialog is a keyboard-first list you can review with a screen reader, one difference at a time.
If you use a sound pack, compare mode also plays short earcons: one when a comparison opens, one when it closes, distinct ticks for moving to the next or previous difference, and a soft “blocked” tone when you reach the first or last difference with nothing further to show. You can turn any of these on or off individually in Tools → Reading & Dictation → Manage Sound Events… under the Compare section. See Sound notifications and earcons.
Braille
- Status — Read Braille Status, Read Detailed Braille Status, Read Current Line and Cell, Read Current Braille Page, Read Current Print Page, Read Progress Summary.
- Navigation — Go to Braille Page…, Next Braille Page, Previous Braille Page.
- Page Tools — Insert Braille Page Break, Remove Braille Page Break, Recalculate Page Map, Normalize Line Endings (placeholder).
- Translation (requires the optional QUILL Braille Pack) — a dynamic submenu organized into UEB (Contracted and Uncontracted), Standard American English Legacy (Contracted and Uncontracted), and More Languages (populated from the installed pack). Hidden when the pack is absent or in Safe Mode.
See Braille and BRF Support for full details on translation and the Universal BRF Pack.
Advanced
The Advanced submenu (Tools > Advanced) is the expanded home for automation utilities, developer tools, and editor-behavior power toggles.
Editor utilities:
- Toggle Read-Only Guard — prevents accidental edits to a document you are reviewing.
- Toggle Clipboard Collector / Collect Clipboard Now — accumulates clipboard entries into a running log in the open document. System-wide: while the collector is on, anything you copy in any application — browser, mail, terminal — is appended (each distinct copy once), EdSharp-style. The document autosaves after each collection when it has been saved before.
- Toggle Key Describer — announces key names instead of performing actions; useful for documenting keystrokes.
- Toggle Indentation Announcements / Infer Indentation… — announces indentation level changes as you navigate.
Macros:
- Start Recording / Stop Recording — capture a sequence of editing commands.
- Play Last Macro — replay the last recorded sequence.
- Manage Macros… — name, edit, and organize saved macros.
Macros are ideal for repetitive cleanup: record once, replay as many times as needed.
Authoring utilities:
- Regex Helper… — the guided home for regular expressions, built so you never face punctuation soup alone. A category tree holds more than a hundred ready recipes — cleanup (multiple spaces, smart quotes, zero-width characters), words and phrases, lines, numbers, dates, email and web addresses, Markdown and HTML structure, punctuation and dialogue, writing and editing checks, OCR and scan cleanup, code identifiers, and capture-and-replace transformations with ready replace templates. Pick a recipe and three things happen at once: the pattern lands in the pattern box, a plain-language explanation appears (“One or more digits. Optionally: a period…”), and a preview runs against sample text seeded from your selection, with every match read as a sentence (“Match 3: line 4, column 7: foo@bar.com”) and replace previews for the transformation recipes. The explanation is live: type or paste any pattern and QUILL explains it step by step — and a broken pattern is diagnosed in words, naming the exact character position (“Unclosed group: the open-parenthesis at character 4 has no matching close”). When the pattern is right, Use in Find All Matches carries it straight into the search flow with regex mode on — no clipboard hop — and Copy Pattern remains for everywhere else.
- Pandoc Conversion Wizard… — converts supported source files into Markdown, HTML, or plain text that opens directly as a Quill tab.
- External Tools and Format Support… — explains what each supported helper unlocks, whether Quill can already see it, and the best first-touch setup path.
- YAML Structure Editor… — inspects and edits YAML front matter and structure files.
Document Intake:
- Document Intake Report… — answers how good an extraction was and whether the source likely contained structure that did not survive.
- Review Extraction Quality… — walks through extraction quality signals interactively.
- Report Bad Extraction… — escalates a source for manual cleanup or re-extraction.
These commands matter when Quill is acting as a trusted reader for imported formats. They help answer questions like: Is this document safe to quote from directly? Do I need to escalate for manual cleanup?
An imported document opens with its own text and nothing else — QUILL never writes a heading such as “PDF Extract” or the engine name into the file you are reading. Everything about how it was read (format, engine, pages, quality score, and any low-confidence warning) is in the Document Intake Report, and the short version is announced when the file opens.
Shell Integration:
- Install Shell Integration… — registers Quill as a shell context-menu handler and protocol handler.
- Remove Shell Integration — unregisters shell extensions.
Accessibility
- Accessibility Audit…
- Keyboard Trap & Tab-Order Snapshot…
- Validate Contrast…
- Link Inventory & Alt-Text Catalog…
- Speak Cursor Address, Speak Document Status, and Speak Selection Length announce the caret position, document state, and selection size to your screen reader.
These tools help review the editor experience itself, the current document’s link surface, and low-vision presentation issues.
Customize & Support
- Preferences…
- Customize Menus…
- Profiles and Features…
- Status Bar Layout…
- Export and Back Up… / Import or Restore…
- Keymap Editor… / Export Keymap… / Import Keymap… / Reset Keymap
- Show Notifications
- Save Diagnostics…
- Open Logs Folder / Open Diagnostics Folder
- Get Help from Support…
- Check for Updates
Customize & Support merges the former separate Support and Customize submenus. All configuration and support paths live in one place, which is where both users and support staff expect to find them.
Window
The Window menu is small but useful.
- Next Document (
Ctrl+Tab; macOS:Cmd+Shift+]) — move to the next open document. - Previous Document (
Ctrl+Shift+Tab; macOS:Cmd+Shift+[) — move to the previous open document. macOS reservesCmd+Tabfor its own App Switcher, so document switching there uses Safari/Xcode’s tab-cycling convention instead. - Go to Document 1–10 (
Alt+1…Alt+9, andAlt+0for the tenth) — jump straight to a document by its position instead of cycling. If no document is open at that position, QUILL says so and stays where you are. Like every shortcut, these are remappable in the Keymap Editor. - Send to System Tray — hide QUILL to the notification area without closing it.
- 1: filename.txt (active), 2:
other.md, … — every open document appears directly on the menu,
numbered. Press
Alt+Wto open the Window menu and then the number key to jump straight to that document. The active document is marked. The list updates automatically when you open or close a file, and updates the name immediately when you save an untitled document.
When you are juggling multiple notes, extracted files, and audit previews, these commands keep the workspace feeling controlled.
Help
The Help menu is where Quill becomes a guide.
- Open User Guide opens this guide as an in-app document.
- Open Welcome Guide opens a lighter, profile-aware getting-started document.
- Open Keyboard Reference generates the current live shortcut reference from the active command registry.
- Status Page opens a live view of what QUILL is doing right now — see Application Status page below.
- Save Diagnostics… writes a local diagnostics bundle you can review before sharing.
- What Can I Do Here? gives context-aware assistance.
- Why Don’t I See a Feature? explains profile-driven feature visibility.
- Feature Profiles commands let you switch profile, run health checks, undo the last profile change, reset to Essential, and run onboarding.
- Personalise QUILL… (the first-run setup wizard) can be rerun at any time to adjust your keyboard pack, feature profile, remote access, AI, reading and accessibility, writing tools, data location, and startup behaviour.
- Get Help from Support… (Ctrl+Alt+F2) opens the accessible support form and then hands the finished message to your own mail program, addressed to support@community-access.org — a help desk a person answers, not a public issue tracker you would need an account to read.
- Check for Updates… verifies the signed update
manifest, offers the download, and can close Quill so setup can run
immediately. If you are running the portable build,
QUILL recognises this and offers the portable
.zipfor the new version instead of pushing the installer at you — it downloads to your updates folder, and Quill offers an Extract now button to unzip it into a ready-to-run sibling folder for you. Either way, applying a portable update is always a manual step: Quill never replaces its own running files in place (they may be locked while it’s open), so after extracting, copy yourdatafolder into the new version’s folder and launch from there. Installed copies keep receiving the installer, which does apply itself when run. - About Quill shows version, publisher details, and linked third-party dependency attribution with license and version metadata.
- Open Third-Party Notices opens a full notices document with dependency tables and bundled license texts.
If you only remember one thing about Help, remember this: it is a working surface, not a dead-end menu. The welcome guide teaches the basics, the keyboard reference reflects your live bindings, the user guide gives the full map, diagnostics package the current state, and and Get Help from Support turns that state into a message somebody can answer.
Menu stability note: Quill now defers internal menu-state updates while native menus are open, then applies them after menu close. This prevents rapid-arrow navigation churn and keeps Help menu navigation stable.
0.7.0 Beta 2 (macOS): the Help menu is now registered as the macOS system Help menu, so the conventional
Cmd+?shortcut works. See Fixes in 0.7.0 Beta 2 for the full list.
How to report a problem from inside Quill
Use this path when Quill is behaving unexpectedly or when you want to send the team a feature request.
- Open Help -> Get Help from Support… (Ctrl+Alt+F2). The form opens as a dialog; the fields are plain, labelled controls your screen reader reads by name.
- Pick what kind of message it is, give it a subject, and describe what happened. What you expected and the steps to reproduce it are optional, and worth more than anything else when you can give them.
- Fill in your email address if you want an answer. It is optional on purpose — you can report a problem without giving one, you simply will not be able to be replied to.
- Choose Send. Your own mail program opens with the whole message already written, addressed to support@community-access.org, with QUILL’s version, your Windows version and your screen reader filled in at the bottom. Nothing is sent until you send it there, so you can read it over or add anything first. Escape cancels without writing anything.
If this machine has no mail program set up — webmail only, say — QUILL puts the whole message on your clipboard and tells you the address, so nothing you typed is lost. Writing to support@community-access.org yourself always works just as well; there is no form you have to use. Need to share more detail? Help -> Save Diagnostics… remains available as a standalone export you can attach to your reply.
The in-app submit works on every install, including right after an upgrade: every build (Windows and macOS, release or beta) now bundles the reporting token, with no opt-out, so the “no token” message some of you saw after upgrading an earlier beta cannot recur.
If a build that is already running is found to be missing the bundled token, Check for Updates offers to reinstall the latest release even when it is the same version you already have — the dialog explains that the install restores the bug-report token, so reinstalling the same version is not confusing. A silent background update check only records a notification instead of auto-reinstalling the running version; choose Skip this version to silence it, and the offer stops the moment the token is present again.
When QUILL crashes: the new crash-submit dialog
When an unhandled exception closes QUILL, a dialog now appears during the beta phase so you can review a redacted summary and choose whether to send it to the developers.
- A native dialog appears with the heading Report Crash.
- The dialog opens with a read-only Report preview panel showing the redacted summary: the last 10 commands you ran, the active document’s name and encoding, the platform and screen-reader information, and the last 12 frames of the traceback. Personal data and credential-shaped strings are scrubbed before the preview is rendered.
- Three free-text fields are ready to type into: What were you doing when this happened?, What command do you think triggered it?, and Expected behaviour. Each field is redacted before the report is built, so a path or token you paste by accident never leaves your machine.
- Three buttons:
- Don’t send (the default button) – close the dialog, leave the local crash file in place, send nothing. Escape is also bound to this button.
- Copy to clipboard – put the same redacted summary on the system clipboard so you can paste it into a manual report.
- Send report – submit the redacted summary to the project’s public issue tracker. This requires a configured GitHub token; if the token is absent the report is copied to the clipboard instead, and nothing is submitted silently.
- The local crash file is always saved to
app_data_dir()/crash-reports/, regardless of which button you choose. You can find it later from Help -> Open Diagnostics Folder.
If you do not want the dialog at all, turn it off in Preferences -> General -> Offer to send crash reports automatically. The local crash file is still saved; the dialog is the only opt-in here.
Application Status page
Help -> Status Page opens a non-modal window with four tabs, arranged so you can leave it open in the background while you keep working:
- Status — an at-a-glance Overview (version, active profile, background task count, queued notifications) plus per-feature detail rows (BITS Whisperer, Read Aloud engine and voice settings) when those features are enabled.
- Tasks & Downloads — one live row per background job: name, status, progress, start time, and finish time. This is where batch conversions, model downloads, and other long-running work report their progress.
- Features — every feature ID QUILL knows about, its display name, category, and whether it is currently on.
- Actions — a plain-text log of recent actions QUILL has taken.
Each of the three list tabs is a normal accessible list: arrow up and down to move between rows, Left and Right to move between columns, Tab to reach the Refresh and Close buttons. The page also refreshes itself automatically every two seconds so downloads and task progress stay current without you pressing Refresh — and as of 0.9.0 Beta 3, that automatic refresh no longer disturbs your position in the list: arrow down to a row, and it stays the focused row through the next automatic update instead of snapping back to the top.
Writing and Editing
Quill’s editing model is fast once you stop thinking of it as only a textbox.
Everyday editing
Use the familiar commands first:
Ctrl+Zto undoCtrl+Yto redoCtrl+X,Ctrl+C,Ctrl+Vto move textCtrl+Ato select everything
Quill adds two especially useful ideas on top of that.
Repeat Next Command
When you need to do the same thing several times — move down twenty lines, delete ten words, insert forty dashes, or replay a macro — you do not have to press the key over and over. Choose Edit → Repeat Next Command…, type how many times, and the next command you run repeats that many times. Then the count clears automatically, so ordinary editing carries on as normal.
A few details:
- It works with almost any command, including movement, deletion, insertion, and a recorded macro.
- The count is capped at 1000, so a slip of the finger can never run away.
- It ships without a keyboard shortcut. If you use it often, assign one in Preferences → Keyboard → Keymap Editor (search for “Repeat Next Command”).
This is the keyboard-first “Repeat” idea from the classic WordPerfect Editor, brought into QUILL.
Restore Deleted Text
Undo (Ctrl+Z) puts the last edit back exactly where it
was. Sometimes you want the opposite: you deleted a sentence, and now
you want to drop it somewhere else. Edit → Restore
Deleted Text… remembers the last three blocks you removed with
QUILL’s structured delete commands — delete to start or end of line,
delete to start or end of document, and delete paragraph — and lets you
pick one from a list and re-insert it at the cursor.
- The list shows each deletion newest-first with a short preview and its length, so you can tell them apart by ear.
- If there is only one remembered deletion, it is restored immediately with no list.
- Like Repeat Next Command, it ships unbound; assign a shortcut in the Keymap Editor if you like (search for “Restore Deleted Text”).
This is the modern, place-it-anywhere form of the classic Editor’s “Cancel” buffer.
Copy Tray
Copy Tray is twelve independently addressable clipboard slots that survive application restarts. Each slot holds text you copy there explicitly. Unlike the system clipboard — shared across every application and reset on every copy — Copy Tray slots belong exclusively to QUILL and hold their contents until you replace or clear them.
Pasting from a slot is a single chord: hold
Ctrl+Shift and press a number key.
| Key | What happens |
|---|---|
Ctrl+Shift+1 through Ctrl+Shift+9 |
Paste from slots 1–9 |
Ctrl+Shift+0 |
Paste from slot 10 |
Ctrl+Shift+- |
Paste from slot 11 |
Ctrl+Shift+= |
Paste from slot 12 |
Copying to a slot uses the QUILL key prefix followed by the same key with Shift:
| Key | What happens |
|---|---|
Ctrl+Shift+Grave, Shift+1 through
Shift+9 |
Copy selection to slots 1–9 |
Ctrl+Shift+Grave, Shift+0 |
Copy selection to slot 10 |
Ctrl+Shift+Grave, Shift+- |
Copy selection to slot 11 |
Ctrl+Shift+Grave, Shift+= |
Copy selection to slot 12 |
Multi-press paste. Press the paste chord multiple times quickly:
- Single press — paste the slot’s content at the cursor (standard behaviour).
- Double press — peek: QUILL announces the slot’s content without pasting it. Useful to check what a slot holds before committing to a paste.
- Triple press — open the Copy Tray dialog directly, focused on that slot.
Copy to Next Empty Slot.
Edit > Copy Tray > Copy to Next Empty Slot copies the
selection to the first unoccupied (and unpinned) slot in order 1–12 and
announces which one: “Copied to slot 4 (first empty).” If all twelve
slots are occupied, QUILL tells you rather than silently overwriting
anything.
Search Tray Slots.
Edit > Copy Tray > Search Tray Slots... opens a small
search dialog. Type any word or phrase; QUILL searches all slot text and
labels and announces matching slots. Press the corresponding digit key
to paste that slot directly, or Escape to cancel.
Pinned slots. From the Copy Tray dialog, any slot can be marked Pinned. Pinned slots:
- Are never overwritten by “Copy to Next Empty Slot” routing.
- Are announced with a “pinned” prefix: “Slot 1 (pinned — signature)”.
- Persist the pin flag in
copy_tray.jsonacross restarts.
To pin or unpin a slot, open the Copy Tray dialog
(Ctrl+Shift+Grave, X), select the slot, and use the
Pin/Unpin button.
Paste submenu slot labels. The
Edit > Copy Tray > Paste from Tray submenu shows the
label and a text preview for every occupied slot: “1 signature — Hi, I
wanted to follow…” Screen readers hear both the label and the preview
when navigating the submenu.
Open the tray dialog:
Ctrl+Shift+Grave, X (or
Edit > Copy Tray > Open Copy Tray...).
The dialog lists all twelve slots. Each row shows the slot number, an optional label, and a preview of the stored text. Navigate with arrow keys. Buttons:
- Paste — insert the selected slot’s text at the cursor. Also activated by double-clicking or pressing Enter on a row.
- Paste from Clipboard — store the system clipboard into the selected slot.
- Pin / Unpin — toggle the pin state for the selected slot.
- Save Changes — save edits made directly in the content area.
- Clear Slot — empty the selected slot.
- Close — close without pasting.
Status bar. The Slots: X/12 cell in the
status bar shows how many of the twelve slots are occupied. Click the
cell to open the Copy Tray dialog. Add the cell via
Tools > Customize & Support > Preferences > Status Bar
if it is not visible.
Tray icon access. The system tray icon menu also includes a Copy Tray submenu listing all occupied slots. Click any slot entry to paste its content into the active editor. This makes QUILL’s clipboard available from the tray without bringing the window to the front.
Tips.
- Keep a signature, disclaimer, or standard heading in slot 1 and pin it. One chord pastes it anywhere and “Copy to Next Empty Slot” will never overwrite it.
- Use labelled slots for a research session: slot 1 “intro quote”, slot 2 “methodology note”, slot 3 “source URL”. Copy one fragment per slot as you read, then paste in order when drafting.
- Double-press any paste chord to hear what is in that slot without pasting — useful when navigating your tray by memory.
- Slots survive restarts. Build a small library of recurring fragments you reach for daily.
- All bindings are reassignable in the Keymap Editor
(
Tools > Customize & Support > Preferences > Keyboard).
Look Up: dictionary, thesaurus, and encyclopedia
Right-click a word (or select it and open the context menu) for Look Up, or Tools > Thesaurus… for synonyms. Look Up combines an offline dictionary/thesaurus with online sources when you have consented to online lookups (Free Dictionary and Datamuse for definitions and related words) — and now, a short Wikipedia summary alongside them, with a link back to the source article. A disambiguation page or a word with no real Wikipedia entry simply shows no encyclopedia section, rather than a list to sort through. Keep Look Up fully offline any time from its consent setting; nothing about the encyclopedia summary changes that choice.
Clip Library
Copy Tray’s twelve slots are deliberate and curated — things you
explicitly chose to keep. Clip Library
(Edit menu) is a second, complementary tier: a much bigger,
searchable rolling history, up to 200 clips.
- Edit > Keep Selection in Clip Library remembers the current selection. Keeping the same text again (from the same source) is a no-op — it is already there.
- Edit > Open Clip Library… opens the dialog: search as you type, Favorite a clip so it is never evicted as the history fills up, Remove one you no longer need, Copy to Clipboard, or Promote to Copy Tray… to give a clip a permanent, labeled slot once it earns one.
- Automatic capture. Turn on Preferences > Editing > “Automatically keep everything you copy in the Clip Library” (off by default) and every copy you make inside QUILL — the menu, its shortcut, or a right-click Copy — is remembered with no separate Keep step. It only ever sees copies made from within QUILL, never the system clipboard at large, and never anything copied before you turn it on.
- Rename… gives a clip a short name — far easier to find later than its first few words. Leave the name empty to go back to a preview of the text.
- Combine Marked… joins several clips into one piece of text. Mark them with Ctrl or Shift (ordinary arrow movement still selects just one), choose a separator — space, comma, full stop, vertical bar, new line, or blank line — and the joined text goes on the clipboard, in the order the clips appear.
- Save as Abbreviation… turns a clip into an abbreviation. Because QUILL and Quill Inkwell share one abbreviation library, a clip saved this way is then typeable in every application, not only here.
What the Clip Library is not. It remembers what you deliberately keep or copy inside QUILL. It does not watch the system clipboard, and it keeps no history of what you copy in other programs. If you want a full clipboard history across everything you do, use a clipboard manager alongside QUILL; the two do different jobs.
- Format. What “Copy to Clipboard” puts on the clipboard, and what Send/Copy as Email sends, both follow the same Preferences > Editing > “Kept and sent content format” setting (plain text, Markdown, or HTML) — change it once, and both features follow.
Send as Email / Copy as Email Body
File > Send as Email opens your default mail client
with the current selection — or the whole document if nothing is
selected — as the message body.
File > Copy as Email Body renders the same content and
puts it on the clipboard instead, for the common case where a mail
client truncates or refuses a very long pre-filled message. Both read
the same content-format setting as the Clip Library.
Using QUILL as an external editor (Thunderbird and others)
QUILL launches one process per file and exits when you close the window — exactly the contract “external editor” integrations expect, so no special QUILL configuration is needed. For Thunderbird:
- Install the External Editor Revived add-on in Thunderbird (Tools > Add-ons and Themes, search for it; it also needs its small messaging-host companion, which its own setup page walks you through).
- In the add-on’s settings, set the editor to QUILL’s full path —
typically
C:\Users\<you>\AppData\Local\Programs\QUILL for All\quill.exeon Windows (copy the exact path from your QUILL shortcut’s Target field). - Compose a message, press the add-on’s Edit-externally shortcut (Ctrl+E by default): your draft opens in QUILL with every QUILL feature available — spell check, read aloud, AI tools, braille. Save (Ctrl+S) and close QUILL, and the text lands back in Thunderbird’s compose window.
The same recipe works with any application that launches an editor on a file and reads it back when the editor exits.
AutoOutline: numbered headings
Format > Update Outline Numbering numbers every
heading in your document by its nesting level, written as literal text
directly into the heading:
- Numeric (default):
1,1.1,1.2,2,2.1… - Legal:
I,I.A,I.B,II…
Choose the style in Preferences > Editing >
“AutoOutline numbering style.” Because the number is literal
text — not a rendering overlay — it reads aloud, survives copy and
paste, and exports cleanly with nothing extra to configure. Add, remove,
or reorder headings, then run Format > Update Outline
Numbering again: it replaces the old numbers rather than piling
new ones on top. Format > Remove Outline Numbering takes
them back out.
Work Personas
A Work Persona is a named bundle: a feature profile, a default working folder, a set of favorite files, and (optionally) a keymap profile — everything that defines one context of your work (school, a freelance client, a novel-in-progress), reachable in one action.
Open Tools > Work Personas… to manage them:
- New Persona, fill in a name, pick a feature profile, browse to a working folder, add favorite files, and optionally choose a keymap profile, then Save.
- Apply Now switches your feature profile, changes your working folder, reopens your favorite files, and applies the keymap (keymap changes take effect on your next restart) — all in the current session.
- Generate Shortcut… writes a double-clickable
launcher that opens QUILL directly into that persona, so a persona is
reachable without QUILL already running — a real Windows shortcut when
possible, a
.batfile otherwise on Windows, or a Finder-launchable.commandshell script on macOS (double-clicking it opens QUILL in Terminal). - From a terminal or another shortcut,
quill --persona "Persona Name"does the same thing.
Work Personas are convenience bundles for one person’s different contexts — not multi-user accounts, and not a replacement for Story Studio, Notebooks, or Copy Tray, all of which a persona can point to.
Saving in Different Formats — what happens to your file
File > Save As genuinely converts your document to the format you pick in the “Save as type” list — it never just renames the file. QUILL’s editor holds your text in one clean canonical form; choosing a type in Save As re-serializes that text into the chosen format on disk. Here is exactly what each choice does:
- Markdown (.md) — your text is written exactly as it is in the editor. This is QUILL’s native format; nothing is converted or lost.
- Text (.txt) — also written exactly as-is, including any Markdown markup, so a plain-text file makes a perfect round trip. If you want the markup stripped (headings and emphasis flattened to plain words), use File > Save As Plain Text instead — that command also offers to keep your formatting in an Illumination sidecar.
- HTML (.html) — converted to a complete standalone web page with your document title, ready for a browser.
- Rich Text (.rtf) — converted with full formatting fidelity: fonts, sizes, colors, highlights, and alignment all carry over.
- Word (.docx) — converted to a real Word document. Headings become Word heading styles (so Word and screen readers can navigate them), each editor line becomes one Word paragraph (your line breaks are preserved exactly), and hidden-codes formatting — font, size, color, highlight, alignment — carries onto real Word runs.
- A typed extension QUILL cannot write (for example
typing
notes.pdfin the name box) — QUILL refuses rather than writing a broken file, and for PDF, ODT, and EPUB it offers to open File > Export, which can produce them properly through Pandoc.
You keep editing QUILL text. After a converting Save As, the file on disk is Word (or HTML, or RTF) — but your editing surface still holds QUILL’s clean text, and every subsequent Ctrl+S converts it again to the saved format. QUILL announces this after the save (“Saved as report.docx, Word format. You are still editing QUILL text; each save converts it to Word.”) so the model is never a mystery. The window title and tab title update to the new name immediately, and a plain Ctrl+S from then on saves silently to the same file.
Your originals are protected. If you opened a PDF, EPUB, spreadsheet, or presentation, what you are editing is extracted text — the binary original cannot hold it back. Pressing Ctrl+S on such a document never overwrites the original: QUILL explains and opens Save As so your edits land in a new file, in a format that can actually hold them.
Filename suggestions. When you save an untitled
document, QUILL pre-fills the name box from the document’s first line
(leading # marks, quotes, and bullets are stripped, and
invalid filename characters removed). This is on by default; turn it off
with Suggest a filename from the first line in
Preferences. It only ever suggests — type anything you like
over it — and it never renames an already-saved document.
Choosing a conversion engine
More than one converter can handle a Word document, and they make different trade-offs. QUILL lets you pick, and tells you the outcome of each choice in plain language:
- Word document reading engine (Preferences >
Editing) — how a
.docxbecomes editable text when you open it. Auto (default) tries MarkItDown first and falls back to a plain extract. MarkItDown is fast and reliable: headings, lists, and tables come through; images, comments, and fonts do not. Pandoc keeps richer structure — footnotes and complex tables survive better — and needs Pandoc installed; if Pandoc is missing, the preference quietly degrades to Auto rather than failing your open. - Word document saving engine (Preferences >
Editing) — how your text becomes a
.docxwhen you save. Auto (default) prefers the native writer. Native keeps QUILL’s formatting codes — fonts, sizes, colors, highlights, alignment — and maps each editor line to one Word paragraph; it is the best choice for documents written in QUILL. Pandoc maps structure to Word styles — headings, lists, tables, links, and footnotes — but drops font, size, and color codes. - Convert File dialog — the Conversion engine choice (Auto, Pandoc, or MarkItDown) applies to one conversion at a time, and a description under the choice updates as you arrow through it so you hear each engine’s outcome before converting. MarkItDown applies only when the source is Word, PowerPoint, Excel, or PDF and the output is Markdown or plain text; choose it for anything else and QUILL says so and offers Pandoc — it never silently substitutes an engine you did not pick.
These preferences exist because “convert” is not one thing: a
structure-first engine and a formatting-first engine produce honestly
different Word documents from the same text. The defaults are right for
almost everyone; the choices are there for when they are not. (The
engine comparison evidence lives in
docs/qa/converter-bakeoff.md.)
What carries over between formats
QUILL converts through one clean internal form, so what survives a Save As (or a conversion) depends on the feature, not the exact pair of formats. This table is what QUILL’s own tests verify. ✅ means it carries over as that format’s native structure; ◑ means it carries over but as text or as QUILL’s portable markup rather than a native object; ✕ means it is not preserved.
| Feature | Markdown | HTML | Word (.docx) | Rich Text (.rtf) | Plain text (.txt) |
|---|---|---|---|---|---|
| Headings (1–6) | ✅ | ✅ | ✅ | ✅ | ✕ |
| Bold, italic | ✅ | ✅ | ✅ | ✅ | ✕ |
| Underline | ◑¹ | ✅ | ✅ | ✅ | ✕ |
| Strikethrough | ◑¹ | ✅ | ✅ | ✅ | ✕ |
| Superscript / subscript | ◑¹ | ✅ | ✅ | ✅ | ✕ |
| Text colour / highlight | ◑¹ | ✅ | ✅ | ✅ | ✕ |
| Font family / size | ◑¹ | ✅ | ✅ | ✅ | ✕ |
| Links | ✅ | ✅ | ✅ | ✅ | ✕ |
| Bullet lists | ✅ | ✅ | ✅ | ✅ | ✕ |
| Numbered lists | ✅ | ✅ | ✅ | ✅ | ✕ |
| Blockquotes | ✅ | ✅ | ◑² | ◑² | ✕ |
| Code blocks | ✅ | ✅ | ◑² | ◑² | ✕ |
| Horizontal rule | ✅ | ✅ | ◑² | ◑² | ✕ |
| Tables | ✅ | ✅ | ✅ | ◑³ | ✕ |
| Images | ◑⁴ | ✅ | ✕⁴ | ✕ | ✕ |
| Paragraph alignment | ◑¹ | ✅ | ✅ | ✕ | ✕ |
| Page breaks | ◑¹ | ✅ | ✕ | ✕ | ✕ |
Notes:
- In Markdown, underline, strike, super/subscript,
colour, highlight, font, alignment, and page breaks are carried in
QUILL’s hidden-codes markup — invisible while you edit, and
materialised natively when you export to HTML, Word, or RTF. Markdown
itself has no standard syntax for these, so another Markdown app will
show them as QUILL’s
[text]{…}codes rather than the effect. - Blockquotes, code blocks, and horizontal rules are
Markdown-native and render natively in HTML; in Word/RTF they appear as
their literal Markdown markers (
>,```,---) rather than a Word blockquote or code style. - Tables: tables now travel as real tables between
Markdown, HTML, and Word. A Word table you open in QUILL
becomes a clean Markdown/GFM table (fully editable and navigable);
Markdown/HTML tables stay native; and a table you save to Word
becomes a genuine, editable Word table with a proper repeating header
row (so a screen reader announces the column headers). The one exception
is RTF: a table saved to
.rtfis written as readable pipe-text rather than a native RTF table. - Images: an image reference
(
) round-trips through Markdown and renders as<img>in HTML. QUILL does not embed image files into Word, and images embedded in a Word document you open are not carried into the text.
Plain text (.txt) never carries formatting — that is the promise of plain text. Use Save As Plain Text if you want the markup deliberately flattened (with the option to keep your formatting in an Illumination sidecar).
Import and Export
QUILL can convert between the formats the people around you actually use, without you leaving the editor. File > Import brings a non-QUILL document into QUILL as a new tab. File > Export saves the current buffer as a different file type. Both routes use Pandoc on a background thread, so the editor never freezes. Exports preserve your line breaks exactly: one editor line is one paragraph in the exported document, in every format.
Import (File > Import): Markdown, CommonMark,
GitHub-Flavored Markdown, HTML, Word documents (.docx),
OpenDocument Text (.odt), Rich Text (.rtf),
plain text, CSV / TSV tables, EPUB books, LaTeX / TeX.
Export (File > Export): the same set plus PDF and a DAISY Talking Book (both export only).
A few minutes of muscle memory covers most workflows:
- Pick File > Import > Word Document, choose a
.docx, and a new Markdown tab opens with the document ready to edit. - Pick File > Export > EPUB Book, choose a folder, and QUILL writes an EPUB next to your current file.
- Pick File > Export > PDF to publish a finished document.
DAISY Talking Book export. File > Export
> DAISY Talking Book saves the current document as a DAISY
2.02 text-only talking book — the accessible book format read by DAISY
software and by hardware players such as the Victor Reader Stream,
Plextalk, and APH units. A DAISY book is a folder rather than a
single file, so the name you choose becomes a folder holding
ncc.html, content.html, and
book.smil. Your headings become the player’s navigation
points, and Markdown styling is flattened to clean readable text. The
book carries no audio, so a player reads it with its own text-to-speech;
you can also open the folder in APH Book Wizard Producer to record or
synthesize a full text-and-audio book. This export reads what is on
screen, so you do not have to save first.
Single-file keyboard path.
File > Import and File > Export are
regular menu items — open the menu, arrow down, press Enter. There is no
single shortcut for the whole list, because the format choice is the
whole point of the command. The Command Palette
(Ctrl+Shift+P) is the fastest path: type
import or export and pick the format from the
filtered list.
Post-conversion prompt. When the target format is editable in QUILL (Markdown, CommonMark, GFM, HTML, plain text, CSV / TSV) the editor asks whether to open the new file in a new window. Press Yes to open, No to keep working where you were. PDF, DOCX, EPUB, ODT, and RTF do not prompt because QUILL cannot edit them directly; a confirmation message tells you where the file landed and copies the path to the clipboard so you can paste it into File Explorer.
Out of scope. PDF import is intentionally not supported — Pandoc cannot do it reliably, and the dedicated braille and DAISY pipelines are the right tools for print-to-braille conversion. For every format Pandoc supports that is not in the Tier-1 list, open Tools > Pandoc Conversion Center… for the roadmap note.
Batch Conversion
When you have a folder full of documents to convert, opening them one at a time is not the right tool. File > Import > Batch Conversion… (or File > Export > Batch Conversion… - both lead to the same wizard) opens a four-page wizard that converts a whole folder of files on a background thread. The chord is QUILL key, B.
The wizard, page by page.
- Introduction. A short summary, then a live Pandoc version probe. If Pandoc is not installed, the page says so and Start stays disabled until you install Pandoc 3.x from https://pandoc.org.
- Folder and options. A folder picker, an Include subfolders checkbox, an Output layout radio (Same folder as source, or Output subfolder per source folder), and an Overwrite radio (Ask each time, Never, Always). Defaults come from Settings, so the wizard respects your preferences the moment it opens. The last folder you used is remembered for next time.
- Format and profile. A Direction radio (Import into QUILL, or Export from QUILL), a source-format list and a target-format list drawn from the Tier-1 set, and a profile picker for the seven built-in conversion profiles.
- Review and start. A plain-text summary of the entire plan. Press Start to submit the batch and close the wizard.
Output naming. QUILL keeps the originating stem and
replaces the extension. report.docx becomes
report.md (or report.html,
report.epub, …). With Output subfolder per source
folder (the default) the output lands in a new
Output/ folder inside the source folder; with Same
folder as source it lands next to the input.
Profiles. The wizard’s profile picker offers seven curated profiles. Each profile is a small set of Pandoc CLI flags plus a plain-language description that the screen reader reads aloud before you click Start.
- Clean Word Document —
report.mdbecomes a polished Word document with no Markdown scaffolding in the output. - Accessible HTML Page — a single HTML page with
title block and
langmetadata, ready for an accessibility audit. - EPUB Book — a personal-publishing-ready EPUB with a table of contents and EPUB-3 metadata.
- GitHub README — GitHub-Flavored Markdown with no wrapper, ready to paste into a repository.
- Print PDF — a PDF with standard PDF metadata; Pandoc picks the right engine for your platform.
- Instructor Handout — a print-ready PDF with 1-inch margins and a numbered top-level section structure.
- Plain Text for Screen Readers — plain text with no HTML wrapper, no smart quotes, fixed 80-column width; the right choice for piping into a TTS engine.
Overwrite behaviour. The three-way policy keeps the screen reader out of the per-file prompt loop:
- Ask each time — QUILL lists every output that would clobber an existing file and asks once with a single yes/no. If you say no, the rest are skipped.
- Never — existing outputs are skipped automatically. The Status Page shows the count under skipped so the total still adds up.
- Always — existing outputs are overwritten without prompting. Useful for re-running a batch with the same plan.
Live progress and completion announcement. The batch
runs on the background task pool. Open the Status Page
(Help > Status Page) and the Tasks & Downloads tab
shows live rows. The first row is
Batch conversion: scanning <folder>, then one row per
file as the work progresses.
When the batch finishes, QUILL speaks a single completion line through the announcement backend you have configured. The line names the converted / skipped / failed counts and the elapsed time:
“Batch conversion complete. 12 of 14 files converted in 4.2 seconds. 2 skipped.”
The spoken line respects the verbosity settings under Preferences > Accessibility; the Status Page row updates regardless so sighted and low-vision users see the same result. A short report dialog lists every file that produced warnings or failed, with the exact error string.
Settings: defaults the wizard can override. Three Settings entries let you choose defaults the wizard uses when it opens:
- Include subfolders in batch conversion — boolean,
default
True. - Overwrite behaviour for batch conversion — Ask each time (default), Never, or Always.
- Default output layout for batch conversion — Output subfolder per source folder (default) or Same folder as source.
The wizard can override any of them per run. Preferences is the canonical place to change defaults; the wizard is a one-off override path.
When to use the wizard, when to use single-file. Use the single-file Import and Export menus for one document at a time. Use the wizard when you have a folder of documents to convert, when the work is the same for every file, and when you can let it run while you keep writing.
Abbreviation Expansion
Abbreviation Expansion is a TextExpander-style feature. You type a short trigger word followed by any delimiter character (space, period, comma, and so on) and QUILL silently replaces the trigger with the full text.
Off by default. So that text never changes as you type without your knowledge, abbreviation expansion is disabled by default — turn it on when you want it (see Enabling and disabling below). Once on, your choice is remembered.
Example: type btw (note the trailing
space) and QUILL replaces it with by the way .
QUILL ships with fifteen built-in abbreviations covering common shorthand. You can add, edit, and disable any abbreviation, including the built-in ones.
Built-in abbreviations.
| Abbreviation | Expansion |
|---|---|
afaik |
as far as I know |
afaict |
as far as I can tell |
asap |
as soon as possible |
atm |
at the moment |
btw |
by the way |
fwiw |
for what it’s worth |
imo |
in my opinion |
imho |
in my humble opinion |
irl |
in real life |
omw |
on my way |
tbh |
to be honest |
tbc |
to be confirmed |
tbd |
to be determined |
ttyl |
talk to you later |
wrt |
with regard to |
Enabling and disabling. Abbreviation expansion is off by default; enable it any of these ways (and toggle it the same ways later):
- Press
Ctrl+Shift+Grave, E— or useInsert > Toggle Abbreviation Expansion. - Click the ABR: On / ABR: Off cell in the status bar (if visible; add it via status bar settings).
- Change Abbreviation expansion in
Tools > Customize & Support > Preferences > Editing.
Managing abbreviations. Open
Insert > Manage Abbreviations... (or press
Ctrl+Shift+Grave, Shift+A) to add, edit, and organise your
abbreviations. Each abbreviation has:
- Abbreviation — the short trigger word, e.g.
btw. - Expansion — the full text to substitute, e.g.
by the way. - Description — optional note for your own reference.
- Case sensitive — when checked, only the exact-case trigger matches; otherwise any capitalisation of the trigger fires.
- Enabled — toggle individual abbreviations without deleting them.
- Category — free text (Work, Personal, Email, whatever suits) that groups the list. The manager has a category filter beside the search field; abbreviations with no category are listed under Uncategorised.
- Expand after — which characters fire this abbreviation: a space or punctuation (the default), a space only, punctuation only, or never. Never means it only ever expands from Quick Insert, which is the right home for a long or destructive expansion you would not want appearing by accident.
- Speak — what your screen reader says when this one expands: nothing, the abbreviation, or the expanded text. Set per abbreviation, because a short one usually needs no announcement and a long template sometimes does.
- Sound — follow the global sound setting, always play, or never play.
- Add a trailing space after punctuation — adds one
space after the punctuation that fired the expansion, so
co.givesCompany,rather thanCompany ,. It has no effect on a space trigger, which already leaves a space.
The manager dialog includes a Search field at the top. Type any part of a trigger word or expansion text to filter the list in real time. Disabled abbreviations appear with a “(disabled)” suffix.
The manager also has Import and Export buttons for JSON round-trips. Export saves your full library to a file. Import merges a file into your library; abbreviations with duplicate IDs are skipped. QUILL announces how many were added on import.
Manual trigger. Press
Ctrl+Shift+Grave, A (or
Insert > Expand Abbreviation) to expand the word
immediately before the cursor without typing a delimiter character.
Useful when you want expansion mid-word or at end-of-document.
Quick Insert.
Insert > Quick Insert... opens a type-to-filter picker
over every enabled abbreviation, with the ones you use most at the top
and a preview of the full expansion. Type a few letters, arrow down,
press Enter, and the expansion is inserted at the cursor. This is how
you use an abbreviation you have not memorised, and the only way to
reach one whose Expand after is set to Never. It has no
default keystroke — the QUILL key chords are fully allocated — but you
can bind one in the keyboard settings, and it is in the Command
Palette.
New Abbreviation from Clipboard.
Insert > New Abbreviation from Clipboard... takes
whatever text is on the clipboard and opens a new abbreviation with it
already filled in as the expansion; you only supply the trigger. The
fast way to turn a signature, an address, or a block of boilerplate into
an abbreviation.
Expanding everywhere, not just in QUILL. Your abbreviations also work in other applications through Quill Inkwell, a small free companion app that lives in the system tray. It is not a copy of your library — it is the same library, the same file, read and written by both. Add an abbreviation here and it works in your browser; add one there and it works here. Open it from the QuillVille menu, and see Quill Inkwell’s own user guide for how it decides where it may and may not type.
Variables in expansions. Expansions support these placeholders:
| Placeholder | Inserts |
|---|---|
${cursor} |
Places the cursor here after expansion |
${date} |
Current date (e.g. June 11, 2026) |
${time} |
Current time (e.g. 02:30 PM) |
${clipboard} |
Current system clipboard text |
${datetime} |
Current date and time together |
${day} |
Day of the month |
${month} |
Month name |
${year} |
Four-digit year |
${username} |
Your Windows user name |
Fields: expansions that ask you something. A signature is the same every time; a letter opening or a bug report is the same except for a name, a date, or a reference. Put a field in the expansion and QUILL asks for it before inserting:
${field:Label}asks for a value with that label.${field:Label=something}offers a starting value you can accept or replace.- The same label used twice is asked once and filled everywhere, so a name in the greeting also lands in the sign-off.
${choice:Label|first reminder|second reminder|final notice}offers a list to pick from instead of a box to type in. Use it wherever the answer is one of a known few: picking is one arrow key, and typing “Second reminder” exactly right is a spelling test nobody asked to sit. The first option is the default, so a choice left alone behaves like a field with a starting value.
A small form appears with one labelled control per field – a box to
type in, or a list to choose from – in the order the template asks for
them, which is the order it reads in. Tab moves between them, Enter
moves to the next, Enter on the last accepts, and Escape cancels — and
cancelling leaves what you typed exactly as it was.
${cursor} still works alongside fields: the caret lands
where the template put it, after the answers are in. The same form
appears in Quill Inkwell, so a template behaves identically wherever you
use it.
Multi-press window. The double/triple press
detection window is configurable in
Tools > Customize & Support > Preferences > Editing
as Multi-press window (ms) (default 400 ms; range
100–1000 ms). A larger window helps if you press keys slowly; a smaller
window prevents accidental double-fires for fast typists.
Sound feedback. Optional: enable Play sound
on abbreviation expansion in
Tools > Customize & Support > Preferences > Editing
and optionally point Abbreviation expansion sound file
to a .wav file. Leave the path blank for the default system
beep.
Abbreviations that only fire in certain applications. An abbreviation can be limited to named applications – a signature to your mail client, a code snippet to your editor – by listing them in the abbreviation’s Applications field. Leave it empty, as every abbreviation is by default, and it fires everywhere. This only applies to Quill Inkwell, which types into whatever application you are in; inside QUILL there is one application, so scoping to it could only ever switch an entry off. A scoped abbreviation deliberately does not fire when Inkwell cannot tell which application is in front: the safe answer to “I do not know where this would land” is not to type into it.
Quillin-contributed abbreviations. Installed Quillins can add their own abbreviations to the registry. Each one can be turned on or off individually in the Quillin’s own preferences page (open Preferences, Ctrl+Comma, then navigate to the Quillin by name — for the bundled Smart Insert Quillin, the toggles are on its Abbreviations tab). Contributed abbreviations are kept separate from your saved library and are never written into it, so removing a Quillin takes its abbreviations with it. Your own abbreviations always take priority over Quillin-contributed ones; if two Quillins claim the same trigger, the one loaded first wins. They work in other applications too, through Quill Inkwell – a Quillin that adds a set of medical abbreviations or company boilerplate should not stop at the edge of the editor.
The bundled Smart Insert Quillin contributes four expanding abbreviations by default:
| Trigger | Inserts |
|---|---|
qbug |
Bug report template (Title, Build, Screen reader, Windows version, Steps, Expected, Actual, Notes) |
qmeet |
Meeting notes template with today’s date |
qlog |
Date and time timestamp |
qtodo |
Three-item to-do checklist |
Only abbreviations with a fixed expansion text expand as you type.
Handler-based (dynamic) abbreviations — such as Smart Insert’s declared
qbrf — do not fire from bare-word typing; use the matching
smart trigger (=brftest()) or the Insert menu command
instead.
Tips.
- Use
${cursor}to drop the cursor inside a template. For example, the abbreviationsigexpanding toBest regards,${cursor}Jeffpositions the cursor right after the comma. - Use case-sensitive abbreviations sparingly — most triggers are lowercase and case sensitivity is rarely needed.
- Abbreviations fire before snippet expansion. If a word matches both, the abbreviation wins.
- Export your library regularly as a backup and to share abbreviations between machines.
Insert Automation: Smart Triggers, Log Files, and Append Anchors
Insert Automation is the umbrella system that ties abbreviations,
smart text triggers, .LOG file support, and document
anchors together into one keyboard-first platform. Every action it takes
is announced, undoable, and triggered only by an exact match — nothing
runs in the background, nothing scans your file without being asked.
Smart Text Triggers
A smart text trigger is a typed command that begins with
=, appears alone on the current line, and expands when you
press Enter. Because they start with =, they can never
accidentally fire inside a sentence.
The bundled Smart Insert Quillin contributes these triggers out of the box:
| Trigger | Inserts |
|---|---|
=bug() |
Bug report template |
=meeting() |
Meeting notes with today’s date |
=journal() |
Journal entry with today’s date |
=todo() or =todo(5) |
To-do checklist (5 items by default, or however many you specify) |
=logentry() |
Timestamp at the cursor, formatted by your Log Mode settings |
=brftest() |
Predictable multi-page BRF test document |
=rand(3,4) |
Three paragraphs of four readable sentences each |
How to use. Type the trigger alone on a line and press Enter. If the trigger matches, QUILL replaces the whole line with the generated text and announces what it inserted. If it does not match, nothing happens and the Enter key behaves normally.
Large insertions. If a trigger would produce more text than the configured threshold (default: 50 paragraphs), QUILL asks for confirmation before inserting anything. You can adjust the threshold in Preferences → Smart Insert → General tab.
Enabling and disabling triggers. Every trigger can
be turned on or off individually in Preferences → Smart Insert →
Smart Triggers tab. Disabling a trigger means the
=name() text is simply left as-is rather than replaced.
.LOG File
Compatibility
If the first line of a text file is .LOG, QUILL treats
the file as a timestamped log — the same behavior Notepad has had for
decades.
When you open a .LOG file QUILL:
- Detects
.LOGat the top of the file (in the first 4096 bytes). - Finds the best place to insert a new entry: a
QUILL-LOG-APPEND-HEREanchor near the bottom of the file, or the end of the document if no anchor is present. - Inserts a fresh timestamp.
- Places the cursor right after the timestamp so you can start typing immediately.
- Announces “Log timestamp inserted. Type your entry.”
Read-only files are never modified. .LOG in the middle
of a file does not activate automatically. A UTF-8 BOM before
.LOG is accepted.
Timestamp format. Configure the format under Preferences → Smart Insert → Log Mode tab:
- Long date and time (default):
Sunday, June 14, 2026 9:42 PM - Short:
06/14/2026 09:42 PM - ISO 8601:
2026-06-14T21:42:00 - Date only, Time only, or a custom
strftimepattern
Custom format example. Set Timestamp format to
Custom, then enter %Y-%m-%d %H:%M to get
2026-06-14 21:42.
Append Anchors
Any file can have a QUILL-APPEND-HERE marker near the
bottom. When QUILL generates content that belongs at the end of the file
— a log timestamp, a generated template, a BRF test block — it inserts
the new content immediately before the anchor and leaves the anchor in
place for next time.
This gives you a stable target that survives repeated use. Your footer notes, metadata, or closing instructions stay below the anchor; new content always lands above them.
A .LOG file can use the more specific
QUILL-LOG-APPEND-HERE anchor to separate log-mode
insertions from other generated content.
To add an anchor. Type
QUILL-APPEND-HERE alone on a line near the bottom of your
file. That is all — QUILL finds it automatically the next time content
is generated for that file.
Copy With Source
Ctrl+Shift+C copies the current selection, then appends
a source reference that captures document context. If nothing is
selected, Quill uses the current line. This is excellent for notes,
review workflows, and evidence gathering.
Selection bindings
F8-based anchor selection
Quill uses an anchor-based selection model:
| Key | Command | Purpose |
|---|---|---|
| F8 | Start selection | Sets an invisible anchor at the cursor. |
| Shift+F8 | Complete selection | Selects from anchor to cursor and announces the span. |
| Ctrl+Shift+F8 | Reselect | Restores the most recent committed selection. |
| Alt+Shift+F8 | Go to start of selection | Moves the cursor to the selection start without changing it. |
| Ctrl+F8 | Copy all | Copies the full document. |
| Ctrl+Shift+A | Unselect all | Collapses the selection to the cursor. |
| Alt+F8 | Read all | Reads the document from the beginning. |
Structural selection
| Key | Command | Purpose |
|---|---|---|
| (unassigned by default) | Select paragraph | Selects the paragraph at the cursor; announces scope and word count. Assign a key in the Keymap Editor or run it from the command palette. |
| Ctrl+Shift+B | Select block | Selects the indented block at the cursor. |
| Alt+Shift+Up | Expand selection | Grows the selection to the next structural unit (line to paragraph to block to document). |
| Alt+Shift+Down | Shrink selection | Reverses the last expand step. |
Extend Selection Mode
Extend Selection Mode makes movement commands extend the selection rather than move the cursor. Toggle it from the Selection menu (no default key; assign one in Preferences > Keyboard). When active, an EXT badge appears in the status bar.
Mark ring
The mark ring is a rolling stack of temporary jump points for in-session back-and-forth navigation:
| Key | Command | Purpose |
|---|---|---|
| Ctrl+Shift+M | Set mark | Places a temporary mark at the cursor. |
| Ctrl+M | Pop mark | Jumps to the most recent mark and removes it from the ring. |
| Ctrl+Shift+X | Exchange point and mark | Swaps the cursor and the top mark position. |
| Alt+M | List marks | Shows all marks with line and column positions. |
Named marks and review buffer
Named marks are persistent within a session. Reach them via Selection > Named Marks:
- Set Named Mark: names and stores the current cursor position; announces line and column.
- Jump to Named Mark: choose from a list showing each mark’s name and position; jumps on selection.
- Open Review Buffer: opens the active selection in a read-only dialog for non-destructive screen-reader paging. Requires a selection.
None of these have default key bindings. Assign them in Preferences > Keyboard, or use the Selection menu.
Links
Ctrl+K inserts a format-aware link.
Ctrl+Enter follows the link under the caret. In Markdown
and HTML, this makes citation and cross-referencing much less
tedious.
Typing stays ahead of you
Everything QUILL does while you type is arranged around one requirement: the next keystroke must never wait. Only three things happen between one character and the next — your text is updated, the modified marker is refreshed, and the status line is set quietly. Everything else QUILL could usefully do — the side preview, the spell-check hint, word prediction, browse-mode preparation, language detection, the enabling and disabling of menu items, the autosave — is pushed into the gap after the character has been handed to your screen reader, rather than done before it. It waits for a fifth of a second of quiet, and if you are typing faster than that it is skipped entirely until you pause — so the faster you type, the less QUILL does between your keystrokes.
Two costs that used to hide on that path are gone as well. The status
bar no longer recomputes itself between keystrokes — its word count,
line and column, and progress cells used to re-copy the document several
times per character, twice over; they now update in the pauses, reading
the text QUILL already holds rather than copying it out of the editor
again. And the abbreviation expander no longer opens the Windows
clipboard on every keystroke — the clipboard is shared with every other
program (and with your screen reader’s own clipboard features), so
touching it per character meant waiting on that contention while you
typed. It is now read only at the moment an abbreviation that actually
uses ${clipboard} expands.
This matters most with a screen reader. The notification NVDA and JAWS wait on to speak the character you just typed is delivered by the same thread that does that work, so work done between keystrokes is heard as a delay before the character — and, when the queue gets long enough, as keystrokes running together (a missing space between words is the usual first symptom). If you ever see that in a very large document, it is worth reporting rather than adjusting your screen reader: it means something has crept back onto the typing path.
Search, Replace, and Deep Navigation
Quill’s search tools are both straightforward and layered.
Standard search
Ctrl+Fopens search.F3finds next.Shift+F3finds previous.Alt+F3opens a find-all matches summary.Ctrl+Hopens Replace;Ctrl+Shift+Hreplaces all.
Search modes
Quill supports plain text, whole-word, wildcard, and regular-expression search. The Regex Helper explains the syntax when you need it. Search history is also preserved, so recurring search jobs get easier over time.
Navigation that understands documents
Quill is excellent for large documents because it supports:
- line and page jumps
- block and heading movement
- bracket matching
- structural next and previous
- back and forward location history
- outline navigation
- bookmarks
When you combine this with marks and compare sessions, long-form review starts to feel much less fragile.
Hearing that a paragraph is a heading
Apply Heading 2 to a paragraph, arrow away, then arrow back to it, and your screen reader reads the line — but says nothing about it being a heading. That is not something the reader is failing to do. No Windows edit control has paragraph styles. The control Quill hosts can tell JAWS or NVDA the font name, the point size and the weight; there is no way for it to say “this paragraph is a heading”. Word announces heading levels only because Word ships an accessibility provider of its own for exactly this.
So Quill says it instead. Move the caret onto a heading and you hear “Heading 2, Installing” — the level first, then the heading’s own words, as one sentence.
Three details are deliberate:
- The level comes first. That is not a matter of
taste: a cue queued behind your screen reader is at the
reader’s mercy, and on a large caret jump —
Ctrl+Home, a search hit, a bookmark — NVDA and JAWS cancel whatever was pending and start again on the new line. A “Heading 1” waiting its turn behind that is simply never heard, which is exactly what was reported: arrowing onto a heading announced it,Ctrl+Homeonto the same heading did not. Said first, as one sentence QUILL owns, it survives every kind of move. It is also the order a browser gives you, where a reader says “heading level two” and then the words. - Once, on arrival. Moving around inside a heading says nothing more; you have already been told. You hear it again when you leave and come back.
- Every kind of heading. Rich text, Markdown, HTML,
and a real
Heading 2style read out of a Word document all announce the same way.
If you would rather hear the words first, set
heading_announce_position to after in
Tools ▸ Preferences ▸ Accessibility (“Say a heading’s
level”). Then your reader reads the line and QUILL adds “Heading 2”
behind it — quieter on ordinary line-by-line reading, and the mode that
predates this choice. It is the same information in the other order; the
only thing you give up is the jump case above.
Applying a heading already announces itself, so the two never double up. And a document that opens on its own title does not greet you with “Heading 1” over your reader’s first reading of the line.
Turning it off, and back on. Sometimes the structure
is not what you are listening for – you are reading the document as
text, and one extra sentence per heading is one too many.
View ▸ Announce Headings (Ctrl+Alt+F3) is
a check item that turns the cue off and on without leaving the document,
and it governs the table cue with it. QUILL says which way it went –
“Headings announced on arrival”, or “Headings will not be announced” –
rather than “on” and “off”, so a key pressed by accident is never
ambiguous. The choice is remembered (the announce_headings
setting), but it is meant to be pressed rather than configured: it is a
decision per document, not per person.
Headings are only ever found where they exist. A # at
the start of a line means a heading in Markdown and HTML documents; in a
shell script or a Python file it means a comment, and QUILL says
nothing.
Hearing that you are in a list
Arrow into a list and QUILL says “Bulleted list, 5 items”. Go a level deeper and it says “Level 2, 3 items”. Arrow out and it says “Out of list”.
This is the one cue in the set your screen reader gives you everywhere except here. On a web page a list reaches the reader as a list with a count, and NVDA says almost exactly this sentence. In an editor a list is not a list — it is characters — so the reader has nothing to go on, and a nested outline sounds like a run of ordinary lines beginning with a dash. The only thing separating level two from level three is the number of spaces, counted by ear.
It works in Markdown and in HTML, over all three kinds of list:
| Markdown | HTML | |
|---|---|---|
| Bulleted list | -, *, + |
<ul> |
| Numbered list | 1., 1) |
<ol> |
| Definition list | a line, then : the definition under it |
<dl> |
A definition list also says “Term” and “Definition” as you move between the two, because which of them you are standing in decides what the words mean — and a definition list written inside out is not something you can see you have done.
The counting rule matters and is easy to get wrong: items are counted at your own level, inside your own list. A three-item list whose second item has four sub-items is “3 items” at level one and “4 items” at level two, never “7”. Two sub-lists under two different bullets are two lists, not one.
What it never says:
- Nothing as you move down a list. That is what the caret does nearly all the time, and your reader is already speaking each item.
- Nothing about
- - -or***. Those are horizontal rules, not one-item lists. - Nothing inside a fenced code block. A
-in a code sample is a sample. - Nothing in a plain document. A letter is full of hyphens, and a cue that fired on them would be superstition rather than help.
- Nothing in rich text. There the bullets are the
control’s own, and a
-you type is a hyphen.
Turning it off — View ▸ Announce Lists
(Ctrl+Alt+F5). Its own switch, next to the heading
one and deliberately separate from it: reorganising an outline, the
level is the work; proof-reading the same file, it is a phrase between
you and every item. Like its sibling it says which way it went — “Lists
will not be announced”, or “Lists announced as you enter them” — and the
choice is remembered as the announce_lists setting.
Ctrl+Alt+F5 and not the Ctrl+Alt+F4 that
would have sat next to its sibling: a finger that misses the Control key
on a chord pressed this often finds Alt+F4, and what that
costs is the document.
Moving through a table cell by cell
Tables are the one structure that plain caret movement handles badly: arrowing along a line tells you the characters but never the shape. Quill gives tables their own movement keys, and every landing says where you are before it says what is there.
- Ctrl+Alt+Right and Ctrl+Alt+Left move one cell along the row.
- Ctrl+Alt+Down and Ctrl+Alt+Up move one cell down or up the column.
- Alt+Home and Alt+End jump to the first or last cell of the current row.
- Ctrl+Alt+Home and Ctrl+Alt+End jump to the first or last cell of the whole table.
Each move speaks the cell’s position and contents together — “Row 2 of 6, column 3 of 5: Portland” — so you always know how far in you are without counting. An empty cell is announced as “blank” rather than by silence. When a move has nowhere to go, Quill says so instead of moving: “No more cells” at the end of a row, “No more rows” at the end of a column, and “No more cells, end of table” (or “No more rows, end of table”) when you are on the very last cell — the difference between “this row stops here” and “the table stops here”. Ordinary caret movement into a table announces its shape — “Table, 6 rows, 5 columns” — and moving out of one says “Out of table”, and the keys are harmless outside a table: Quill just reports “Not in a table”.
This works on Markdown tables you write yourself and on
tables Quill imports from Word. A .docx table is
brought in as a real table laid out as Markdown rows, so the same keys,
the same position announcements, and the same edges apply to a table you
opened from Word as to one you typed. A cell whose own text contains a
| character stays one cell — it does not split the row or
throw the column count off.
Code-aware editing
When you open a source file, Quill loads a language profile based on the file extension. Recognised languages are HTML, Markdown, CSS, Python, JavaScript, TypeScript, C, C++, C#, PHP, Go, Rust, Kotlin, Shell, YAML, JSON, TOML, and SQL, with a plain-text fallback for everything else. The profile tells Quill how that language is tokenised so movement and announcements make sense for code.
- Token navigation. Move by code token rather than by word with Next Token and Previous Token in the Navigate menu. The caret lands on the next identifier, keyword, operator, or literal, which is far more predictable than character or word movement when you are reading code by ear.
- Pairs with indentation tones. Code-aware editing works well alongside the optional indentation tones described under Sound notifications and earcons, so structure is carried by pitch while you move by token.
Setting the document language
Auto-detection follows the file extension, but you can set
the language yourself for the current document — useful for an
unsaved buffer, an unusual extension, or code you pasted into a plain
.txt file. When you do, you get that language’s full
editing characteristics, not just token navigation:
- Bold and Italic insert the right markup
(
<strong>/<em>for HTML,**…**/*…*for Markdown). - The heading, table, list, and tag menu items enable for HTML and Markdown.
- Toggle Line/Block Comment uses the language’s
comment syntax (
#,//,<!-- -->,--). - Heading and structure navigation, the outline, link insertion, and live preview all follow the chosen language.
Three ways to set it, all equivalent:
- Hotkey: Ctrl+Shift+L opens the language picker (type-ahead; the current language is preselected).
- Menus: Navigate → Set Document Language… (the same picker), or Format → Document Language, a checkable list where you can switch with one keypress and see the active language at a glance.
- Status bar: the Language segment shows the current language — with (set) when you chose it yourself rather than it being detected — and pressing Enter on it opens the picker.
Choosing Auto-detect from file clears your override
and goes back to following the file name. Setting a language is an
editing aid: it never renames the file, so if you set HTML on a
.txt, Quill reminds you to use Save As to
save it as .html. The choice applies to the current tab and
is not remembered after you close the file.
Automatic language detection (optional, off by default)
Quill can detect the language for you when you paste or type code
into a plain .txt or untitled document. It is off
by default; turn it on in Settings → Editing →
Auto-detect document language, which offers four modes:
- Off — never detect (the default).
- Hint in the status bar only — quietly shows “Looks like HTML” in the status bar; nothing changes and nothing is spoken.
- Suggest and announce, you confirm — announces a dismissible suggestion (“This looks like HTML. Press Ctrl+Shift+L, then Enter, to set the document language.”), and you decide.
- Switch automatically — sets the language for you and announces the change.
Detection runs a fraction of a second after you stop typing or pasting, looks at the content (the first several thousand characters), and is deliberately cautious: it only acts when it is confident, never guesses on ordinary prose, and never overrides a real file extension or a language you set yourself. It also learns lightly from the languages you use during a session. Unlike some editors, Quill never switches silently or relies on a visual-only hint — in every mode you either stay in control or hear what changed. (Braille files and pasted braille are not affected — braille has its own Braille Mode.)
Abbreviation expansion (Emmet-style)
Three commands on the Edit menu expand compact
markup abbreviations into full HTML or CSS, so you can write
ul>li.item$*3>a[href]{Item $} instead of typing out a
three-item list by hand.
- Expand Abbreviation expands the current selection in place, or — with no selection — the run of non-whitespace text immediately before the cursor. The expansion replaces that text in a single undo step, so one Undo reverts the whole thing.
- Preview Abbreviation… prompts for an abbreviation (pre-filled from the current selection, if any) and opens the result in a new tab without touching your document — a safe way to try something out.
- Explain Abbreviation… opens a plain-text, indented breakdown of what an abbreviation means — tag, id, classes, attribute names, and repetition counts — before you commit to expanding it. This is the fastest way to learn the grammar by ear rather than by trial and error.
The grammar supports the core Emmet operators: child
(>), sibling (+), climb-up
(^), grouping ((...)), multiplication
(*N), and numbering ($, with $$
for zero-padded numbers). Ids (#id), classes
(.a.b), attributes ([attr="value" bool-attr]),
and text content ({...}) all work the way you’d expect.
Common tags pick up sensible default attributes when you don’t specify
them — a gets an empty href, img
gets src and alt — and void elements like
br and img never get a closing tag.
A handful of built-in snippets expand without going through the
grammar at all: ! for a full HTML5 skeleton,
!a11y for an HTML5 skeleton with a skip link and
header/main/footer landmarks
already in place, skiplink for just the skip link,
form:a11y for a labeled form field inside a fieldset, and
table:a11y for a table with a caption and properly scoped
header cells.
When the active document’s file extension is .css, all
three commands switch to CSS mode and expand a curated set of common
shorthand instead — things like d:f for
display: flex;, pos:a for
position: absolute;, and box-model shorthand such as
m10-20 for margin: 10px 20px; or
mt-10 for margin-top: -10px;.
If an abbreviation can’t be parsed, Quill reports exactly what it expected and where, on the status bar, rather than guessing or silently doing nothing.
Quill Eraser
Quill Eraser
(Tools → Writing & Language → Quill Eraser...) is a
deterministic, rule-based text hygiene checker. It finds common
mechanical writing problems — extra spaces, trailing whitespace, missing
spaces after punctuation, excessive blank lines, and sentences that
start with lowercase — and offers one-click fixes for each finding, with
no AI or network call in the loop.
There is also a scoped version:
Quill Eraser on Selection... runs only on the text you have
selected. If nothing is selected, it offers to check the whole
document.
What Quill Eraser checks
Each finding is reported with a confidence level (High, Medium, or Low) so you can prioritize what to fix.
| Rule | Confidence | What it catches |
|---|---|---|
| Multiple spaces between words | High | Two or more spaces where one space belongs |
| Trailing spaces at end of line | High | Spaces or tabs at the end of a line |
| Space before punctuation | High | A space immediately before ,, .,
!, ?, ;, or : |
| Excessive blank lines | High | More consecutive blank lines than your configured maximum (default: 2) |
| Missing space after sentence punctuation | Medium | A sentence-ending ., !, or ?
directly followed by a letter |
| Missing space after comma, semicolon, or colon | Medium | A ,, ;, or : directly
followed by a letter |
| Sentence starts with lowercase letter | Medium | A sentence or paragraph that begins with a lowercase character |
Quill Eraser never reports findings inside URLs, email addresses, file paths, code spans, decimal numbers, or times. When checking a Markdown file it also skips fenced code blocks, inline code, front matter, and link URLs.
Code files
If you open Quill Eraser on a code file (.py,
.js, .ts, .html, and so on) a
prompt appears. You can run safe trailing-whitespace checks only, or
skip the check entirely. All prose-spacing rules are suppressed on code
files unless you opt in to safe-only mode.
The review dialog
When Quill Eraser finds issues it opens a modeless review dialog. The dialog stays open while you work in the editor.
- The findings list shows each issue in order: confidence, type, and line number.
- Selecting a finding shows its detail in the pane below: what was found, what the fix is, and a plain-English description.
- Apply Fix applies the suggested fix and moves automatically to the next issue.
- Ignore hides the finding for this session without applying a fix.
- Go to Issue moves the cursor in the editor to the exact location so you can decide what to do yourself, with the issue text selected.
- Previous / Next navigate the list by keyboard.
- Rescan re-runs the engine after you have made manual edits.
- Close dismisses the dialog.
Every action is announced so screen-reader users always know what changed.
Settings
Four preferences in Settings → Preferences → General
control Quill Eraser behaviour:
| Setting | Default | What it does |
|---|---|---|
hygiene_min_confidence |
high |
Minimum confidence level to report. Set to medium or
low to see more findings. |
hygiene_allow_double_space_after_period |
off | Suppresses the “multiple spaces” rule when exactly two spaces follow
., !, or ?
(two-space-after-period style). |
hygiene_max_blank_lines |
2 | Maximum consecutive blank lines before a finding is raised. |
hygiene_rules_disabled |
(empty) | Comma-separated list of rule IDs to disable (e.g.
prose.lowercase_sentence_start,prose.missing_space_after_comma). |
Rule IDs for the disabled list: prose.multiple_spaces,
prose.trailing_spaces,
prose.space_before_punctuation,
prose.excessive_blank_lines,
prose.missing_space_after_sentence_punct,
prose.missing_space_after_comma,
prose.lowercase_sentence_start.
QUILL Quick Nav Mode
QUILL Quick Nav mode is a browse-style, cursor-only navigation layer for long documents. It is movement-only: it changes cursor location, never edits text.
There are two ways to enter Quick Nav mode:
- Locked Quick Nav (the common path). Press
Ctrl+Shift+Gravetwice in a row. The first press arms the QUILL-key prefix; the second press (QK-5) locks browse mode on, ignores the prefix timeout, and stays active until you pressEsc. QUILL announces “QUILL browse mode locked. It stays active until you press Escape.” - One-shot Quick Nav chord. Press
Ctrl+Shift+Grave, N. QUILL enters Quick Nav mode for the next move; if thebrowse_mode_stickysetting is on (SET-4), it stays locked untilEsc; otherwise the mode expires when the QUILL-key timeout elapses.
Either way, once Quick Nav is active the mnemonic single-key bindings
below work the same. The chord table at the top of the user guide and
the cheat sheet (Ctrl+Shift+Grave, ?) are the live
reference.
While the mode is active:
Hmoves to the next heading.Shift+Hmoves to the previous heading.1through6move to the next heading at that specific level.Shift+1throughShift+6move to the previous heading at that specific level.AandShift+Amove by link anchor.LandShift+Lmove by list container.IandShift+Imove by list item.TandShift+Tmove by table.QandShift+Qmove by block quote.BandShift+Bmove by bookmark.'andShift+'move by code block.Copens table of contents (Outline Navigator).PandShift+Pmove by paragraph.SandShift+Smove by sentence.TabandShift+Tabmove by block..(period) repeats the last browse action.]jumps to the next line after the current list or table.[jumps to the line above the current list or table.Escexits QUILL Quick Nav mode.
Behavior rules:
- This mode does not edit text.
- It only changes cursor location.
- If a target does not exist for the active surface, Quill announces that clearly.
- Find and replace commands return you to normal command flow automatically.
- After each move, Quill announces where you landed. QUILL
browse move detail, in
Preferences -> Navigation, controls how much detail that announcement gives: Line and column (default), Line only, or Say nothing. - In
Preferences -> General, Preload QUILL browse cache in background is on by default. If you turn it off, Quill builds the cache the first time you use Quick Nav.
How Quill tracks headings, lists, list items, paragraphs, and sentences:
- Quill creates a navigation index for the active document and reuses it until content or surface type changes.
- The index key is document text plus markup type, so unchanged documents do not pay repeated parse cost.
- Headings are parsed from Markdown and HTML heading structure.
- List-item anchors come from Markdown list markers and HTML
<li>tags. - Paragraph anchors come from blank-line boundaries in text/Markdown and block-level tags in HTML.
- Sentence anchors come from sentence-ending punctuation patterns.
- Table anchors come from Markdown table starts and HTML
<table>tags. - Block-quote anchors come from Markdown
>quote starts and HTML<blockquote>tags. - Code-block anchors come from Markdown fenced code boundaries and
HTML
<pre>or<code>tags. - Bookmark anchors come from your in-memory bookmark positions.
- The index is invalidated after edits, full document replacement operations, and tab/document switches.
Performance note:
- Quick Nav avoids reparsing on every key press by caching artifact anchors.
- This keeps movement responsive on long Markdown and HTML files.
QUILL key prefix actions
Pressing the QUILL key (Ctrl+Shift+Grave) once arms a
short prefix. Follow it with:
Nto enter browse/Quick Nav mode. If thebrowse_mode_stickysetting is on, the mode stays locked untilEsc; otherwise it expires on the QUILL-key timeout. (Press the QUILL key alone a second time to lock browse mode on regardless of the setting.)Gto open Go to Anything (Quick Nav search). It lists every navigable element in the document — headings, links, lists, tables, block quotes, bookmarks, code blocks — with a category filter that shows a live count of each type. It also lists the document’s misspellings and, when a search is active, the current query’s search hits as their own navigable types, so you can jump straight to a misspelled word or a match from the same panel.Mto paste HTML clipboard content as Markdown at the cursor. Quill reads the clipboard’s rich HTML (theHTML Formatflavour copied from web pages and word processors), converts headings, lists, links, bold/italic, code, and block quotes to Markdown, and inserts the result. If no rich HTML is present, the plain-text clipboard is treated as HTML. The active read-only guard is respected, so a read-only document is never modified.Afor selection actions when text is selected.Fto speak the window title,Pto speak the full file path of the current document, andQto speak a short status summary. These let you confirm where you are without leaving the editor, which is handy when several documents are open.?to show the QUILL key cheat sheet, orEscto cancel the prefix.
Formatting and Markup Work
Quill understands that many users work in plain text while still caring deeply about exported structure.
Markdown and HTML awareness
Quill detects whether the current surface looks like Markdown, HTML, or plain text. It uses that to guide insertion helpers and enable the commands that make sense in context.
Headings and lists
The heading tools do more than insert decoration. They help you maintain usable structure. The list tools speed up common authoring patterns without forcing you into a separate composer.
For inline heading control, press Ctrl+Alt+1 through
Ctrl+Alt+6 to convert the current line to the matching
heading level in Markdown and HTML surfaces. Press the same chord again
on an already-matching heading to clear the level. The chord is
documented in §10.2 of docs/keybinding-standard.md and
overrides NVDA’s switch-to-synth-1..6; if you use NVDA’s synth switcher,
you can rebind the QUILL heading chord via the Keymap Editor.
For section-level reorganisation in Markdown and HTML, press
Alt+Shift+Down while the caret is on a heading to swap that
section past its next sibling; Alt+Shift+Up swaps it with
the previous sibling. The chord is gated on Markdown and HTML —
plain-text documents announce the chord is unavailable and the move is
skipped. Fenced code blocks are honored, so a # fake line
inside a ``` fence is never promoted to a real sibling.
The previous Alt+Shift+Up / Alt+Shift+Down
bindings (expand/shrink selection) live on
Ctrl+Shift+Grave, J and
Ctrl+Shift+Grave, Shift+J now; saved keymaps from older
builds migrate automatically.
For list toggling, press Ctrl+Alt+7 to insert or strip a
bullet list, or Ctrl+Alt+8 to insert or strip a numbered
list. The chord inspects the caret’s current line: if it is already a
list item, the markers are stripped and the line returns to plain text;
otherwise a new list is inserted at the caret. Numbered-list insertion
honours the list_auto_fill_numbers setting (Preferences
-> Editing -> Lists) — when the setting is on, every item gets
1. , 2. , 3. markers; when it is
off, only the first item does. The chord is always available in markdown
and HTML surfaces; plain-text documents announce the chord is
unavailable and the action is skipped.
The status bar’s Section cell reads
Section: Heading N (ordinal of total) whenever the caret is
on a heading in a Markdown or HTML document. The cell is hidden by
default; turn it on via Preferences -> Status Bar. The cell is a
no-op for plain-text documents and for carets on a non-heading line, and
it inherits the same dead-widget guard as the other live-editor
cells.
The four announcement channels
Everything QUILL tells you travels on four channels, and you choose which of them you want:
- Speech — through your screen reader, or QUILL’s own voice when no reader is running.
- Braille — the same message on a connected display (see the section below).
- Sound — short cues for things that happen repeatedly, so you can stop reading confirmations you already expect.
- Status — the status bar, always, as the visual floor.
The same service carries all four in QUILL, Quill Radio and Quill Weather, so an announcement behaves the same wherever you are.
Three commands worth knowing (all in the command palette; give them shortcuts in the Keymap Editor if you use them often):
- Repeat Last Announcement — speech is gone the moment it finishes. If you were reading something else when a message passed, this says it again.
- Announcement Self-Test… — announces a test phrase on every channel, then shows a copyable report of which channels delivered it and which screen reader or display served each one. If something is not reaching you, this is the fastest way to find out whether the problem is QUILL, your screen reader, or a display that is not connected.
- Report Editor Surface — speaks, in one keystroke, which editor surface is active, its native window class, whether system-edit emulation (the braille fix) is applied, whether the editor border is hidden, and whether braille output is live and through which backend. Nothing from your document is included. When reporting a braille or speech problem, run this first and include what it says — it turns “braille looks wrong” into a report that can be acted on immediately.
Settings (Preferences > Accessibility, and searchable):
- Show announcements in braille — on by default.
- Braille announcement style — the same wording as
speech, or the compact position-first form
(
p7/87 l14 c3). - Hold errors on the braille display — keeps an error under your fingers instead of letting the next message flash past it.
- Sound cues in the companion apps — earcons in Quill Radio and Quill Weather.
- Confirm with a sound in Quiet Mode — hear that something worked without QUILL speaking.
- Keep an announcement history — what Repeat Last Announcement replays.
- Interrupt speech for — errors only, warnings and errors, or never.
Quiet Mode and braille. Quiet Mode and Meeting Mode silence speech and keep braille. In a meeting, that is usually exactly right: nothing is said out loud, and the message is still under your fingers.
Announcements on a braille display
Everything QUILL announces - “Saved”, “Now playing: …”, “Weather updated”, recording started and stopped - goes to a connected braille display as well as to speech, in QUILL and Quill Radio alike. It works through whichever screen reader you use: JAWS and NVDA both accept a flash message, and Narrator brailles the notifications QUILL already posts.
Four things are deliberate:
- Braille never costs you speech. If the display is unplugged mid-session, or the reader rejects the message, the announcement is still spoken. A blank display is a small problem; silence would be a much bigger one.
- Nothing is truncated. A long message is sent whole
so you can pan across it
- clipping it to the width of the display would quietly drop the end of a track title, which is usually the part you wanted.
- The same message is not flashed twice in a row. A braille flash replaces whatever is under your fingers, so an identical message within a couple of seconds (a stream re-reporting the same title, for instance) is skipped.
- A burst of different messages settles instead of flickering. When several messages land in quick succession (a status cascade, a fast poll), the first is written immediately and the rest collapse to the newest one a moment later, so the display is never a blur of half-readable flashes. Errors are exempt: an error always writes through at once.
Turn it off with Show announcements in braille in Preferences > Accessibility if you would rather keep the display on your document. Quiet Mode and Meeting Mode suppress braille exactly as they suppress speech.
Equations and mathematics
Writing maths is one of the least accessible things an editor normally asks of you: the notation is visual, and most tools hand you a mouse and a palette of symbols. Insert -> Insert Equation… (Ctrl+Shift+E) takes a different route — you type the equation as text, which is keyboard-only, reviewable character by character, and already understood by screen readers that speak maths.
The dialog is the same accessible web form the other insert dialogs use, with two fields:
- Equation — type LaTeX
(
E = mc^2,\frac{-b \pm \sqrt{b^2-4ac}}{2a}) or paste MathML (<math>...</math>). - Display mode — Inline puts the equation inside the sentence; Block puts it on its own line.
QUILL adds the delimiters for you: $...$ for inline,
$$ on their own lines for a block equation. MathML is
inserted exactly as you typed it, because it already carries its own
markup and must not be wrapped.
Editing an equation you already wrote. Select it
first — including its $ or $$ — and press
Ctrl+Shift+E. The dialog opens with the delimiters stripped off, so the
field holds just the maths, and the display mode you used is already
chosen. Change it, choose Insert, and the whole thing is replaced.
Seeing and hearing the result. An equation is ordinary text in your file, so nothing about your document becomes binary or opaque. The live preview and exported HTML render it properly (QUILL loads a maths renderer only for documents that actually contain maths), and because the source stays as text you can always arrow through the raw LaTeX to check it.
Insert Equation was contributed by @salorajan.
Citations and bibliographies
For research writing, Insert -> Insert Citation… builds correctly formatted citations from details you type, so you do not have to wrestle with the punctuation and indentation rules by hand.
- Choose the source type: Book, Journal article, or Website.
- Choose the style: MLA 9, Chicago 17 (author-date), or APA 7.
- Choose what to insert: the in-text citation, the full bibliography (Works Cited / References) entry, or both.
- Fill in the source details — author(s), title, year, and the fields
relevant to the source type. Separate multiple authors with a semicolon
(for example
Jane Smith; John Doe). - Choose Insert, and Quill places the correctly formatted citation at your cursor.
Quill applies the per-style rules for you — author order and “et al.”, initials, italics, and where each comma and period belongs — so what lands in your document is ready to use. You supply the facts; Quill handles the formatting.
Markdown list editing now follows editor-standard behavior:
Enter continues the current bullet/numbered/task item, and
Enter on an empty list marker exits the list. When the
caret is on a list item, Tab nests it and
Shift+Tab promotes it. For larger reorganizations, use
Insert -> List -> List Manager…
(Ctrl+Shift+Grave, L) to move, promote/demote, add, edit,
and delete list items from a tree view.
Structured List Studio (F2)
The Structured List Studio builds and edits lists by
concept — item text, a checked box, a term and its definition — and
writes the correct Markdown or HTML for you, so you never type
-, 1., [ ],
<ul>, or <dl> by hand. Press
F2 to open it (also at Insert -> List ->
Structured List Studio…):
- With text selected, F2 turns the selection into a list — one item per line, or one per paragraph when blank lines separate them, detected automatically, with any existing bullet/number/task markers stripped. With nothing selected, it starts a new list.
- Choose the type — Bulleted, Numbered, Checklist, or Definition (or description) list — and the output format (Markdown or HTML). A read-only Generated source field shows exactly what will be inserted as you work, and the items/entries outline announces each item’s text, number or checked state, and position.
- For definition lists, fill in the labelled Term and
Definition fields; QUILL emits valid
<dl>/<dt>/<dd>for HTML and a Pandoc-compatible syntax for Markdown. A term can hold several synonyms (one per line → multiple<dt>) and a definition several paragraphs (blank-line separated → multiple<dd>). Inserting the finished list is a single undoable edit. - Nest, reorder, and edit in place. Indent / Outdent / Add child build nested lists, and Move up/down carries a whole subtree with its children. Press F2 with the caret inside an existing list (no selection) to load that list back into the studio and rewrite just that block.
- Convert and import safely. Switching a list’s type carries the content across and warns before dropping structure; Import from clipboard or Import from file… pulls text in with the live preview showing how it was interpreted; and on OK the studio reparses and validates the generated source, so a problem leaves your document unchanged with a clear message.
- When a Markdown definition list has no profile configured for the document, QUILL asks how to generate it — embedded HTML (the recommended portable choice), a specific Markdown profile (Pandoc / Markdown Extra / MultiMarkdown), or a plain “Term: Definition” list — rather than guessing a syntax your renderer may not support.
- Tune defaults and presets in Insert -> List -> List Studio Settings…: pick a shipped preset, adjust the high-value options (verbosity, markers, definition profile, loose lists), and export/import the configuration as JSON. Choose whether to save for all documents (the default the next F2 starts from) or for this document only (a per-document override of just the fields you changed). The document’s format still picks the definition-list Markdown syntax automatically.
F2 was previously Insert Special Character, which is now Shift+F2; both keys are remappable in the Keymap Editor.
For heading presentation control, open Insert -> Heading -> Style Headings…. You can style either all heading levels or the current heading level, then set font family, point size, and alignment. In Markdown documents, styled headings are written as HTML heading tags so the formatting is preserved.
For structure editing, open Navigate -> Heading
Organizer… (Ctrl+Shift+Grave, O). The organizer
lists each heading as level + title, supports keyboard
promotion/demotion (Tab and Shift+Tab), lets
you move sections up/down, rename headings, and validates heading order
(start level, skipped levels, empty headings) before apply.
Markdown profiles and table of contents
Markdown means different things to different writers: a poet wants every line break kept, a documentation author wants a table of contents, and a GitHub contributor wants task lists and strikethrough. Format → Markdown gives you a friendly way to talk about that without memorizing extension names:
- Insert → Table of Contents builds a table of
contents directly from your document’s headings — no AI involved, no
network call, and the links always match the headings exactly because
they are generated by parsing them, not by asking a model to summarize
them. If your document has a
[TOC]marker on its own line, the table of contents replaces it there; otherwise it is inserted right after your first heading. (If you would rather have an AI-written outline in its own words, that is still available as AI → Generate Table of Contents — the two commands are independent, and the AI one only appears when AI Assistance is enabled.) - Select Markdown Profile… lets you choose a named profile — Standard Markdown, GitHub-Style Markdown, Documentation, Poetry and Lyrics, Accessible Publishing, Technical Writing, PRD and Release Notes, or Custom — instead of remembering which extensions a “documentation style” document needs. Quill announces what the profile turns on in plain language, for example “Markdown profile: Documentation. 5 extensions enabled.”
- Preserve Single Line Breaks keeps every line break as a line break instead of letting Markdown collapse it into a flowing paragraph — turn this on for poetry, lyrics, speeches, and scripts where the line is part of the meaning.
- Read Markdown Processing Status announces your current profile and what it enables, without opening a dialog.
- Select Citation Style… chooses how the Author or Student profile prefers citations: Markdown footnotes (light weight, no new dependency) or full Academic bibliography entries through the existing Insert → Insert Citation… MLA / Chicago / APA form.
Math Equations
The bundled com.quill.bundled.math-equations Quillin
provides equation input, a formula gallery, symbol abbreviations,
structural navigation, and round-trip export to Word — everything
covered in this section, and also taught end to end in Tutorial 7: Write math
without learning a new language.
Insert → Insert Equation…
(Ctrl+Shift+E) inserts a mathematical formula at the cursor
and supports two input formats.
LaTeX is the most common format for typeset mathematics. Type the formula using standard LaTeX notation and choose a display mode:
- Inline (
\(...\)) — the equation appears within surrounding text. Example:E=mc^2becomes\(E=mc^2\). - Block (
$$...$$) — the equation gets its own line with a blank line above and below. Example:\frac{-b \pm \sqrt{b^2 - 4ac}}{2a}becomes$$\frac{-b \pm \sqrt{b^2 - 4ac}}{2a}$$on a single line.
Both delimiters were chosen because they are MathJax’s own
default-recognized math delimiters (see Rendering, below) — no
configuration is needed for either to render — and \(...\)
has no ambiguity with an ordinary dollar amount in prose the way a bare
$...$ would.
MathML is an XML-based format used in web publishing
and accessible documents. If your input starts with
<math, QUILL inserts it verbatim and skips the display
mode step. Screen readers can read MathML directly without a visual
rendering engine.
Selection pre-fill: If text is selected when you
press Ctrl+Shift+E, QUILL checks whether the selection is a
LaTeX equation. If it is, it strips the delimiters, pre-fills the prompt
with the bare formula, and surfaces the detected display mode first in
the choice list so you can confirm with one keypress.
Rendering: Browser Preview
(QUILL Key + V) and HTML export inject a MathJax 3 script
tag so equations render visually in any browser. The document source
always contains the raw LaTeX or MathML, which your screen reader reads
directly. The MathJax script is loaded from a public CDN by your
browser, so the visual rendering of equations needs a network
connection; the underlying LaTeX/MathML (and everything your screen
reader announces) is always present offline. If you are offline,
equations show as their raw source rather than typeset math — the
content is never lost.
Common Formulas gallery — no typing required
Insert → Snippet Gallery… lists ten ready-made
formulas contributed by the Math Equations Quillin: the Quadratic
Formula, Pythagorean Theorem, Slope-Intercept Form, Point-Slope Form,
Slope Formula, Distance Formula, Midpoint Formula, Difference of
Squares, and the Area and Circumference of a Circle. Choosing one
inserts it as a correctly formatted $$...$$ block with
nothing typed at all; select it afterward and press
Ctrl+Shift+E to edit it like any other equation.
Math AutoCorrect-style abbreviations
Typing a backslash code followed by a space or punctuation — matching
Word’s own Math AutoCorrect behavior — expands it to the corresponding
symbol anywhere in ordinary prose (not inside the equation prompt):
\alpha becomes α, \sqrt becomes
√, \ne becomes ≠, and so on. The
full table (88 entries covering operators, relations, set and logic
notation, number sets, Greek letters, calculus notation, and geometry
symbols) is seeded from the DAISY-published Word Math AutoCorrect list
(daisy.org/MSMathCodes) and lives under Preferences → Editing →
Insert Automation, where any entry — or the whole set — can be
disabled like any other contributed abbreviation. Case matters where it
matters mathematically: \delta gives lowercase δ and
\Delta gives uppercase Δ.
Explore Equation Structure — step through a formula by ear
Select an equation (or type one fresh) and run Insert → Explore Equation Structure…, or press Ctrl+Shift+Grave, F, to step through it one piece at a time instead of reading it start to finish in one breath.
The keyboard interaction, precisely:
- If nothing is selected, an ordinary text prompt asks for LaTeX or MathML first — Enter accepts it, Escape cancels the command before it starts.
- At each step, QUILL announces the current piece
(speech only — “Whole equation” at the top, or the piece’s name once
you’ve descended, e.g. “Fraction”), then opens a standard Windows
single-selection list (
wx.SingleChoiceDialog) with that piece’s children as choices, always followed by Read this part aloud, then Back up one level (once you’re below the root), then Done exploring. - Inside that list: Up/Down arrows move the
highlight, typing a letter jumps to the next item starting with it, and
Enter (or the OK button) activates
whichever item is highlighted:
- a numbered child (for example a fraction’s Numerator and Denominator, or a power’s Base and Exponent) descends into it and reopens the list for its own children;
- Read this part aloud speaks a full reading of only the current piece, then reopens the same list at the same position so you can keep exploring;
- Back up one level moves to the parent piece and reopens the list there;
- Done exploring ends the session and returns focus to the editor.
- Escape (or the Cancel button), at any list, at any depth, ends the whole session immediately — the same as choosing Done exploring. It is not “go back one level”; Back up one level is the dedicated choice for that.
The stepping itself (numerator/denominator/base/exponent, and the
short per-step announcements) is always a lightweight, dependency-free
structural walk (quill.core.math.navigator) — no download,
no setup, works the moment QUILL is installed. Read this part
aloud is the one part that can get richer: install the free
MathCAT math speech engine (Help → Download
Optional Components… → MathCAT math speech engine, about 3 MB,
MIT-licensed, from the daisy/MathCATForC project) and that
command switches to the same natural-language math speech engine NVDA
itself ships, instead of the simpler built-in template reading. Skip the
download, or if MathCAT fails on a particular formula, and the same
command keeps working with the template reading — nothing regresses
either way. Real Nemeth/UEB math braille is not wired
up yet; that is separate follow-up work once the speech side has been
validated by ear. If you use JAWS, its own Math Viewer becomes available
once an equation is a native Word equation object (see Word export,
below), and remains the fuller, braille-aware option.
Word export and round-trip
File → Export → Word Document… writes a genuine Word
equation object — the same kind Word’s own equation editor produces —
for every \(...\)/$$...$$ equation in the
document, via a one-equation round trip through Pandoc. It opens in Word
with Word’s own equation tools available and is read as math by JAWS,
not as a picture and not as literal text. If Pandoc is not available,
the equation is kept as literal delimited text rather than silently
dropped. Reopening that Word file later (File → Open…)
restores the equation as the same plain, editable
\(...\)/$$...$$ text, whichever docx reading
engine (Preferences → Editing → Word document reading
engine) is configured.
Ask about an equation
The AI Hub’s Math Tutor agent explains a selected equation in plain language — what it means, what each symbol is, and its common name if it is a well-known formula — without solving anything or modifying the document.
A collection of ten worked examples — quadratic formula, binomial
theorem, integration by parts, Euler’s identity, and more — is in
docs/math/latex_testing.md.
Tables, code blocks, and tags
Quill includes guided insertion for tables, code blocks, HTML tags, and Markdown snippets. This is especially useful for users who want structure but do not want to hand-type every opening and closing marker correctly every time.
Cleanup and normalization
The cleanup commands under Tools → Convert are ideal for pasted material, transcripts, exports, and migration work. Use them when you need to turn messy text into something more stable and readable.
Character encoding tools
Under Format → HTML & Encoding, Quill includes a full set of tools for the encoding friction that comes up when preparing text for the web, where one tool wants UTF-8 and the next insists on plain ASCII:
- Show Non-ASCII Characters opens a read-only report
listing every character above plain ASCII, with its line and column,
codepoint, Unicode name, and whether it converts cleanly to Latin-1 and
to Windows-1252 (MS-ANSI). Reviewing that report with a screen reader
replaces the old command-line trick of running a file through
iconvwith a sentinel string and hunting for what failed to convert. - Jump to Source Line — while the Non-ASCII report is
open and your cursor is on a character entry row (the format is
line:columnfollowed by a tab), invoke this command from Format → HTML & Encoding → Jump to Source Line to switch to the source document and land on the reported line. You can bind it to a key from the Keymap Editor for faster iteration. - Jump Back to Non-ASCII Report — returns focus to the report tab after you have reviewed the character in the source. The round-trip lets you step through every flagged character without leaving the keyboard.
- Convert Non-ASCII to HTML Entities rewrites every
non-ASCII character as its HTML entity — a named entity such as
éwhere one exists, or a numericéotherwise — while leaving ordinary ASCII (including&and<) untouched. This is the reliable way to feed text to a tool, such as Pandoc, that refuses to handle high characters. Note that the older Encode HTML Entities command only escapes the five markup characters (<,>,&,",'); this new command is the one that handles accents and symbols. - Decode HTML Entities is the reverse direction: it
turns entities such as
é,&,é, andéback into the real characters they represent —é,&,é, andé— using Python’s standard entity table, so an unrecognized entity such as&madeupword;is left untouched rather than silently destroyed. - Re-encode As… saves a copy of the document in a chosen encoding — UTF-8, UTF-8 with a byte-order mark, Latin-1, Windows-1252, or ASCII. Anything that does not fit a narrow target is written as a numeric HTML entity rather than a silent question mark, so the conversion is lossless and recoverable.
- Analyze Encoding Requirements answers “what is the smallest encoding I could save this in?” without committing to anything. It opens a short report: your current encoding, whether the document still fits it, and — if not — the simplest encoding in the order ASCII, Latin-1 / ISO-8859-1, Windows-1252 / MS-ANSI, UTF-8 that can hold every character losslessly.
- Save Using Minimum Required Encoding… saves a copy using exactly that encoding, so a document that only ever needed Latin-1 does not get forced into UTF-8 just because that is the modern default. You still choose UTF-8 explicitly any time you want it; Quill never switches you to it silently.
- Remove Email Quote Markers, Strip Low ASCII
Characters, Strip High ASCII Characters, and
Convert to Hex Dump round out the HTML & Encoding
tools: the first strips leading
>quote markers (includingName>style prefixes) left over from forwarded email threads; the next two remove control characters or non-ASCII characters respectively; and the hex dump opens a read-only offset/hex/ASCII view of the current selection (or the whole document) for inspecting exactly what bytes are present. - Convert OEM (DOS) to ANSI and Convert ANSI to OEM (DOS) repair the classic codepage-mismatch problem where DOS-era text shows up as garbage in Windows, or the reverse, by reinterpreting the bytes between CP437 and Windows-1252.
- Convert Line-Drawing Characters to ASCII and
Strip Line-Drawing Characters handle Unicode
box-drawing characters (
─,│,┌, and the rest of the U+2500–U+257F block) left over from old DOS-art or terminal output: the first maps them to plain-,|, and+; the second removes them outright.
More search and analysis tools
- Multi Replace… under Search applies up to four search-and-replace pairs in a single pass, with an optional case-insensitive toggle, instead of repeating Find & Replace four times in a row.
- Count Occurrences… under Search reports how many times a string appears in the current selection or the whole document.
- Line Statistics under Tools scans the selection or document for lines that hold exactly one number and opens a short report — count, total, average, median, mode, and standard deviation. Lines that aren’t plain numbers are skipped rather than causing an error.
Tools for Reading, Review, and Inspection
Quill earns trust by making difficult files readable and inspectable.
Describe Character at Cursor
Some characters look the same but are not: a curly “smart” quote versus a straight apostrophe, a no-break space versus an ordinary space, an invisible zero-width space that quietly breaks a search, or a stray byte-order mark pasted from the web. Tools → Advanced → Describe Character at Cursor opens an accessible dialog — in the same read-only style as F1 help, so your screen reader reads it all in one pass — describing exactly what sits under the cursor:
- its name (for example “No-break space” or “Right single quotation mark”),
- its Unicode code point in both hexadecimal and decimal,
- its category in plain language (uppercase letter, dash punctuation, control character, and so on), and
- a note for the invisibles that are easy to miss, plus a flag when the character is non-ASCII.
If the cursor is at the very end of the document, it tells you so rather than guessing. This is the screen-reader descendant of the classic “Reveal Codes” view. It ships without a shortcut; assign one in the Keymap Editor (search for “Describe Character”) if you inspect text often.
Reveal Codes
QUILL keeps formatting codes hidden so your editing
buffer stays clean, fast plain text. Reveal Codes lets
you see and hear every one of them on demand — the beloved WordPerfect
feature, rebuilt for a screen reader. Press Alt+F3 (or
tick View → Reveal Codes) to open a pane below the
editor that shows your document as an ordered stream of bracketed codes
and text: [Bold On], [Font: Arial],
[Size: 14], [Center],
[Heading 2], [Link: …], [Tab],
[¶ Hard Return], [No-Break Space],
[Smart Quote], and so on. The editor itself does not change
— Reveal Codes is a window onto the hidden scaffolding, not a different
way of editing.
Moving between the panes. F6 cycles through the regions — Editor → Reveal Codes (when shown) → Status Bar — and Shift+F6 cycles back, exactly like switching windows. The two carets stay in sync no matter how you move — arrow keys, word jumps, Home/End, Page Up/Down, a mouse click, or a jump from Find: when you move in the editor above, the pane follows to the same spot, and when you move in the pane, the editor’s cursor follows to the matching place. So you can sit in either one and your place in the document always tracks along.
Navigating the codes — it feels like editing text. In the default Flowed view the pane reads like your document with the hidden scaffolding made visible, and the caret moves the way it does in the editor:
- Left/Right arrow walk through the text one
character at a time — but step over a whole code as a single
unit. One press moves you across
[Bold On]and your screen reader simply says “bold on”; it is never spelled out letter by letter. - Ctrl+Left/Right move by word, stopping at each code.
- Up/Down arrow move by line, reading the new line just like the editor does.
- Home/End go to the start and end of the line; Ctrl+Home/End to the top and bottom of the document.
- Land on a code and hear it named as a unit — “bold on”, “tab”, “centred”, “font Arial” — and an opening code also tells you how far its formatting reaches (“bold on, 12 characters”).
Because the pane is a live text control, your screen reader is the single voice while you arrow through it — the region is named once when you enter it, and after that you simply hear the character, word, line, or code your screen reader reads. QUILL used to speak its own phrase on top of that, which meant every code was announced twice under NVDA and JAWS and NVDA disagreed about what you heard; instead, the rich phrase (for example “italic on, 15 characters”) is mirrored silently to the status bar, where you can review it whenever you want it. Explicit jumps — next or previous code, go to matching pair — and mouse clicks still speak, because there is no screen-reader caret narration to collide with there.
If you preferred hearing QUILL’s own phrase on every arrow press, turn on Reveal Codes: Speak Codes Aloud (in the command palette; off by default) and it comes straight back.
Editing a run in place — press F2. Move onto text
that sits between a pair of formatting codes (for
example the words inside [Bold On] … [Bold Off]) and press
F2. The pane restricts you to just that region and lets
you edit it freely; press Enter to apply your change
back into the document or Escape to cancel. The
surrounding codes are left exactly as they were. The whole region edits
as one unit, so a run that contains a [Tab] or a nested
code (bold text with an italic word inside it) comes along together —
nested codes appear as their markup and are put straight back on Enter.
Pressing F2 on plain, un-formatted text tells you there is no region to
edit.
Two views and how chatty it is. In Settings → Editing (or the View menu) choose:
- Flowed (default) — the interactive surface
described above: the codes rendered inline within the running text
(
[Bold On]Hello[Bold Off]), navigable character-by-character with F2 editing. The closest match to the classic WordPerfect look and the most natural layout on a braille display. - Structured — one item per code in an accessible list. A discrete, labelled, unambiguous alternative for scanning structure; your screen reader reads each item as you arrow through it. (Character, word, line, and F2 editing are features of the Flowed view.)
- Verbosity — quiet (just the code name), balanced (adds an opening code’s reach), or detailed (adds Unicode notes for invisibles).
You can still jump code to code (skipping the plain text) and from an opening code to its matching close in either view. Reveal Codes is hidden by default and costs nothing until you open it. Your choices of view and verbosity are remembered between sessions.
Read Aloud
Read Aloud uses local voices with a deterministic support policy. The Windows system voice runs on SAPI 5 and is always available offline with no download — it is the floor that keeps Read Aloud working immediately. DECtalk, eSpeak NG, Piper, and Kokoro (neural, offline) are available as explicit downloads from Speech Center, so base installs stay smaller. You can start, pause, stop, preview, and choose a voice. Speech onboarding announces current availability and recommended next actions before any download starts. For cloud voices, see Read Aloud with AI Voice.
The Kokoro voice models (~120 MB), the classic DECtalk runtime (~2 MB), and the eSpeak NG engine with its voice data (~40 MB) are not bundled in the installer; the first time you choose one of these voices, QUILL downloads it for you from its own verified source (checksum-checked, with a cancelable progress window), and your other voices — including the always-present SAPI 5 system voice — keep working in the meantime. If you are upgrading from a version that bundled these, your existing copies are kept and keep working — you do not need to download anything.
To audition a voice in Manage Voices, select it and use the Preview button. If the voice is already downloaded, Quill synthesises the preview phrase with that voice’s real model; if it is not downloaded yet (for example a Kokoro voice), Quill plays a short pre-recorded sample so you can still hear it before deciding to download. The rate, volume, pitch, and speed controls apply to real synthesis, so they stay dimmed until the voice is downloaded.
When you preview a voice, QUILL stops any preview already playing before starting the new one, so previews never overlap. If a voice takes a moment to synthesize (some neural voices do), QUILL plays a short earcon and, by default, says “Generating preview, please wait” so you know it’s working — turn either off independently in Tools → Reading & Dictation → Sound Events… (the earcon) and Preferences → Accessibility (the announcement). While a preview is generating or playing, the Preview/Test button becomes a Stop button so you can cancel it at any time.
Manage Voices is the Speech (Offline) tab of the Speech Settings dialog — SAPI 5, DECtalk, Piper, Kokoro, and eSpeak NG. ElevenLabs (the only cloud voice) lives on its own Speech (Online) tab instead of sharing this list, so local and cloud voices are never mixed together. A Set as Default button (and a right-click option on the voice list) applies your current engine and voice choice immediately, without needing to close the dialog with OK.
Read Aloud speaks more than English. The Windows engine lists every voice installed on your PC, in any language — add a voice in Windows Settings under Time & language > Speech > Manage voices (for example Italian’s Elsa, or a Spanish, French, German, or Japanese voice) and it appears in QUILL’s voice list ready to use, no download from QUILL needed. The offline neural voices go beyond English too: the Kokoro engine includes Spanish, French, Hindi, Italian, and Brazilian Portuguese voices — they are part of the same voice pack you already downloaded, so picking one just works — and the Piper catalog includes Italian voices (Paola and Riccardo) you can download like any other. eSpeak NG also offers those languages from its built-in data. Pick the voice whose language matches your document and Read Aloud, audiobook export, and batch speech all speak it correctly.
Read Document in Browser (experimental)
Your web browser has voices QUILL’s built-in engines cannot reach — including Microsoft Edge’s “Online (Natural)” voices. This opt-in feature reads the current document with them.
Turn it on. Open Preferences → Experimental, tick the acknowledgement box, then enable Read the document aloud in your browser. It takes effect as soon as you apply Settings — no restart. A Read in Browser (Experimental) item appears under Tools → Reading & Dictation → Read Aloud, and the command palette gains Read Document in Browser (Experimental).
How it works. QUILL writes a self-contained, accessible reader page and opens it in the browser you chose under Preferences → Preview. The page has a labelled Voice picker — each voice marked “on this device” or “online”, filtered to your QUILL display language, with a Show all languages checkbox to reveal the rest — a Speed slider, and Play and Stop buttons. Focus lands on Play, status changes are announced through a live region, and Escape stops. Reading proceeds section by section, so book-length documents stay reliable: Pause keeps your place and tells you where you are (“Paused at section 12 of 300”) and resuming continues from that section, while Stop resets to the top. Your voice and speed choices are remembered between sessions, and the document text carries your display-language tag so a screen reader reading the page pronounces it correctly.
Privacy. QUILL itself makes no network call, and no audio file is produced. Voices labelled “on this device” synthesize locally. The browser’s “Online (Natural)” voices synthesize in the voice vendor’s cloud, which means choosing one sends the text being read to that service — pick an on-device voice to keep everything local. The reader page (which contains your document text) is written to QUILL’s app-data folder and deleted when you close QUILL, so no plaintext copy is left behind.
Audiobook & Batch Speech (the audio production wizard)
Tools → Speech → Audiobook & Batch Speech… is the guided home for audio production: it converts a whole folder of documents to speech audio in one pass, and it builds chaptered audiobooks — from documents, from a folder of recordings, or both. It replaced the old single-page Batch Export to Speech Audio dialog with a wizard that asks one thing at a time; every option below is still there, just spread across clear steps, and your saved project settings still pre-fill everything.
The first page asks what you want to make:
- Narrate documents into an audiobook or speech audio — the steps are: What should I read? (folder, file types, filters) → Who should read it? (engine, voice with a preview button, pace, round-robin voices, voice casting rules, translated editions) → How should chapters work? (chapter mode, spoken headings, the transition sounder and its volume, pauses) → Output and diagnostics (format, existing-file policy, loudness, incremental-rebuild reuse, dry run, temp folder) → the book page (optional: assemble everything into one audiobook) → a plain-language summary.
- Combine audio files into one chaptered audiobook — a shorter path: pick the folder of recordings, describe the book (title, author, narrator, cover, M4B or MP3, ACX loudness), review the summary, and Start. Each file becomes one chapter and you always review the chapter list before the book is built.
- Edit an existing audiobook — pick a finished MP3 or M4B and it opens in the Chapter Workbench (below). A file with no chapter markers opens as a single chapter, ready to split up.
Two automation extras round the wizard out. Library mode (a checkbox on the combine-audio journey) builds every subfolder as its own audiobook in one unattended run — point it at a folder of book folders and come back to a shelf of masters, each titled after its folder. And a new watch action, “Build audiobook from the folder”, keeps a drop folder alive: whenever new recordings land in a watched folder, its chaptered master is rebuilt automatically (a batch of files triggers one rebuild, not many).
A few reach-shortcuts have grown around the wizard. The first
page remembers which journey you used last (documents / audio /
edit) and pre-selects that radio, so the second run lands on the same
first page without a click. The source pages show a combo of
recent source folders, and the edit journey’s
file picker remembers recently opened audiobooks — both
lists persist across sessions and are independent from the
recent-document list, so they never grow without bound. The
default key binding for the wizard is
Ctrl+Shift+Grave, Y; the entry shows up in the command
palette under “Audio Studio…”. The Export to Translated Speech
Audio dialog has an “Open in Audio Studio”
button that closes it and opens the wizard with the document pre-filled,
so the one-shot translation flow advertises the richer chaptered
path.
The whole flow is covered by a nightly UIA-regression suite (CI-only, never on your desktop) that walks every page of the wizard, asserts each page’s “Step N of M” announcement lands in the spoken trace, opens the Workbench on a corpus chaptered MP3 from the edit journey, and drives the silence-proposal parameters dialog from the Workbench. A regression in focus order, modal-id wiring, or screen-reader announcements is caught by the robot overnight instead of by your ears after release.
The Universal Audio Converter
Separate from the audiobook wizard, QUILL has a general-purpose audio converter: it changes audio files between formats — and pulls the audio track out of video files — entirely on your machine through the bundled ffmpeg, so it works in Safe Mode and never uploads anything. There is one converter engine behind three doors, so you can reach it however you already work:
- Voices → Convert Audio… — the dialog form, from the audiobook and batch-speech wizard.
quill convert— a headless command for scripts:quill convert *.wav --to mp3 --preset podcast --out ./done. Add--dry-runto see the plan,--list-presetsor--list-formatsto introspect, and any of the Advanced options (--bitrate,--sample-rate,--channels,--loudness,--gain,--high-pass,--trim-silence,--speed,--compress,--level,--fade-in,--fade-out).- Convert from URL… — paste a link (YouTube and the many sites yt-dlp supports) and QUILL downloads the best-audio stream, then hands it to the converter. This is the one part that uses the network: yt-dlp is not bundled, so the first time you use it QUILL asks once, shows a rights notice (“only download content you have the right to use”), and installs the small yt-dlp component on demand. It is unavailable in Safe Mode.
Building a batch. Add individual files or whole
folders (a folder is scanned, and its tree is mirrored into the output
folder), choose the output format — only the formats
your ffmpeg can actually encode are offered, so a conversion never fails
half-way for lack of an encoder — and pick a preset:
Just convert (change container only), MP3 128/192/320,
Podcast, Audiobook, Voice memo, Web
Opus, Archival FLAC, or Hearing-aid mono. Choose
an output folder (or let it default to a Converted
sub-folder beside the source) and a conflict policy —
auto-number (never overwrites an original),
skip, or overwrite. The batch runs
across several workers off the UI thread, so the window stays
responsive; progress shows in the status bar and, when minimized, in the
tray tooltip, and the final summary is spoken and always names any files
that failed rather than reporting a silent success.
Advanced mode. An Advanced options panel (a checkbox that reveals more controls) exposes the full processing catalog on top of the preset: exact bit rate, sample rate, channels (keep / mono / stereo), and bit depth; loudness-normalize to an audiobook (−20 LUFS, ACX) or podcast (−16 LUFS) target; gain in decibels; a high-pass filter to remove low-frequency rumble; trim silence from the ends; speed (a tempo change from 0.5× to 2× with no pitch shift); a compressor and a volume leveler; and fade in / fade out in seconds. Each control leaves the preset untouched until you change it, so Advanced only overrides what you deliberately set. Every effect is composed from the same tested filter builders QUILL uses elsewhere, so the results match the rest of the app.
The Chapter Workbench
The Workbench is where a finished audiobook gets fixed by ear. The chapter list reads each row in full (“3. The Long Road — starts 1:02:03, runs 12:40”); press Enter on a chapter to hear it. The built-in player has Play/Pause, Stop, Previous/Next chapter, Rewind/Forward, a position slider that speaks minutes and seconds, and a volume slider; the current chapter is announced as playback crosses into it.
Split at playhead — listen for the spot where a chapter should begin, pause there, press the button: the chapter is cut in two exactly at the playhead. This is how you fix a book whose chapters landed in the wrong places.
Set start to playhead — retime an existing boundary: select the chapter, park the playhead where it should start, press. The previous chapter’s end moves with it, so the timeline always stays contiguous.
Merge into previous, Rename (type and press Enter), and Restore original (one press undoes every edit) round out the surgery.
Add chapter…, Delete chapter, Edit chapter… and Preview chapter are the plain verbs. Add puts a marker at the playhead or at a time you type and asks what to call it; past the end of the last chapter it appends one instead of refusing. Delete removes a marker only — the audio joins its neighbour, and unlike Merge it works on the first and last chapters too. Edit opens a small window for the title and the exact start and end (and a chapter link and image, if you publish with Podcasting 2.0). Preview plays just that chapter and stops at its end instead of running on.
Nudge a boundary until it sounds right. Nudge back and Nudge forward move the selected chapter’s start by one step; from the chapter list, Alt+Left and Alt+Right do the same, and adding Shift moves ten steps at once. The Step box offers 100 milliseconds up to 10 seconds and remembers what you picked for next time (
audio_studio_chapter_nudge_ms, half a second to start with). Hear boundary plays three seconds before the marker and two after it, then stops — the fastest way to tell whether a boundary lands mid-sentence. Tick Hear after each nudge and that audition happens automatically after every press; it is off by default, because audio on every keypress is something to ask for rather than discover. Each nudge speaks only the new time (“0:00:09.500”), because a full sentence repeated at key-repeat speed is unusable; the whole sentence follows about half a second after you stop. Run a marker into its neighbour and it stops there and says “Cannot move further” once, rather than refusing on every press.Propose chapters from silences… scans the recording with ffmpeg’s
silencedetect, with a small dialog asking for the noise threshold (dB, default -30) and minimum silence length (seconds, default 0.8), and proposes chapter boundaries at the silence midpoints. The proposal lands in the chapter list for review — never applied blind; press Restore original to undo. The one-long-recording story is complete: open a single 80-minute file (it opens as one chapter), press one button, review, save.Check against ACX measures the file with fbmpeg’s loudnorm and shows a verdict dialog with integrated loudness, true peak, and noise floor, plus a speakable recommendation for each failing criterion (“Integrated loudness is -14.2 LUFS, target -20 plus or minus 3; make the recording 5.8 dB quieter”). The verdict is announced when the measurement finishes, regardless of how the dialog is dismissed.
Import chapters… replaces the whole list from Audacity labels, a CUE sheet, timestamp lines, Podcasting 2.0 JSON, or CSV; Export chapters… writes the list in any of the same five formats.
Split into files… goes the other way: one audio file per chapter, named
NN - Title, into a folder you pick — instant podcast episodes, or tracks for players without chapter support.Propose AI titles… names a folder of
track07-style chapters by listening to them: the opening minute of each chapter is transcribed on this machine by the local speech model (the audio never leaves your computer), only that text goes to your configured AI (a local model keeps even the text on-device), and a short proposed title per chapter lands in the list for your review — Restore original undoes the lot. Needs a configured AI; unavailable in Safe Mode.The player remembers where you stopped in each book and resumes there next time, offers a playback speed control (0.75x to 2x, pitch preserved), and answers “Where am I?” with the full audible glance: “Chapter 4 of 24: The Long Road. 3:12 into the chapter, 9:28 left in it. 1:02:03 of 7:41:00 in the book, 6:38:57 remaining.”
Playback normally uses Windows’ built-in media engine — nothing to install. For gapless audio, exact seeking, and instant chapter jumps even on 8-hour books, download the mpv player engine from Help > Download Optional Components (about 44 MB, checksum-verified; its licenses and a source offer ship inside the download) and the player switches to libmpv the next time it opens. Power users can instead drop a
libmpv-2.dllinto the data folder’sengine-packs\mpvdirectory or pointQUILL_LIBMPVat one. If the DLL is missing or broken, QUILL quietly stays on the built-in engine.Book details (title, author, narrator, genre, year) are edited right in the dialog. All tags… opens the full Tag Editor for everything else: twenty-six fields over five pages — main, details, publishing, sort order and cover art — including track and disc numbers, composer, publisher, copyright, BPM, ISRC, language, grouping, the compilation flag, the four sort-order fields, and embedded cover art you can load, save out or remove. Control+Tab moves between pages. The five quick fields and the editor stay in step in both directions, so neither is ever showing something the other has forgotten. You can also open the Tag Editor on its own, without the Workbench: tick Edit the tags only on the Studio wizard’s Open a book page.
The same editor is in podHarvest. QUILL and podHarvest share the tag and chapter code byte for byte, so a file edited in one reads back exactly as it was left in the other — same fields, same operations, same keys. If you use both, you only learn this once.
Save writes an MP3’s edits in place — only the tags are rewritten; the audio is untouched. An M4B follows what you actually changed: tag edits alone also save in place and finish instantly, while a chapter change still needs Save As, which is a lossless re-mux (no re-encode, no quality loss) into a new file. Long saves run in the background so QUILL stays responsive.
Publish… opens three ways to get the finished book out into the world, each an explicit action:
- Podcast feed — QUILL writes a complete
.rssfile next to the book (RSS 2.0 with iTunes and Podcasting 2.0 tags; chapter navigation rides thechapters.jsonsidecar). Upload the feed and audio anywhere; generation itself never touches the network. - Folder feed (all episodes) — run a whole show from
one folder. Every MP3, M4B, or M4A master becomes an episode (oldest
file = episode 1) with its title from its tags or your override, your
per-episode description (edited in an accessible episode list), its real
publication date, duration, and chapter link. The show settings persist
in the folder, so after each new build, one press of Write
feed.rss now regenerates the complete feed. Write show
notes page produces an accessible
show-notes.htmlbeside it — headings per episode, descriptions, and chapter lists — ready to upload with the feed. - SFTP upload — save a destination (host, folder, and the public URL that mirrors it) and QUILL uploads the book plus its companion files through its own SSH machinery, with the same strict host-key policy as editing over SSH. The password is kept in the Windows Credential Manager, never in QUILL’s settings.
- Auphonic — send the book to your own Auphonic account for professional post-production; QUILL uploads, waits for the production to finish, and downloads the results into a folder next to the book. Your API token also lives in the credential vault. Press Check account and load presets first and QUILL announces whose account the token belongs to, how many processing credits remain, and fills the preset picker with your saved Auphonic presets; the send confirmation then names the preset and your balance before anything uploads. The token can also be managed centrally in AI > AI Hub > Services, alongside QUILL’s other service keys. QUILL asks before anything is uploaded.
Publishing is unavailable in Safe Mode, and every upload runs in the background with spoken completion. SFTP uploads and Auphonic transfers show a progress dialog that speaks whole-percent steps as bytes move (“Uploading book.m4b: 42%”) and has a real Cancel button: cancelling an SFTP upload stops mid-file (already-completed files stay on the server), cancelling an Auphonic run before the upload finishes means no production starts, and cancelling after that leaves the production running in your Auphonic account and skips the download — QUILL announces which of these happened.
- Podcast feed — QUILL writes a complete
Each step is announced as you arrive (“Step 2 of 7: What should I read?”), Back and Next move between steps, and Skip to summary jumps ahead when your saved project profile already fills every page — a repeat run is three keystrokes. The conversion runs on a background task with per-file progress that you can cancel, using the same shared speech pipeline live Read Aloud uses — so the voice you audition is the voice you get.
More Studio conveniences:
- Job files. On the summary page, Save a job
file writes a small, hand-editable
.quilljobthat pins this exact run — folder, voices, chapters, mastering, and book details. Load a job file on the first page brings everything back, pre-filled; keep one per project, or edit it in Notepad between runs. - Look up book details. On the book page, type the
title (and author if you know it) and press Look up book
details — QUILL searches Open Library and
MusicBrainz, two free public catalogs, and the match
you pick fills in the author, genre, and year. QUILL asks before the
first contact, and only the title and author you typed are ever sent. If
the chosen match has a cover image on Open Library and you haven’t set
one, QUILL offers to download it as
cover.jpgnext to your audio and fills the cover field — say no and nothing is fetched. - Audition first. Tick Audition on the output step to convert only the first document — judge the voice, the pace, and the loudness in a couple of minutes before committing to an overnight run.
- Incremental rebuilds. With Reuse unchanged
audio from the last run ticked (the default), QUILL
fingerprints each document’s text together with every setting that
shapes its audio. On a re-run, documents that haven’t changed — and
whose audio is still on disk — are reused instead of re-synthesized,
announced as “Reused … (unchanged since last run)”. Edit one chapter of
a forty-document book and only that chapter is narrated again; change
the voice or any audio setting and everything rebuilds automatically.
Untick the box to force a full rebuild. The fingerprints live in the
source folder’s
.quill/speech-cache.json; deleting that file also forces a fresh run. - Spoken credits. Tick Add spoken opening and closing credits on the book page and QUILL narrates the standard audiobook frame — “My Book. Written by Jane Doe. Narrated by Sam Reader.” — in the run’s own voice, as the book’s first and last chapters.
Across the steps you choose:
- Source folder and whether to include subfolders,
the file types to include (
.docx,.md,.html/.htm,.txt), and optional include/exclude filters (semicolon- or comma-separated globs, matched against the file name and its path) plus a maximum file size to skip very large files. - Skip files larger than (MB) — on the What
should I read? step, the discovery controls now include a
maximum-file-size filter (in megabytes,
0= no limit). A folder with one accidental 400 MB export no longer hijacks an overnight run: any file above the cap is excluded from discovery and the live document count on the same step reflects the cap as you change it. Press Count documents to hear the settled count announced. - Polish runs during the build. The audio source
page’s Trim silences from each recording and the book
page’s fade-in / fade-out / tempo controls now actually
run during the audiobook build. Each chapter file is staged through
core/speech/audio_edit.prepare_chapter_files(head/tail silence trim, fades, pitch-preserving tempo via ffmpegatempo) before ffmpeg concatenates them into the master. Staged files live in the build’s temp directory, so your source recordings are never overwritten, and a polish failure on one file keeps the build going with that file’s previous form. Defaults (no trim,0ms fades,1.0tempo) keep the build byte-identical to the pre-polish path. - Engine, voice, and pace — any of the offline engines (SAPI 5, DECtalk, Piper, Kokoro, eSpeak NG), with a Preview button to hear the chosen voice first.
- Output format — WAV (always
available) or, when
ffmpegis installed, MP3, M4A, M4B (audiobook), Opus, FLAC, or OGG. Whenffmpegis missing, compressed formats fall back to WAV with a per-file note rather than failing. MP3 has a selectable quality, and WAV can be conformed to a uniform sample rate / channel count. - Chapters — turn a long document into a navigable, chaptered file. Choose MP3 (ID3 chapter markers) or M4B audiobook (native MP4 chapter atoms — the Apple/audiobook format), both recognized by Apple Podcasts, Overcast, VLC, foobar2000, and others. Options include a transition sound between articles — a natural page-turn cue by default, or choose a different earcon from your active sound pack; whichever you use is matched to the audio format automatically so it always splices cleanly — whether each heading is spoken, and configurable pauses between articles and sentences plus an anti-clipping trailing pad. A very long section is split automatically on a safe sentence boundary so no single passage runs past the engine timeout, and the run report lists each document’s chapter count.
- Chapter mode — keep the whole document as
one chaptered file, or choose Separate file per
article to write each heading-bounded section as its own
NNN - <heading>audio file in a per-document folder. - Dry run — instead of synthesizing, write a
<doc>.preview.txtof the exact text that would be spoken (after cleanup, pronunciation correction, and polish) for each document, with the pronunciation-substitution count, so you can proofread what will be said before paying for slow synthesis. - Normalize loudness — tick Normalize loudness to audiobook (ACX) level to bring every exported file to a consistent audiobook loudness, the same standard the Build Audiobook tool uses. QUILL measures each file and re-levels it (a two-pass process), without changing the chapters or their timing. Needs ffmpeg; if it’s missing, the file is saved un-normalized with a note.
- Combine empty headings — when a heading has no body of its own (a “Part” heading immediately followed by a “Chapter” heading), fold it into the next article that does have text and join their titles (“Part One: Chapter 1”), so you don’t hear an empty chapter. Off by default; turn it on with the Combine empty headings into the next article checkbox.
- Also export in other languages (translated) —
produce a translated audiobook alongside the original. Choose a
language, pick a voice for it, press
Add language, and repeat for as many languages as you
want; Remove language drops one. Voices are offered
local-first (eSpeak speaks nearly every language
offline, and any installed Windows voice for that language) followed by
the premium multilingual cloud voices — OpenAI, Gemini, and
ElevenLabs — which need the matching provider API key (the same
key the AI Voice feature uses). Choose Translate with: AI
provider (any AI provider you have configured) or
LibreTranslate (runs locally). On Start, each document
is translated and written as
<doc> (<Language>).<ext>next to the original, with the same chapters, page-turn cue, and loudness. Pronunciation dictionaries can be scoped to a language so they only affect that language’s narration. If a chosen cloud voice has no key configured, that language is skipped with a note rather than stopping the run. - You’ll see the cost first for cloud runs. Cloud translation and cloud narration are metered, so if your selections would use a paid cloud service, QUILL shows a combined cost estimate and asks you to confirm before it starts. Runs that use only local engines and LibreTranslate start straight away.
- Round-robin voices — read each article/heading in a different voice that cycles through a list you build. Pick a voice from the Round-robin voices combo box, press Add voice, and repeat; use Move Up / Move Down / Remove to set the order. Article 1 uses the first voice, article 2 the second, and so on, wrapping around. The list uses voices of the engine you selected (so everything stays one consistent audio quality); changing the engine clears it. Leave the list empty to use the single chosen voice as usual. Your combine and round-robin choices are remembered per project.
- Voice casting — explicit assignment layered on top
of the rotation. Add rules on the same page: a pattern plus the voice
that should read every matching chapter. Patterns match the heading
title as a glob (
Chapter *,*interview*, or an exact title, case-insensitive) or a section number (#1for the opener). The first matching rule wins; chapters no rule matches fall through to the rotation or the single voice. Rules use voices of the selected engine (switching engines clears them) and are pinned in saved job files — so a dialogue-heavy production or an interview show casts its voices deliberately instead of by rotation order. - Audiobook metadata — album, author/narrator, genre, and year stamped onto compressed files (each file’s title comes from its heading or name, and its track number from its position).
- If a file already exists — Skip
(cheap resume), Overwrite, or Rename
so both are kept (
name (2).mp3). - Output layout — mirror the source folders or
flatten into one folder, and optionally rename outputs
with a template like
{index:03d} - {stem}(→001 - chapter-one). - Run report — optionally write a
manifest.jsonandmanifest.csvlisting every file’s status, output path, duration, and any error.
A folder remembers its whole speech setup in
<folder>/.quill/speech-project.json — engine, voice,
output format, chapters, text cleanup, pronunciation dictionaries,
metadata, and run policy — so you configure a project once and re-run it
anytime. When you open the dialog for a folder you have tuned before,
those settings pre-fill automatically, and your choices
are remembered when you press Start; anything you
change this run takes precedence over the saved profile, which takes
precedence over your global defaults.
If a voice ever fails to synthesize — a broken system voice, a missing model, or a cloud voice the provider rejects — QUILL records it and skips it on later runs, so a single bad voice in a round-robin rotation can’t keep stopping your batches.
Export to Translated Speech Audio (one document)
Tools → Speech → Export to Translated Speech Audio
is the single-document version of the translated export above: it
translates and narrates just the document you’re
editing, without pointing at a folder. Pick the output format,
choose Translate with (any configured AI provider, or
local LibreTranslate), then add one or more language +
voice targets the same way — local voices first, then the
premium cloud voices. Press Export and QUILL writes
<doc> (<Language>).<ext> next to your
document. If the document has unsaved changes, QUILL offers to save
first so your latest edits are the ones translated. As with the batch
tool, a combined cost estimate is shown before any
metered cloud run.
Build an audiobook from a folder of recordings
The wizard’s Combine audio files journey
(Tools → Speech → Audiobook & Batch Speech…, second
choice on the first page) combines a folder of existing audio files into
one chaptered audiobook — the kind your audiobook or podcast app
navigates track by track. It complements the narrate-documents journey:
where that converts documents to speech, this stitches a folder of audio
(your own recordings, or speech QUILL exported earlier) into a single
master.
- Point it at a folder of audio files; each file
becomes one chapter, in natural-sorted order, with the
chapter title taken from the file name (a leading track number like
01 -is stripped). - Edit the chapters before building. The dialog lists the chapters; you can rename the selected one (type a new title and press Rename or Enter), move it up or down, merge it into the chapter above it (two files then play as a single chapter with one marker), or remove it from the book entirely. Restore original undoes all edits in one press. The list is fully keyboard-operable.
- Bring your titles with you. Import
titles… reads chapter names, in order, from an Audacity label
track, a CUE sheet, plain timestamp lines, Podcasting 2.0 chapters JSON,
or a CSV spreadsheet — any sheet with a “Title” column
works, as does a simple
number,titlelist — so a chapter list you keep in Excel names your MP3 files in one step. Export titles… writes the current list back out as text. - Honest numbers, before and after. The run log opens
with a pre-flight check (files whose sample rate,
channels, or format differ are named — the build still works; it
re-encodes) and an estimated duration and size. After the build QUILL
re-reads the finished book and reports what a player
will actually see: “verified 24 chapters,” or exactly what went wrong. A
plain-text chapter report and a Podcasting 2.0
…chapters.jsonsidecar are written next to the book. - Choose M4B audiobook (native MP4 chapter atoms — the Apple/audiobook format) or MP3 (ID3 chapter markers). Both are navigable in Apple Podcasts, Overcast, VLC, foobar2000, and others.
- Tick Normalize loudness to ACX (Audible/audiobook) spec to bring the master into the loudness range audiobook platforms require (RMS between -23 and -18 dB, peak under -3 dB). After the build, QUILL measures the result and reports whether it met the ACX window in the status bar.
- Fill in the book’s title, author, narrator, genre, and
year. A cover image in the folder (named like
cover.jpg,folder.png, …) is picked up automatically, or browse for one. - The build runs on a background task; the status bar reports when it is done.
Tools → Speech → Manage Pronunciations… lets you teach QUILL how to say specific words — names, brands, acronyms, and technical terms. Each entry is a substitution (literal or regular expression, optionally case-sensitive) that is applied as a silent text transform before synthesis, so a correction is heard everywhere speech happens — both batch export and live Read Aloud. Dictionaries can be global (all projects) or scoped to a single project, can target a specific engine, and you can preview an entry to hear the result. A small starter dictionary ships with common terms already covered.
Text cleanup for speech
Real documents contain typography that makes speech engines stumble. QUILL’s optional text cleanup pass (enable it in Read Aloud settings) deterministically fixes curly quotes, em/en dashes, ellipses, invisible spaces, ligatures, bullets, symbols, fractions, and emoji, and speaks phone numbers, emails, and URLs clearly — with a per-type choice to announce them, speak them, or speak-then-repeat an address so it is easy to catch. The cleanup runs first in the shared pipeline, so live Read Aloud and batch export sound the same.
SSML Builder and SSML playback
For fine control over how a passage is spoken, the SSML
Builder dialog composes <speak> markup —
emphasis, pauses (<break>), say-as, phonemes, and
prosody — from accessible controls with a read-only source preview, so
you never hand-write the tags. Read Aloud plays this markup
natively on SAPI 5 and eSpeak NG, so the pauses and
emphasis take effect instead of being read aloud.
EPUB Navigator
When you open an EPUB, the navigator gives you chapter-aware movement rather than forcing you to scroll blindly through one long extraction.
Chapter headings are also placed inline in the text,
so single-key heading navigation (H and
Shift+H) walks every heading in the book, not just chapter
boundaries. Many older or hand-made EPUBs never used real heading tags
at all; for those, QUILL infers headings from the
book’s structure — a paragraph styled as a title or chapter, or a short
standalone bold line — so heading navigation and the chapter outline
still work where they would otherwise be empty.
Equations are spoken, not skipped. When a chapter
contains mathematics — MathML, or LaTeX written as a math
span or between $$…$$ / \(…\) delimiters —
QUILL converts each equation to a plain-language reading and places it
inline as “Math Equation: …” so the formula is read as part of its
sentence rather than lost or spelled out as raw markup. It uses the same
math speech as the editor: the MathCAT engine when it is installed,
QUILL’s built-in reader otherwise. A formula QUILL cannot parse is read
as its plain source rather than dropped, and a book with no math reads
exactly as before.
OCR Image
OCR is explicit and local. You choose the image, confirm the action, and receive progress updates. This keeps OCR useful without making it invisible or surprising.
Document intake and extraction quality
These commands are where Quill feels especially mature for accessibility-minded reading work. Rather than assuming every import is trustworthy, Quill gives you tools to ask whether the extraction is good enough, what may have been lost, and whether you should quote from the result directly.
GLOW Workflows Inside QUILL
GLOW (Guided Layout and Output Workflow) is QUILL’s built-in accessibility review system. It is about guided confidence, not a compliance dashboard: accessibility-aware review and safe deterministic fixes that feel ordinary. Everything lives under Tools > GLOW.
Enabling GLOW (experimental)
GLOW ships as an experimental feature and is off by default while it matures. To turn it on: Preferences > Experimental, tick Enable experimental features (the master switch for the whole tab), then tick GLOW accessibility review and repair (experimental). It takes effect as soon as you apply Settings — the Tools > GLOW menu appears with no restart. While the gates are off, the GLOW commands stay visible in the command palette so they are discoverable; running one simply explains how to enable the feature. Experimental means still maturing, not unsafe: every GLOW action keeps the review-first, never-touch-the-original contract described below.
Audit flows
- GLOW Audit Current Document reviews the whole file in front of you.
- GLOW Audit Selection / Paragraph reviews just the block at the caret.
- GLOW Audit File… picks a structured document on disk — DOCX, PPTX, XLSX, PDF, EPUB, or Markdown — and runs the shared GLOW engine over it in the background. You get a score, a grade, and every finding with its suggestion.
Results open as normal QUILL tabs you can read, search, compare, or keep open beside the source. Each finding names the rule, the severity, the location when known, and a plain-language suggestion.
Fix flows
- GLOW Fix Selection / Paragraph applies quick in-place cleanup where you are.
- GLOW Fix Current Document generates a preview and immediately compares original versus fixed — another working context beside your document, not away from it. Accept or reject with full knowledge of what changed.
- GLOW Fix File… writes a repaired copy of a
structured document next to the original (for example
report-accessible.docx). The original is never modified, QUILL confirms the output name first, and the post-fix audit opens so you can verify the result.
What GLOW checks
In-editor audits cover plain text, Markdown, and HTML: missing spaces after Markdown heading markers, heading-level jumps, generic link text (“click here”), missing HTML language metadata, missing image alt attributes, tables without header cells, tab-indent hazards, and dense paragraphs / plain-language friction. The optional shared engine extends this to structured files (DOCX, PPTX, XLSX, PDF, EPUB) with a scored, graded report.
The GLOW engine and updates
The in-editor checks are always available. Structured-file audit and
fix use the optional GLOW engine (installed with QUILL’s
glow extra); when it is absent, QUILL says so honestly
instead of failing. Help > Check for GLOW Updates…
checks for a newer engine on demand — the check is opt-in, the download
is confirmed separately, every wheel is signature- and
checksum-verified, and a failed install rolls back to the bundled
engine.
GLOW settings
Preferences > GLOW Accessibility holds the engine toggle and the optional networked features (AI alt-text generation, PII redaction, WCAG language processing). All networked features are off by default and each use asks for explicit consent — the default GLOW workflow runs entirely on your machine.
Inserting images with alt text
GLOW’s audit above catches missing alt text after the fact. Insert > Image… is the proactive half: it requires you to either write alt text describing the image, or explicitly check “This image is decorative” — you can’t insert without making one of those two deliberate choices. Decorative is the right choice for an image with no informational content (a divider line, a background flourish); it is not the same as an image nobody ever got around to describing, which is the problem this dialog exists to prevent.
Let AI draft the alt text. If you have an AI vision model connected (Preferences > AI) and you’re not in Safe Mode, the dialog shows a Suggest alt text with AI button. Choose your image file, press the button, and QUILL describes the picture and drops the description into the alt-text field for you to read, correct, and approve before inserting. The machine drafts; you stay in control of what actually goes in. (AI is fully disabled in Safe Mode, so the button won’t appear there.)
Images that lay out correctly on a web page. When
you’re inserting into an HTML document, the dialog adds
a Size and layout section: set an optional
Width and Height (so a browser
reserves the space and the page doesn’t jump around as the image loads),
keep Responsive on so the image scales down to fit
narrow columns instead of overflowing, and add an optional
Caption (inserted as a proper
<figure>/<figcaption> so the
caption is tied to the image for screen readers). These options are
hidden in Markdown documents, whose syntax can’t carry them — there you
get the clean  you expect.
For any image already in your document — typed by hand, pasted, or brought in from another format — Tools > Describe Image at Cursor tells you exactly what a screen reader hears there: “Image: sunset.png, alt text: a sunset over the lake,” or, just as clearly, “Image: sunset.png, alt text MISSING” if none was ever given.
Verbosity and Announcements
QUILL lets you control what it announces and when, so the editor is
as quiet or as talkative as you want. Open Verbosity
Preferences from the command palette
(Ctrl+Shift+P, type “verbosity”) or assign it a shortcut in
the Keyboard Manager.
- Profiles. Pick a talkativeness level: Beginner (full context for every action), Normal (informative, the default), Expert (routine confirmations are suppressed, but errors always speak), or Quiet (speech and earcons off, leaving braille and the on-screen status bar). Switching profiles is announced.
- Channels. Choose which channels carry announcements — Speech, Braille, Sound — while Visual (the status bar) is always on and cannot be turned off, so you never lose the on-screen status of an action.
- Quiet Mode silences speech and earcons for a
meeting or a shared room; Meeting Mode quiets sound
further. A
[Q]or[M]indicator shows when a mode is active, and the status bar keeps updating either way. Undo Verbosity Change steps back the last verbosity change. Toggle these from the Command Palette, or assign your own keys in the Keymap Editor; they have no default shortcut. - Less repetition, no floods. Under Preferences > Accessibility, Collapse repeated announcements (on by default) stops QUILL from speaking the exact same announcement again when it repeats within a moment — for example when you hold a key at the top or bottom of a list. An optional Announcement budget (per 5 seconds) caps how many announcements are spoken in a burst (0 means no cap). Both affect only what is spoken; the status bar always shows every update, so nothing is ever hidden.
- Trim specific cues. Two announcement toggles under Preferences > Accessibility tailor what QUILL says. Announce entering and leaving dialogs (off by default) speaks “Entered” / “Exited name dialog” as dialog boxes open and close — it is off because your screen reader already announces dialogs and reads their titles, so the cue is redundant; turn it on if you want the extra spoken transition. Announce indentation depth on Tab (on by default) makes Tab and Shift+Tab speak the new depth (“4 spaces”, “1 tab”) instead of “Indented lines”. Both affect only speech; the status bar still updates.
- Re-read what QUILL just said — the Spoken Echo. Speech is fleeting: an indent depth, a formatting description, a save result, or a “no matches” scrolls past the instant it is spoken. The Spoken Echo remembers the last twenty things QUILL announced and shows them, newest first, in a read-only dialog you can arrow through line by line, review by character, select, and copy. Open it any time with Alt+Shift+E, or from Help > Show Spoken Echo — it works after any announcement, including ones triggered by ordinary editing keys such as Tab, so you can hear “8 spaces”, then open the Echo to read and copy it. If you are used to the screen-reader convention of pressing a reporting command twice, double-pressing an informational command — Describe Formatting, Document Summary, Context Help, or Announce Contrast — opens the Echo instead of re-speaking the same line. The dedicated Alt+Shift+E key is the universal path and always works; the double-press shortcut can be turned off under Preferences > Accessibility > Double-press to show the Spoken Echo (on by default). The Echo only records lines QUILL actually speaks, never your typing.
- Braille display showing the first character in cell two? Resolved — and on by default. Live JAWS + braille testing confirmed the fix: text renders from cell 1 and selections show dots 7-8. Two checkboxes on Preferences > Braille own the whole fix, both checked out of the box: Fix braille cell alignment and selection dots (recommended) and Hide editor border (required for braille cell alignment) — the visible border itself pushes braille output out of cell 1, so the borderless frame is part of the fix. Leave both on unless a specific display misbehaves; unchecking the border warns you first that cell alignment will break. Restart QUILL after changing either so every document uses the new setting. (The old Editor control type and Experimental surface settings retired with this fix.)
- Per-action templates. Advanced users can edit
exactly what each action says, using tokens like
{line}and filters like${ordinal:line}, with live validation and preview. Templates can be saved to a library, shared as.quill-verbosity-profile.jsonfiles, or installed from a QUILL Verbosity Pack (.qvp.json) — all data-only, never code. - Preview Lab and History. Preview how a profile sounds against canned scenarios before committing, and review, replay, copy, or ask “why did QUILL say that?” about recent announcements.
- Safe Mode. If a custom setup ever misbehaves, Safe Mode restores the built-in announcements without deleting your customizations.
These controls are screen-reader-first: QUILL speaks alongside your screen reader, it does not replace it, so it never duplicates the typing echo or punctuation settings your screen reader already provides.
About QUILL’s own voice. When you run a screen reader, QUILL speaks through it. QUILL also has its own built-in voice (Windows SAPI 5) used only as a fallback for people who do not run a screen reader. If that built-in voice ever fails to start, QUILL does not interrupt you about it while your screen reader is doing the talking — it simply notes it quietly. If you do want QUILL’s own voice and it did not start, run Tools > Retry TTS Engine.
Accessibility and Low-Vision Features
Quill is designed so accessibility is visible, not hidden.
Region model
Use F6 and Shift+F6 to move between editor
and other major regions. Quill announces those region transitions
consistently.
Keyboard trap and accessibility audit
The keyboard trap snapshot and accessibility audit commands are there to help verify the interface itself. This is useful both for users and for testers helping improve the product.
Contrast and theme behavior
You can validate contrast, switch dark mode, and align with system behavior. This matters for users who need a predictable low-vision experience rather than a single visual theme.
Status bar as an accessible control surface
Quill’s status bar is navigable and interactive. This is a subtle but important design decision. It keeps useful information close while still making it reachable from the keyboard.
Page indicator
QUILL shows a Page cell in the status bar for every document, on by default, right next to your line/column position.
For PDFs, this is an exact count: QUILL knows the real page boundaries from the file itself, so it reads, for example, “3 of 12.”
For everything else – plain text, Markdown, and most Word documents – there is no such thing as a real “page” until you print or export: page breaks depend on your font, margins, and paper size, none of which QUILL tracks while you’re writing. So for these documents, the Page cell shows an estimate based on word count, clearly marked as such: “~3 of ~12 (estimated).” The tilde and the word “estimated” are always there together – if you ever see a page number without them, it’s a real count; if you see them, it’s QUILL’s best guess, not a promise.
You can tune the estimate’s word-per-page basis in Preferences > Navigation and QUILL Key > Estimated words per page (default 300, range 150-600) if your writing runs noticeably longer or shorter per page than the default assumes.
Go To Page (Ctrl+Shift+G, also
reachable by pressing Enter on the Page cell) jumps to a page number.
For PDFs this is exact; for everything else, it jumps to QUILL’s best
estimate of where that page would fall – the prompt tells you which kind
of jump you’re about to make.
Braille (BRF) documents keep their own, more detailed page system (see Braille Mode above) and do not show this generic Page cell.
Sound notifications and earcons
Quill can play short, non-speech audio cues — earcons — at meaningful editing moments, so your screen reader stays free for the text while sound carries the “something happened” signal. This is entirely optional and off by default for most events; speech is never replaced.
- Sound packs (QSP). A sound pack is a directory (or
a
.qspzip) of WAV files with amanifest.jsonmapping event IDs to sounds. Quill ships the Ink pack of synthesised earcons, and uses it by default whenever you turn sound on. In the first-run Keyboard and Sound wizard page, the Sound pack control is now a simple dropdown of the packs that ship with Quill — just pick one (no hunting for a file). The dropdown defaults to Quill’s own pack, so enabling sound always gives you working earcons out of the box. - Per-event control. Open Tools → Reading & Dictation → Sound Events… to turn individual events on or off. Events are grouped — Earcons, Compare, and (when an indent-tone pack is loaded) Indentation tones — so you can keep, say, save and search cues while silencing others.
- Indentation tones. For code and other indented text, Quill can play a pitched tone as the caret crosses indent levels: the tone rises as you go deeper and falls as you come back out. Pick a musical scale (pentatonic, whole-tone, diatonic, or chromatic) under the Indentation tones setting, or leave it Off. Blank lines stay silent and hold the previous level.
- Compare cues. When a sound pack is active, compare mode plays distinct cues for opening and closing a comparison, moving to the next or previous difference, and bumping against the first or last difference. See Comparison.
- Toggle everything. Toggle Sound Notifications (in Reading & Dictation) turns all earcons on or off at once, and plays a short confirming “on” or “off” cue so you know which state you landed in.
- Every numbered slot has its own note. The twelve Copy Tray slots and the ten quick-bookmark slots each play their own pitch on a shared musical scale when you copy, paste, set, or jump. Copy Tray slots are soft marimba-style taps; bookmarks are brighter chirps, so the family is obvious before the pitch lands. After a little use, “slot seven” stops being something you wait to hear spoken — it is a note you recognize, which is what makes numbered slots usable at speed.
- Progress you can hear without being interrupted. Long downloads and installs play a short blip at every 5 percent, rising in pitch as they approach done — the 25, 50, and 75 percent marks carry a touch of harmony, and 100 percent resolves with a small two-note finish. A sound never talks over your screen reader the way a spoken percentage does; the spoken quarter-milestones remain as the coarse narration.
- Selection and boundary cues. Starting a selection with F8 plays a rising two-note gate and completing it plays the mirror image; reaching the very top of the document gives a high ceiling tick, and the very end a low floor thud.
- The companion apps have their own voice. Quill Radio and Quill Weather cue their own moments (connecting, a stall, a new weather alert) through the same Sound Events system, and each cue can be turned off individually from the same settings surface. Which moments each app marks, and how, is documented in that app’s own user guide.
- Keep the sound device awake. Some USB and Bluetooth audio devices power down after a few silent seconds and clip the start of the next sound. If the first moment of your earcons or speech gets cut off, turn on Keep the sound device awake (in Settings, search “keepalive”): QUILL plays a silent clip every 20 seconds so the device never sleeps. Off by default.
- Hear them all. Run
python scripts/audition_ink_sounds.pyfrom a QUILL source checkout to audition the identity set family by family, or add--allfor every sound in the pack.
Choosing between a tone and words
A few moments have both a sound and a sentence available, and which one you want depends entirely on how long you have been using Quill. A tone has to be learned before it means anything; being told “Copied” on every Ctrl+C is intolerable within a minute once you have learned it. Both reactions are right, so this is a setting rather than a decision made for you.
- Action feedback (
action_feedback) governs the moments where a key did something and your screen reader says nothing about it: cut, copy, paste, delete, undo, redo, and starting a selection with F8. Choose Play a sound (the default, and what Quill has always done), Speak the action, Both a sound and speech, or Neither. Where a moment carries a number worth hearing — “Pasted 1,234 characters as plain text”, “Selected 412 characters, 68 words” — the number is always spoken: a tone cannot carry a count, and the count is usually the whole reason for asking. Neither silences the audio and still writes the status bar, so you can always go and read what happened. - Find: nothing found
(
find_not_found_feedback) offers the same four choices for the one failure a search can have, and it is a separate setting on purpose: F3 is pressed in runs, and “Not found” spoken on every press is the fastest way to make somebody turn speech off altogether. It also defaults to the tone alone.
If you pick a sound for a moment your sound pack has no clip for, Quill speaks instead — the choice is between two kinds of feedback, never a route to none. Silencing an individual event under Sound Events… is different: that is you asking for quiet, and it stays quiet rather than turning into speech.
Wrapping at the ends of a search
Wrap around when searching (wrap_find)
decides what happens when Find Next reaches the end of the document, or
Find Previous reaches the start. With it on (the default) the search
continues from the other end, and a distinct wrap cue tells you that it
did — which is the one thing your screen reader cannot know. With it off
the search stops and says which end it stopped at: “No more matches.
Reached the end of the document, and wrapping is off.”
That wording matters, because the two situations need different fixes. “Not found” means change the pattern; running out of document means go to the other end and press again. The setting applies in both directions, and to Quill and QuillLite alike.
Earcon events in the bundled Ink pack include:
quill_key_pressed (QUILL key prefix armed),
abbreviation_expanded, abbreviation_deleted,
snippet_inserted, autocomplete_accepted,
document_saved, document_created,
search_found, search_not_found,
search_wrapped, heading_jumped,
table_entered, browse_mode_on,
browse_mode_off, ai_thinking_started,
ai_response_received, ai_error,
transcription_started, transcription_stopped,
ssh_connected, ssh_disconnected,
error, warning, sound_on,
sound_off, and the five compare events. Every scripted
earcon in the bundled pack is a distinct sound, so two different events
never sound identical. Pack authors can map any event ID to any WAV
file; the full QSP format and event reference are documented in the
product requirements document, under “Sound notifications and QSP sound
packs.”
Background checks: how often, how loud, how urgent
Quill quietly watches a few things for you: a watched folder, the weather, and (if you use it) your GitHub account. Every one of those now offers the same three controls, so once you have set up one of them you already know how the others work. Find them in Preferences → Settings and search for the monitor’s name, or for “tick”, “interrupt”, or “check”.
- How often it checks. The poll interval. Watched folders are measured in seconds, because a file you just dropped in should be noticed while you are still standing in the folder. Feed and account checks are measured in minutes, because nothing good comes of asking a server the same question every five seconds. Quill will not accept a zero-second interval — an interval of zero is a program that never stops checking, not a program that checks constantly — so a value of 0 or a negative number is quietly raised to the monitor’s minimum.
- Whether the check itself makes a sound. Turn on Play a sound on each check and you get a short tick every time that monitor looks. This is not a notification that something happened; it is proof the watcher is alive. With it on, silence means “it stopped”, not “nothing new”. It is off by default for every monitor, because a metronome you did not ask for is worse than silence — turn it on for the one or two watchers you actually want to feel running.
- Whether a result interrupts speech. Turn on Let results interrupt speech and that monitor’s announcements cut across whatever is currently being spoken. Leave it off (the default) and they wait their turn, so a new-result notice never chops a sentence in half while you are reading. This is a preference, not a property of the message: some people want the weather to interrupt and the watched folder to wait, and some want the opposite. Genuine errors always interrupt regardless — no setting can silence the message that says something broke.
Quill describes the combination back to you as one plain sentence rather than making you assemble it from three checkboxes: “Checks every 15 minutes, ticks audibly, does not interrupt speech.”
Startup speech is opt-in, not automatic
By default, QUILL speaks only the QUILL Ready line at
startup. The other spoken lines that some users heard under 0.6.x — the
Document Guardian activation cue and the screen-reader detection result
— are now written to the status bar so sighted and low-vision users
still see them, but the screen reader stays quiet unless you ask for
more. Two settings under Preferences → Accessibility
control the speech:
- Speech channel (verbosity) — the master gate. When
off, every spoken announcement from built-in startup events and Quillin
extensions is suppressed while the status bar keeps the same text. The
setting defaults to on so first-run users still get the
QUILL Readyline; turning it off gives you a fully quiet startup. - Speak screen-reader detection result at startup —
when on, speaks the
Detected screen reader: <name>. Adaptive hints enabled.line after the probe finishes, but only if the verbosity gate is also on. The status bar always shows the result regardless.
Document Guardian has its own per-Quillin toggle for the activation
and deactivation cue. Open Preferences → Document Guardian →
Lifecycle Announcements and turn on Speak activation
and deactivation cues if you want to hear
Document Guardian is now active. when the Quillin starts
(and is now inactive. when it stops). The setting defaults
to off so first-run stays quiet; the status bar still records every
enable and disable event for sighted and low-vision users.
Quill on macOS
Quill runs on macOS as well as Windows, from one codebase, with feature parity as the goal.
- VoiceOver-first, with a self-voice fallback. On macOS, Quill routes its announcements to VoiceOver and never speaks over it. Headings, regions, and result messages behave the way they do on Windows with NVDA/JAWS. If you run Quill on a Mac without VoiceOver, Quill now speaks those same announcements through the native macOS speech synthesizer instead of going silent — the same self-voicing fallback Windows uses with SAPI when no screen reader is detected (#2).
- A real macOS Window menu. The Window menu (Next/Previous/Close-Other/Send-to-Tray) is registered with the system as the macOS Window menu, so AppKit places it in its conventional slot (just left of Help) and merges in the standard Mac items — Minimize (Cmd+M), Zoom, Bring All to Front, and the live window list — alongside Quill’s own entries (#76).
- Setting Quill as your default editor takes effect
immediately. On macOS, after registering the file associations
(via
dutiif you have it installed —brew install duti), Quill also refreshes the system’s LaunchServices database, so Finder opens files in Quill right away instead of keeping the old default until a reboot (#74). - Your secrets stay off the command line. API keys,
SSH passphrases, and other secrets Quill stores on your behalf go into
the macOS Keychain through the native Security framework, where the
value never becomes a command-line argument visible to other processes.
(On a Mac without the native binding, Quill falls back to the
securityCLI and warns the first time it does, since that path does pass the value on the command line.) (#1/#16/#43) - On-device AI. Ask Quill uses Apple Foundation Models (Apple Intelligence) on a supported Mac — no model download and no cloud. The on-device GGUF/llama.cpp picker is hidden on macOS because Apple’s model is used instead; you can still connect Ollama or a cloud endpoint if you prefer.
- Standard Mac behaviors. Preferences and About use
the standard macOS menu locations (
Quill -> Settings,Quill -> About Quill). The Preferences command is wired to the stock macOS menu entry so it appears in the Quill app menu as expected. - Tray status messages say “menu bar” on macOS. When Quill minimizes to the background, restores, or toggles tray mode, its status message names the surface you actually see — “menu bar” on macOS (where the feature is a menu-bar status item) and “system tray” on Windows. It used to say “system tray” verbatim on both.
- The default-folder hint shows a Mac path on macOS.
In Settings, the blank default-folder hint now reads
e.g. /Users/YourName/Documents (blank = last used)on macOS instead of a WindowsC:\Users\...path that doesn’t exist on a Mac. - macOS-safe launch paths. Opening a file, revealing
an enclosing folder, launching an installer, or previewing a voice
sample now uses macOS-native launch behavior instead of relying on
Windows-only
os.startfileassumptions. - Help menu registered as system Help. The Help menu
is registered as the macOS system Help menu, so the conventional
Cmd+?Help shortcut works as expected (#613). - Back / Forward Location on macOS uses
Cmd+[andCmd+]so it does not collide with VoiceOver’s word-by-wordOption+Left/Option+Rightreading (#609). Windows keepsAlt+Left/Alt+Right. - Keymap profiles stay platform-aware. The built-in keymap profiles no longer override the platform-aware defaults for quit, back/forward navigation, or document switching, so macOS users inherit the correct Cmd-based bindings instead of Windows-only overrides.
- Function keys and the Fn key. Many of Quill’s default shortcuts use the F-keys (F3 for Find Next, F7 for spell check, F8 for selection, F6 for region navigation). On a stock MacBook these keys default to system actions (brightness, Mission Control, media) unless you either hold Fn while pressing them, or enable Use F1, F2, etc. keys as standard function keys in System Settings → Keyboard. To spare you that, Find Next and Find Previous also bind to the macOS-standard Cmd+G and Cmd+Shift+G, which need no Fn key. You can reassign any binding in Preferences → Keyboard → Keymap Editor.
- macOS-specific shortcut defaults. A few Windows
defaults would have collided with macOS system shortcuts, so they have
Mac-specific alternates: Replace is
Cmd+Alt+F(notCmd+H, which is Hide), Pop Mark isCmd+Alt+M(notCmd+M, which is Minimize), and Select Chunk isCmd+Alt+Space(notCmd+Space, which is Spotlight). These are provisional — if one collides with something on your setup, reassign it in the Keymap Editor and tell us via Help > Get Help from Support. - Read Aloud and earcons work on macOS. Live Read
Aloud plays through
afplay, so Piper, Kokoro, ElevenLabs, and the system voices actually speak; the earcon volume slider also works on macOS (it was a silent no-op before). - Signed and notarized. Release Mac builds are
code-signed with a Developer ID certificate and notarized by Apple, so
Gatekeeper opens them without warnings. The app ships as a
.app(and disk image). - The accessible WebView that powers the chat, the Markdown/HTML preview, the About box, and the update dialogs reads correctly under VoiceOver, just as it does under NVDA and JAWS on Windows.
Profiles, Keyboard Packs, and Customization
Quill is customizable, but it tries to keep customization coherent.
Feature profiles
Profiles shape which feature clusters are on, quiet, or off. This helps Quill stay calm for new users without stripping power from advanced users.
Choosing a profile
Each profile is a starting point, not a cage — switch any time from Profiles and Features…, and fine-tune individual features afterward without losing the rest of the profile’s choices.
The first-run Personalise QUILL wizard offers seven of these as curated starting points, each with a plain-English preview of what you get. The full set of ten lives here in Profiles and Features…, including profiles the wizard does not surface directly, such as Reader and Student, Office and Admin, and Low Vision.
- Essential — the calmest possible editor. Just text, files, and the basics, with everything else a quiet opt-in away.
- Writer — everyday writing, formatting, and cleanup, with guided power features nearby when you reach for them. For papers, citations, and a table of contents, see Author or Student below.
- Author or Student — long-form writing with a table of contents, footnotes, and MLA / Chicago / APA citations, built for papers, theses, and class assignments. Choose footnote-style or full academic citations with Format → Markdown → Select Citation Style….
- Reader and Student — reading, highlights, references, and light writing, tuned for working through someone else’s material rather than producing your own.
- Office and Admin — reliable file work, sessions, cleanup, and printing for everyday office documents.
- Developer and Power Text — regular expressions, cleanup, inspection, and document-analysis tools surfaced up front.
- Low Vision — higher contrast, larger reading aids, and friendly inspection tools.
- Braille and Screen Reader Power User — screen-reader-friendly navigation with advanced text tools surfaced calmly rather than buried.
- Accessibility Professional — reading, inspection, trust, and accessibility diagnostics for auditing other people’s documents.
- Full Quill — everything visible, including advanced and experimental paths, for people who would rather see it all than ask “why don’t I see this?”
Use Profiles and Features… to:
- switch profiles
- quick-switch profiles from anywhere with
Alt+Shift+P - compare profiles
- undo the last profile change
- reset to Essential
- import and export profile data
- create custom profiles
- update a custom profile from your current feature/settings/keymap state
- delete custom profiles
Custom profiles support an explicit inheritance choice:
- Inherit parent profile keeps the selected built-in profile as the starting point.
- Bare-bones start opts out of inherited features and starts with only locked core safety features enabled.
Fine-tuning individual features
Help > Feature Profiles > Manage Individual Features gives you per-feature control on top of your active profile. Use it when a profile is almost right but you want to add or remove one or two capabilities without creating a whole new profile.
The dialog shows a checkbox for each user-toggleable feature. A Show radio button at the top lets you choose between All features and Disabled features only. The disabled-only view filters the list down to features that are not currently on, so you can scan and enable specific capabilities without scrolling past everything that is already running.
When you arrow to a checkbox, a read-only description area at the bottom of the dialog explains what the feature does and what it depends on. Enabling a feature automatically enables its dependencies; disabling one turns off the features that depend on it, and QUILL tells you what changed in the status bar.
When you enable a feature in the disabled-only view, it disappears from the list immediately and focus moves to the next disabled item so you can keep going without losing your place.
Keyboard packs
Quill now supports golden keyboard packs so the editor can feel familiar from day one. Available packs include:
- Quill Default
- Quill Writer
- Quill Navigation
- Quill Review
- Windows Notepad
- Notepad++
- VS Code
- Microsoft Word
Choose a pack in Profiles and Features…. If you later hand-edit shortcuts or import a custom keymap, Quill automatically switches the pack label to Custom.
Keymap editor
Use the keymap editor when you want to rebind a single command. Quill detects conflicts and warns you before reassigning a binding already in use.
Recommended shortcut updates
Occasionally a keyboard shortcut needs to be corrected for everyone —
for example, Find returns to Ctrl+F after
some pre-release builds had moved it to a QUILL-key chord. QUILL applies
a correction like this once, and then never touches
that binding again, so you are always free to rebind it afterward in the
Keymap Editor.
If you would rather QUILL never change your shortcuts, turn off Apply recommended keyboard-shortcut updates in Settings. With it off, your bindings are left exactly as you set them, even across updates.
Reset everything to factory defaults
To start over completely, choose Tools → Customize & Support → Reset Everything to Factory Defaults…. After a confirmation prompt (it defaults to “No”), this resets your settings, keyboard shortcuts, menu customizations, and feature profile to their originals in one step. Your documents, autosaves, and backups are never affected. Smaller, focused resets are also available: Reset Keymap (shortcuts only) and Reset to Factory Defaults inside Settings (settings only).
Keyboard manager for QUILL Quick Nav
QUILL Quick Nav actions appear in Keymap Editor as dedicated entries:
QUILL Quick Nav: LinkQUILL Quick Nav: ListQUILL Quick Nav: List ItemQUILL Quick Nav: TableQUILL Quick Nav: Block QuoteQUILL Quick Nav: BookmarkQUILL Quick Nav: Code BlockQUILL Quick Nav: Table of ContentsQUILL Quick Nav: ParagraphQUILL Quick Nav: SentenceQUILL Quick Nav: HeadingQUILL Quick Nav: Block
Exact rebinding examples:
- Open
Tools -> Customize & Support -> Keymap Editor.... - Choose
QUILL Quick Nav: Link. - Enter
Kif you want link jumps onKinstead ofA. - Choose
QUILL Quick Nav: Code Block. - Enter ``` (grave) if you prefer grave instead of apostrophe.
Notes:
- Conflicts are blocked by the keymap editor before saving.
- Quick Nav keys are interpreted only while QUILL Quick Nav mode is active.
Status bar settings
If the current status bar is too busy or not informative enough, change it. You can reorder items and choose which ones stay visible.
Settings you can change today
Quill’s current settings and customization surface covers the things you are most likely to want to tune every day.
- theme behavior, including dark mode
- soft wrap
- recent files limit
- system tray mode
- persistent undo
- spell check as you type
- spell check a document before saving — when on, saving opens the Spelling Review (F7) first so you can correct the document before it is written. Off by default.
- line-number visibility
- whether Quill starts with no document open
- suggest a filename from the first line — when on, saving an untitled document pre-fills the Save dialog with a name taken from the first line (across formats; leading markup like a Markdown heading, quote, or list bullet is stripped). Off by default.
- read-aloud voice selection
- active feature profile
- active keyboard pack
- custom keybindings through the keymap editor
- status-bar order and status-bar visibility
Some of these live in the View menu for quick toggling; the preference-style toggles now live in the Settings dialog (Tools -> Customize & Support -> Preferences…). Others live in Profiles and Features…, Status Bar Layout…, Keymap Editor…, and the related customization commands under Tools -> Customize & Support.
Trust, Recovery, Sessions, and Safety
Quill is serious about recovery and user control.
If your screen reader stops, your work is already safe
QUILL watches for the screen reader it detected at startup and notices if it disappears mid-session. One missed check is ignored — restarting JAWS or NVDA must never set off alarms — but when the reader is confirmed gone, QUILL immediately snapshots every open document to autosave, then explains what happened through whatever can still speak: another running screen reader, or QUILL’s own built-in voice. The event is also recorded in Notifications, so if you heard nothing at the time, the explanation is waiting for you.
QUILL does not shut down when this happens. Your documents, your unsaved work, and the application itself all keep running; restart your screen reader whenever you are ready, and QUILL announces when it sees the reader again.
The rule behind this feature applies everywhere in QUILL: anything that closes or degrades the application without you asking must persist your work first.
The default answer to a destructive question is No
Every confirmation in QUILL that would destroy something — delete a recording, clear all copy tray slots, remove a component, reset settings — now has No as its default button. Pressing Enter reflexively can never cost you data; choosing Yes is always a deliberate act (Tab or Alt+Y). An automated check in QUILL’s build keeps it that way for every future dialog.
Errors that tell you what to do
A sighted user can open the failing file or dialog and see the
problem; without sight, the error message has to carry the whole
diagnosis — and the next step. QUILL’s errors are moving to that
standard. Messages that carry a support code (the
[QUILL-...] prefix) increasingly end with the concrete
action: “Install Pandoc from Help > Download Optional Components to
convert this format.”, “Check the address, credentials, and connection
under File > Manage Remote Sites.”, “Check your AI provider and key
in the AI Hub, or switch to a local model.” The code itself is worth
including when you report a problem — it identifies the exact failure
branch with no back-and-forth.
The same principle covers things QUILL declines or trims. The command palette says why a command is unavailable, and a menu item disabled by a safety advisory carries the same reason in its help text. AI features never quietly work from less than you gave them: if your document had to be trimmed to fit the model, Ask Quill and Document Q&A tell you exactly how much of it the answer used. And QUILL never quietly changes which AI engine answers you — if your configured provider was unreachable and the chat started on the on-device model instead, it says so the moment the chat opens; if a call fails and the other kind of engine could take it, QUILL offers the switch (never making it for you, and always saying when a switch would send your text to the cloud).
The Experimental tab
Preferences > Experimental is where features that are functional but still maturing live until they graduate. It is built as a set of nested consent gates, and disabled controls leave the tab order entirely — so to a screen reader user, an untouched Experimental tab is a single checkbox and nothing else.
- Enable experimental features — the master switch, and the first control on the tab. Its label says exactly what it governs: everything below it. Until it is ticked, every experimental option is ignored by QUILL and its control is disabled (unreachable by Tab), so an accidental change can never affect the editor.
- GLOW accessibility review and repair (experimental) — lights the Tools > GLOW menu (see “GLOW Workflows Inside QUILL”). Takes effect on Apply, no restart.
- WordPress publishing connections (experimental) — lights the read-only publishing tools in the File menu: save a WordPress connection, verify it, browse your site’s posts and pages, and open a remote item in the editor. Strictly inbound: the send/publish half remains locked while the providers framework is reviewed, so nothing can be published from QUILL regardless of this switch.
- Read the document aloud in your browser (experimental) — the browser reader page described under Read Aloud.
- Table Studio — accessible table and CSV editing (experimental) — lights Table Studio and Open CSV in Table Studio in the Tools menu (see “Table Studio” below). Takes effect on Apply, no restart. The pattern to remember: one master switch for the tab, and one switch per experiment — consent in layers, never by accident. (The editor-surface experiments that used to live here graduated in 0.9.0 Beta 3: QuillRichEdit is now QUILL’s one editor, and the braille fix it carried moved to Preferences > Braille, on by default. See “One Editor, Every Format” below.)
One Editor, Every Format
Every document opens in the one QUILL editor — the same native control QUILL has always used, now with the braille fix on by default (see the braille troubleshooting entry under Accessibility) and a real rich text mode. The rule to hold onto: bold means bold — QUILL speaks your document’s language.
- Writing Markdown (.md): Ctrl+B wraps your selection
in
**, Insert Heading 2 puts##on the line. Exactly as always. - Writing HTML (.html): Ctrl+B wraps in
<strong>, headings become real HTML headings. Exactly as always. - Writing Rich Text (.rtf): the document opens formatted. Ctrl+B applies genuine bold; Insert Heading 2 applies a real sized heading; the Format menu’s font, size, color, highlight, and alignment commands change the actual formatting; and Describe Formatting at Cursor answers from the live document (“Arial, 14 point, bold, centered”). Search, spell check, read aloud, bookmarks, notes, and braille all keep working exactly as in any other document.
- Writing plain text (.txt): text stays plain — that is the promise of .txt. The first time you press a formatting key, QUILL asks once: treat this document as Markdown, convert it to Rich Text, or stay plain. Whatever you answer is remembered for that document.
- Editing Word documents (.docx): a .docx can open
for real rich editing and save back as a genuine Word file. A file
carrying things QUILL’s editor cannot hold (images, comments, tracked
changes, headers/footers) asks first — open for reading and plain
editing (the safe default), edit as Rich Text with those losses named
specifically, or edit a copy. The first rich save over such an original
writes a timestamped backup next to it automatically. Tables are
preserved when you open a Word document for rich editing: they
appear inline as accessible tables (previously their contents were
dropped), so you can read them and jump to them with single-key table
navigation (
T).
The Document Format switcher. Format > Document Format… (also Ctrl+Shift+Grave, K; the command palette; or press Enter on the Format cell in the status bar, which always shows your current format) moves the current document between Plain text, Markdown, HTML, Rich Text (RTF), and Word (.docx) mid-session. Switching to a rich format turns your Markdown headings into real ones; leaving a rich format warns first, with the specific list of anything that will not survive. A switched document never silently overwrites its old file — the next save proposes the matching new name.
If rich mode is unavailable (a system where the
bundled macOS bridge or the Windows COM bridge cannot load), .rtf and
.docx documents open converted to editable text exactly as in earlier
releases, and save back through the same converters. Nothing is ever
lost; you simply get the classic behavior — and QUILL says so in the
status bar. The Mac app ships everything rich mode needs out of the box;
only source installs add it themselves
(pip install "quill[mac]"). If you ever see the converted
fallback on a normal install, please tell us via Help > Get
Help from Support.
Table Studio (experimental)
Once you enable it on the Experimental tab, Tools > Table Studio… opens a table in a fully keyboard-accessible grid — a real spreadsheet-style surface built for screen-reader users, not a wall of pipe characters. It is one surface for two jobs:
- Table Studio starts a new table you build up cell by cell.
- Open CSV in Table Studio opens a
.csvor.tsvfile straight into the same grid (the delimiter is detected for you).
Inside the grid, the arrow keys move by cell: Up and Down change rows, and Left and Right move across columns and speak the column heading as you go, so you always know where you are. Home and End jump to the first and last column; Ctrl+Home and Ctrl+End jump to the corners; Page Up/Down move by ten rows. Press F2 or Enter to edit the active cell, Alt+arrows to move a whole row or column, Ctrl+Insert to add a row, and Delete to clear a cell — and the same actions are on buttons for anyone who prefers them.
Shift+F10 (or the Applications key, or right-click)
opens a context menu with every table action in one place: Sort
Ascending / Descending by the current column, Insert /
Delete / Move rows, Insert / Delete columns,
Rename Column Header, Promote First Row to
Header (for a CSV whose header row was read as data), and
Use First Column as Row Headers. Column and row headers
are stored the industry-standard way — exported as
<th scope="col"> and
<th scope="row"> in HTML and as a proper header row
in Markdown — so assistive technology and other tools understand your
table’s structure.
When you are done, Insert as Markdown or
Insert as HTML drops the finished, properly-headed
table into your document — or Save to CSV writes the
grid back out to a file, so a CSV you opened makes a full round trip.
When Table Studio is enabled, opening a .csv from
File > Open (choosing the grid view) brings it up in
this same accessible grid.
The grid speaks each cell through Windows accessibility so NVDA and JAWS announce the column as you cross a row. On builds that include the optional native provider the cell announcements are richer still; without it, QUILL uses a built-in fallback, so the feature works either way.
Notebooks
A Notebook is a named collection of documents that
belong together — a novel’s chapters, a research project’s notes, a
software project’s specs. Notebooks live in a single
.quillnotebook file and keep track of which files are
entries, where you left each caret, any goals you have set, and saved
snapshots of which entries were open.
Creating a Notebook. Use File > Notebook > New Notebook to create an empty notebook and give it a name. Use File > Notebook > New from Folder to import an entire folder at once — Quill walks the folder recursively and creates one entry per supported file. You can filter by extension (the default set covers Markdown, plain text, HTML, and source code).
Opening and navigating entries. Once a Notebook is open, Navigate > Notebook > Go to Entry… opens the tree navigator, which groups entries by subdirectory. Select an entry and press Enter (or click “Open Entry”) to open that file. For headings, Navigate > Notebook > Go to Heading… scans every entry file and presents a two-level tree.
Opening a Notebook from WSL or a network location.
The Open Notebook dialog is the standard Windows file dialog, so it can
reach anywhere Windows can — including the WSL filesystem and UNC
network shares. There is no “WSL” button because Windows itself presents
those locations. To open a notebook stored in WSL, type or paste the UNC
path into the dialog’s address bar, for example
\\wsl.localhost\Ubuntu\home\you\writing\my.quillnotebook
(the older \\wsl$\Ubuntu\... form also works). Quill stores
whatever path you give it, so the notebook file and the documents it
references can all live in the WSL filesystem. You do not need to
connect over SSH to reach your own WSL files. Note that file I/O across
the WSL bridge is slower than native Windows paths, and live file-watch
refresh may behave differently there; for a notebook you edit heavily,
keeping it on a native Windows path is snappier. SSH is the right tool
only when the files live on a separate Linux machine you want
to edit remotely.
Entries panel. Toggle View > Show Entries Panel to slide a docked panel into the left side of the window. The panel shows the notebook name, today’s goal progress, a live filter field, and the full entries list. Type in the filter field to narrow by title.
Goals. Each Notebook can carry a daily word-count
goal stored in its .quillnotebook file. When the goal is
enabled, the Notebook Goal status-bar cell shows
progress (for example, “1,234 / 500 words”). Reaching the target changes
the label to “Goal reached.”
Snapshots. A Snapshot is a named point-in-time record of which entries were open. Use File > Notebook > Save Snapshot to save one, and File > Notebook > Manage Snapshots to rename or delete saved snapshots. Snapshots are different from autosave recovery — they are explicit saves you make yourself, like commit checkpoints for your writing session.
Snapshots vs Sessions. The File > Snapshots menu (formerly “Workspace Snapshots”) saves and restores the set of open documents in the editor — a lightweight workspace for any files, not tied to a Notebook. Notebook Snapshots store the open-entry state within a single Notebook.
Sessions
Sessions in Quill are best understood as workspace snapshots. A session captures your currently open documents and active tab, then lets you reopen that exact working set later.
If you are familiar with VS Code workspaces, think of Quill sessions as a simpler, document-focused version of that idea:
- save your current workspace state
- reopen it from Recent Snapshots
- quickly switch among open documents in the current workspace group
This is useful when one writing task spans notes, references, drafts, and generated reports.
Marks vs bookmarks (and the ring)
Quill has two jump systems on purpose:
- Bookmarks are named jump points. They are explicit, easy to list, and best for durable places you want to revisit by name.
- Marks are temporary jump points in a ring. The ring is a rolling stack of recent mark locations for fast back-and-forth movement while editing.
Use bookmarks for long-lived anchors; use marks when you are actively traversing and reshaping text.
Autosave and backups
Quill autosaves at a timed interval and keeps backup snapshots. It avoids unnecessary duplicate autosave writes and keeps state management efficient. The autosave write happens off the editing thread, so a large document is not snapshotted at the cost of a pause in your typing.
When the disk is full
This deserves its own explanation, because getting it wrong once cost somebody a document.
QUILL writes your text in three places: the file itself when you save, a backup copy taken just before that save, and an autosave snapshot on a timer. Only the first of those is your document. The rule is therefore simple, and QUILL now follows it:
- A backup can never stop a save. The backup exists to protect you from a bad save, so letting a failed backup abort the save inverts its whole purpose. If the backup cannot be written, QUILL says “Could not write a backup; saving anyway” and gets on with saving your file.
- A failed save is explained in words you can act on. Not “[Errno 28] No space left on device”, but “The disk is full. QUILL could not save notes.md. Free some space and try again — your text is still open and unsaved.” A file or folder that is read-only, or held open by another program, gets its own message pointing you at File > Save As.
- A failed save never closes the window. If you choose Save on the closing prompt and the save fails, the close is cancelled and QUILL tells you why, so you can free some space or save somewhere else. Closing a second time goes ahead — the window can never be trapped open — but you will have been told first.
- Autosave says when it has stopped. Autosave failing quietly would mean your crash-recovery net was gone with nothing to tell you. After two failures in a row, QUILL says once: “Autosave paused — the disk is full. Your work is not being snapshotted.” It goes quiet again as soon as autosave works.
Backups are written the same way autosave snapshots are: completely or not at all, so an interrupted backup can never be the thing you restore, and always as UTF-8, so a document QUILL opened in a narrower encoding cannot fail to back up the moment you type an accented character. Backups made by earlier versions still restore normally.
Restore points — bring back any earlier save
Every time you save, QUILL quietly keeps a snapshot of the document. File > Restore Previous Version lists them in plain language — “Today at 4:12 PM - 2,341 words” — newest first. Pick one and choose:
- Restore — replace the editor text with that version. Your current text is saved as a restore point first, so restoring is itself reversible, and the document is marked modified so nothing touches the disk until you save.
- Open as Copy — open the earlier version as a new untitled document, leaving your current document exactly as it is. Good for comparing or rescuing a paragraph.
Some honest details worth knowing:
- Saving unchanged text stores nothing extra — snapshots are content-based, so identical saves are free.
- Keeping a snapshot can never be the reason a save fails. If the disk is full, your save still completes; QUILL just logs that the snapshot was skipped.
- History thins as it ages: everything from the last week is kept, then one version per day for a month, then one per week, and the newest five versions are never pruned. Restore point disk limit (MB) in Preferences caps how much space one document’s history can use (200 MB by default), and Keep restore points when saving turns the feature off entirely.
- The command
file.restore_previous_versionhas no default shortcut; assign one in the Keymap Editor if you reach for it often.
How this fits with QUILL’s other safety nets: undo (and persistent undo) covers the current editing session, backups keep a copy of what was on disk just before each save, and restore points are the long-term history — any earlier save, days or weeks later, across restarts. You never need to choose between them; they all just run.
Recovery
If Quill closes unexpectedly, it can offer a recovery snapshot on the next launch. That is not a dramatic feature. It is a humane one.
Persistent undo
When enabled, persistent undo stores undo history for saved files across sessions. Quill now throttles those writes so the feature stays practical on large documents.
Trusted locations
Trusted locations reduce repeated prompts when you regularly work from the same folders. This is especially useful in document-review and institutional workflows.
Safe mode
Safe mode opens Quill with optional state turned off. If you are troubleshooting a bad session or strange startup behavior, safe mode is a good first step.
Notifications and updates
Quill keeps an internal notification center for update and workflow events. Update checks verify a signed manifest before offering a download.
Safety advisories (temporarily disabling a feature)
Very rarely, if a serious problem is found in a feature after
release, QUILL can temporarily disable just that
feature without waiting for a new version. This travels inside
the same signed update information your Check for Updates already
verifies — nothing new is sent from your computer, and it can only ever
disable a feature, never turn anything on or run anything. When
it happens, the affected command is dimmed everywhere it appears — menu,
command palette, and keyboard shortcut all stop it — and a plain notice
tells you it was turned off by a safety update and why. If the disabled
feature is one that others build on, the features that depend on it are
turned off too (so you never get a half-working tool), and everything
comes back automatically once a fix is published. The lock is remembered
on your device, so it still applies if you are offline, and it reaches
portable copies as well. If you are an administrator who must use a
feature that an advisory disabled, you can override all such locks for a
session by setting the environment variable
QUILL_IGNORE_FEATURE_LOCKS=1 before launching QUILL.
Your settings across updates
Quill remembers only the choices you have actually changed. When you
update, your customizations are kept, brand-new options appear already
set to a sensible default, and an improved default reaches you
automatically unless you had changed that option yourself. The first
launch after an update tidies your old settings file once and writes a
backup to a migration-backups folder first, so the change
is always reversible. Your documents, autosaves, and recovery data are
never touched by this.
You control how Quill tells you this happened with the Upgrade notice setting (Administration): Brief announcement (the default — a short spoken and status-bar message), Summary with Undo (a small dialog listing what changed, including a one-click Undo for any shortcut correction), or Silent. A backup is saved regardless of the choice, and you can also undo a recent shortcut change at any time during the session with the Undo Recent Shortcut Change command.
A clean start after an update
The first time you launch a freshly updated Quill, it clears out the old diagnostic clutter from earlier runs — previous log files and crash reports — so you begin with a clean slate instead of a backlog of past problems. This happens once, automatically, and never removes your documents or settings.
Posting to Mastodon
Quill can publish straight from the editor to Mastodon — no separate app, no leaving your document.
- Press QUILL Key + Shift+P (or Tools → Share → Post to Mastodon…). Quill takes your current selection, or the whole document if nothing is selected, and opens a compose window.
- In the compose window you can edit the text, pick which account to post from, choose the visibility (Public, Unlisted, Followers only, or Direct), and watch a live character count. Press Post to publish; your post appears with “via QUILL” as its source.
Adding a Mastodon account
The first time you post, Quill offers to add an account; you can also open Tools → Share → Mastodon Accounts… at any time.
- Choose Add Account…, enter your server (for example
mastodon.social) and a friendly nickname (this is what shows in the account picker). - Quill registers itself with your server and opens your browser to authorize. Sign in if needed, approve QUILL, and copy the authorization code your server shows you.
- Paste that code back into Quill. Your account is saved.
You can add several accounts, give each its own nickname, set a default, or remove one (which deletes its saved sign-in from this computer). Your sign-in is stored securely in the Windows Credential Manager, never in a plain file.
Proofread posts before sending. In Mastodon Accounts…, select an account and tick Spell-check posts before sending to turn on per-account proofreading (off by default). When it is on, pressing Post for that account first opens the Spelling Review (F7) on the post text so you can fix misspellings, and the post is sent only after you finish or skip the review. The setting is per account, so you can enable it for some accounts and not others; existing accounts are unaffected until you turn it on.
Reading a Mastodon profile aloud
Open Tools → Share → View Mastodon Profile…, type a
handle such as @name@server, and Quill shows the account’s
name, your relationship in both directions, a Follow or Unfollow button,
the account’s Bio, and its Recent
posts.
Everything you hear there has been reshaped for listening first. Mastodon sends bios and posts as web markup, not as plain text, so a screen reader that is handed them untouched reads the markup out loud. Quill converts them to plain text before anything is displayed or spoken, so you hear the words and never the tags. In a link, you hear the part your server chose to show and not the long hidden tail.
Three more changes exist only because this text is spoken rather than skimmed:
- A pile of mentions is counted, not recited. A reply
that starts by addressing several people is read as
@alice and 2 morefollowed by the message. You still learn who was addressed and how many, but you reach the first real word straight away instead of hearing four usernames spelled out. A reply that names only one person is left exactly as written. - Decorative characters are removed from names and posts. An emoji is announced by its full name — “grinning face with smiling eyes” — every single time the name appears, in every list row. Quill strips emoji and similar decoration while keeping accented letters, other alphabets, quotation marks, dashes, and currency signs, which are part of real words. If a display name was nothing but decoration, Quill falls back to the plain handle.
- Each post is one line: when, then its first
sentence. A post is summarised as something like
3 minutes ago: Actually, that is wrong.The time is spoken in plain words rather than as a timestamp you would have to subtract in your head, and the summary stops at the first sentence so arrowing down the list gives you one post per key press. A post with a content warning shows the warning instead of the text, which is what a content warning is for.
If the account is private, or your server does not share its posts, the profile still opens — the Recent posts list is simply absent.
Post language and per-instance length (#922). The compose window has a Post language picker next to the visibility choice. The default, “Default (instance)”, sends no language field so your instance files the post under your account’s default language; pick a language such as English or Italian to send its ISO 639-1 code, which keeps a post written in one language from being mis-shelved under another. The live character counter now reflects the selected account’s real per-instance limit rather than the classic ceiling: Quill queries the instance once per session and reuses the result, so an instance that allows more (for example one with a 9999-character limit) shows the correct count and does not block a longer post.
Working with Different Document Types
Quill is strongest today with plain text, Markdown, HTML, RTF, EPUB, and extracted text workflows. It also has intake and extraction review features for imported material such as PDF/OCR sources and structured import support for Office-style formats.
Plain text
Plain text stays plain. Quill does not force hidden formatting into it.
Markdown
Markdown gets structure-aware commands, list helpers, heading helpers, links, and code blocks.
HTML
HTML gets tag insertion, structure-aware editing help, and link handling.
RTF
RTF documents can use Quill’s optional Rich text
lens, a screen-reader-first rich editing surface. It is
off by default: the standard plain-text editor stays
Quill’s writing path unless you opt in under Settings, Editing (the
“Editor surface” choice). Turn it on and .rtf files open in
the Rich text lens, which renders bold, italic, headings, bullets, and
links natively. Your document text stays Quill Markdown underneath, so
search, outline, metrics, autosave, and persistent undo keep working
exactly as in plain-text mode. Press the editing-lens shortcut
(Ctrl+Shift+ thenK`) to switch losslessly
between the rich view and the Markdown lens; no words are lost and the
document is not marked changed by switching. When an RTF file contains
unsafe embedded content (such as OLE objects) Quill strips it on open
and tells you; remote fields are flagged for your consent rather than
fetched silently.
CSV and TSV
CSV and TSV files open through a choice flow: special CSV grid mode or normal text editor mode. You can remember your preferred default and still switch modes from inside the tab at any time. Grid mode is keyboard-friendly and designed for screen-reader users who need cell-level table editing without leaving Quill.
Word (.docx and .doc)
Word documents open through a choice flow: structured Word view or normal text editor mode. You can remember your preferred default and still switch modes inside the tab.
Structured Word view is optimized for accessibility: it prioritizes readable structure and linearized table narration (headers and rows) for screen readers. Normal text mode keeps full Quill editing behavior for direct edits.
Saving to Word. You can also save any document as Word. In File -> Save As…, choose Word Document (*.docx) (or Rich Text Format (*.rtf)) from the file-type list, and Quill converts the current content to that format on save. Markdown and HTML structure — headings, lists, emphasis, links, simple tables — maps to real Word styles, so the result is navigable in Word, not just visually formatted. Saving plain text produces a correct but unformatted document, since plain text has no structure to carry.
EPUB
EPUB gets navigator support and chapter-oriented reading.
PowerPoint (.pptx and .ppt)
PowerPoint imports are structure-aware: slide titles become headings, slide bullets become nested list items, tables are rendered into tab-friendly text tables, and speaker notes are included when present.
Excel-style spreadsheets (.xlsx and .xls)
Spreadsheet intake is text-first and structure-aware. Quill extracts sheets into readable table-oriented text so you can inspect and review content quickly. If optional converters are installed, extraction quality improves for legacy and mixed-format files.
PDF and OCR-derived text
PDF and OCR work are where Quill’s extraction review commands matter most. Treat those commands as quality checks, not optional extras.
Import / Convert Document — free-first conversion and OCR
File > Import > Import / Convert Document (OCR)… (also under Tools > Reading & Dictation) is QUILL’s document-rescue tool for files that are hard to read: locked-down Office documents, EPUBs, scanned PDFs, and photos of pages. Its one rule: free first, local first, and nothing is ever uploaded.
How a conversion flows:
- The free local converter runs first. Word, PowerPoint, Excel, HTML, EPUB, and PDFs that already carry text convert instantly on your machine and open as clean, editable text. No account, no key, no upload, no cost.
- A scanned document is detected, not dumped. If a PDF comes back nearly empty, QUILL says so — “It looks scanned or image-based” — and asks whether to run free on-device OCR. Yes runs it; No opens the empty result anyway; Cancel imports nothing. QUILL never silently opens a blank result and never runs OCR without asking. Other read failures get their own honest message instead of the scanned-PDF prompt: a genuinely corrupt file says it’s damaged (and notes OCR won’t help a corrupt file — repair or re-export it), and a PDF with no text extractor installed points you at Help > Download Optional Components > “PDF and Office text extraction” rather than claiming it’s scanned (the installed apps ship with a PDF reader, so this only comes up on a pip or source install). (A password-protected PDF is handled separately — QUILL asks you for the password and opens it directly; see Opening a password-protected PDF below.)
Opening a password-protected PDF. When you open an encrypted (password-protected) PDF, QUILL asks for its password and reads the document — you no longer need to decrypt it in another tool first. Type the password and the PDF opens; enter the wrong one and QUILL tells you and lets you try again; press Cancel to stop opening it. The password is used only to unlock that one file for reading — QUILL never stores, logs, or remembers it, so if you close and reopen the file, it asks again. PDFs that are technically “encrypted” but open with an empty password (permissions-only locks) continue to open with no prompt.
A PDF’s bookmarks come across. If a PDF carries an embedded outline — the chapters and sections you would see in Adobe Reader’s bookmarks pane — QUILL imports those entries into its own Bookmarks Manager (Ctrl+Shift+G) when you open the file, the same way it already surfaces Word and EPUB structure. Each imported bookmark jumps to exactly where Go To Page for that page would land. The import happens once, the first time you open the PDF: if you later rename or delete some of those bookmarks, reopening the file will not bring them back or create duplicates, and a PDF with no outline simply opens as before. The text a PDF gives back is repaired before you read it. A PDF does not store sentences — it stores where each letter was printed. What comes out of it is therefore a picture of the page rather than the words the author typed, and read aloud that picture can be rough going. QUILL now repairs four specific things as it opens the file, page by page:
- Words broken across lines are put back together. Print layout splits long words with a hyphen at the end of a line, so “inter-” on one line and “national” on the next used to be read as two words, and searching for “international” found nothing. QUILL rejoins them. A hyphen that belongs to the word is kept: Anglo-Saxon and 2018-2019 are left exactly as written.
- Paragraphs are put back together. Every printed line arrives as its own line of text, so speech stopped at the edge of the page instead of at the end of the sentence, and “read the next paragraph” moved you one printed line. QUILL rejoins lines that were only broken because the page ran out of room. Blank lines, list items, headings, short deliberate lines, and finished sentences keep their breaks, so lists stay lists and paragraphs stay separate.
- Letter-spaced headings are collapsed. A designer’s spaced-out title comes through as “C H A P T E R O N E”, which is spelled out one letter at a time by a screen reader and never matches a search. It becomes “CHAPTER ONE”. Ordinary text is left alone — a line such as “A B testing” is not a heading and is not touched.
- Invisible ligature characters are restored. The joined “fi”, “fl”, and “ff” shapes a typesetter uses are often stored as characters that have no meaning outside the document’s own font, so a screen reader reads nothing where they were: “office” is announced as “o ce”. QUILL turns them back into their letters, and removes any leftover meaningless character rather than leaving speech to stumble over it.
These repairs are deliberately cautious: when a case could go either way, QUILL leaves the text as it found it, and a PDF whose text is already clean comes through unchanged. Page boundaries are never crossed, so Go To Page and the page count stay exact.
- On-device OCR rescues the scan. The local Tesseract
engine recognizes each page on your computer (CPU-only, works offline),
keeps page boundaries as searchable
<!-- Page N -->markers, and announces progress (“Recognizing page 3 of 12…”). When recognition confidence is low, QUILL tells you plainly so you know to review the result — honesty over false confidence.
Installing the OCR engine. The engine is a free, one-time ~48 MB download: Tools > Reading & Dictation > Install Local OCR Engine (Tesseract)…. QUILL fetches the official installer from its own verified release, checks it byte-for-byte, and opens it for you to complete — never a silent install. If Tesseract is already on this computer (or installed with Homebrew on a Mac), QUILL simply finds and uses it.
The optional cloud tier — Datalab Chandra OCR. For the documents even local OCR cannot rescue well — complex tables, forms, handwriting, dense multi-column layouts, very poor scans — QUILL supports an optional, paid, bring-your-own-key cloud service. The free-first order is structural: QUILL offers the cloud only after on-device OCR comes back weak (or when you decline the free engine install), and every single upload requires your explicit consent in a dialog that names the service, reminds you to consider private/medical/legal/financial content, and notes that Datalab deletes results from its servers about an hour after processing. Filenames that suggest sensitive content (tax, medical, legal, and similar) get an extra CAUTION line — from the name only; QUILL never inspects the content to decide. There is deliberately no “don’t ask again.”
Setting up the cloud service. Tools > Reading & Dictation > OCR and Document Conversion > OCR Service Settings… opens the AI Hub Services tab: enable the service, paste your Datalab API key (stored in the Windows credential vault, never in a settings file), choose the default mode (Fast / Balanced / Accurate) and output (Markdown recommended), and press Test Connection — which checks your key and endpoint and explicitly uploads no document. Buttons link to the provider’s website, key page, pricing, privacy documentation, API docs, and supported file types (each opens in your browser), and Copy Service Summary copies a secret-free description for support requests.
Reviewing what OCR produced. Review Last OCR
Result… opens an accessible checklist for the most recent
conversion: which service produced it, page count, recognition
confidence, and — for on-device OCR — every low-confidence line listed
as Page N: [confidence] text. Walk the flagged lines by
arrow key, then search the converted document for the page marker (for
example <!-- Page 3 -->) to jump to the trouble spot.
Review by ear, exactly where it is needed, instead of re-proofreading
everything.
Housekeeping. Delete OCR Temporary Files clears any leftover job files from QUILL’s data folder (the local tiers normally clean up after themselves automatically) and announces what was removed. Converted results live only in the opened, unsaved document until you choose to save.
The services overview. OCR and Conversion Services… explains every service in plain language — the free local converter, the local OCR engine, and the optional Datalab cloud service: what each does, what it is best at, whether it is local or cloud, what it costs, and each one’s current status.
Settings: the OCR recognition language (ocr_language,
default English) and an explicit engine path override
(tesseract_path) for unusual installs; the cloud service’s
non-secret options live on the Services tab.
Remote files (FTP, SFTP, HTTPS, WebDAV, S3)
Quill can open, save, and copy to remote hosts the same way it works with local files. Remote I/O is explicit, audible, and reversible:
- Open from Remote… lists every site you have saved,
lets you browse a remote directory, and downloads a file you choose. The
download is announced with the host and expected size, lands in a temp
file, and opens in a normal tab titled with a
(from site:path)suffix. The document is read-only until you save it back through Save Copy to Remote… or copy it to local storage. - Save to Remote writes the active document to a remote path you choose, on a site you have configured, with a tilde-backup next to the original. Save Copy to Remote… lets you keep the local file and write a copy without changing the source.
- Manage Remote Sites… adds, edits, and deletes saved sites for the five supported protocols. Each site’s password is stored in Windows Credential Manager when available, then in a DPAPI-protected JSON file, with a macOS Keychain facade for cross-platform parity.
- All remote traffic uses a verified TLS context. Cloud endpoints (S3, HTTPS, WebDAV over HTTPS) must be HTTPS; FTP is allowed because the user opted in for LAN or legacy hosts.
- All remote operations are wired to the network egress
audit (
quill/tools/network_egress_audit.py) with explicit rationales, and S3 and WebDAV XML responses are parsed throughquill.core.safe_xml.fromstringso an attacker cannot reach an external-entity expansion through a crafted listing.
Default keys: QUILL key, then Shift+O
opens from remote; QUILL key, then W saves
to remote; QUILL key, then Shift+M opens
the site manager. All are remappable from Preferences > Keyboard.
GitHub Remote Files
QUILL can browse GitHub repositories, open files from them, and save changes back to GitHub — all without installing Git, the GitHub CLI, or GitHub Desktop.
Getting started
The first time you open a GitHub feature, QUILL asks you to confirm that it may connect to GitHub. This is a one-time prompt. After that, QUILL remembers your choice.
You do not need a GitHub account to browse public repositories. For private repositories, you need a Personal Access Token (PAT).
Creating a Personal Access Token
- Go to github.com and sign in.
- Open Settings > Developer settings > Personal access tokens > Tokens (classic).
- Click Generate new token.
- Give it a name such as “QUILL” and select the
reposcope (orpublic_repoif you only need public repositories). - Copy the token. You will only see it once.
QUILL stores your token securely in Windows Credential Manager. It is never saved in a text file.
Opening the repository browser
Open File > Open from Remote > GitHub Repository…
The browser has these parts:
- Account — shows your GitHub username, or “Anonymous” if no token is stored.
- Repository — type an owner/repo name such as
microsoft/vscodeand press Enter or click Load. - Branch or tag — choose which version of the repository to browse. Defaults to the repository’s default branch.
- Current path — shows where you are in the folder tree.
- File list — lists folders and files. Folders appear first.
- Status — shows progress messages and item counts.
Navigation:
- Press Enter on a folder to open it.
- Press Enter on a file to open it (same as clicking Open File).
- Press Backspace to go up one level.
- Press F5 to refresh the current folder.
- Tab through the buttons: Open File, Go Up, Refresh, Copy URL, Cancel.
Opening a file by URL
If you have a GitHub file URL (for example from a colleague), use File > Open from Remote > GitHub File URL…
Paste a URL in the form
https://github.com/owner/repo/blob/branch/path/to/file and
press Enter. QUILL fetches the file directly.
Saving back to GitHub
After you have opened a file from GitHub and made edits, use File > Open from Remote > Save to GitHub…
QUILL will ask for a commit message. Type a short description of your changes and press Enter. QUILL commits your changes to the same repository, branch, and file path using the GitHub API.
Notes:
- You need a token with write permission (
reposcope) to save back. - If the file was changed on GitHub since you opened it, QUILL will tell you to refresh and try again.
- This command does not run automatically when you press Save. You must choose it deliberately.
Managing your GitHub account
Use File > Open from Remote > Manage GitHub Accounts… to:
- See your current GitHub identity.
- Add or replace a token.
- Sign out and clear your stored token.
Browsing a repository’s issues, PRs, and history (#924)
File > Open from Remote > GitHub Items… opens a viewer for a repository’s issues, pull requests, branches, commits, tags, releases, workflows, and workflow runs — the same kind of overview the GitHub website gives you, but keyboard- and screen-reader-first. This whole viewer is built on, and owes real credit to, GHManage — Kelly Ford’s open-source, screen-reader-first GitHub browser, which QUILL has treated as its reference from the start. Every feature below with a GHManage ancestor keeps its idea and extends it with something specific to QUILL — most visibly, PR and branch differences read through QUILL’s own Compare Documents engine instead of a raw patch, and the Quick Filter (below) stays quiet while you type instead of re-announcing a result count on every keystroke. Browsing works anonymously; signing in additionally unlocks the Batch… menu and, as of 0.9.0 Beta 3, the Actions… menu covering new issues/PRs, merging, branch deletion, running a workflow, workflow re-runs, and comment reply/edit/delete (see “Doing more from the Items viewer” below). (Pins, favorites, and your column choices, below, are saved locally on your machine only.)
Type a repository in owner/repo form, paste a
github.com URL, or paste a git@github.com:
remote, and press Load. QUILL normalizes any of those
to owner/repo for you. If the document you are editing was
itself opened from GitHub — or simply lives inside a git clone whose
origin remote points at GitHub — the repository is already
filled in, so you can review that repo in one step.
Pinned repositories. The Pinned… button opens a menu of your pinned repos: pick one to load it instantly, or pin/unpin the currently loaded repository. A short curated list for the handful of repos you actually work in — distinct from anything GitHub itself tracks, and never synced anywhere.
Favorites. Press Ctrl+D on any selected row — an issue, a PR, a branch, a release — to bookmark it. The Favorites… button lists every bookmark across every repo; pick one to open it in your browser. Favorites persist between sessions.
View Upstream. Load a repository that’s a fork and
the View Upstream button enables itself automatically;
press it to jump straight to the repository it was forked from, loaded
the same as if you’d typed its name in yourself. Previously the only way
to reach a fork’s upstream was retyping the parent’s
owner/repo by hand. The button stays disabled for a
repository that isn’t a fork, or (rarely) for a fork whose parent GitHub
can’t resolve.
Search with full GitHub syntax. Press
Ctrl+F (or Tab to the Search box) and type any GitHub
search query — label:bug is:open crash,
author:alice is:pr,
created:>2026-01-01 no:assignee — then press Enter.
Results replace the Issues & PRs list, scoped to the loaded
repository. Clear the box and press Enter to restore the normal list;
loading a different repository also clears the search.
Quick filter — narrow what’s already on screen. Ctrl+Shift+F focuses the Quick filter box, next to Search but doing something different: instead of asking GitHub anything, it narrows the list you’ve already loaded, live, as you type — no network round trip, so it’s instant even on a slow connection. It never pulls keyboard focus away while you’re typing, and it stays quiet while you type too: re-announcing “12 items” after every letter would talk over your screen reader’s own character echo, so QUILL only speaks the result count once, when a real fetch finishes. Press Escape while the box has focus to clear it. Switching views or loading a different repository also clears it.
PR diffs, read the QUILL way. Select a pull request
row and press Diff…. A list of the PR’s changed files
opens — each row reads as status: filename +added -removed
— and selecting a file speaks its changes through the same compare
engine as Compare Documents: “Difference 2 of 5. Text
changed at line 41,” with both sides labeled (main: /
this PR:) and the changed words described. A new file reads
as its content, a deleted file says so plainly, and a binary or
oversized file falls back to its change counts and GitHub’s patch
text.
Compare two branches. In the Branches view, select one and press Compare… or Ctrl+Shift+B. QUILL asks for the base branch, then the branch to compare against it (the row you selected prefills the second prompt), and reports how far ahead and behind the two branches are, lists every commit between them, and — on the Changed Files tab — walks each file’s differences the same accessible way Diff… does above. This is read-only and works without signing in, since comparing two branches never changes anything on GitHub.
Run a workflow. Switch to the
Workflows view to see the repository’s workflow
definitions — the .yml files themselves, distinct from the
Workflow Runs view below them, which shows run history.
Select one and press Enter, or use Actions…
> Run “name” on Branch…, to dispatch it: QUILL asks for a
branch, confirms, and reports whether GitHub accepted the run. This
needs a signed-in account, and if the workflow doesn’t accept manual
runs, GitHub’s own explanation is shown rather than QUILL guessing.
Batch operations. The list is multi-select: hold Shift or Ctrl to select several issues or PRs, then press Batch… and choose Close, Reopen, or Add label. This is the viewer’s one write feature and it is deliberately fenced: it requires a signed-in GitHub account (anonymous browsing stays read-only), and a confirmation dialog names the exact action and the exact item numbers — nothing changes on GitHub until you confirm. Failures are reported per item; the rest still apply.
AI thread summaries. Select an issue or PR and press Summarize. QUILL’s AI condenses the whole discussion — body and comments — into a short plain-prose TL;DR (what it’s about, current state, open questions, next step), places it at the top of the details pane, and announces it. Uses the same AI connection and consent gates as every other QUILL AI feature; if AI is not configured, pressing Summarize offers setup rather than failing silently.
Pick a View — Issues & PRs (the combined inbox), Branches, Commits, Tags, Releases, Workflows, or Workflow Runs. The list shows one row per item; the Details box below shows the full text of the selected row. In the Issues & PRs view you can also filter by Show (Both / Issues / PRs), State (Open / Closed / All), and Sort (by number, title, last-updated, or comment count).
List mode (for screen readers). Two ways to read the
list: Quick shows compact cells as they appear in the
columns. Full spells each cell as
field: value (for example
number: 208, type: ISSUE, state: OPEN, title: Fix the thing)
so your screen reader reads a self-describing line per row instead of
bare values with no field names. Switch with the List
mode choice or by pressing M while in the
list.
Columns — choose what shows, and keep it that way. The Columns… button lists every field available for the current view as a checkbox; uncheck the ones you don’t need (at least one always stays visible). Your choice is remembered per view and restored the next time you open the Items viewer.
Reading comments. When you select an issue or PR, the details show the body and then load the comment thread. Press Alt+N to jump to the next comment and Alt+P for the previous one; QUILL selects and scrolls to each and announces “Comment N of M” (and “first” / “last” at the bounds).
Keyboard shortcuts.
- Enter on a row opens it in your browser. On a Branch row, Enter drills into that branch’s commits; on a Workflow row, Enter runs it on a branch you choose.
- Backspace in the Commits view (reached by pressing Enter on a branch) steps back to the branch list.
- Ctrl+R refreshes the current view. Ctrl+O opens the selected item in the browser. Ctrl+G jumps to an issue or PR by number (in the Issues & PRs view).
- Ctrl+F focuses the GitHub-syntax search box. Ctrl+Shift+F focuses the Quick filter box. Ctrl+Shift+B compares two branches (Branches view). Ctrl+D favorites the selected row.
- View More loads the next page of results.
The same gates apply as the other GitHub commands: it is disabled in Safe Mode, asks for first-run consent, and works anonymously for public repositories (with a lower rate limit) or with your stored token for private ones.
Doing more from the Items viewer (0.9.0 Beta 3). Once you’re signed in, the Actions… button opens a menu that changes based on what you’re looking at:
- In Issues & PRs: New Issue… and New Pull Request… prompt for a title (and, for a PR, the head and base branches) plus an optional body. If exactly one unmerged pull request is selected, Merge Pull Request #N… also appears — this is one of the handful of actions QUILL asks you to confirm by retyping the PR number rather than just pressing Yes, since merging changes the target branch for everyone.
- With a comment thread loaded: Reply to Thread… posts a new comment (GitHub’s comments aren’t threaded, so a “reply” is just another comment in the same conversation). Once you’ve used Alt+N/Alt+P to land on a specific comment, Edit This Comment… and Delete This Comment… also appear — GitHub only allows editing or deleting your own comments, so trying this on someone else’s comment comes back with GitHub’s own permission error rather than QUILL guessing in advance. Delete asks you to type “delete” to confirm.
- In Branches: select a single branch row and Delete Branch ‘name’… appears — retype the branch name to confirm. This is permanent from QUILL’s side. Compare… (above) is also available here, and needs no sign-in.
- In Workflows: select a single workflow and Run “name” on Branch… appears — the same action as pressing Enter.
- In Workflow Runs: select a single run and Re-run Workflow and View Artifacts… both appear.
Every one of these needs a signed-in account (the same as Batch operations); the anonymous, tokenless session stays fully read-only.
Downloading workflow run artifacts (0.9.0 Beta 3). Select a workflow run and choose Actions… > View Artifacts… to see a list of that run’s build artifacts, with each one’s size and whether GitHub has already let it expire (expired artifacts can’t be downloaded). From there:
- Download Selected… downloads just the highlighted artifact; Download All… downloads every artifact in the run. Both ask you to choose a destination folder first.
- If a file of that name is already in the chosen folder, QUILL asks before overwriting it.
- A progress dialog with a Cancel button tracks the download; cancelling stops after the artifact currently in flight.
- Refresh re-fetches the list (useful if a run is still producing artifacts), and Open Run in Browser takes you to the run’s page on GitHub.
One detail worth knowing even though it doesn’t change how you use the feature: GitHub’s artifact download link redirects to a different, short-lived signed address (typically hosted on Azure Blob Storage) to actually serve the file. QUILL never lets your GitHub token follow that redirect — it deliberately intercepts the redirect itself and re-requests the new address without your sign-in token attached, so the token is only ever sent to github.com.
Repository administration (0.9.0 Beta 3). Beyond browsing and the Items viewer, Tools > Git and GitHub > GitHub has eight commands for the repository itself — the things you’d otherwise have to open a browser for:
- Create Repository… — name, description, private or public, and an optional organization. Right after creating it, QUILL offers to set up a local folder synced to the new repository in one step, using the same folder-sync engine as Sync Folder with GitHub (see “QUILL Sync” above) — so starting a brand-new project never means leaving QUILL.
- Fork Repository… — forks into your account or an organization you choose, with the same offer to sync it locally afterward.
- Rename Repository… — GitHub automatically redirects
the old address, but anything that hardcodes the old name elsewhere will
need updating. Confirmed by retyping the repository’s current
owner/reponame. - Change Repository Visibility… — flips a repository between private and public. QUILL shows you which one it currently is before asking; making something public gets an extra warning line, since that exposes its full history. Confirmed by retyping the repository name.
- Change Default Branch… — loads the branch list and lets you pick the new default from a simple list.
- Configure Branch Protection… — a small wizard: pick a branch, then either set required approving reviews, required status checks, and whether the rules apply to administrators too, or check “Remove all protection from this branch instead” to clear existing rules.
- Delete Branch… — lists branches (the repository’s default branch is never offered, so you can’t accidentally delete the one everything else depends on), then asks you to retype the branch name to confirm. This can’t be undone from inside QUILL.
- Commit Multiple Files… — pick one or more local files with a file browser, choose the branch and write a commit message, and QUILL commits all of them to GitHub in a single atomic commit — different from Save to GitHub (above), which only ever commits the one document you currently have open. Only plain text (UTF-8) files are supported.
Every one of these needs a signed-in account; if you’re not signed in yet, QUILL offers to sign you in right there instead of just refusing. The four riskiest actions here — renaming, changing visibility, deleting a branch, and (in the Items viewer) merging a pull request — all ask you to retype the exact name or number rather than a simple Yes/No, since a mistaken Enter press on one of these is harder to walk back than most QUILL actions.
All eight commands are in the Command Palette too, and all have default keyboard shortcuts through the QUILL Key (press your QUILL Key, then the second key): Create Repository is Shift+K, Fork is Shift+F, Rename is Shift+E, Change Visibility is Shift+V, Change Default Branch is Shift+B, Configure Branch Protection is Shift+L, Delete Branch is Shift+X, and Commit Multiple Files is Shift+U. Reassign any of them in Preferences > Keyboard Shortcuts if you’d rather use something else.
File size limit
GitHub’s file API is limited to 1 MB. Files larger than that must be downloaded manually from github.com.
Organizations, releases, workflows, notifications, and security alerts (0.9.0 Beta 3). Five more commands under Tools > Git and GitHub > GitHub:
- Browse Organization Repositories… lists the organizations your signed-in account belongs to, then that organization’s repositories; pick one to open it straight into the GitHub Items viewer. This is repository browsing only — QUILL does not manage organization teams or team permissions.
- Create Release… asks for a tag and an optional title, then either your own release notes or GitHub’s own auto-generated notes (summarizing merged pull requests since the last release), and whether to save it as a draft or publish immediately.
- Dispatch Workflow… runs a GitHub Actions workflow on a branch or tag you choose, the same as clicking “Run workflow” on github.com — useful for workflows you’ve set up to take manual triggers.
- Notifications… is a real inbox: every notification for your account across every repository, not just the one you have loaded, each one telling you whether it’s read or unread, which repository it’s from, and why you got it. Selecting one opens your GitHub notifications page and marks it read.
- Security Alerts… lists a repository’s open Dependabot alerts — severity, the affected package, and a summary — so you can see what needs attention without opening a browser.
Codespaces and Copilot CLI (0.9.0 Beta 3, needs live-device
verification). Four more commands under Tools > Git
and GitHub > GitHub, built on your own installed
gh command-line tool rather than QUILL’s usual GitHub
connection — see Downloading git and the
GitHub CLI below if you don’t already have gh:
- Codespaces… lists your active Codespaces (name, repository, and state); select one for a menu to Stop or Delete it.
- Create Codespace… asks for a repository and an optional branch, then creates a new Codespace. Codespaces use GitHub compute and storage minutes and may cost money — this is the one GitHub command in QUILL that says so explicitly, and it asks for confirmation naming that cost before doing anything.
- Ask Copilot for a Command… asks in plain language for what you want to do (for example, “undo my last commit”) and shows GitHub Copilot’s suggested command.
- Explain a Command… asks for a git or
ghcommand you don’t recognize and shows Copilot’s plain-language explanation of what it does.
These four commands are new this release and have been tested with a
simulated gh tool, but not yet against a real
Codespaces-enabled repository or real Copilot CLI access on an actual
device — if something looks wrong, please report it through Help
> Get Help from Support.
Enabling the feature
GitHub remote access is controlled by the feature flag
core.github_remote. If it is not visible, open File
> Open from Remote and check whether the GitHub items
appear. If PyGithub is not installed, QUILL shows a message explaining
how to install it: pip install "quill[github]".
Local Git: accessible merge conflicts and interactive rebase
Tools > Git and GitHub > Local Git brings the two hardest parts of everyday git work — resolving a merge conflict and reordering commits with an interactive rebase — into QUILL as genuinely accessible, guided flows. Nothing here needs a GitHub account or touches the network; it works on any local git repository.
Uncommitted Changes… shows every file you’ve changed since your last commit, split into staged and unstaged, with an accessible difference view for whichever file you select — the same reading style as Compare Documents, not a raw diff. Select a file and press Stage or Unstage, or Stage All to stage everything at once.
Resolving a merge conflict. If you’ve ever hit a
real git conflict, you know the markers —
<<<<<<<, =======,
>>>>>>> — read as line noise with a
screen reader, and there was never a good way through them in QUILL
until now. Resolve Conflicts… walks you through every
conflict in every affected file, one at a time: “Conflict 1 of 3: your
version says X, their version says Y,” with four choices — keep your
version, keep their version, keep both, or type a manual replacement.
Move to the next or previous conflict, and QUILL writes the resolved
file and stages it for you when you’re done. This same walker also opens
automatically if an Interactive Rebase… (below) or a
Sync Folder with GitHub stops because of a conflict —
you never have to go find a different tool to finish resolving it.
Interactive Rebase… is the accessible version of
git rebase -i, which normally opens a text editor with a
list of commits you’re expected to reorder and annotate by eye. QUILL
instead shows you a real list: one commit per row, with an action —
pick, squash, reword, or drop — you choose from a dropdown, and
Move Up/Move Down buttons to reorder
commits. Press Start Rebase when you’re happy with the
plan. If a step conflicts, the merge-conflict walker above opens
automatically; resolve it and the rebase continues on its own.
Abort Rebase puts your branch back exactly where it
started if you change your mind partway through.
The rest of the toolkit:
- Switch Branch… lists your local branches and switches on selection. If you have uncommitted changes, QUILL warns you and offers to switch anyway and bring them along, rather than silently discarding them or just refusing.
- Stash Changes… / Manage Stashes… save your
uncommitted work aside with a name you’ll recognize, then list, apply,
or drop any stash later — no memorizing
stash@{2}-style references. - Who Wrote This Line… runs
git blameon wherever your cursor is in the current file and tells you who last touched that line, when, and the commit’s summary. - Start Bisect… / End Bisect guides you through a
git bisectsession as a plain question-and-answer loop: QUILL checks out a commit and asks “Is this version good or bad?” — answer, and it narrows the search until it announces exactly which commit introduced the problem.
None of these commands have a default keyboard shortcut — every letter on the QUILL Key leader chord is already claimed by another command — but all twelve are in the Command Palette and in the Tools > Git and GitHub > Local Git menu, and you can assign your own shortcut to any of them in Preferences > Keyboard Shortcuts.
Worktrees: one folder per branch, so your open document never changes underneath you
What a worktree is. Normally a git repository is one folder, and it holds one branch at a time. Moving to another branch means checking that branch out in place: every file in the folder is rewritten to match the new branch, while keeping the same names and the same paths.
A worktree is a second folder attached to the same
repository, with a different branch checked out in it. The two folders
share one history, one set of branches, and one set of stashes — but
each has its own working copy of the files. You end up with, say,
quill on main and quill-feature-x
on feature/x, side by side.
Why this matters more if you use a screen reader. When you switch branches in place, the document you have open in QUILL is silently replaced by a different document with the same name. A sighted user sees the text on screen change and knows immediately what happened. If you are reading with a screen reader, nothing announces it: the paragraph under your review cursor is now a paragraph from another branch, in a file that still calls itself the file you opened. That is exactly the kind of uncued context switch QUILL works hard to avoid everywhere else.
With a worktree, nothing under your cursor ever changes. Switching context becomes “open a different file” — something you do, and hear — instead of “this file is now a different file” — something that happens to you. That is the whole accessibility argument for worktrees, and it is why QUILL supports them properly rather than leaving them to the command line.
Seeing what you have
Tools > Git and GitHub > Local Git > Worktrees… opens the list. QUILL announces how many worktrees the repository has as the dialog opens, and each row reads as a complete sentence rather than a set of columns you have to arrow across:
- “Main worktree at S:\code\quill, on branch main”
- “Linked worktree at S:\code\quill-feature-x, on branch feature/x”
- “Linked worktree at D:\usb\quill-spike, on branch spike, locked: on a USB drive”
- “Linked worktree at S:\code\quill-old, on branch old, missing from disk, ready to prune”
A worktree that is not on a branch at all reads as “not on a branch, at commit 3f9a21c”. After any action, QUILL speaks the outcome, rereads the list, and puts focus back on it, so you never have to hunt for where you were.
Creating one
Press New Worktree… from the list (or run Local Git: New Worktree… from the Command Palette to skip the list entirely). The form asks for four things:
- Folder for the new worktree — where the new folder
should be. Type or paste it, or press Browse…. The
field accepts whatever you actually paste: a path copied from File
Explorer with the quotes still on, an
%APPDATA%-style environment path, afile://link, or a leading~. - Branch to check out — a list of your local branches. Branches that are already checked out in another worktree are left out, because git will not allow two of them.
- Create a new branch instead — tick this to make a brand-new branch right here rather than checking out an existing one.
- New branch name and Start the new branch from — used only when the checkbox is ticked. Leave the starting point blank to branch from where you are now, or name a branch, tag, or commit to start from something else.
QUILL checks everything before it runs git, and speaks the reason if something is wrong: a folder that already has files in it, a folder inside the repository itself (git will not allow that), a branch you did not choose, or a new-branch name you did not type.
Opening one
Select a worktree and press Open in QUILL (or just press Enter on the row). QUILL opens documents rather than folders, so “open this worktree” means “open the same file, from over there”: QUILL works out where your current document sits relative to its own worktree, and opens the matching file in the worktree you chose. If that file does not exist there — because it is new on your branch, or because nothing was open — QUILL says so and gives you a file picker already pointed at the worktree’s folder.
Removing, locking, and tidying up
- Remove… deletes a worktree’s folder from your disk. The branch itself stays in the repository — you are removing the folder, not the work. QUILL always confirms first, with No as the default button, so pressing Enter out of habit never destroys anything.
- If the worktree still has uncommitted changes, git refuses, and QUILL passes that refusal on in plain language instead of quietly forcing it. Only then does it ask a second, separate question: discard those changes and remove it anyway? Two deliberate confirmations, never one.
- Lock marks a worktree as “leave this alone”, with an optional reason you will hear later in the list. This is worth doing for a worktree on a USB drive or a network share, which would otherwise look to git like a folder that has vanished. The same button reads Unlock when the selected worktree is already locked.
- Prune forgets the record of any worktree whose folder is genuinely gone from disk, and tells you which ones it tidied up — or says “Nothing to tidy up: every worktree is still on disk.” when there is nothing to do.
- The main worktree — the repository folder itself — can never be removed or locked from this dialog; those buttons are unavailable while it is selected.
Safety notes worth knowing
- A branch can only be checked out in one worktree at a time. This is git’s rule, not QUILL’s. If you pick a branch that is already open somewhere else, QUILL tells you exactly which folder has it so you can open that folder instead.
- A worktree cannot live inside the repository it belongs to. Put it beside the repository folder, not within it.
- Removing a worktree with uncommitted changes is refused unless you confirm twice, as above.
- Worktrees need
git, like everything else under Tools > Git and GitHub > Local Git, and they are disabled in Safe Mode.
Keystrokes
Neither command has a default shortcut, for the same reason the other Local Git commands do not — the leader-chord letters are all taken. Both are in Tools > Git and GitHub > Local Git and in the Command Palette (Local Git: Worktrees… and Local Git: New Worktree…), and you can assign any shortcut you like to either in Preferences > Keyboard Shortcuts.
Inside the Worktrees dialog: Tab and Shift+Tab move between the list and the buttons, Up and Down arrow move through the worktrees, Enter or Space on a row is the same as Open in QUILL, each button has its own access key (Alt+N New Worktree, Alt+O Open in QUILL, Alt+R Remove, Alt+L Lock or Unlock, Alt+P Prune), and Escape closes the dialog. Inside New Worktree: Alt+F the folder field, Alt+B Browse, Alt+C the branch chooser, Alt+N the “create a new branch” checkbox, Alt+A the new branch name, Alt+R the starting point, Enter creates the worktree, and Escape cancels.
Downloading git and the GitHub CLI
Tools > Git and GitHub > Local Git and Tools > Git and
GitHub > GitHub’s Codespaces/Copilot commands need git
and gh (the GitHub CLI) to actually be present on your
computer. QUILL always looks for a copy you already have installed first
— if git or gh is already on your system PATH,
QUILL uses it directly and nothing more is needed.
If you don’t have them, Help > Download Optional Components has two rows for exactly this: Git (Windows only — a portable copy of Git for Windows, about 40 MB) and GitHub CLI (Windows and macOS, about 14 MB). Both are byte-identical re-publishes of the official releases, checksum-verified the same way every other optional component is. Download either one and the matching commands work immediately, with nothing else to configure — no separate install, no PATH changes, no restart. Remove either independently later from the same dialog; removing one never affects the other, even though they share a storage location.
Quill Radio and the QuillVille family
Internet radio is not a QUILL feature — it is Quill Radio, a free standalone app in the QuillVille family, with its own window, its own keyboard-first UI, and its own complete User Guide (opened from the app’s Help menu). The same is true of the other companions: Quill Weather, QUILL Audio Studio, Quill Inkwell, and the rest. Each shares QUILL’s code, settings, and data where that helps you — a station favorited in Quill Radio, an abbreviation added in Quill Inkwell, are the same on both sides — but each is documented in its own guide, not here.
The QuillVille menu (just before Help in QUILL’s menu bar, and in every QuillVille app) is the one place they all meet: it lists every app in the family, launches the ones you have, and offers to download the ones you don’t. That menu, and this pointer, are the whole of what QUILL’s guide has to say about them.
Everything you started, and carrying your place between machines
Continue Listening
Continue Listening… (in the Command Palette) is one list of everything you started and did not finish, newest first, with the kind named on every row: a podcast episode you are twenty minutes into, a recorded programme or LibriVox chapter you were halfway through. QUILL remembered each of those separately and never showed you the two together, which meant the question people actually have – what was I in the middle of? – had no place to be asked.
Resume starts the highlighted row where you left off. Forget This One drops the saved place and removes the row; the episode stays unplayed, because “I am not going back to this” and “I finished it” are different things to say. A resume list you cannot clear is one that fills with things you abandoned on purpose and stops being worth opening.
Carry My Place Between Machines
If you listen on more than one computer, Carry My Place Between Machines… makes where-you-got-to follow you. It needs two things: a folder both machines can see, and a recovery phrase.
The folder is yours. Point it at somewhere inside OneDrive, Dropbox, iCloud Drive, a network share, or even a memory stick you carry between two machines. QUILL runs no server of its own and never holds your listening history: everything is encrypted before it reaches the folder, so whoever runs that folder learns nothing but file sizes and times.
The recovery phrase is eight ordinary words, generated for you – something like earth dock hollow iris farm laser daisy amber. Write it down. It is the key, and QUILL cannot recover it for you if it is lost. Read My Phrase Aloud says it back numbered, one word at a time, which is what you want while writing it on paper.
Setting up the second machine is the same window. Point it at the same folder and type the phrase from the first one. QUILL notices the folder is already set up and says so, and if the phrase is wrong it tells you straight away – “that recovery phrase does not match this folder; nothing was changed” – rather than half-syncing and failing later. Typing is forgiving about capitals, spacing and punctuation, and a word that is not from the list is named so you can check that one instead of all eight.
Sync Now runs it, and says what happened in a sentence: what came back, what went out, and whether two machines disagreed about a place (the most recent one wins, and you are told). Optionally it can also run when playback stops. If both machines remembered a different place in the same thing and the difference is more than a few minutes, that is a real disagreement and QUILL says so rather than quietly picking one.
Everything works completely normally with no sync at all: this is additive, and nothing waits on a folder before playing.
Sharing your place with apps that are not QUILL
The sync above carries your place between two copies of QUILL. It is encrypted end to end, which is exactly right and also exactly why it can never work with anything else: an app somebody else wrote has no way to read it. If you listen on a phone with a podcast app that is not ours, none of the above helps you.
Listening Places is the other half, and it is a separate checkbox in the same window. In the same folder you already chose, QUILL also writes a small, plain, published file that any podcast app is free to read and write. There is no account, no server, and no signup – the format is written down publicly, so another app can simply support it.
What that means in practice:
- Turn on only the half you want. The encrypted QUILL-to-QUILL sync and the shared plain file are independent switches, because they expose different things. You can run either, both, or neither.
- No recovery phrase is needed for this half. The shared file is not encrypted – it could not be, and still be readable by another app – so setting it up is one checkbox.
- Titles are not in it unless you say so. Every show and episode is identified by a scrambled fingerprint rather than its name, so a folder shared with a family member does not become a list of what you listen to. A third checkbox, off by default, adds readable titles if you would rather have them.
- Each device writes its own file. That is what stops a cloud drive ever producing a “positions (Jeff’s conflicted copy)”, and it means a third and fourth device work without any extra setup.
- The most recent place wins, not the furthest. If you deliberately jumped back twenty minutes and then opened the episode somewhere else, that jump is respected rather than undone.
- It reads at launch and when you press Sync Now, and at no other time. A position arriving from another device mid-episode would move the playhead under you with nothing on screen to explain it, so it does not happen.
Sync Now covers both halves in one press and reports on each.
Sleep Timer
Tools > Media > Sleep Timer… stops whatever is playing after a while, from one place. Choose a preset (15, 30, 45, 60, or 90 minutes) or type a custom number of minutes, then press Start. Over the final 20 seconds, playback fades gently down rather than cutting off abruptly, then stops; your volume is set back to what it was before the fade started, so pressing play again later isn’t unexpectedly quiet. Open the dialog again while a timer is running to see how much time is left, or press Cancel Sleep Timer (also in the Command Palette as Media: Cancel Sleep Timer) to stop the countdown early.
Starting QUILL automatically
Preferences > General has a Start QUILL when Windows starts checkbox, right next to Enable background mode. Checking it registers QUILL to launch the next time you log into Windows — no elevation prompt, and nothing an installer or antivirus tool would flag as unusual, since it uses the same per-user startup mechanism most everyday Windows apps use. Checking it also turns on Enable background mode automatically: a QUILL that launches silently at login needs a tray icon to bring the window back from, so the two travel together. Unchecking Start QUILL when Windows starts removes the entry cleanly; Enable background mode stays as you left it.
Braille Mode (BRF, BRL, PEF, UEB)
QUILL opens and edits formatted braille text files —
.brf, .brl, .pef, and
.ueb — as plain NABCC (braille ASCII). The point is to let
a braille proofreader move through a transcription the way it is
actually laid out, in braille pages and cells, with speech that tells
you exactly where you are.
Opening a braille file. Open any
.brf/.brl/.pef/.ueb
file the way you open anything else. QUILL reads it as braille text: a
UTF-8 byte-order mark is stripped if present, and the file is scanned
for any character that is not braille ASCII. Nothing is transformed on
the way in — what you see is the file’s bytes.
Saving is byte-for-byte. When you save a braille file, QUILL preserves it exactly: no trailing-space trimming, no line-ending normalization, and form feeds (the hard page breaks) are kept. If the text contains characters outside the braille-ASCII range, QUILL still saves them as-is and gives you a single, non-blocking spoken warning so nothing is silently changed. This means a round-trip — open, save — gives you back an identical file.
Picking up where you left off. When you reopen a braille file, QUILL puts your cursor back at your last position and tells you where you are — for example, “BRF file opened. 87 braille pages detected. Last position: braille page 12, line 14, cell 31.” Your place (along with proofing progress and notes) is stored in a small companion file next to the braille file; the braille file itself is never modified. Restore is skipped when QUILL is in safe mode or when sidecar saving is turned off, and if the file was edited shorter elsewhere your cursor is clamped safely inside it.
The braille status cell. While a braille file is
active, the status bar carries a braille cell that updates as you move:
it reads like
BRF Pg 12/87 | Ln 14/25 | Cell 31/40 | Print 7. That is the
braille page, the line within the page, the cell within the line, and
the print page. Print-page detection runs on every open and on every
page-map recalculation, so the print segment is always populated when a
print-to-braille anchor is available; on documents without anchors it
reads Print ?.
The Braille menu. Braille commands live under Tools > Braille. Bindings are intentionally left unset so nothing collides with your screen reader or existing editor keys; you can assign your own in the keyboard customizer, or run them from the Command Palette.
- Status — Read Braille Status (respects your status verbosity), Read Detailed Braille Status (includes print page, continuation letter, running head, proofing state, and detection confidence), Read Current Line and Cell, Read Current Braille Page, Read Current Print Page, Read Progress Summary (how far through the document you are), Announce Running Head, Include Running Head in Status, and Omit Running Head from Status.
- Navigation — Go to Braille Page… (type a page number), Next Braille Page, Previous Braille Page, Go to Print Page… (type a print-page number from the detector’s output), Next Print Page Change (jumps to the next detected print-page boundary), and Previous Print Page Change. Stepping past the first or last boundary tells you there is no more.
- Page Tools — Insert Braille Page Break (a form feed) and Remove Braille Page Break at the cursor, plus Recalculate Page Map (rebuild the page map after edits) and a placeholder for Normalize Line Endings.
- Proofing — track your proofreading progress without ever changing the braille file. Mark the current braille page Proofed, Needs Review, or clear its mark; Add a Proofing Note to the current page; Read a spoken Progress Summary (pages proofed, pages needing review, last proofed page, and estimated completion); List Proofed Pages or List Pages Needing Review (choosing a page jumps you to it); and Export a Proofing Report to a plain-text file. Progress is stored in a small companion file next to the braille file, so it travels with the document and never alters it. These commands tell you to save the file first if it has not been saved yet.
- Validation — check the layout of a braille file. Validate BRF Layout scans for ten kinds of problem — lines or pages that are too long, pages that look stuck (too short), missing page breaks, mixed line endings, characters that are not braille ASCII, malformed or missing page indicators, gaps or duplicates in page numbering, inconsistent running heads, and files that are Unicode braille rather than NABCC — and opens a Warnings List you can step through; choosing a warning takes you to it. Next Warning and Previous Warning move through the findings and announce “Warning N of M” with the message, and Warnings Summary speaks the total and the most common categories. Validation only reads the file; it never changes it.
- Repair — fix the two problems that stop a braille file from embossing cleanly. Read Layout Metrics speaks the diagnostic numbers in one pass: the cursor’s cell and the current line length; the longest line in the file against your cells-per-line limit, with a spoken “page width exceeded” when it is over; the current and total braille pages; and the longest page against your lines-per-page limit, with a spoken “page depth exceeded” when it is over. Go to Longest Line and Go to Longest Page take you straight to the worst offender so you can repair it by hand — for a too-deep page, that usually means inserting a page break (Insert Braille Page Break) where one is missing. Remove Trailing Spaces on This Line and Remove Trailing Spaces in Whole File clear the trailing spaces that cause most page-width problems, while keeping every line ending and form feed intact. The cell and line limits come from your Cells per line and Lines per page settings under Preferences → Braille, so the diagnostics always match the page geometry you are transcribing for.
Every status, navigation, and layout command is safe to run on a non-braille document — it simply tells you “This is not a braille document” rather than doing anything. (Remove Trailing Spaces and Go to Longest Line work on any document’s text.)
Translation (Universal BRF Pack). Forward and back translation between print text and braille require the optional QUILL Braille Pack. Instead of a simple set of tables, the pack uses a three-layer architecture: a full technical catalog of every available liblouis table, a set of user-facing profiles that map friendly names to the correct tables, and the translation runtime itself.
The pack is not bundled by default. When it is absent, the Translation submenu is hidden so you never see disabled items. When the pack is installed, the Translation submenu leads with the two commands most people actually want, then the explicit sections underneath:
- Back-Translate to Text (Auto-Detect Code) — the magical path. You do not need to know whether your braille is UEB Grade 2, UEB Grade 1, legacy American (EBAE) Grade 1 or 2, or computer braille: QUILL back-translates a sample of the document (or your selection) through every candidate code, scores how much each result reads like real English, and picks the winner. It announces what it found — for example, “Detected UEB Grade 2 (contracted)” — so you learn what your file is instead of being asked. When a file is uncontracted, QUILL says Grade 1 even though the Grade 2 table would also have worked; the honest answer wins ties.
- Convert BRF File to Document… — one command from a
braille file on disk to a readable document. Pick any
.brfor.brlfile; QUILL detects its code, back-translates the whole file, and opens the result as a draft — without you opening the braille file first. Because the draft is a normal document, Save As then exports it to Markdown, HTML, Word (.docx), or plain text. BRF in, any format out. - UEB (Unified English Braille) — Contracted (Grade 2), Uncontracted (Grade 1), Translate Selection to UEB, and Back-Translate UEB (the explicit, no-detection variant).
- Standard American English (Legacy) — Contracted (Grade 2) and Uncontracted (Grade 1) using the traditional North American English tables.
- More Languages — a submenu populated automatically from the installed pack’s profile catalog. Languages with multiple profiles (for example, contracted and uncontracted variants) appear as their own sub-group. Examples include German, French, Spanish, Russian, Korean, and dozens more.
Forward translation opens the BRF result in a new document and tells you how many braille pages it produced. Back-translation always opens its result as a clearly labeled draft because no automatic back-translation is authoritative; it back-translates your selection when you have one selected (so you can recover the source text of a single passage) and the whole document otherwise, telling you which it used (“Back-translation draft from selection. N words. Review against the BRF.”). Translation runs entirely out of process, so a liblouis failure can never take QUILL down; if it fails, QUILL announces the reason and does not open an empty document. The Translation submenu is also hidden in Safe Mode.
Translation works the same from an installed build, the portable
build, or a source checkout: the pack ships its own translation engine
(the lou_translate tool alongside the tables), and QUILL
uses it directly — no separately installed Python liblouis binding is
required (though one is used automatically when present, as it is
slightly faster).
Braille files in File > Convert File. The
general-purpose converter accepts .brf and
.brl sources too — they appear in its file picker alongside
every other supported document. Pick a braille file, pick any output
format (Markdown, Word, HTML, EPUB, plain text, and the rest), and QUILL
detects the braille code, back-translates, and writes the result —
announcing which code it found. There is no separate braille converter
to hunt for: the one Convert File dialog handles braille the same way it
handles everything else.
Tutorials
Help > Tutorials… (Ctrl+Alt+F1) opens 23 guided tutorials – 136 steps, about 120 minutes of material – covering the parts of QUILL worth learning first, in the order somebody would actually learn it. They are not a second copy of this guide. A guide answers “what does this do”; it cannot answer “what do I do now”, because a document cannot see what you have already done. This window can.
- They show the keys you have. A step names the command it is about, and the key is rendered when the step is drawn. Rebind something and the tutorial says your key.
- Try it runs the step. Any step that names a command can be performed from the lesson, so a tutorial can open a window for you and then talk you through what you are standing in.
- Follow me notices that you did it. Tick Follow me and the lesson watches the app – once a second, and it watches what changed, never which key you pressed – so however you do the step, it says what it saw (“Done: the document changed”) and reads you the next one. It never takes the keyboard, and nothing is graded: every step still has Next, and a check that never comes true costs you one keypress.
The Tutorials window is a real window, not a wizard: leave it open, move to the app, do the step there, and hear the lesson move on behind you. A modal dialog would own the keyboard for the whole lesson, which is the wrong shape for teaching somebody to use the thing underneath it.
The contents. Six tracks, in teaching order. Each row says how many steps it has, roughly how long it takes, and whether you have finished it. The filter box narrows the list – every word you type has to appear somewhere in a tutorial – and typing here narrows it to the tutorials about the window you came from.
Your place is kept. Close a lesson half way through and it opens there again. Finishing one is remembered separately from where you are in it. Forget my progress clears the lot and changes nothing else. Nothing about your progress leaves this computer.
Reading rather than doing. Read it
all shows a whole tutorial as one page of text, and The
whole book as a document opens all 23 of them as one page –
generated from the same lessons the window teaches from, so the two
cannot disagree. It ships as tutorials.md beside this
guide. The document states the keys the app ships with; only the window
can know the ones you rebound.
The lessons are shared machinery: Quill Radio, QUILL Cast and Quill Weather each have their own set, opened with the same Ctrl+Alt+F1 in every app, and QUILL’s set covers the first hour, the writing, the reading, how much the app says, the assistant, and the parts you meet in the second week. The menus and the command palette cover the rest.
Help, Learning, and Daily Confidence
Quill includes several layers of help because confidence does not come from memorizing everything.
- F1 — context-sensitive help for the focused control. Works anywhere in the application.
- Ctrl+F1 — opens this User Guide.
- Shift+F1 — opens the document-context “What Can I Do Here?” panel.
- Open Welcome Guide when you want a lighter orientation.
- Open User Guide when you want the full map.
- Open Keyboard Reference when you want exact current bindings.
- What Can I Do Here? when you need immediate, contextual guidance.
- Why Don’t I See a Feature? when a command seems to have disappeared.
That “Why Don’t I See a Feature?” command matters more than it first appears. It turns feature visibility from a mystery into an explanation.
Context-Sensitive Help (F1)
Press F1 on any focusable control in QUILL and a small
dialog opens that describes:
- The dialog you are in (when you are inside a dialog box) — the dialog name and a plain-language summary of what it does, so you always know your context.
- The focused control — what the control is, how it works, and what keyboard shortcuts apply to it.
The entire text is in one read-only field so your screen reader announces everything in a single pass when the dialog opens, without you having to navigate past heading elements.
From the help dialog you can:
- Press Escape or Enter on Close to dismiss and return to where you were.
- Press Tab to Open User Guide to jump to the full documentation section for this control.
How the three Help keys work together:
| Key | What it does |
|---|---|
F1 |
Help on the currently focused control (context-sensitive) |
Ctrl+F1 |
Open the full User Guide |
Shift+F1 |
Open “What Can I Do Here?” for the active document context |
Tips:
- In the main editor, F1 shows editor shortcuts and writing tips.
- In dialogs (Preferences, Find/Replace, Spell Check, etc.), F1 identifies both the dialog and the specific setting.
- In the Personalise QUILL wizard, F1 on each control explains what each setting does and what you can change later.
- After using a menu and returning to the editor, QUILL remembers which control had focus last, so F1 still refers to the right control.
Personalising QUILL
The Personalise QUILL wizard runs automatically the first time QUILL starts. You can re-run it at any time from Help → Personalise QUILL.
The wizard walks you through six short pages (five if you do not enable AI writing assistance on the Extras page):
- Welcome — an introduction to what the wizard covers.
- Intent — the most important page. A single question: What kind of writing do you do? A list of seven starting points is shown. Arrow up and down through the list. As you move, a large read-only text area below the list updates live to tell you, in plain spoken English, exactly what you will have if you choose that option. There are no feature IDs, no jargon about flags, and no list of what you will not get. Just what you get.
- Extras — offers a few optional extras such as AI writing assistance, Braille Mode, and typing automation. Only the extras that are not already part of your base choice are shown. Each extra is a single checkbox. Checking one adds a sentence to the preview so you always know what you are committing to.
- AI Provider — shown only if you enabled AI on the Extras page. Collects your provider and your API key. Supported providers are Anthropic (Claude), OpenAI (GPT), Google Gemini, OpenRouter (many models), and Ollama, which runs models on your own device or connects to an Ollama-compatible cloud host. The key is stored securely in the Windows Credential Manager, not in a settings file. You can skip this and set the key up later.
- Keyboard and Sound — choose a keyboard pack and whether QUILL plays audio cues. QUILL auto-detects your screen reader and sets accessible defaults.
- Summary — review all your choices before they are applied. The summary is plain text: your profile name, what features are active, which Quillins are enabled, your keyboard pack, and your sound setting. Use Back to revise any page. Nothing changes in QUILL until you press Finish.
0.7.0 Beta 2: every wizard page now starts with a focusable heading, and the preview block is rendered as a read-only document so VoiceOver does not announce it as an editable text field. See Fixes in 0.7.0 Beta 2 for the full list.
Important: The wizard is transactional. Your choices are held in memory until you press Finish. If you close or cancel the wizard, no settings are changed.
Profiles explained: QUILL ships ten built-in feature
profiles, each starting you at a different level of feature density and
accessibility support (the first-run wizard surfaces seven of them as
plain-English starting points). You can switch profiles at any time from
Tools → Customize & Support → Profiles and
Features… or by pressing Alt+Shift+P.
| Profile | Best for |
|---|---|
| Essential | New users, light daily writing, low-distraction setup |
| Standard | Most users — balanced feature set with AI and tools available |
| Power User | All features on; suited to advanced writing and extraction |
| Accessibility Focus | Screen-reader primary; maximises keyboard coverage and announcements |
Fixes in 0.7.0 Beta 2
The Beta 2 release includes a sweep of accessibility, macOS, and crash-resistance fixes. Where the fix is invisible to the user, the note says so; where the fix is user-visible, the note gives the user-facing detail. The full list is in the release notes.
- #603 — closing the last document no longer crashes the caret
handler. Bug-fix; nothing to change. The crash surfaced as
“QUILL encountered an unexpected error and needs to close” when you
pressed
Ctrl+Won a dirty document, picked “Don’t Save,” and the next caret event was still queued against the destroyed editor widget. The fix is a defensive guard on the editor-read helper; you will not see the error dialog any more. - #605 — Help → Check for Updates opens cleanly.
Bug-fix; the dialog had a stale
ImportErrorthat surfaced as “QUILL encountered an unexpected error.” Open Help → Check for Updates and the update channel selector appears as before. - #606 — Setup Wizard opens on a clean window, not on top of an “Untitled” tab. Returning users (anyone who has already run the wizard) see the normal “Untitled” tab on launch; first-run users see the wizard on an empty notebook and an untitled document is created automatically after the wizard finishes.
- #608 —
Cmd+Qnow quits QUILL on macOS. The new default isCtrl+Q(which maps toCmd+Qon macOS), and Quote Lines has moved fromCtrl+QtoCtrl+Shift+Qto make room. Unquote Lines moved fromCtrl+Shift+QtoCtrl+Shift+Kto keep the pair on the home row. A savedkeymap.jsonthat still has the old chords is rewritten on first launch, and the corrected value is persisted back so the next launch is clean. - #609 —
Option+Left/Option+Rightare no longer hijacked by Back / Forward Location on macOS. On macOS, the new default for Back / Forward Location isCmd+[andCmd+](the conventional macOS back / forward chord, matching Safari, Finder, and most other Mac apps). Windows users keep the existingAlt+Left/Alt+Right. A pre-#609 macOS user whose savedkeymap.jsonstill records the Windows chord has it rewritten to the new macOS chord on first launch, and the corrected value is persisted back so the next launch is clean. - #610 — Setup Wizard page heading is the first focusable
element, and the preview is no longer announced as “edit text” by
VoiceOver. A screen-reader user now lands on the page heading
on every wizard page, not on the read-only preview block. The preview
itself is rendered as a read-only document (not a
TextCtrl), so VoiceOver announces it as a document or static text rather than as an editable text field. Sighted users see the same styled preview they had before. - #611 — wizard Back and Next buttons are simply “Back” and
“Next.” VoiceOver on macOS was reading the old labels
(“
< Back” and “Next >”) as “less than Back” and “Next greater than.” The buttons now read “Back” and “Next,” which is what every screen reader announces and what every sighted user sees on the face of the button. - #612 — Read Aloud and Insert Snippet no longer fire on bare
RandSkeystrokes. Bug-fix; the friendly chord label in the Tools and Insert menus was being parsed by wx as a real native keyboard accelerator, so the bare lettersRandSgot bound as modifier-less global shortcuts. The chord label is now shown as plain parenthetical text after the menu item name rather than as a wx accelerator, so the letters belong to your text again. - #613 — the Help menu is now recognised as the macOS system
Help menu. Bug-fix; the macOS
Cmd+?Help shortcut now works (it was already wired in wx, but the OS only honours it for menus that are flagged as the system Help menu). Windows and Linux behaviour is unchanged. - #614 — AI Hub opens cleanly from the wizard and the editor
caret handler no longer fires before a document is loaded.
Bug-fix; the AI Hub’s tab labels and the first-run AI Hub button were
both affected by the same
lazy_gettextproxy issue, and the caret handler crashed silently on every keystroke before you had even selected a document. - #615 — JAWS, NVDA, Narrator, and VoiceOver now announce the
QUILL version. The window title now includes the full QUILL
version (for example, “QUILL for All 0.7.0 Beta 2”), so every screen
reader that announces the focused window — JAWS
Insert+T, NVDA+T, NarratorCaps+H, VoiceOver — reads the version along with the document name. TheCtrl+JAWSKey+Vpath still reports only “Version” until a versioned launcher ships; the window title is the change you can hear today. - #616 — VoiceOver now reads the editor as a native text area
on macOS. Bug-fix; the editor’s NSView now has its
NSAccessibility role pinned to
NSTextViewso VoiceOver announces it as a normal, editable text area with full text-navigation semantics. Windows behaviour is unchanged. - #618 — Report a Bug dialog now speaks field names on macOS, opens in its own window so you can alt-tab to the editor, and no longer auto-opens a browser after submit. Every field is bound to its label via the standard accessibility name, so VoiceOver reads “Summary, edit text” / “What happened, edit text” / etc. when you tab into a field. The dialog opens in a non-modal window by default. The report is always on your clipboard after submit; the auto-open-browser behaviour is now opt-in via Settings (Settings → “After you submit a bug report, automatically open the support form in your default browser”).
- #619 —
Ctrl+F4on a dirty document no longer crashes when you pick “Don’t Save.” Bug-fix; the close-path save prompt was queuing aneditor.SetFocusviaCallAfterthat fired after the close had already destroyed the editor TextCtrl. The Save and Cancel paths are unchanged; the Save path still returns focus to the editor as before. - BR-013 follow-on — Print-page detector now classifies a
right-margin continuation as high confidence and surfaces the trailing
letter. When a braille document uses a right-margin print-page
number on line 1 and the next page carries the same digits with a
trailing continuation letter (for example
7on braille page 1 and7aon braille page 2), the print page has not actually changed — the letter is the braille continuation marker. The Phase 2 detector used to score that pattern asmediumconfidence and silently drop the letter, so the detailed status readPrint 7instead ofPrint 7a. The detector now matches the previous page’s right-margin digits, classifies the boundary ashighconfidence, and reads the trailing letter back through to the status string. In practice: open a braille document with right-margin print-page numbers, move the caret across a continuation, and the status bar (and “Read Detailed Braille Status”) reads the full7aform rather than just7.
Translation and Community Localization
QUILL uses a standard GNU gettext pipeline
(POT → PO → MO) for all user-visible strings, aligned with
the model used by NV Access for NVDA. This means QUILL translation work
feels familiar to anyone who has contributed to NVDA, JAWS scripts, or
other accessibility-focused open-source software.
How the Translation Pipeline Works
- Source strings are marked in code with
_()for regular strings,ngettext()for plural forms, andlazy_gettext()for strings that must be translated at display time rather than at import time. - The POT file (
quill/locale/quill.pot) is the master template, generated automatically bypybabel extract. It contains every translatable string in the application. - PO files
(
quill/locale/<lang>/LC_MESSAGES/quill.po) contain the actual translations for each language. Translators work in PO files. - MO files are compiled from PO files by
pybabel compileand are the binary files QUILL loads at runtime. - QUILL selects the active language at startup from
your
languagesetting (BCP 47 tag, e.g.,fr,es,pt-BR). If blank, QUILL follows the operating-system language.
Speech strings — text that will be read aloud by a screen reader
rather than displayed visually — are marked with a
# SPEECH: comment in the source code. Translators should
preserve the natural spoken rhythm of these strings, not just their
semantic meaning.
Switching QUILL’s Display Language
Once a translation is installed, you can switch the language QUILL uses for its menus, dialogs, and spoken messages from inside the app:
- Open Tools > Writing and Language > Change Display Language…
- Choose a language from the list, or System default
to follow your operating system. Only languages with a compiled
translation (
.mo) appear, so you never pick one that has nothing to show. - QUILL saves your choice and applies it to new spoken messages right away. Restart QUILL so every menu and dialog reloads in the chosen language.
The first community translation ships with QUILL 0.9.0: Italian, contributed by Elena Brescacin — menus, dialogs, and spoken messages, with anything not yet translated falling back to English (the catalog keeps growing as QUILL does, and the translation grows with it). Pick Italiano from the list and QUILL speaks Italian immediately, with every menu following after a restart. More languages appear here automatically as community translations land.
Contributing Translations
To contribute a translation:
- Fork the QUILL repository and create a branch named
l10n/<lang>(e.g.,l10n/fr). - Copy
quill.potto your language folder:quill/locale/fr/LC_MESSAGES/quill.po - Translate each
msgidinto amsgstr. Leavemsgstrempty for strings you have not yet translated; the English fallback will be used. - Run the CI translation check to verify placeholder
integrity and completeness:
python -m quill.tools.check_translation - Open a pull request. The Translation Coordinator reviews and merges approved translations.
Tools that help:
- Poedit — free, accessible PO file editor with spell check.
- Virtaal — lightweight alternative.
- Crowdin (when QUILL’s project is live) — browser-based collaborative translation with a review queue.
Do not translate:
- Placeholder tokens:
{name},%(count)s,{path}— leave these exactly as they are in themsgid. - ARIA role names:
"dialog","button","listbox"— these are passed to platform accessibility APIs unchanged. - Internal command identifiers:
"file.open","glow.audit"— these are not user-visible. - File extensions and format names:
.docx,EPUB,PDF.
Translation Roles and Responsibilities
QUILL follows a four-tier model aligned with NV Access community practice:
| Role | Responsibilities |
|---|---|
| Translator | Translate strings from English into the target language. |
| Proofreader | Review translations for accuracy, tone, and natural language flow. |
| Language Coordinator | Own quality for one language; approve or request changes from translators and proofreaders. |
| Translation Coordinator | Oversee the whole translation project, manage Crowdin, coordinate string freeze, credit contributors. |
To become a translator or proofreader: open a GitHub issue with the
label translation and state the language you want to work
on.
Speech String Guidelines
QUILL marks screen-reader-targeted strings with
# SPEECH: in the source code. When translating these
strings:
- Prioritise spoken clarity over literal accuracy. A string that reads well when spoken aloud is more important than a string that is grammatically perfect but awkward when heard.
- Match the rhythm. Short speech strings should stay short. QUILL’s screen-reader users hear these strings dozens of times per session; brevity is a form of accessibility.
- Preserve emphasis signals. Where the English string uses word order or phrasing to signal importance (e.g., the key word comes first), try to mirror that in translation.
- Test with a screen reader. If possible, test your translated strings with NVDA or JAWS before submitting.
- Ask if unsure. Open a GitHub issue tagged
translationandspeechif you are uncertain how a speech string should be adapted.
String freeze happens before each release candidate. No new strings are added after freeze, and translators have a two-week window to complete their language before the release is built.
Checking for Updates
Quill can check for and install updates automatically while you work.
Manual update check
To check for updates now:
- Press Alt+H to open the Help menu.
- Press U for Check for Updates.
- If a newer version is available, Quill will announce it and ask for permission to download.
- If you accept, Quill downloads the update in the background and announces when it is ready.
- The next time you close and reopen Quill, the update is applied automatically.
Automatic update checks
You can enable Quill to check for updates on startup:
- Press Alt+E to open the Edit menu.
- Press Shift+S for Settings.
- In the Updates section, enable Check for updates on startup.
When automatic checks are on, Quill will notify you quietly if a new version is available, and you can choose to download it when you are ready.
Update size and speed
Quill uses incremental updates (“micro-updates”), which are much smaller than full reinstalls. Patches often download in seconds rather than minutes, and your settings, documents, and preferences are preserved.
Staying on a release channel
By default, Quill checks the stable update channel and only offers released versions. To opt into beta versions and test new features early, enable Beta channel in Settings → Updates.
Beta Feedback and Bug Reporting
Quill is ready for serious beta use, and Quill 0.5.0 Beta now ships a real in-app support starting point.
What exists today
Today, Quill already has the foundations for careful support work:
- recovery state
- notifications
- extraction review
- bad-extraction package export for extraction-related issues
- a general-purpose Save Diagnostics… command that writes a local bundle
- a Report a Bug… command that lets you review the report in-app and then opens the Community Access support-hub form with environment context
- a diagnostics runbook and PRD-backed support model in the documentation set
What still needs to improve
Today, Quill still does not yet ship a polished no-login secure upload path directly from the desktop app, and the support handoff still depends on a browser form after the in-app review step.
Best beta-launch recommendation
Before the broadest public rollout, publish one secure feedback route that does not require GitHub login. The best release-quality path is still:
- a BITS-controlled HTTPS feedback form
- optional upload of a user-reviewed diagnostics bundle
- a plain-language bug template with environment summary and reproduction steps
- the current Help -> Report a Bug… handoff kept as the guided in-app bridge until the fuller route is live
Until that exists, use the current Help-menu path as the practical bridge. The important improvement in Quill 0.5.0 Beta is that Quill now helps users gather diagnostics locally, review what is being shared, and start a structured support report without forcing them to begin outside the tool.
A Fast Shortcut Tour
If you want a compact set of shortcuts to remember first, start here:
Ctrl+N,Ctrl+O,Ctrl+S,Ctrl+Shift+SCtrl+Shift+Pfor the Command PaletteCtrl+F,F3,Shift+F3,Alt+F3Ctrl+GandCtrl+Shift+GCtrl+KandCtrl+EnterCtrl+Shift+Grave, Lfor List Manager;F2for the Structured List Studio (Shift+F2for Insert Special Character)F9to hold-to-dictate,Ctrl+F9for Locked Dictation (Alt+F9speaks the dictation state)F7,Ctrl+F7,Ctrl+Shift+F7,Shift+F7Ctrl+Shift+Wfor Word CountCtrl+TabandCtrl+Shift+TabF6andShift+F6Alt+Zfor soft wrap
Then open Help → Open Keyboard Reference and let Quill teach you the rest from your actual active layout.
Closing Thought
The best way to understand Quill is to use it on something real: a note you care about, an extracted PDF that needs trust review, an EPUB chapter you want to navigate, a Markdown file you want to clean up, or an HTML document you want to make more usable.
Quill is trying to feel like a skilled guide sitting just beside the editor, not standing in front of it. If it succeeds, you will notice something simple: you spend less time wondering what the application can do, and more time deciding what you want to do next.
Quillins: Extensions
Quill supports Quillins — extensions that add commands, snippets, menus, abbreviations, smart triggers, settings pages, status bar cells, and document event handlers to the editor without requiring a full app restart. Each Quillin runs in its own worker process, which isolates faults (a runaway extension cannot crash or corrupt the editor) but is not a security sandbox — the worker is a plain Python interpreter, so the real boundary is code review and the Author Covenant, not technical enforcement. QUILL renders every control using accessible, screen-reader-friendly stock widgets — a Quillin never touches wxPython directly.
Bundled Quillins
QUILL ships seventeen trusted, first-party Quillins enabled by default:
- Smart Insert (
com.quill.smartinsert) — abbreviations and smart text triggers for everyday templates. Contributes theqbug,qmeet,qlog, andqtodoexpanding abbreviations (its declared dynamicqbrfis reached via=brftest()instead), as well as=bug(),=meeting(),=journal(),=todo(),=logentry(),=brftest(), and=rand()smart triggers. Settings are under Preferences → Smart Insert. - BRF Tools (
com.quill.brftools) — preferences for braille translation defaults, page handling, status bar display, and diagnostics. Requires the QUILL Braille Pack. Settings under Preferences → BRF Tools. - Journal Stamp (
com.quill.journalstamp) — inserts a date header when you create a new journal document; announces your word count (and daily goal progress) after every save; announces session restores. Listens toquillin.enabledto log activation andsettings.changedto hot-reload preferences. Settings under Preferences → Journal Stamp. - Document Guardian
(
com.quill.docguardian) — warns before closing short or unfinished documents; optionally stamps anUpdated:line before each save; optionally speaks the file name and size after each save. Usesquillin.enabled,quillin.disabled, andquill.shutdownlifecycle events. Settings under Preferences → Document Guardian, which has Close Guard, Save Stamp, Save Confirmation, and Lifecycle Announcements tabs. The Lifecycle Announcements tab controls whether the activation and deactivation cue is spoken; the setting defaults to off so first-run is quiet for screen-reader users. - Status Scribe (
com.quill.statusscribe) — adds a live word/character/sentence count to the status bar. The count updates after every save and when you switch tabs. Uses theui.logcapability to write developer messages to the Developer Console. Settings under Preferences → Status Scribe. - Text Tools — advanced text transformations: line numbering, hard-wrap, regex match counting, and block filtering.
- Insert Tools — date, time, and date-and-time snippets in the Insert → Date and Time submenu.
- Line Tools — cursor-aware line operations.
- Markdown Helpers — syntax assistance for Markdown documents.
- Insert Character — a searchable character picker for Unicode symbols.
- Word Count (Node) — word count via the Node.js Quillin runtime, demonstrating that Quillins can be written in JavaScript as well as Python.
- AI Writing Prompts — additional prompt library entries contributed by the Quillin manifest.
- AI Writing Skills — pre-built
.sqpskill files for rewriting, meeting-notes extraction, and research drafts. - Math Equations — inserts LaTeX or MathML equations
at the cursor via Insert → Insert Equation…
(
Ctrl+Shift+E); see Math Equations earlier in this guide. - ElevenLabs Scribe Transcription, Groq Whisper Transcription, and OpenAI Whisper Transcription — add those cloud services as optional transcription providers (with speaker identification, in ElevenLabs’ case). Audio is uploaded only when you explicitly transcribe with that provider and have configured its API key — never offline, never without consent.
Quillin Preferences
Every enabled Quillin that declares settings appears as its own entry at the bottom of the Preferences hub (Ctrl+Comma). Navigate to the Quillin by name and press Enter to open its settings dialog.
Settings tabs. A Quillin with several groups of settings organizes them into tabs. Use the left and right arrow keys to move between tabs; Tab reaches the tab’s controls. Changing tabs does not reset unsaved settings; all changes are applied when you press Save.
Accessible labels. Every labeled control (combo box,
text field, numeric spinner) is preceded by its StaticText
label in Windows Z-order so JAWS and NVDA announce the correct label
when you Tab to a field. wx.CheckBox controls carry their
own label text and are exempt.
Document Events
Quillins can subscribe to document lifecycle events and run code automatically — no user action required. Fourteen events are available:
| Event | When it fires |
|---|---|
document.opened |
A file was opened from disk |
document.activated |
You switched to this tab |
document.before_save |
Right before saving |
document.after_save |
After a successful save |
document.before_close |
Before a tab closes |
document.after_close |
After a tab closes |
document.created |
A new blank document was created |
document.loaded_from_session |
A document was restored from a crash |
smart_trigger.entered |
A smart trigger was activated |
abbreviation.expanded |
An abbreviation was expanded |
quillin.enabled |
This Quillin was just enabled or QUILL started with it on |
quillin.disabled |
This Quillin was disabled in the Manager |
quill.shutdown |
QUILL is about to close |
settings.changed |
A setting owned by this Quillin changed |
Event subscriptions can be filtered by file extension, path pattern,
or content. A journal Quillin can limit itself to
**/journal/** paths; a .LOG handler can
require the file to start with .LOG.
Each subscription carries an enabled_by_default field.
When an author sets it to false, the handler starts
inactive — useful for optional or potentially noisy behaviors. You can
toggle any event on or off per-Quillin from the Quillins Manager
→ Configure Events… dialog.
Handlers call api.announce() to speak results; they must
not block the UI thread.
Reset controls. Every preference page offers Reset options:
- Reset this setting — restores the single setting to its manifest default.
- Reset this section — restores all settings in the section.
- Reset this Quillin — restores all settings for the Quillin to their manifest defaults.
Settings storage. Each Quillin’s settings are stored
at
%APPDATA%\Quill\quillin_settings\<quillin-id>.json,
written atomically. Disabling a Quillin hides its preference page but
keeps its stored settings. Uninstalling prompts you to keep or delete
the data.
The Quillins Manager
Open via Tools → Quillins. The Manager lets you:
- See every installed Quillin and its current status (enabled or disabled, or invalid with an error).
- Select a Quillin to review its details: name, version, author, description, categories, minimum required QUILL version, declared capabilities, network host allowlist, and the on/off status of each event subscription.
- Enable or Disable a Quillin without removing it. Changes take effect immediately.
- Configure Events… — opens a dialog listing every document event subscription for the selected Quillin with a checkbox next to each. Check to activate a handler, uncheck to stop it. The state is saved immediately and persisted across restarts.
- Reload — re-reads all Quillins from disk without restarting. Use this after editing a bundled Quillin during development.
- Remove — uninstall a Quillin (confirmation required). The extension directory is deleted from disk.
- Install from Folder — select a local folder
containing a Quillin. QUILL validates its
manifest.json, copies the folder into your per-user extensions directory, and enables it immediately. This is the supported path for installing third-party Quillins once the SEC-8 gate lifts.
When you select a Quillin, the details pane shows all declared
capabilities (for example fs.read, net,
settings.own.read, or settings.own.write), any
net_allowed_hosts restrictions, and the current on/off
state of each event subscription. Review capabilities before enabling a
Quillin from an unknown source.
If a Quillin fails to load — because it requires a newer QUILL
version (min_quill_version), a missing dependency
(requires), or a manifest error — the error is shown in the
details pane so you know what is blocking it.
The Quillin Hub: sharing what you make
Everything you build in QUILL can be shared with the community through the Quillin Hub — not just Quillin extensions. The Hub accepts seven kinds of artifact:
- Quillin extensions (a zipped folder with
manifest.json) - AI agents (a single
.mdor.jsonagent file) - Verbosity packs (
.qvp.json) - Sound packs (
.qsp) - Keyboard packs (
.kqp) - AI skill packs (
.sqp) - Pronunciation dictionaries
(
.json)
Submit to Quillin Hub. Choose Tools →
Quillins → Submit to Quillin Hub… and pick your file. QUILL
figures out what kind of artifact it is and runs the exact same checks
the Hub runs on submission — locally, on your machine, with nothing
uploaded. To check a Quillin extension, pick its
manifest.json file; QUILL validates the whole folder. The
result is read to you in plain language: Passed means
your work clears every check QUILL applies to its own bundled artifacts;
Needs work lists each error and warning so you know
exactly what to fix. The dialog also reports the
Signature line — verified if you have a
sidecar next to your file, invalid if the sidecar is
present but does not match, or unsigned if there is no
sidecar. The Hub rejects unsigned submissions, so the “Open the Quillin
Hub” button only appears when your artifact is both passing and signed.
Sign with
python -m quill.tools.signing sign <artifact> and
re-run the check. The check itself makes no network connection; only the
explicit “Open the Quillin Hub” button opens anything.
Publication is handled through GitHub pull requests, so every submission is reviewed in the open. The Hub re-runs the same validation, scans any extension code for security and capability honesty, reads your manifest so you never retype your name, version, or description, and verifies the publisher signature on every sidecar uploaded with the submission.
Verifying installed Quillins. The Quillin Manager
shows a Signature line in the details pane for every
Quillin — verified for a sidecar next to the manifest that
matches the publisher key, invalid for a sidecar that does
not match, or unsigned if no sidecar is shipped. The line
is read aloud with the rest of the manifest details, so you can hear
whether a Quillin is publisher-attested before enabling it. This check
now works on every install (the PyNaCl cryptography library it needs is
bundled with Quill, where it used to be a developer-only dependency that
shipping builds never included — so the line used to always read “PyNaCl
is not installed”). See docs/signing.md for the signing
protocol.
Authoring Quillins
For developers, Quillins are designed to be “screen-reader-first.” They follow a strict capability model: a Quillin must declare the minimum set of permissions it needs, and any sensitive action (like writing to a file or changing a setting) is consent-gated at runtime.
Quillins can contribute:
- Commands — Python or Node.js handlers, or declarative snippets.
- Menus — items in the standard QUILL menu bar.
- Hotkeys — keyboard bindings that respect the QUILL key chord prefix.
- Abbreviations — typed shortcuts that expand after a delimiter.
- Smart triggers —
=name()typed commands on the current line. - Sound events and sound packs — custom earcons tied to Quillin-specific events.
- Preferences — structured settings pages with tabs, sections, validated controls, search keywords, and per-Quillin storage.
- Document events — lifecycle handlers that fire automatically when a document opens, saves, closes, is restored, or when the Quillin itself is enabled, disabled, or the app shuts down.
- Status bar cells — live cells that the host
refreshes and displays in the QUILL status bar. Requires the
ui.statuscapability. - Categories — one or more taxonomy labels
(
writing,accessibility,braille,productivity, and more) for filtering in the Manager. - Dependencies (
requires) — declarations that another Quillin must be installed before this one loads. QUILL enforces these at discovery time. - Network host allowlist
(
net_allowed_hosts) — when declaring thenetcapability, restrict outbound connections to a named list of hostnames or wildcard patterns. QUILL blocks connections to any unlisted host even if the user has granted blanketnetconsent. - Minimum version (
min_quill_version) — declare the oldest QUILL release the Quillin supports. QUILL rejects it at load time if the running version is too old.
See docs/quillins/quillins.md for the full authoring
reference, and PRD section 5.83a (“The Quillin Hub — community
distribution for every shareable artifact”) for the developer guide
covering every shareable QUILL file format (Quillins, agents, verbosity
packs, sound packs, keyboard packs, skill packs, and pronunciation
dictionaries) and how to validate and submit each one. The single
validator is
python -m quill.tools.artifact_validate <path>.
AI Assistant
QUILL includes a built-in AI assistant. You can run it on-device (llama.cpp with a local GGUF model) or connect a provider: Ollama (local), Ollama Cloud, OpenAI, Claude, OpenRouter, Google Gemini, or a custom OpenAI-compatible endpoint. Providers are optional and selected explicitly. API keys are stored in the Windows Credential Manager by default, with a DPAPI-encrypted fallback, and never written to disk in plain text.
Setting up an AI provider
Open AI > AI Hub… to configure your providers. The AI Hub is the single place for every provider’s key, model, Test Chat, and per-provider key removal — the former AI Model and Connection and Forget API Key menu items were merged into it.
- OpenRouter — paste your API key into the OpenRouter API Key field. OpenRouter gives you access to many models (Claude, GPT-4o, Gemini, and more) with a single key.
- OpenAI — paste your OpenAI API key.
- Ollama — no key needed. Install Ollama on your
machine (
ollama serve) and QUILL detects it automatically athttp://localhost:11434. Change the Ollama Base URL setting if you run Ollama on a different port or machine.
Portable mode and key storage
By default QUILL stores AI provider keys in the Windows Credential Manager, which ties them to your Windows user account. If you run QUILL from a self-contained folder — for example on a network share or an external drive — portable mode puts all of your keys in that same folder alongside your other QUILL data.
Activating portable mode. The portable bundle ships
with an empty data\ folder next to quill.exe,
and QUILL recognises that folder as the portable opt-in. No environment
variable to set, no checkbox to tick — just run quill.exe
from the bundle root. The Setup Wizard’s Data location
page detects the portable install and offers the portable radio button
automatically. If you want to convert an installed build into a portable
one, copy the install folder to a USB drive and create an empty
data\ folder at its root; QUILL will switch to portable
mode the next time it starts from that folder.
The previous activation mechanism (QUILL_PORTABLE=1) is
no longer required and is ignored: portable mode is a property of the
bundle, not of the running environment.
Nothing is written to the host computer. A portable
bundle is portable from the very first launch — you do not have to
answer anything first. Extract the zip, run quill.exe, and
your settings, keymap and everything else go straight into the
data\ folder beside it. No folder appears in
%APPDATA% on the machine you happened to plug into, which
is the entire point of carrying the app on a stick.
Until version 1.0 this was not true: a freshly extracted portable
copy used %APPDATA%\Quill on the host machine until you
went to the Setup Wizard or Preferences and chose portable, and nothing
said so. If you have been running a portable QUILL and your settings
look like they have reset, they have not — they are in
%APPDATA%\Quill on that computer, and you can copy that
folder’s contents into the bundle’s data\ folder to bring
them across.
You can still choose otherwise. Picking Windows profile in Preferences or the Setup Wizard is remembered and overrides the bundle, because an explicit choice always beats a default. The same applies to every Quill app that ships a portable build — Quill Radio, Cast, Weather, Audio Studio, Converter, Inkwell, Beacon, Media Player and QuillLite.
When portable mode is on, keys are stored in a file called
keys.enc inside the QUILL data directory. The file is
encrypted with Windows DPAPI, so it is protected by your Windows
user-account key.
Limitations. The encrypted file is tied to the Windows account that created it. Moving it to a different machine or a different Windows account will fail to decrypt; you will need to re-enter your keys there. Portable mode gives you a self-contained folder on the same machine — it does not give you cross-machine portability.
Environment-variable overrides (for CI and developers). You can supply keys directly via environment variables regardless of which mode is active. These always win and are never stored to disk:
| Provider | Environment variable |
|---|---|
| OpenRouter | QUILL_OPENROUTER_KEY |
| OpenAI | QUILL_OPENAI_KEY |
| Ollama Cloud | QUILL_OLLAMA_KEY |
| AI Assistant | QUILL_ASSISTANT_KEY |
You can also set a Default model for prompt runs
(ai_prompt_default_model). Leave it blank to share the same
model across Ask AI and the Prompt Library, or set a different model
here if you want a more capable model for prompt-library work.
How QUILL protects your keys and sign-ins
Everything secret that QUILL holds for you — AI provider keys,
remote-site passwords, and the sign-in tokens for any online service you
connect — goes through one hardened store. On Windows that is the
Windows Credential Manager (or the DPAPI-encrypted keys.enc
file in portable mode); on macOS it is the login Keychain. QUILL never
writes a secret in plain text, never puts one in a settings file, a log,
or a diagnostic bundle, and never keeps one inside its own program
files. If you use an environment-variable override, that value is used
directly and is never saved to disk.
When you sign out of a service, QUILL clears every secret that service stored in a single step, so nothing is left behind. And because no secret is ever part of QUILL’s source code, there is nothing to extract from the app itself: your keys and tokens live only in your operating system’s protected store, tied to your account. This one store is where a future eligible-service sign-in (such as an authenticated online library) would keep its tokens as well.
Ask AI (quick one-off question)
AI > Writing Assistant... (Alt+Q) opens the
message-style assistant where you can ask questions, draft text, propose
edits, and run Quill commands with approval before changes are applied.
The active provider and model are shown, and you can switch between
providers and models in-dialog. Use AI > Ask AI…
(Command Palette) for a simpler one-shot prompt-and-response dialog when
you do not need insertion or follow-up.
- Provider and Model choices are pre-filled with the last values you used.
- If a provider and model are already configured, focus lands directly in the Prompt field so you can start typing immediately. If not yet configured, focus starts on the Provider choice to guide you through setup.
- Press Ctrl+Enter or the Send button to submit. QUILL announces “Sending…” and disables the button while the request is in flight.
- The response opens in a read-only dialog. Use cursor keys to read it, and Copy to Clipboard to copy the full text. Closing the response returns you to the Ask AI dialog so you can ask a follow-up.
- Clear resets the prompt field and refocuses it.
Check Grammar with AI
Edit > Grammar > Check Grammar with AI sends the
selected text (or the full document if nothing is selected) to your AI
model with a grammar-review prompt. The response dialog lists
corrections in the form “original phrase → corrected phrase — reason”.
No changes are applied automatically; you apply corrections
yourself.
The default grammar instruction is: review the text and list only the corrections needed; do not rewrite the passage. If you want a different instruction, open the Prompt Library, find the “Check Grammar” built-in prompt, and edit its text — the command picks up your version automatically.
Prompt Library
AI > Prompt Library... opens the full prompt
management dialog.
What it shows. A searchable list of all prompts on the left (type in the search field to filter by name or category). The selected prompt’s instruction text on the right. An optional input text field where you can type or paste text to use as the selection context.
Running a prompt.
- Select a prompt from the list (or type in the search field to find it).
- Optionally paste text into the input field. If blank, QUILL uses the current editor selection or full document.
- Press Run with AI. The result opens in the AI Response dialog.
Built-in prompts. QUILL ships a set of ready-to-run prompts you can use immediately or use as starting points. They include editing and tone tools (Check Grammar, Fix Grammar, Improve Clarity, Make Concise, Active Voice, Formal Tone, Conversational Tone, Paraphrase), structure tools (Summarize, Convert to Bullet Points, Generate FAQs, Step-by-Step Instructions), writing tools (Continue from Here, Draft a Speech, Summary Email, Social Media Post — 280 characters or fewer), and research tools (Define This Term, Find Counterarguments). The named one-shot tools in bold were added to round out that set. Every built-in can have its wording overridden or be disabled, but built-ins cannot be deleted.
Managing prompts.
- New Prompt — opens a small dialog: enter a name,
choose a category, and write the instruction text. Use
{selection}where you want QUILL to insert the text. - Edit — modify the name, category, or instruction of a selected user prompt. Built-in prompts can have their text overridden (the override is saved; the original is never deleted).
- Disable/Enable — hides or shows a prompt in the list without deleting it. Useful for built-ins you never use.
- Delete — removes a user-created prompt. Built-in prompts cannot be deleted.
Importing and exporting prompt packs.
QUILL uses .pqp (Prompt Quill Pack) files to share
prompt collections.
- Import .pqp — opens a file picker; imports all prompts from the file. Prompts whose names already exist in your library are skipped.
- Export .pqp — saves all your user-defined prompts
to a
.pqpfile you can share or back up.
A .pqp file is plain JSON with a human-readable
structure:
{
"schema": "quill.prompt-pack/1",
"name": "My Writing Prompts",
"prompts": [
{
"name": "Make Punchy",
"text": "Rewrite this as a punchy one-liner: {selection}",
"category": "Editing"
}
]
}Built-in prompts. QUILL ships 12 built-in prompts across five categories. These are always present and fully editable; they cannot be deleted.
| Category | Prompt names |
|---|---|
| Editing | Check Grammar, Improve Clarity, Fix Grammar, Make Concise, Active Voice, Formal Tone, Conversational Tone |
| Writing | Continue from Here |
| Structure | Convert to Bullet Points |
| Research | Define This Term, Find Counterarguments |
Quillin-contributed prompts. Quillins can ship a
prompts.json file that adds prompts to the library. The
bundled ai-writing-prompts Quillin contributes 7 additional
prompts (Expand This, Vary Sentence Rhythm, Make More Vivid, Write a
Title, Generate Outline, Suggest Supporting Evidence, Plain Language).
These appear in the list and can be run like any other prompt; they are
not persisted to your library file.
Skill Library (.sqp skills)
Skills are multi-step AI workflows. Where a prompt is one instruction, a skill is a sequence of steps where each step can use the output of the step before it.
AI > Skill Library... opens the Skill Library
dialog.
What a skill looks like. A skill has a name, a description, and a list of steps. Before running, QUILL shows a parameter dialog if the skill declares any parameters (such as tone, target reading level, or output format). Each step runs in order, sends its prompt to the AI, and stores the response for the next step to use.
Bundled skills. QUILL ships four skills in the
ai-writing-skills Quillin:
- Accessible Rewrite — Analyses your text for plain-language issues (long sentences, passive voice, jargon), then produces a targeted rewrite. You choose the target reading level (Grade 6, 8, or 10). The rewritten text replaces the selection when you Accept.
- Research and Draft — Extracts the central topic from your selection, gathers five supporting facts, then drafts a paragraph at your chosen tone and length.
- Meeting Notes to Action Items — Reads meeting notes, extracts every action item with owner and deadline, checks for missed items, and produces a clean follow-up summary. Output goes to clipboard.
- Argument Strengthener — Identifies your argument’s logical structure, finds weaknesses and counterarguments, then produces a strengthened version tailored to your chosen audience.
Running a skill.
- Open AI > Skill Library…
- Select a skill from the list.
- Press Run. If the skill has parameters, a small dialog appears — fill in the choices and press OK.
- QUILL announces “Running step 1 of N…” as each step executes.
- When complete, the result dialog appears. Read the output, then press Accept to apply it (if the skill places output in the document) or Copy to copy to clipboard.
No streaming. Each step sends a complete prompt and waits for the full response before the next step begins. This makes step outputs reliable and readable between steps.
Authoring and sharing skills. A skill is a
.sqp (Skill Quill Pack) file — a plain Markdown document
with YAML front matter. Open any .sqp file in QUILL to read
and edit it. Share skills by sharing the file. See
docs/quillins.md §20 for the full authoring reference, and
docs/userguide.md for a guided walkthrough.
Validating a skill file. Run
python -m quill.tools.sqp_validator yourskill.sqp to check
for errors before sharing or shipping.
Control Reference
The Control Reference is a full listing of every focusable control in QUILL, organized by section. For each control it shows: what the control does, what keyboard shortcuts apply to it, and which section of this guide covers it in depth.
See docs/CONTROL_REFERENCE.md for the full reference.
The reference is auto-generated from
quill/core/help/topics.json. To regenerate it after adding
new topics:
python -m quill.tools.build_docsAppendix: QUILL Developer Console
Folded in from the former docs/userguide.md on 2026-06-13.
QUILL Developer Console (QDC) documentation
Consolidated on 2026-06-13 from qdc-tutorial and “QUILL Developer Console and Automation”. The scripting contract (docs/quillins.md) remains a standalone document because code references it by section number.
Status note (2026-06-13, supersedes the per-section “Planned for 1.1” lines below). The QDC is implemented and reachable in 0.5.0 under the Developer and Power Text and Full QUILL profiles (Tools > Advanced > Developer Console). The Python console and the
qscripting API are wired (quill/core/scripting.py,quill/ui/main_frame_devtools.py), including the facadesq.selection,q.doc,q.editor,q.settings,q.profile,q.bookmarks,q.quillins,q.macros(+q.begin_macro/q.end_macro),q.spell,q.diagnostics, plusq.a11y/q.commands/q.focus/q.supportandq.describe_command. The TypeScript console runs through a Node subprocess. Sections below that still say “Planned for 1.1” predate this and are being reconciled; treat this note as the current status. (Tracked indocs/planning.mdPart 2 / map item P1-3.)
QUILL Developer Console Tutorial
Status: Implemented in 0.5.0 (Developer and Power
Text / Full QUILL profiles; Tools > Advanced > Developer Console).
The Python console and the q scripting API are wired; the
TypeScript console runs via a Node subprocess. See the status note at
the top of this document for the exact q surface. (Some
passages below were written against the original 1.1 plan and may
describe a richer API than the current build; the status note is
authoritative.)
What the QDC is
The QUILL Developer Console (QDC) is an embedded scripting surface for developers, power users, and accessibility professionals. It lets you inspect and automate the running editor without rebuilding or adding temporary menu items.
The QDC is not for ordinary users. It is profile-gated and off by default for Essential, Writer, and Reader profiles. It appears as a first-class feature for Developer and Power Text profiles.
There are two consoles:
- Python console — runs in-process. Full access to
the scripting API via
q. Prompt:>>>(continuation...). - TypeScript console — runs through a Node subprocess
bridge. Async API via
quill. Prompt:ts>(async pendingts*>).
Both are read through the same transcript window and announced through QUILL’s standard accessibility announcement path.
Opening the console
Menu:
Tools > Advanced > Developer Console > Open Python Console
or Open TypeScript Console.
Command palette: quill.console.openPython /
quill.console.openTypeScript.
The console opens as a separate dialog. Press Esc to
return focus to the editor. The dialog stays open and preserves its
namespace until you explicitly close it.
Console layout
The console has five areas, navigable with F6:
- Transcript — read-only. Shows prompts, output, errors, and return values.
- Input — single-line by default;
Shift+Enteradds a newline for multi-line blocks. - Language selector — switch between Python and TypeScript.
- Status line — current language, prompt state, active document, worker status.
- Buttons — Run, Clear, Copy transcript, Save transcript, Insert snippet, Help, Close.
Keyboard reference
| Key | Action |
|---|---|
| Enter | Execute current command |
| Shift+Enter | Insert newline (multi-line input) |
| Ctrl+Enter | Force execute multi-line block |
| Up / Down | Previous / next history (when cursor is at line boundary) |
| Ctrl+L | Clear transcript |
| Ctrl+Shift+C | Copy transcript |
| Ctrl+S | Save transcript |
| Ctrl+F | Find in transcript |
| F6 | Move between transcript, input, status, and buttons |
| Esc | Return focus to editor |
| F1 | Console help |
| Ctrl+Space | Trigger completion |
Python console
Available names
The following names are in scope when the console opens:
| Name | What it is |
|---|---|
q |
Primary QUILL scripting API — start here |
app |
Application-level read-mostly object |
commands |
Command registry facade |
doc |
Active document snapshot |
editor |
Active editor snapshot |
sel |
Current selection snapshot |
caret |
Current caret snapshot |
profile |
Active feature profile snapshot |
settings |
Safe settings facade |
diagnostics |
Diagnostics facade |
a11y |
Announcement / testing facade |
log |
Console-safe logger |
wx |
wx module (Developer profile only) |
doc, sel, and caret are
read-only snapshots of state at the time they were captured. They do not
update automatically. Call q.refresh_context() to pull
current state, or they update automatically when the active document
changes.
Basic operations
Insert text at the cursor:
>>> q.insert_text("Hello from QUILL.")Replace the current selection:
>>> q.replace_selection("Replacement text")Jump to a line:
>>> q.goto_line(42)Run a built-in command by ID:
>>> q.run_command("quill.document.wordCount")Send a screen-reader announcement:
>>> q.a11y.announce("Test announcement.")Inspecting state
Read the active document name:
>>> doc.name
'notes.txt'Read the current selection:
>>> sel.text
'selected words here'Read the caret position (1-based line and column):
>>> caret.line, caret.column
(12, 5)Search for commands by keyword:
>>> commands.search("spell")
['quill.spell.check', 'quill.spell.addWord', 'quill.spell.nextError']Get a diagnostic summary (useful for support tickets):
>>> q.support.diagnostic_summary()Accessibility diagnostics
Read the last screen-reader announcements:
>>> q.a11y.last_announcements()
['Title Case applied', '5 words selected']Describe the currently focused region:
>>> q.focus.describe()
'Editor: notes.txt, line 12, col 5, no selection'Multi-line blocks
Use Shift+Enter to add newlines, then Enter
or Ctrl+Enter to execute:
>>> def count_words(text):
... return len(text.split())
...
>>> count_words(doc.text)
487Macro recording
Record a sequence of commands as a reusable macro:
>>> q.begin_macro("Clean OCR text")
>>> q.run_command("quill.text.normalizeUnicode")
>>> q.run_command("quill.text.dehyphenateLines")
>>> q.run_command("quill.text.reflowParagraphs")
>>> q.end_macro()
Macro saved: "Clean OCR text"TypeScript console
The TypeScript console requires Node.js on PATH. If Node.js is not found, QUILL announces the requirement and offers installation assistance.
TypeScript prompt behavior
ts> await quill.insertText("Hello.");
ts*>
Result: undefined
ts> is the ready prompt. ts*> means
an async operation is in flight. Results and errors appear in the
transcript automatically.
Available globals
| Global | What it is |
|---|---|
quill |
Async QUILL scripting proxy |
console |
Captured: .log(), .warn(),
.error() appear in transcript |
setTimeout / clearTimeout |
Standard timer |
AbortController |
For cancellable operations |
Basic operations
Insert text:
ts> await quill.insertText("Hello from TypeScript.");Replace selection:
ts> await quill.replaceSelection("Replacement text");Jump to a line:
ts> await quill.gotoLine(42);Run a built-in command:
ts> await quill.runCommand("quill.markdown.normalizeHeadings");Inspecting state
ts> const doc = await quill.activeDocument();
ts> console.log(doc.name);
notes.txtts> const stats = await quill.documentStats();
ts> console.log(`${stats.words} words, ${stats.lines} lines`);
487 words, 38 linesMulti-line TypeScript
Use Shift+Enter to enter a multi-line block,
Ctrl+Enter to execute:
ts> const text = await quill.getText();
ts> const words = text.trim().split(/\s+/).filter(Boolean);
ts> await quill.announce(`${words.length} words`);TypeScript type definitions
QUILL ships quill-console.d.ts. If you have Node.js and
an IDE, copy it into your project to get completion:
// quill is typed as:
interface QuillConsoleApi {
insertText(text: string): Promise<void>;
replaceSelection(text: string): Promise<void>;
gotoLine(line: number): Promise<void>;
runCommand(commandId: string, args?: Record<string, unknown>): Promise<unknown>;
activeDocument(): Promise<QuillDocumentSnapshot>;
documentStats(): Promise<QuillDocumentStats>;
announce(text: string): Promise<void>;
}Screen-reader notes
- New output in the transcript is announced without stealing focus.
- Errors are announced with the prefix “Error”.
- Return values are announced with the prefix “Result”.
- Long output is summarized in the announcement; review the transcript with your screen reader for the full text.
Ctrl+Shift+Ccopies the transcript at any time.- The console uses QUILL’s central Prism announcement path — the same one used by all other QUILL announcements.
- No custom-drawn controls are used.
Console safety settings
Tools > Advanced > Developer Console > Console Safety Settings
or command quill.console.openSafetySettings.
Settings:
| Setting | Default | Notes |
|---|---|---|
| Python console enabled | Profile-dependent | Off for Essential / Writer |
| TypeScript console enabled | Profile-dependent | Off except Developer profile |
| Require developer profile | On | Prevents accidental access in Writer profiles |
| Max execution time (Python) | 30 s | Hard kill after timeout |
| Max execution time (TypeScript) | 30 s | Worker restart after timeout |
Allow wx module access |
Developer profile only | Not available in any other profile |
| Remote console | Locked off | Not available in QUILL 1.x |
Transcript commands
| Command | What it does |
|---|---|
quill.console.copyTranscript |
Copy entire transcript to clipboard |
quill.console.saveTranscript |
Save transcript to a file |
quill.console.clear |
Clear the transcript |
quill.console.saveInputAsSnippet |
Save the current input as a named snippet |
quill.console.insertSnippet |
Insert a saved snippet into input |
quill.console.runSelection |
Run selected text in the transcript as a command |
quill.console.runCurrentDocument |
Run the active QUILL document as a script |
quill.console.showContext |
Print current snapshot values to transcript |
quill.console.resetNamespace |
Reset the Python namespace (clears all variables) |
quill.console.restartTypeScriptWorker |
Kill and restart the Node worker |
For Quillin authors: testing your extension in the QDC
The QDC is a useful live test surface for Quillin development. Open the Python console while your Quillin is loaded and explore its manifest and command registry entry:
>>> from quill.core.quillins.loader import get_loader
>>> loader = get_loader()
>>> ext = loader.get_extension("com.example.myextension")
>>> ext.manifest
ExtensionManifest(id='com.example.myextension', runtime='python', ...)
>>> ext.manifest.contributes.commands
(ExtensionCommand(id='ext.myext.run', title='My Command', ...),)Invoke a command directly through the command registry:
>>> q.run_command("ext.myext.run")Inspect what a command announced:
>>> q.a11y.last_announcements()
['My command completed: 3 items processed']For Node.js Quillins, the TypeScript console is the natural test surface:
ts> await quill.runCommand("ext.myext.nodeHandler");
ts> // Check the last announcement
ts> const ann = await quill.lastAnnouncement();
ts> console.log(ann);Implementation status (0.5.0)
The QDC is implemented and reachable under the Developer and Power Text and Full QUILL profiles (Tools > Advanced > Developer Console). Shipped today:
- The Python console and console window
(
quill/devtools/python_console.py,quill/devtools/console_window.py) wired throughquill/ui/main_frame_devtools.py. - The TypeScript console via a Node subprocess
(
quill/devtools/ts_console.py,quill/tools/ts_worker/worker.js). - The
qscripting API (quill/core/scripting.py): the text/navigation/command methods plus the facadesq.selection,q.doc,q.editor,q.settings,q.profile,q.bookmarks,q.quillins,q.macros(+q.begin_macro/q.end_macro),q.spell,q.diagnostics, andq.a11y/q.commands/q.focus/q.support, plusq.describe_command.
The scripting contract and its Implementation Status map live in
docs/quillins.md. Any passage above that still reads as
“planned” predates this build; the status note at the top of this
document is authoritative.
QUILL Developer Console and Automation API PRD
Feature name
QUILL Developer Console and Automation API
Status
Proposed for QUILL 1.1, with the Python console eligible for a 1.0 experimental/dev-preview flag if the command registry and announcement infrastructure are stable enough.
Owner
Blind Information Technology Solutions (BITS) and Community Access
Target platform
Windows 10 and Windows 11
Target users
- QUILL developers
- QUILL power users
- Accessibility professionals
- Blind programmers and technical writers
- Macro authors
- Support/debugging users working with BITS or Community Access staff
- Future Quillins/plugin developers
1. Vision
QUILL should provide a screen-reader-first developer console that lets trusted users inspect and manipulate the running editor through a stable automation API.
The console is not an afterthought, a hidden debug hack, or a generic unsafe scripting surface. It is a first-class, accessible automation layer that exposes QUILL’s command system, document model, editor state, diagnostics, and accessibility announcement pipeline in a predictable way.
The goal is to let a developer or power user type commands such as:
q.insert_text("Hello from QUILL.")
q.goto_line(42)
q.run_command("quill.document.wordCount")
q.run_command("quill.markdown.normalizeHeadings")or, in TypeScript:
await quill.insertText("Hello from TypeScript.");
await quill.gotoLine(42);
const stats = await quill.documentStats();
console.log(stats.words);Every editor-changing action must go through the QUILL command registry or official scripting API so undo, dirty-state tracking, accessibility announcements, status bar updates, telemetry, and tests remain consistent.
2. Problem statement
QUILL is becoming a rich writing and document environment with commands, macros, Quillins, profiles, diagnostics, document intake, spell checking, format conversion, and accessibility-aware UI behavior.
Without a developer console and automation API:
- Developers must debug by adding temporary logging or breakpoints.
- Support staff cannot easily inspect user state during troubleshooting.
- Power users cannot automate repetitive editor actions.
- Macro support risks becoming a separate one-off system instead of using the same command architecture as the rest of QUILL.
- Future Quillins may lack a simple interactive testing surface.
- Accessibility professionals cannot quickly inspect document state, selection state, command availability, profile gating, or announcement behavior.
QUILL needs an embedded, accessible command line for trusted local development and automation.
3. Goals
- Provide an accessible Python console inside the running QUILL app.
- Provide a TypeScript automation console through a controlled Node subprocess bridge.
- Expose a stable
q/quillscripting object instead of raw internal objects. - Route all mutations through the command registry or official scripting API.
- Preserve undo/redo, dirty-state tracking, backups, status bar updates, and screen-reader announcements.
- Make console results easy to review with NVDA, JAWS, Narrator, braille displays, and keyboard-only workflows.
- Support command history, multi-line input, copy/paste, saved snippets, and transcript export.
- Gate the feature behind profiles and explicit settings so it does not surprise ordinary users.
- Make the console useful for macro development, plugin development, support diagnostics, and test automation.
- Never enable remote execution by default.
4. Non-goals
- QUILL will not provide a public remote execution service in v1.
- QUILL will not allow untrusted scripts to run silently.
- QUILL will not expose arbitrary internal object mutation as the recommended workflow.
- QUILL will not make Python or TypeScript scripting required for normal use.
- QUILL will not replace a full IDE, debugger, or terminal.
- QUILL will not guarantee sandbox security for arbitrary malicious code in the local Python console.
- QUILL will not let scripts bypass document protection, source-file safety, cloud-consent prompts, or profile safety rules.
5. User stories
5.1 Developer
As a QUILL developer, I want to open a console, inspect the active document, run commands, and test editor behavior without rebuilding or adding temporary menu items.
Example:
q.doc.name
q.selection.text
q.goto_line(100)
q.run_command("quill.find.next")5.2 Accessibility tester
As an accessibility tester, I want to inspect the focused region, active command, current screen-reader announcement backend, and the last announcements so I can diagnose what a user experienced.
Example:
q.a11y.last_announcements()
q.a11y.announce("Testing announcement path.")
q.focus.describe()5.3 Macro author
As a power user, I want to experiment with commands interactively and save successful sequences as a macro.
Example:
q.begin_macro("Clean OCR text")
q.run_command("quill.text.normalizeUnicode")
q.run_command("quill.text.dehyphenateLines")
q.run_command("quill.text.reflowParagraphs")
q.end_macro()5.4 Support technician
As a support technician, I want a user to run a safe diagnostic command and copy the output into an email or support ticket.
Example:
q.support.diagnostic_summary()5.5 TypeScript user
As a developer more comfortable with TypeScript, I want to run async commands against QUILL using a typed API and receive clear errors.
Example:
const doc = await quill.activeDocument();
await quill.gotoLine(25);
console.log(doc.name);6. Feature placement
The feature appears in the following command surfaces:
Tools menu
Tools > Authoring and Automation > Developer Console
Submenu items:
- Open Python Console
- Open TypeScript Console
- Open Console Transcript
- Save Current Console as Macro
- Manage Console Snippets
- Console Safety Settings
- Copy Diagnostic Summary
Command palette
Commands:
quill.console.openPythonquill.console.openTypeScriptquill.console.clearquill.console.copyTranscriptquill.console.saveTranscriptquill.console.saveInputAsSnippetquill.console.insertSnippetquill.console.runSelectionquill.console.runCurrentDocumentquill.console.showContextquill.console.resetNamespacequill.console.restartTypeScriptWorkerquill.console.openSafetySettings
Feature profiles
Default visibility:
| Profile | Python console | TypeScript console | Macro recording | Remote console |
|---|---|---|---|---|
| Essential | Off | Off | Off | Locked off |
| Writer | Quiet | Off | Quiet | Locked off |
| Reader and Student | Off | Off | Off | Locked off |
| Office and Admin | Quiet | Off | Quiet | Locked off |
| Accessibility Professional | On | Quiet | On | Locked off |
| Developer and Power Text | On | On | On | Locked off |
| Braille and Screen Reader Power User | Quiet | Quiet | On | Locked off |
| Full Quill | On | On | On | Locked off |
Remote execution remains unavailable unless an experimental developer build explicitly enables it.
7. UX requirements
7.1 Console window layout
The console is a standard wx dialog or frame using stock controls.
Required controls:
Transcript output
- Read-only multi-line
wx.TextCtrl - Receives command output, errors, return values, announcements, and command prompts
- Supports select all, copy, find, and save transcript
- Read-only multi-line
Command input
- Editable
wx.TextCtrl - Single-line by default
- Multi-line mode available with a toggle or
Shift+Enter - Enter runs the current command when the command is complete
- Editable
Language selector
- Python
- TypeScript
- Future: command-only mode
Status line
- Shows current language, prompt state, active document, and worker status
Buttons
- Run
- Clear
- Copy transcript
- Save transcript
- Insert snippet
- Help
- Close
7.2 Keyboard behavior
Required shortcuts:
| Shortcut | Action |
|---|---|
| Enter | Execute current command |
| Shift+Enter | Insert newline in multi-line input |
| Ctrl+Enter | Force execute multi-line command |
| Up/Down | Previous/next command history when input cursor is at boundary |
| Ctrl+L | Clear transcript |
| Ctrl+Shift+C | Copy transcript |
| Ctrl+S | Save transcript |
| Ctrl+F | Find in transcript |
| F6 | Move between transcript, input, status, and buttons |
| Esc | Return focus to editor if console is non-modal; close if modal confirmation is not needed |
| F1 | Open console help |
| Ctrl+Space | Trigger completion if available |
| Tab | Insert indentation in multi-line mode or move focus depending on setting |
7.3 Screen-reader behavior
The console must be fully usable with NVDA, JAWS, and Narrator.
Requirements:
- Every control has a clear accessible name.
- The transcript announces new output without stealing focus.
- Errors are announced with the prefix “Error”.
- Return values are announced with the prefix “Result”.
- Long output is not automatically spoken in full; the console announces a summary and lets the user review the transcript.
- The console supports a “copy last result” command.
- The console supports a “speak last result” command.
- The console uses QUILL’s central announcement path.
- Braille users can review the transcript as plain text.
- No custom drawn controls are allowed in the primary console workflow.
7.4 Prompt behavior
Python prompt:
>>>
Continuation prompt:
...
TypeScript prompt:
ts>
Async TypeScript pending prompt:
ts*>
The prompt itself is included in the transcript but not required in copied code unless the user chooses “Copy with prompts”.
8. Python console requirements
8.1 Execution model
The Python console runs in-process and uses Python’s embedded interpreter facilities.
The console maintains a persistent namespace for the session. Hiding the console does not destroy the namespace unless the user explicitly resets it.
8.2 Default namespace
The following names are available by default:
q # Primary QUILL scripting API
app # Application-level read-mostly object
frame # Main frame, available for debugging
commands # Command registry read/execute facade
doc # Active document snapshot
editor # Active editor snapshot
sel # Current selection snapshot
caret # Current caret snapshot
profile # Active feature profile snapshot
settings # Safe settings facade
diagnostics # Diagnostics facade
a11y # Announcement/testing facade
log # Console-safe logger
wx # wx module, developer profile only8.3 Snapshot refresh
The console updates snapshot variables when:
- The console opens.
- The active document changes.
- The user runs
q.refresh_context(). - A command changes editor state.
- The user chooses “Refresh Console Context”.
Snapshot variables such as doc, sel, and
caret are safe read-only snapshots unless explicitly
documented otherwise.
8.4 Python examples
q.insert_text("Hello from QUILL.")q.replace_selection("Replacement text")q.goto_line(42)q.run_command("quill.document.wordCount")q.a11y.announce("This is a test announcement.")q.diagnostics.document_summary()q.commands.search("spell")9. TypeScript console requirements
9.1 Execution model
The TypeScript console runs out-of-process through a Node worker.
Python QUILL process:
- Owns the editor, document model, command registry, and UI thread.
- Sends TypeScript code to the Node worker.
- Receives JSON-RPC-style command requests from the worker.
- Executes approved commands on the wx main thread.
- Returns structured results or errors.
Node TypeScript worker:
- Receives TypeScript code.
- Transpiles it to JavaScript.
- Executes it with a limited
quillproxy object. - Sends editor actions back to Python as structured requests.
- Captures
console.log, warnings, errors, and return values.
9.2 TypeScript global API
The TypeScript console exposes:
quill
console
setTimeout
clearTimeout
AbortControllerThe TypeScript worker must not expose unrestricted filesystem, network, process, or shell access through the default console environment.
9.3 TypeScript examples
await quill.insertText("Hello from TypeScript.");await quill.replaceSelection("Replacement text");await quill.gotoLine(42);const stats = await quill.documentStats();
console.log(`${stats.words} words`);await quill.runCommand("quill.markdown.normalizeHeadings");9.4 Type definitions
QUILL ships a quill-console.d.ts type definition file so
TypeScript users get completion and documentation.
Example:
interface QuillConsoleApi {
insertText(text: string): Promise<void>;
replaceSelection(text: string): Promise<void>;
gotoLine(line: number): Promise<void>;
runCommand(commandId: string, args?: Record<string, unknown>): Promise<unknown>;
activeDocument(): Promise<QuillDocumentSnapshot>;
documentStats(): Promise<QuillDocumentStats>;
announce(text: string, options?: AnnouncementOptions): Promise<void>;
}9.5 Worker lifecycle
The TypeScript worker starts only when the TypeScript console is opened.
The worker stops when:
- QUILL exits.
- The user closes the console and worker idle timeout expires.
- The user chooses “Restart TypeScript Worker”.
- The worker exceeds memory or time limits.
- The worker crashes.
Worker crashes must not crash QUILL.
10. QUILL scripting API
10.1 API principles
The scripting API is the official automation surface.
Rules:
- Mutations go through the command registry.
- Undo/redo must work.
- Dirty state must update.
- Status bar must update.
- Screen-reader announcements must happen.
- Profile and feature gates must be respected.
- Cloud/network actions must still ask for consent.
- Protected originals must stay protected.
- Commands must return structured results.
- Errors must be plain-language first, traceback second.
10.2 Python API shape
class QuillScriptAPI:
def insert_text(self, text: str) -> None: ...
def replace_selection(self, text: str) -> None: ...
def selected_text(self) -> str: ...
def document_text(self) -> str: ...
def set_document_text(self, text: str) -> None: ...
def goto_line(self, line: int) -> None: ...
def goto_offset(self, offset: int) -> None: ...
def run_command(self, command_id: str, **kwargs): ...
def command_exists(self, command_id: str) -> bool: ...
def list_commands(self, query: str | None = None) -> list[CommandInfo]: ...
def active_document(self) -> DocumentSnapshot: ...
def document_stats(self) -> DocumentStats: ...
def refresh_context(self) -> None: ...10.3 TypeScript API shape
interface QuillApi {
insertText(text: string): Promise<void>;
replaceSelection(text: string): Promise<void>;
selectedText(): Promise<string>;
documentText(): Promise<string>;
setDocumentText(text: string): Promise<void>;
gotoLine(line: number): Promise<void>;
gotoOffset(offset: number): Promise<void>;
runCommand(commandId: string, args?: Record<string, unknown>): Promise<unknown>;
commandExists(commandId: string): Promise<boolean>;
listCommands(query?: string): Promise<CommandInfo[]>;
activeDocument(): Promise<DocumentSnapshot>;
documentStats(): Promise<DocumentStats>;
refreshContext(): Promise<void>;
}10.4 Safe facades
The console exposes safe facades instead of raw internals wherever possible.
Required facades:
q.documentsq.editorq.selectionq.commandsq.bookmarksq.searchq.spellq.markdownq.textq.a11yq.diagnosticsq.profileq.settingsq.supportq.macrosq.quillins
11. Command registry integration
Every console-callable command must declare metadata:
Command(
id="quill.editor.insertText",
title="Insert Text",
description="Insert text at the current caret position.",
handler=insert_text_handler,
default_key=None,
when="editorFocus",
scriptable=True,
mutates_document=True,
undo_group="typing",
requires_consent=False,
profile_feature="developer.console",
)Required metadata fields for scriptable commands:
idtitledescriptionscriptablemutates_documentundo_grouprequires_consentprofile_featureprivacy_labelnetwork_labelreturn_schemaargument_schema
The console refuses to run commands marked
scriptable=False unless developer unsafe mode is
enabled.
12. Macro integration
The console is the fastest path to creating and testing macros.
Requirements:
- Users can save selected console history as a macro.
- Macros are stored as command sequences by default, not arbitrary Python code.
- Python macros are developer-profile-only.
- TypeScript macros are developer-profile-only.
- Command-sequence macros are allowed in more profiles.
- Macro execution shows a preview when it will modify the document.
- Macro execution is one undo group unless the macro author explicitly splits undo groups.
- Macro failures stop execution and announce the failed step.
Example command-sequence macro:
{
"name": "Clean OCR text",
"steps": [
{"command": "quill.text.normalizeUnicode"},
{"command": "quill.text.dehyphenateLines"},
{"command": "quill.text.reflowParagraphs"}
]
}13. Security and safety
13.1 Local trust model
The Python console is trusted local code execution.
QUILL must clearly warn users:
The Developer Console can run code inside QUILL.
Only run commands you understand or received from a trusted source.
This warning appears:
- The first time the console opens.
- When enabling the feature from Settings.
- When pasting multi-line code from the clipboard.
- When attempting to enable unsafe developer mode.
13.2 Remote execution
Remote execution is locked off by default.
Requirements:
- No listening socket in stable builds.
- No hidden remote console.
- No command-line flag that silently enables remote execution.
- Experimental remote console, if ever added, must bind to localhost only by default.
- Remote console must require an explicit one-time token.
- Remote console must show a persistent status bar warning.
- Remote console must auto-disable on restart unless the user explicitly chooses otherwise.
13.3 Dangerous operations
The console must prompt or block for:
- Running shell commands
- Reading arbitrary files outside allowed locations
- Writing arbitrary files outside QUILL-controlled flows
- Sending document content to network services
- Installing Quillins
- Changing profile safety rules
- Disabling backups or crash recovery
- Accessing protected source documents
- Running pasted multi-line code
13.4 TypeScript worker limits
Default limits:
| Limit | Default |
|---|---|
| Execution timeout | 30 seconds |
| Idle timeout | 10 minutes |
| Memory warning | 256 MB |
| Memory hard limit | 512 MB |
| Output flood threshold | 100 KB |
| Max transcript size | 5 MB before rotation prompt |
Long-running TypeScript scripts must support cancellation.
14. Accessibility requirements
The console must pass QUILL’s normal accessibility gates.
Required tests:
- NVDA reads console controls correctly.
- JAWS reads console controls correctly.
- Narrator reads console controls correctly.
- F6 cycles through console regions.
- Escape behavior is predictable.
- New output does not steal focus.
- Long output is summarized.
- Errors are reviewable character-by-character.
- Braille display review works through the transcript control.
- High contrast mode remains readable.
- Large font mode does not clip prompts or buttons.
- Keyboard-only users can run, copy, save, clear, and close.
- No console action traps focus.
15. Error handling
Errors appear in three layers:
- Plain-language summary
- Actionable suggestion
- Technical details, expandable or copyable
Example:
Error: Unknown command "quill.markdown.fixHeading".
Suggestion: Run q.commands.search("heading") to find matching commands.
Details: CommandNotFoundError: quill.markdown.fixHeading
Python tracebacks are available but collapsed behind “Show technical details” unless the active profile is Developer and Power Text.
TypeScript stack traces are captured and mapped to the user’s submitted code when possible.
16. Logging and transcripts
The console keeps a local transcript of:
- Commands entered
- Results
- Errors
- Warnings
- Announcements triggered by console commands
- Worker lifecycle events
- Macro recording markers
Privacy requirements:
- Transcripts are not sent anywhere automatically.
- Document text is included only when commands print or return it.
- “Copy diagnostic summary” redacts document content by default.
- Users can save transcripts manually.
- Support packages ask before including transcript content.
17. Settings
Settings page:
Settings > Developer Console and Automation
Settings:
- Enable Developer Console
- Enable Python Console
- Enable TypeScript Console
- Show first-run safety warning again
- Require confirmation before pasted multi-line execution
- Require confirmation before document-wide mutation
- Allow script access to raw wx objects
- Allow shell commands
- Allow filesystem access
- TypeScript worker path
- TypeScript worker timeout
- Transcript retention
- History retention
- Clear history on exit
- Enable completions
- Enable result announcements
- Output verbosity: concise, normal, verbose
- Unsafe developer mode
Dangerous settings are available only in Developer and Power Text or Full Quill profiles.
18. Data storage
Suggested files:
%APPDATA%\Quill\console\
history.jsonl
snippets.json
transcripts\
types\
quill-console.d.ts
ts-worker\
worker.js
Portable mode stores the same structure next to the portable QUILL configuration directory.
History entries contain:
{
"timestamp": "2026-06-10T00:00:00Z",
"language": "python",
"input": "q.document_stats()",
"success": true
}History must not store command output by default.
19. Technical architecture
19.1 New modules
quill/
core/
scripting.py Official QuillScriptAPI facade
script_context.py Active console context snapshots
script_permissions.py Console permission checks
script_results.py Structured result and error models
devtools/
console_window.py wx console UI
python_console.py Embedded Python console
ts_console.py Python-side TypeScript bridge
ts_worker_protocol.py JSON-RPC message schema
completions.py Completion provider
history.py Console history manager
snippets.py Snippet manager
transcripts.py Transcript manager
tools/
ts_worker/
worker.ts TypeScript worker source
worker.js Built worker
quill-console.d.ts Type definitions
19.2 Threading model
Rules:
- UI mutations must run on the wx main thread.
- Console input handling may occur in the UI thread only for quick commands.
- Long commands must run as background tasks.
- TypeScript worker communication runs asynchronously.
- Results are marshaled back to the UI through QUILL’s event queue or
wx.CallAfter. - Command cancellation must be supported for long-running tasks.
19.3 Command execution flow
User enters command
↓
Console parser receives input
↓
Python console or TypeScript worker executes code
↓
Code calls q / quill API
↓
API validates permission, profile, and command metadata
↓
Command registry executes command
↓
Document/editor/status/a11y systems update
↓
Structured result returns to console
↓
Transcript updates and concise result is announced
20. Completion and help
The console should provide discoverability without requiring users to memorize APIs.
Completion sources:
qmethods- command ids
- active document properties
- macro names
- snippet names
- settings keys
- feature ids
Help commands:
q.help()
q.help("insert_text")
q.commands.search("bookmark")
q.describe_command("quill.editor.gotoLine")
q.examples("markdown")TypeScript equivalents:
await quill.help();
await quill.commands.search("bookmark");
await quill.describeCommand("quill.editor.gotoLine");21. Testing strategy
21.1 Unit tests
QuillScriptAPI.insert_textroutes through command registry.replace_selectioncreates one undoable operation.goto_linerejects invalid line numbers with plain-language errors.run_commandrefuses non-scriptable commands.- Profile gates hide or reject console commands properly.
- Permission checks block dangerous operations.
- Snapshot refresh updates document, selection, and caret state.
- TypeScript protocol serializes and deserializes results correctly.
- Worker crash returns a structured error.
21.2 Integration tests
- Open Python console, run
q.insert_text, verify document changes. - Run document-wide command, verify undo restores prior state.
- Run command that announces result, verify announcement transcript.
- Open TypeScript console, run
await quill.insertText(...). - Restart TypeScript worker and verify QUILL stays alive.
- Save console history as macro and run macro.
- Copy diagnostic summary and verify redaction.
- Paste multi-line code and verify confirmation prompt.
21.3 Accessibility tests
- NVDA reads transcript and input controls.
- JAWS reads transcript and input controls.
- Narrator reads transcript and input controls.
- F6 region cycling works.
- Escape returns focus predictably.
- High contrast and large fonts work.
- Long output does not cause speech flood.
- Error details are reachable and copyable.
21.4 Security tests
- Remote execution is not listening in stable builds.
- TypeScript worker cannot directly access unrestricted shell by default.
- Console cannot bypass network consent.
- Console cannot silently overwrite protected source documents.
- Pasted multi-line execution triggers confirmation.
- Unsafe developer mode cannot be enabled by imported profile alone.
22. Success criteria
The feature is successful when:
- A developer can open the Python console and inspect/manipulate the
active document through
q. - A TypeScript user can run async editor commands through
quill. - All document mutations are undoable.
- Screen-reader users can operate the console without custom scripts.
- Console commands respect profile, permission, and consent rules.
- Long or failed commands do not crash QUILL.
- TypeScript worker crashes do not crash QUILL.
- Support diagnostics can be copied without leaking document content by default.
- Macro creation can reuse console command history.
- CI covers unit, integration, accessibility, and safety behavior.
23. MVP scope
MVP: Python Developer Console
Included:
- Python console window
qscripting API- Command registry execution
- Transcript output
- History
- Clear/copy/save transcript
- Basic completions
- Plain-language errors
- First-run safety warning
- Profile gating
- Undo-aware document mutations
- Accessibility tests with NVDA
Not included in MVP:
- TypeScript console
- Macro recording from history
- Advanced snippets
- Remote execution
- Raw wx unsafe mode
- Plugin authoring APIs
MVP+1: TypeScript Console
Included:
- Node worker bridge
- TypeScript transpilation
quillasync proxy- Type definitions
- Worker restart
- Worker timeout and memory limits
- Console output capture
- TypeScript examples
MVP+2: Macro and Quillin authoring
Included:
- Save console history as macro
- Snippet manager
- Quillin test harness
- Command-sequence macro editor
- Console-based plugin diagnostics
24. Open questions
- Should Python console be included in QUILL 1.0 as hidden experimental functionality?
- Should the console be modal, non-modal, or dockable?
- Should command history persist by default or require opt-in?
- Should TypeScript support be bundled or require Node detection?
- Should a minimal embedded JS engine be considered later for users who do not have Node?
- Should console snippets sync with macros, or remain separate?
- Should support technicians have a restricted “diagnostics-only console” mode?
- Should unsafe developer mode require a launch flag in addition to a setting?
- Should QUILL ship sample scripts for OCR cleanup, Markdown repair, and diagnostics?
- Should console transcript export support Markdown, plain text, and JSON?
25. Example first-run warning
Developer Console
This console can run commands inside QUILL and may change the current document.
Only run commands you understand or received from a trusted source.
Recommended:
- Use q.run_command(...) or documented q methods.
- Do not paste code from unknown sources.
- Save your document before running document-wide commands.
[Open Console] [Cancel] [Learn More]
26. Example diagnostic summary command
Python:
q.support.diagnostic_summary()Output:
QUILL diagnostic summary
Version: 1.1.0-dev
Profile: Developer and Power Text
Active document: chapter-7.md
Modified: yes
Documents open: 3
Screen reader detected: NVDA
Announcement backend: auto
Python console: enabled
TypeScript console: available
Last command: quill.editor.gotoLine
Last error: none
Document content included: no
27. Definition of done
This feature is done when:
- The Python console is fully keyboard accessible.
- The Python console exposes the official
qscripting API. - TypeScript console runs through a subprocess bridge and cannot crash QUILL.
- All editor mutations go through the command registry or scripting API.
- Undo/redo, dirty-state, status bar, and accessibility announcements remain correct after console-driven changes.
- Profile gating and safety settings work.
- First-run safety warnings are present.
- Console history, transcript copy, and transcript save work.
- Dangerous actions require confirmation or are blocked.
- Automated tests cover command execution, accessibility, worker failure, permissions, and undo behavior.
- User documentation explains examples, risks, and safe patterns.
Appendix: Skills tutorial
Folded in from the former docs/userguide.md on 2026-06-13.
Writing Skills for QUILL — A Tutorial
This guide teaches you to write, validate, and share
.sqp (Skill Quill Pack) files. A skill is a multi-step AI
workflow written in plain Markdown. If you can write a prompt, you can
write a skill.
1. What is a skill?
A QUILL prompt is one instruction. A skill is a conversation — a series of instructions where each step can see what the previous step produced.
You might use a skill when:
- You want to analyse your text first, then act on the analysis.
- You want to gather information in one step and draft with it in the next.
- You want to check a condition (is this a question or a statement?) and take a different path depending on the answer.
- You want to repeat the same sub-task at a higher quality by giving the model context it built in an earlier step.
2. Your first skill
Create a file called my-first-skill.sqp and open it in
QUILL.
---
schema: quill.skill/1
name: Explain Then Simplify
description: Explains the selected text in plain terms, then simplifies it further.
author: Your Name
version: 1.0.0
---
# Step 1: Explain
Explain the following text as if the reader has no prior knowledge. Use simple
vocabulary and short sentences. Aim for 50-80 words.
Text to explain:
{selection}
# Step 2: Simplify further
The explanation below is good, but we need it even simpler. Rewrite it so a
twelve-year-old would understand it immediately. Keep the core meaning.
Explanation to simplify:
{step1.output}
```output
format: text
label: Plain-language explanation
accept_into: clipboard
Save the file, then validate it:
```powershell
python -m quill.tools.sqp_validator my-first-skill.sqp
You should see:
my-first-skill.sqp: OK
3. Adding parameters
Parameters let users choose options before the skill runs. QUILL shows a small dialog collecting the choices before step 1 begins.
Add a reading-level choice to the skill above:
---
schema: quill.skill/1
name: Explain Then Simplify
description: Explains and simplifies selected text at a chosen reading level.
author: Your Name
version: 1.0.0
parameters:
- name: level
label: Target reading level
type: choice
choices: [Grade 4, Grade 6, Grade 8]
default: Grade 6
---
# Step 1: Explain
Explain the following text so it is accessible at {parameters.level} reading level.
Use simple vocabulary and short sentences. Aim for 50-80 words.
Text to explain:
{selection}
# Step 2: Simplify further
Rewrite the explanation below to be even clearer. Target: {parameters.level}.
Keep the core meaning intact.
{step1.output}
```output
format: text
label: Plain-language explanation
accept_into: clipboard
Now the parameter `{parameters.level}` is available in both steps. The value
comes from the user's choice in the dialog.
**Parameter types.**
| Type | UI control | Example |
| --- | --- | --- |
| `text` | Single-line text field | A keyword or name |
| `multiline` | Multi-line text area | A block of context |
| `choice` | Drop-down list | Reading level, tone, language |
| `bool` | Checkbox | Include citations: yes/no |
| `number` | Numeric field | Word count target |
---
## 4. Using the input block
Long texts can clutter the prompt. The `input` block appends data after the
instruction text, keeping the step prose readable:
```markdown
# Step 1: Extract key claims
Read the following document and list the five most important claims it makes.
Number each claim. One sentence per claim.
```input
{document}
Without the `input` block you would write:
```markdown
# Step 1: Extract key claims
Read the following document and list the five most important claims it makes.
Number each claim. One sentence per claim.
Document:
{document}
Both are equivalent; the input block is just cleaner
when the data is long.
5. Conditional branching
Use a condition block to route execution based on a
step’s output.
# Step 1: Detect intent
Read the following text. Is it asking a question, or making a statement?
Answer with exactly one word: "question" or "statement".
```input
{selection}if: "{step1.output}" contains "question"
then: step2
else: step3
Step 2: Answer the question
Answer this question clearly and concisely: {selection}
format: text
label: Answer
accept_into: clipboard
Step 3: Expand the statement
Expand the following statement into a full paragraph with supporting detail: {selection}
format: text
label: Expanded statement
accept_into: clipboard
**How it works.** After step 1 runs, QUILL checks the condition: if the output
contains "question", it jumps to step 2. Otherwise, it jumps to step 3. Whichever
step runs last is the one that produces the output.
**Supported operators.**
| Operator | Matches when |
| --- | --- |
| `contains` | Subject contains value (case-insensitive) |
| `equals` | Subject exactly matches value (case-insensitive) |
| `starts_with` | Subject starts with value |
| `ends_with` | Subject ends with value |
| `length_gt` | Subject length > number |
| `length_lt` | Subject length < number |
| `is_empty` | Subject is blank |
---
## 6. Controlling the output
The `output` block on the last step controls what happens to the result.
```markdown
```output
format: text
label: Rewritten paragraph
accept_into: selection
**`format`:** `text` (default), `list` (AI should return a bulleted or numbered
list), `json` (AI should return valid JSON).
**`accept_into`:** What happens when the user presses Accept in the result dialog.
- `selection` — replaces the current editor selection.
- `clipboard` — copies to clipboard.
- `none` — shows read-only (default).
The `label` appears in the result dialog header so the user knows what they are
reviewing.
---
## 7. A complete example — Accessible Rewrite
Here is the bundled "Accessible Rewrite" skill in full, with commentary.
```markdown
---
schema: quill.skill/1
name: Accessible Rewrite
description: Rewrites selected text for plain-language accessibility.
author: QUILL Project
version: 1.0.0
parameters:
- name: reading_level
label: Target reading level
type: choice
choices: [Grade 6, Grade 8, Grade 10, No target]
default: Grade 8
---
# Step 1: Analyse accessibility issues
Review the following text for plain-language accessibility issues. List the
problems as a numbered list. Focus on: sentence length (over 25 words), passive
voice, unexplained jargon or acronyms, abstract nouns where concrete ones would
serve better, and complex nested clauses. Be concise — one clear problem per
line. If the text has no issues, say "No issues found."
```input
{selection}
Step 2: Rewrite for accessibility
Rewrite the text below to fix the issues identified in Step 1. Requirements:
- Target reading level: {parameters.reading_level}
- Preserve all factual content
- Do not add new information
Original text: {selection}
Issues to fix: {step1.output}
format: text
label: Rewritten text
accept_into: selection
**Step 1** analyses the text and produces a numbered list of issues.
**Step 2** uses `{step1.output}` (the issue list) as context alongside the
original text, so the model knows exactly what to fix. The output replaces the
selection when the user presses Accept.
---
## 8. Validating your skill
Always run the validator before sharing:
```powershell
python -m quill.tools.sqp_validator my-skill.sqp
For extra checks:
python -m quill.tools.sqp_validator my-skill.sqp --strict--strict also warns if description or
author are missing.
Common errors and how to fix them.
| Error | Cause | Fix |
|---|---|---|
schema must be 'quill.skill/1' |
Missing or wrong schema | Add schema: quill.skill/1 to front matter |
front matter must include 'name' |
No name: field |
Add name: My Skill |
must have at least one step |
No # Heading lines |
Add at least one # Step N: heading |
{step3.output} references a step that hasn't run yet |
Forward reference | Steps can only reference outputs from earlier steps |
unknown parameter 'tone' |
Used {parameters.tone} but didn’t declare it |
Add tone to the parameters list in front
matter |
output format 'xml' is invalid |
Bad format: value |
Use text, list, or json |
9. Sharing skills
A .sqp file is a plain text file — share it the same way
you share any document.
Via the Skill Library. When someone receives your
.sqp file, they import it through
AI > Skill Library > Import .sqp.
Via a Quillin. If you maintain a Quillin, add your
.sqp files to the Quillin directory. QUILL discovers them
automatically at Skill Library load time.
As a standalone file. A .sqp file is
self-contained. The recipient can also open it in QUILL’s editor to
read, understand, and customise every step.
10. Skill authoring tips
Keep step instructions specific. “List the five most important claims” is better than “What are the claims?” The model follows precision.
Name outputs explicitly. Instead of “Summarise the
following”, write “Write a one-sentence summary of the following text.
Return only the summary sentence, no preamble.” This ensures
{step1.output} contains exactly what you expect.
Test with short text first. Paste two or three sentences into the editor, select them, and run the skill. Short inputs are faster and errors are easier to trace.
Use input blocks for long data. If your
selection might be a full document, put {document} in an
input block rather than inline in the prompt. The step
reads more cleanly.
Put conditions after a clean-detection step. If you are branching on whether text is a question, a statement, a list, or something else, dedicate step 1 to just that classification. Ask for a single-word answer. The more constrained the output, the more reliably the condition evaluates.
Use the output block’s accept_into
intentionally. If the skill rewrites the selection, use
accept_into: selection. If it produces supplementary
content (meeting summary, outline), use
accept_into: clipboard so the user can paste where they
choose. Use none for informational skills (grammar
analysis, readability score) where the result is read but not
inserted.
Reference card
Front matter fields.
| Field | Required | Default |
|---|---|---|
schema: quill.skill/1 |
yes | — |
name: ... |
yes | — |
description: ... |
recommended | "" |
author: ... |
recommended | "" |
version: ... |
no | 1.0.0 |
parameters: [...] |
no | [] |
Variables.
| Variable | Value |
|---|---|
{selection} |
Selected editor text (full document if nothing selected) |
{document} |
Full document text |
{title} |
Document title |
{clipboard} |
Clipboard text at skill-start time |
{stepN.output} |
Output from step N (must be a lower-numbered step) |
{parameters.name} |
Value of a declared parameter |
Fenced block types.
| Block | Where | Purpose |
|---|---|---|
`input` |
Any step | Appends data to the prompt |
`condition` |
Any step | Branch to then/else step after this step
runs |
`output` |
Last step | Controls format, label, accept_into |
`use-prompt` |
Any step | Delegates to a named Prompt Library prompt |
Condition operators. contains,
equals, starts_with, ends_with,
length_gt, length_lt,
is_empty.
Output formats. text,
list, json.
Output accept_into values. selection,
clipboard, none.
Appendix: Feature notes (Copy Tray)
Folded in from the former docs/userguide.md on 2026-06-13.
Historical note: this appendix preserves the original nine-slot Copy Tray design document. Copy Tray now has twelve slots and the Open Copy Tray chord is
Ctrl+Shift+Grave, X; see the “Copy Tray” section above for current behavior and bindings.
QUILL feature documentation
Consolidated from the former docs/features/ folder on 2026-06-13. Each section preserves the original document in full.
Copy Tray
Overview
Copy Tray gives you nine independently addressable clipboard slots. Each slot holds a piece of text that you copy there explicitly. Slots survive application restarts — their contents are written to disk automatically so nothing is lost when you close and reopen QUILL.
Unlike the system clipboard, which is shared with every other application and holds only the most recently copied item, Copy Tray slots are exclusive to QUILL and hold their contents until you explicitly replace or clear them. This makes Copy Tray well suited for accumulating related fragments across a long editing session: quotes from multiple sources, code snippets, address blocks, standard disclaimers, or any text you paste repeatedly.
Keyboard Access
Paste from a slot
Hold Ctrl+Shift and press a number key. That is all.
| Key | Action |
|---|---|
Ctrl+Shift+1 |
Paste from slot 1 at cursor |
Ctrl+Shift+2 |
Paste from slot 2 at cursor |
Ctrl+Shift+3 |
Paste from slot 3 at cursor |
Ctrl+Shift+4 |
Paste from slot 4 at cursor |
Ctrl+Shift+5 |
Paste from slot 5 at cursor |
Ctrl+Shift+6 |
Paste from slot 6 at cursor |
Ctrl+Shift+7 |
Paste from slot 7 at cursor |
Ctrl+Shift+8 |
Paste from slot 8 at cursor |
Ctrl+Shift+9 |
Paste from slot 9 at cursor |
If a selection is active when you paste, the pasted text replaces it. If the slot is empty, QUILL announces “Slot N is empty”.
Copy to a slot
Hold the QUILL key (Ctrl+Shift+Grave), release, then
press Shift+digit. The QUILL-key bare digits 1-6 are
heading shortcuts; adding Shift is a distinct binding with no
conflict.
| Key | Action |
|---|---|
Ctrl+Shift+Grave, Shift+1 |
Copy selection to slot 1 |
Ctrl+Shift+Grave, Shift+2 |
Copy selection to slot 2 |
Ctrl+Shift+Grave, Shift+3 |
Copy selection to slot 3 |
Ctrl+Shift+Grave, Shift+4 |
Copy selection to slot 4 |
Ctrl+Shift+Grave, Shift+5 |
Copy selection to slot 5 |
Ctrl+Shift+Grave, Shift+6 |
Copy selection to slot 6 |
Ctrl+Shift+Grave, Shift+7 |
Copy selection to slot 7 |
Ctrl+Shift+Grave, Shift+8 |
Copy selection to slot 8 |
Ctrl+Shift+Grave, Shift+9 |
Copy selection to slot 9 |
You must have text selected. QUILL announces the slot number and a text preview: “Copied to slot 2”.
Management
| Key | Action |
|---|---|
Ctrl+Shift+Grave, X |
Open Copy Tray dialog |
All bindings are reassignable in
Tools > Customize & Support > Keymap Editor or
the Command Palette.
Using the Edit Menu
All commands are available in Edit > Copy Tray. The
submenu contains:
Copy to Slot 1throughCopy to Slot 9— copy the current selectionPaste from Slot 1throughPaste from Slot 9— paste at the cursorOpen Copy Tray...— open the management dialogClear All Tray Slots— clear all slots after confirmation
Using the System Tray Icon
Right-click the QUILL icon in the system notification area (bottom-right taskbar area). The context menu includes a Copy Tray submenu that lists every occupied slot with its label (if any) and a text preview. Clicking a slot pastes its content into the currently active QUILL document. This lets you paste from the tray without bringing the main window to the front.
Using the Dialog
Open the dialog with Ctrl+Shift+Grave, X,
Edit > Copy Tray > Open Copy Tray, or the Command
Palette (edit.open_copy_tray). The dialog shows all nine
slots in a list. Each row displays:
- The slot number
- An optional label
- A preview of the stored text (empty slots show
(empty))
Navigate the list with the arrow keys. The following buttons appear below the list:
- Paste (Enter or double-click) — paste the selected slot’s text at the cursor position and close the dialog. Disabled when the selected slot is empty.
- Copy Selection Here — copy the current editor selection into the selected slot and refresh the list. Disabled when no text is selected in the editor.
- Set Label… — open a text-entry prompt to name the selected slot. Labels appear in all slot listings and in screen-reader announcements.
- Clear Slot — empty the selected slot. Disabled when already empty.
- Close (Escape) — close the dialog without pasting.
Labelling Slots
Slot labels are optional but recommended for any slot you use regularly. A label makes the slot identifiable in the dialog and in every spoken announcement. Labelling slot 1 “signature” means you will hear “Pasted from slot 1 (signature)” instead of “Pasted from slot 1”.
To set a label:
- Open the Copy Tray dialog.
- Select the slot you want to label.
- Press
Set Label.... - Type the label and press Enter.
Labels are persisted alongside slot text and survive restarts.
Accessibility Notes
- Every Copy Tray operation announces its result through QUILL’s screen-reader interface. Copy, paste, clear, and label operations all produce spoken feedback.
- The slot list in the dialog receives initial focus when the dialog opens.
- Slot labels, when set, are included in every announcement.
- Empty slots are clearly identified as
(empty)in all contexts. - The
Clear All Tray Slotsconfirmation dialog defaults to No to prevent accidental data loss. - The
Ctrl+Shift+Npaste scheme is designed for screen reader users: one familiar chord activates slot N instantly, no menu navigation required.
Tips
- Research accumulator. Assign each tray slot to a document section. Copy a relevant excerpt to each slot as you read through a source, then paste them in order when drafting.
- Code boilerplate. Keep import blocks, standard headers, and closing patterns in labelled slots for one-chord insertion.
- Cross-document paste. Copy a phrase to a tray slot, switch documents, paste from the tray — the system clipboard is untouched.
- Persistent library. Slots survive restarts. Build a set of standard fragments you reach for daily.
- System tray access. Paste into any QUILL document directly from the notification-area icon without bringing the window to the front.
Appendix: Copy Tray design notes
Folded in from the former docs/copy_tray_notes.md on 2026-06-13.
Historical note: this appendix describes Copy Tray as originally built with nine slots. Copy Tray now has twelve slots (
Ctrl+Shift+1..9, 0, -, =); see the “Copy Tray” section above for current behavior and bindings.
Copy Tray: What Was Built and How It Feels
What Was Built
Copy Tray is a nine-slot persistent clipboard integrated across QUILL’s menu bar, keyboard layer, dialog system, and system tray icon. Every slot holds text that survives application restarts.
Core model
(quill/core/copy_tray.py)
A pure Python model with no wx dependency. CopyTray owns
nine TraySlot instances. Each slot has text,
label, and copied_at. The model reads and
writes copy_tray.json in the QUILL data directory using
write_json_atomic (temp file + os.replace). A
corrupt file causes a silent fresh start; it never raises to the UI.
UI mixin
(quill/ui/main_frame_copy_tray.py)
CopyTrayMixin is mixed into MainFrame.
Methods:
copy_to_tray_slot(n)— copies the editor selection to slot n; announces slot number and text preview.paste_from_tray_slot(n)— inserts slot n text at cursor (or replaces selection); announces slot number and label.open_copy_tray()— opens the management dialog; pastes if the user chooses Paste and returns to the editor.clear_all_tray_slots()— Yes/No confirmation (default No); clears all nine slots on Yes.
Dialog
(quill/ui/copy_tray_dialog.py)
A resizable wx.Dialog with a ListBox and five action buttons. Each list row shows slot number, optional label, and a 60-character preview. The list receives focus on open. Buttons: Paste (Enter), Copy Selection Here, Set Label…, Clear Slot, Close (Escape). Double-click pastes. Button states update on every selection change: Paste and Clear Slot are disabled on empty slots; Copy Selection Here is disabled when no editor text is selected.
Keyboard bindings
(quill/core/keymap.py)
| Key | Action |
|---|---|
Ctrl+Shift+1 through Ctrl+Shift+9 |
Paste from slot 1-9 |
Ctrl+Shift+Grave, Shift+1 through
Ctrl+Shift+Grave, Shift+9 |
Copy selection to slot 1-9 |
Ctrl+Shift+Grave, X |
Open Copy Tray dialog |
The paste bindings use the number row with Ctrl+Shift.
These keys were confirmed free across the entire QUILL keymap. QUILL-key
bare digits 1-6 are heading shortcuts; adding Shift produces a distinct
chord with no conflict.
All 20 commands (edit.open_copy_tray,
edit.clear_all_tray_slots,
edit.copy_to_tray_1..9,
edit.paste_from_tray_1..9) are registered in the keymap and
appear in the Command Palette. All are reassignable in the Keymap
Editor.
Menu integration
(quill/ui/main_frame_menu.py)
Edit > Copy Tray submenu with:
- Copy to Slot 1-9
- Paste from Slot 1-9
- Open Copy Tray…
- Clear All Tray Slots
The 18 per-slot items use dedicated wx.NewIdRef() IDs
(_id_copy_tray_slots and _id_paste_tray_slots
arrays). Management commands are recirculated from the power tools
manifest via _append_power_tools_copy_tray_items.
Power
tools manifest
(quill/ui/main_frame_power_tools_menu.py)
New "copy_tray" group with
edit.open_copy_tray and
edit.clear_all_tray_slots. New recirculation helper
_append_power_tools_copy_tray_items. The 18 individual slot
commands are also registered in the manifest for Command Palette
discoverability.
System tray
integration (quill/ui/main_frame.py)
The _on_tray_right_click method now builds a
Copy Tray submenu listing every occupied slot with its
label (if any) and a 50-character text preview. Clicking a slot calls
_tray_paste_slot(n), which restores the main window if it
is hidden, then pastes the slot content. If all slots are empty, the
submenu shows “(all slots empty)” as a disabled item. “Open Copy Tray…”
is always present at the bottom of the submenu.
Documentation
docs/userguide.md— complete feature reference with keyboard tables, dialog walkthrough, accessibility notes, and workflow tips.docs/QUILL-PRD.md— section 5.77 added with motivation, operations table, keyboard defaults, storage spec, accessibility guarantees, and implementation map.docs/userguide.md— “Copy Tray” section added in Writing and Editing, before “Copy With Source”, with full keyboard tables and a tips block.
The User Experience
First encounter
You open QUILL to write a long document while researching from
several other sources. You read a quote you want to use, select it, and
press Ctrl+Shift+Grave, Shift+1. QUILL says “Copied to slot
1”. You read another fragment. Ctrl+Shift+Grave, Shift+2.
“Copied to slot 2”. A third. Slot 3.
You switch to your draft. Where you want the first quote, press
Ctrl+Shift+1. QUILL says “Pasted from slot 1” and the text
is there. The system clipboard was never disturbed. The other two quotes
are still in their slots.
You close QUILL. Come back tomorrow. Slots 1, 2, and 3 still hold their contents.
Using labels
After a few days you decide to give slot 1 a permanent home: your
email signature. You open Ctrl+Shift+Grave, X, navigate to
slot 1, press Set Label…, type “signature”, press Enter. Now when you
paste, QUILL says “Pasted from slot 1 (signature)”. The slot is
identifiable without looking at a screen.
From the system tray
QUILL is minimized to the system tray while you read in another browser. You right-click the QUILL icon. The menu shows:
Show Quill
Copy Tray >
1. signature — Hi, I wanted to follow up...
2. Hello world...
3. import sys, os, pathlib...
...
Open Copy Tray...
Sticky Notes...
Exit Quill
You click slot 3. QUILL restores its window and pastes the import block at your cursor. You minimize again.
Screen reader workflow
Press Ctrl+Shift+5. QUILL says “Slot 5 is empty.” You
know immediately without opening a dialog or reading the screen. Select
some text, press Ctrl+Shift+Grave, Shift+5. “Copied to slot
5.” Move elsewhere. Press Ctrl+Shift+5. “Pasted from slot
5.” Everything happened through voice, at typing speed, with standard
modifier+number chords.
Sticky Notes: capture, browse, and the keys that work everywhere
Sticky notes are QUILL’s quickest capture surface: Tools > New Sticky Note… (or its system-wide hotkey) opens a small title-and-body editor from anywhere, and Tools > Sticky Notes… manages the whole collection.
The Sticky Notes Browser
Tools > Sticky Notes Browser… is the fast way back to a note you wrote last week. It opens with focus in a search field — type anything and the list below filters live, matching titles and bodies case-insensitively, newest note first. Press Down to move into the results and arrow through them; press Tab to reach a read-only multi-line preview of the selected note, so you can read the whole thing without opening it. Edit (or Enter on a note, or double-click) opens the full editor; Close (or Escape) dismisses. Every control announces itself by name.
Assign the browser a global hotkey (next section) and it opens from anywhere in Windows — QUILL restores its own window first, so the browser always appears even when QUILL was minimized to the tray.
Global Hotkeys (Tools > Global Hotkeys…)
Global hotkeys let a key combination work system-wide — in your browser, your mail client, anywhere — without switching to QUILL first. Open Tools > Global Hotkeys…, arrow to a command, press Assign…, then press the combination you want. It must include Ctrl or Alt (a bare key would swallow normal typing everywhere). Clear removes an assignment; assigning a key that another QUILL command already holds moves it cleanly; and if another application owns the key, Windows refuses it — QUILL tells you which binding failed and it simply stays inactive until you pick something else.
What can go global is deliberately limited. Only these commands can be bound, and the list is enforced in code:
- Radio: Play/Pause, Stop, Mute/Unmute, Volume Up, Volume Down
- New Sticky Note
- Sticky Notes Browser
- Post to Mastodon — this opens the compose window; nothing is ever sent by the hotkey itself
- Show/Hide QUILL to the tray — hides the window to the system tray, or brings it back and focuses it
Nothing that edits a document, deletes anything, or acts invisibly can ever be a global hotkey, no matter what a settings file says. Commands that open a window restore QUILL first; media commands act right where you are; and every press speaks its result (“Radio paused”, “Note saved”) so you always know what happened even when QUILL isn’t visible. Your existing system-wide sticky-note hotkey keeps working exactly as it always has unless you reassign it here. Global hotkeys are Windows-only — macOS offers no equivalent mechanism — but every one of these commands remains available from the menus and the command palette on every platform.
Show or hide QUILL with one keystroke — Ctrl+Alt+Shift+Q. QUILL ships with one global hotkey already set: Ctrl+Alt+Shift+Q tucks the window to the system tray when it is showing, and brings it back — focused — when it is hidden, from wherever you happen to be. It’s an ordinary entry in the table above, so you can change it or clear it like any other. Each app in the family carries the same convenience with its own, deliberately different chord so they never clash: Quill Radio uses Ctrl+Alt+Shift+R and Quill Weather uses Ctrl+Alt+Shift+W — handy for apps that live in the tray (Quill Weather watching for alerts, Quill Radio playing in the background), which are then a single keystroke away without hunting for the tray icon. Hiding never stops anything the app is doing; the toggle announces “hidden to the tray” or “shown”; and if some other program already owns Ctrl+Alt+Shift+Q, that combination stays theirs and QUILL simply leaves it alone — pick a different one in this dialog.
Future Directions: Double-Tap and Beyond
The user asked whether pressing a key twice quickly could trigger an alternative action. For Copy Tray, the natural double-tap behaviour would be:
- Single
Ctrl+Shift+N— paste from slot N immediately. - Double
Ctrl+Shift+N(two presses within ~300ms) — peek: QUILL speaks what is in slot N without pasting (“Slot 3: Hello world…”). This lets a screen-reader user verify a slot’s content before committing to paste.
Implementing double-tap detection requires a timer in the QUILL-key prefix state machine, a 300ms debounce, and a clear screen-reader announcement pattern. It is architecturally clean and would make the Copy Tray even more efficient for screen-reader-only workflows. This is noted here as a planned enhancement, not yet implemented.
Other places in QUILL where double-tap patterns could add value:
- Double QUILL key (two presses of
Ctrl+Shift+Grave) = open Copy Tray dialog, similar to how WindowsWin+Vopens clipboard history. - Double
F3= repeat the last Find All and jump to the next cluster of matches. - Double
Ctrl+Z= undo back to the last explicit save point. - Double
Ctrl+G= return to the previous location (ping-pong navigation). - Double
Escape= collapse all side panels and return focus to the editor.
These should be evaluated selectively — double-tap timing is sensitive and can interfere with rapid typists. The patterns with the clearest benefit and the lowest collision risk are: Copy Tray peek and QUILL-key-double-press for the tray dialog.
Acknowledgments
QUILL’s accessibility design draws on the work of earlier screen-reader-first editors. In particular, the keyboard-first compare workflow and the F8 anchor selection model were inspired by the approaches pioneered in EdSharp and Boxer. We are grateful to those projects and their authors for showing what accessible, keyboard-driven editing can be.
Glossary of QUILL Terms
This glossary defines the jargon used throughout the QUILL interface, menus, and documentation. Terms appear roughly in order of how often you will encounter them as a new user.
Abbreviation A short trigger word or phrase that
QUILL automatically expands into longer text as you type. For example,
typing brb could expand to “be right back”. Abbreviations
are managed in the Abbreviation Manager
(Ctrl+Shift+Grave, Shift+A). Unlike snippets, abbreviations
expand automatically without a separate insertion step and do not
support interactive placeholders.
Agent / Agent Center An AI-assisted workflow that generates a multi-step task plan based on a goal you describe. The Agent Center shows you each step before it runs so you can review and approve. Agents build on the Writing Assistant and Prompt Studio infrastructure and require an AI provider to be configured.
Browse Mode / Quick Nav Mode A temporary navigation
state that makes the QUILL key prefix commands available one at a time.
Press the QUILL key (shown as Ctrl+Shift+Grave in the
keymap grammar, displayed as QUILL Key everywhere else)
once to arm Quick Nav for the next key you press. Press it twice to lock
Browse Mode on until you press Escape. In Browse Mode, letter keys and
arrow keys invoke navigation commands rather than inserting characters,
similar to the virtual cursor mode in screen readers.
Command Palette A searchable pop-up listing every
registered QUILL command with its current keyboard shortcut. Open with
Ctrl+Shift+P. Type any part of a command name to filter the
list, then press Enter to run it. The fastest way to reach any action
without memorising menu paths or key bindings.
Copy Tray A multi-slot clipboard within QUILL that
holds up to twelve named text snippets at once. Unlike the Windows
clipboard (which holds only one item), the Copy Tray lets you copy
different pieces of text to individual numbered slots
(Ctrl+Shift+Grave, Shift+1 through Shift+9,
Shift+0, Shift+-, Shift+=) and
paste from any slot. Open the Copy Tray dialog with
Ctrl+Shift+Grave, X or Win+V-style double
QUILL-key press.
Document Tab A single open file or generated
artifact inside the QUILL editor area. QUILL is a tabbed editor; each
file, compare summary, or AI output opens as its own document tab. Tabs
are announced by name when you switch between them
(Ctrl+Tab).
GLOW (Guided Layout and Output Workflow) QUILL’s built-in text quality and accessibility review system. GLOW audits a document for structural issues (heading hierarchy, generic link text, missing alt text, missing language metadata, tables without header cells, spacing, dense paragraphs) and offers deterministic fixes. Audit results open as readable QUILL tabs; fixing the document opens a named preview and starts a compare session; fixing a file on disk writes a repaired copy without touching the original. In-editor checks cover plain text, Markdown, and HTML; the optional GLOW engine extends audit and fix to DOCX, PPTX, XLSX, PDF, and EPUB with a scored, graded report. Everything lives under Tools → GLOW.
Keymap / Keyboard Pack (.kqp) The mapping of
keyboard shortcuts to QUILL commands. The keymap is fully editable in
Preferences → Keyboard. You can export your keymap as a
.kqp file (Keyboard Pack) to share it with others or import
one provided by the community. Resetting the keymap restores factory
defaults without affecting other preferences.
Macro A recorded sequence of QUILL actions that you can replay on demand. Record a macro from Tools → Macros → Start Recording, perform the steps you want to automate, then stop recording. Play it back later to repeat the sequence exactly. Macros are ideal for repetitive cleanup tasks.
Profile (Feature Profile) A named set of feature flags that controls which QUILL capabilities are visible and enabled. QUILL ships with profiles such as Writing, Developer, and Accessibility. Profiles hide features not relevant to a particular workflow, keeping menus and option dialogs focused. Switch profiles or edit them in Preferences → Profiles and Features.
Prompt Studio A built-in tool for creating and
saving reusable AI prompt templates with named input variables. A Prompt
Studio template might be “Rewrite for Plain Language: ${input:text}” —
you fill in the variable each time you run the prompt. Prompts are
stored as .pqp files and can be imported and exported.
Quillin (Extension) A plug-in for QUILL, also called
an extension. Quillins run in a separate worker process (fault isolation
— a crashed extension cannot take down the editor) but are not a
security sandbox; enforcement relies on code review and the Author
Covenant. Quillins can add new commands, menu items, custom AI prompts,
or automation scripts. Each Quillin has a manifest.json
that describes its capabilities. QUILL ships with several bundled
Quillins (word count, AI writing prompts) and supports user-installed
ones. The Quillin Manager is in Preferences →
Extensions.
Recovery / Session Recovery QUILL silently auto-saves your work at intervals. If QUILL closes unexpectedly (crash, power loss, accidental close), it detects the unsaved state on next launch and offers to restore the last known version. Recovery files are stored separately from your saved files so a corrupted recovery never overwrites your original. Manage recovery in File → Recover Document.
Remote Site A connection configuration for a server QUILL can connect to directly to open and save files. Supported protocols are FTP, SFTP, HTTPS (WebDAV), and S3-compatible object storage. Sites are named and saved in File → Remote Sites → Manage Remote Sites so you do not have to re-enter credentials each time. Each site stores host, port, protocol, credentials (encrypted on Windows via DPAPI), and a default path.
Safe Mode A startup mode that disables AI, Watch
Folder, and Quillin extensions. Useful when a Quillin or AI provider is
causing problems and you need a clean environment. Launch with
--safe-mode on the command line or set
QUILL_SAFE_MODE=1 in the environment. In Safe Mode, a
status bar indicator tells you which features are disabled.
Session (AI Session) A persistent conversation thread between you and an AI provider inside QUILL. Sessions have a name, a provider, a model, and a message history. You can have multiple named sessions and switch between them. Sessions are stored locally and can be exported. The Writing Assistant always runs inside a session.
Skill / Skill Library A named, reusable AI workflow
defined as a series of steps (prompts, transforms, and conditions).
Skills are more structured than single prompts: each step in the skill
can feed its output into the next. The Skill Library
(AI → Skill Library) lets you browse, run, and author
skills. Skills are stored as .json files.
Snippet A reusable block of text with optional
interactive placeholders that you insert manually at the cursor
position. Snippets support variables such as ${input:name}
(a prompted text field), ${choice:a|b} (a pick-list),
${date}, ${time}, and ${cursor}
(where the cursor lands after insertion). Insert with
Ctrl+Shift+Grave, S; manage with
Ctrl+Shift+Grave, Shift+S. Compare with abbreviations,
which expand automatically.
Sound Pack A collection of audio files that QUILL uses for non-speech feedback: key sounds, navigation tones, alert chimes, and (optionally) indentation-level tones for coding. Sound Packs are loaded from a named directory and can be swapped in Preferences. The default pack uses synthesised bell tones; custom packs can use any WAV files following the naming convention.
Template A pre-written document structure that you
can use as a starting point for new text. In QUILL, templating comes in
two forms: snippets (Ctrl+Shift+Grave, S)
insert reusable blocks with interactive placeholders anywhere, and the
Accessible Vault’s Insert Template command fills note
templates from your vault’s Templates folder, expanding
{{date}}/{{title}}, asking any
{{prompt}} questions, and placing the cursor at
{{cursor}}.
Watch Folder A directory that QUILL monitors in the background. Any supported file dropped into the watch folder is automatically opened as a new document tab (or processed according to per-folder rules). Useful for transcription pipelines, dictation outputs, and batch review workflows. Configure in Tools → Watch Folder.
WebView / Side Preview The rendered HTML preview
pane that appears alongside the editor when you open it from the
View menu (or automatically, with Auto Side-by-Side
Preview on). Ctrl+F6 focuses it, and it joins the
F6 region rotation while open. The preview is powered by
Microsoft Edge WebView2 and renders Markdown, HTML, and plain text in
real time as you type. The preview is read-only and does not affect the
document.
Welcome Guide A lightweight, profile-aware getting-started document that opens inside QUILL as a document tab. Unlike the full User Guide (which opens in your browser), the Welcome Guide adapts its content to show only the features enabled in your current profile. Open it from Help → Open Welcome Guide.
Writing Assistant QUILL’s AI writing panel. The Writing Assistant accepts a goal described in plain language and ranks relevant QUILL commands, offers preset rewrite/summarize/continue/grammar flows, and can execute a restricted Python transform (import allowlist and resource limits, not a security boundary) against the current document. It runs inside an AI Session and requires an AI provider to be configured in Preferences.
QUILL Key The keyboard shortcut
Ctrl+Shift+Grave (the backtick/grave key above Tab).
Pressing it once arms a one-shot prefix; pressing it twice locks Quick
Nav Mode on. The QUILL key is the entry point to most of QUILL’s power
features. Every chord is announced when pressed and is remappable in
Preferences → Keyboard. The chord is shown to the user
as QUILL Key + <key> everywhere in the editor (menus,
Keyboard Reference, status bar, cheat sheet). The stored binding is
Ctrl+Shift+Grave, <key> in
DEFAULT_KEYMAP / keymap.json / the Keymap
Editor; only the display layer rewrites the prefix, through
quill.core.keymap_format.format_binding_for_display. The
constant QUILL_KEY_LABEL in quill/branding.py
is the single source of truth for the brand, so a future rebrand touches
one file.
Getting help
Support is run by Community Access, and the address is support@community-access.org. A person reads it, and replies come back by email.
The quickest way there is Help > Get Help from Support… (Ctrl+Alt+F2), which every app in the family answers with the same form: what kind of message this is, a subject, what happened, and – if you want an answer – an email address to reply to. What you expected and how to reproduce it are optional, and worth more than anything else when you can give them.
Press Send and your own mail program opens with the whole message already written, addressed to support, with QUILL’s name and version and your Windows version filled in at the bottom. Nothing is sent until you send it there, so you can read it over, add anything, or change your mind.
If this machine has no mail program set up – webmail only, say – the app puts the whole message on your clipboard and tells you the address, so nothing you typed is lost. And writing to support@community-access.org yourself always works just as well: there is no form you have to use. Say which app you were using and what happened.