Signal Keyboard Shortcuts
Signal Desktop has a larger keyboard surface than most people realise, and it is organised around a distinction the interface does not make obvious: some shortcuts act on the chat list, some on the composer you are typing in, and some on whichever individual message currently has selection. The message-level group is the one most users never find, because selecting a message with the keyboard is not something the interface advertises — and without a selected message, the whole Ctrl+Shift family for replying, reacting, forwarding and deleting appears to do nothing at all. The composer carries the set worth learning first, because it includes text formatting that a lot of Signal users do not know exists. Bold, italic, strikethrough, monospace and spoiler are all bound to key combinations, applied to selected text exactly as they would be in a word processor. Spoiler in particular — Ctrl+Shift+B, or Cmd+Shift+B on a Mac — hides the text behind a tap-to-reveal blur, which has no equivalent in most messaging apps and is genuinely useful for anything from plot details to a surprise someone in the group should not read yet. One warning before the tables. Signal's Mac and Windows bindings are not a clean Cmd-for-Ctrl substitution the way most cross-platform applications manage. Several actions use different modifier families entirely — the calling shortcuts are Ctrl+Shift on macOS and Alt+Shift on Windows and Linux, which is the reverse of the usual pattern where Mac gets the platform key and Windows gets Ctrl. Anyone who moves between a Mac and a PC will find that specific group does not transfer, and the tables below give both forms rather than asking you to derive one from the other. Signal's own list is always available in the application itself. Ctrl+/ or Cmd+/ opens it, as does Help ▸ Show Keyboard Shortcuts, and that is the authoritative reference for whichever version you have installed. This page covers the same ground with the context around each binding — what it actually does, what it needs to be focused on, and where the platforms diverge.
Conversation Navigation
| Action | Windows | Mac | Description |
|---|---|---|---|
| Next chat | Alt+Down (or Ctrl+Tab) | Option+Down (or Ctrl+Tab) | Moves down the chat list to the following conversation. Two bindings exist for the same action because Ctrl+Tab matches the tab-cycling convention while the arrow version matches the visible vertical layout. |
| Previous chat | Alt+Up (or Ctrl+Shift+Tab) | Option+Up (or Ctrl+Shift+Tab) | Moves up the chat list to the preceding conversation. Note the modifier is Option on macOS rather than Cmd, which is unusual for Signal and catches people who assume the standard substitution. |
| Next / previous unread chat | Alt+Shift+Down / Alt+Shift+Up | Option+Shift+Down / Option+Shift+Up | Skips straight to conversations with unread messages, passing over everything already read. Adding Shift to the ordinary chat-stepping shortcut is a consistent pattern worth noticing — it filters rather than changing direction. |
| Jump to a chat by number | Ctrl+1 to Ctrl+9 | Cmd+1 to Cmd+9 | Opens a conversation by its position in the list. Because Signal orders chats by recent activity rather than fixing them in place, the number pointing at a given person changes as other conversations move — this addresses a position, not a contact. |
| Focus the oldest unread or last message | Ctrl+J | Cmd+J | Moves selection to the first message you have not read, or the most recent one if everything is read. This is the usual way into message-level selection, which the rest of the per-message shortcuts require. |
| Navigate by section | Ctrl+T | Cmd+T | Cycles focus between the major regions of the window — chat list, conversation, composer. The foundation of keyboard-only use, and the answer when a shortcut appears dead because focus is somewhere you did not expect. |
| Search all chats | Ctrl+F | Cmd+F | Searches across every conversation. Ctrl+Shift+F searches within the currently open chat instead, which is the one you want when you know who said it and not when. |
| Start a new chat | Ctrl+N | Cmd+N | Opens the new-conversation picker to choose a contact or group. Distinct from search, though both accept a name — this one starts a thread rather than finding an existing one. |
| Archive / unarchive a chat | Ctrl+Shift+A / Ctrl+Shift+U | Cmd+Shift+A / Cmd+Shift+U | Moves a conversation out of the main list without deleting anything, and the paired shortcut brings it back. Archived chats resurface on their own if a new message arrives, so archiving is a tidying action rather than a mute. |
| Close the current chat | Ctrl+Shift+C | Cmd+Shift+C | Returns to the chat list with no conversation open. Worth noting that Ctrl+Shift+C on macOS — with Ctrl rather than Cmd — starts a voice call instead, so the two live uncomfortably close together on that platform. |
| Open the chat menu | Ctrl+Shift+L | Cmd+Shift+L | Opens the options menu for the open conversation — disappearing messages, mute, block, notification settings. Several features with no shortcut of their own live behind this one, which makes it the route to most per-chat configuration. |
| Scroll to top / bottom of a chat | Ctrl+Up / Ctrl+Down | Cmd+Up / Cmd+Down | Jumps to the beginning of the loaded history or back to the newest message. The bottom jump is the more useful of the two — the fast way back after scrolling up to find something. |
Composer Formatting
| Action | Windows | Mac | Description |
|---|---|---|---|
| Send a message | Enter | Return | Sends whatever is in the composer. In the expanded composer this changes — there, Ctrl+Enter or Cmd+Enter sends, because plain Enter is needed for line breaks in a multi-paragraph message. |
| Add a line break without sending | Shift+Enter | Shift+Return | Inserts a newline instead of sending, which is how you write a multi-line message in the ordinary composer. For anything genuinely long, the expanded composer is the better tool. |
| Expand the composer | Ctrl+Shift+K | Cmd+Shift+K | Opens a larger writing area for longer messages. The send key changes inside it — Ctrl+Enter rather than Enter — which is the whole point, since Enter becomes an ordinary line break. |
| Attach a file | Ctrl+U | Cmd+U | Opens the file picker for the current conversation. Ctrl+Shift+P clears every draft attachment at once, and Ctrl+P removes just the link preview if one was generated from a URL you pasted. |
| Edit your previous message | Up arrow (empty composer) | Up arrow (empty composer) | Pressing Up with nothing typed reopens your last message for editing. Recipients see that it was edited and can view the history, so this corrects a typo openly rather than quietly rewriting what was said. |
| Bold selected text | Ctrl+B | Cmd+B | Applies bold to whatever is selected in the composer. Signal transmits the formatting as message metadata rather than as visible markdown characters, so recipients see formatted text rather than asterisks. |
| Italicise selected text | Ctrl+I | Cmd+I | Applies italics to the selection, using the same combination as every text editor. Combines with the other formatting keys, so text can be bold and italic at once. |
| Strike through selected text | Ctrl+Shift+X | Cmd+Shift+X | Draws a line through the selection. The odd one out in the formatting group — most applications use Ctrl+Shift+S or Alt+Shift+5, and Signal's choice of X has no obvious precedent. |
| Format selected text as monospace | Ctrl+E | Cmd+E | Switches the selection to a fixed-width font, the right choice for a command, a file path or anything where character-level accuracy matters. Also stops the text being reflowed in ways that obscure spacing. |
| Mark selected text as a spoiler | Ctrl+Shift+B | Cmd+Shift+B | Hides the selection behind a blur that the recipient taps to reveal. Genuinely uncommon in messaging apps and useful for anything the reader should choose to see rather than encounter — plot details, results, a surprise. |
| Start recording a voice message | Ctrl+Shift+Y | Cmd+Shift+Y | Begins a voice recording in the current conversation without reaching for the microphone button. Worth distinguishing from the calling shortcuts, which use a different modifier family entirely on Windows. |
Message Actions
| Action | Windows | Mac | Description |
|---|---|---|---|
| Reply to the selected message | Ctrl+Shift+R | Cmd+Shift+R | Starts a quoted reply to whichever message is selected, and toggles it off if pressed again. Requires a selected message — Ctrl+J is the usual way to get one from the keyboard. |
| Open the reaction picker | Ctrl+Shift+E | Cmd+Shift+E | Opens the emoji-reaction picker for the selected message. Reacting rather than replying keeps a group conversation from filling with acknowledgements, which is most of what the feature is for. |
| View message details | Ctrl+D | Cmd+D | Shows delivery and read status, timestamps, and in a group, who has seen it. The place to check when you need to know whether a message actually arrived rather than assuming from the absence of a reply. |
| Forward selected messages | Ctrl+Shift+S | Cmd+Shift+S | Sends the selection on to another conversation. Signal marks forwarded messages as such for the recipient, which is a deliberate friction against content travelling without its context. |
| Save an attachment | Ctrl+S | Cmd+S | Saves the attachment from the selected message to disk, and does the same job inside the media viewer. Relevant for disappearing messages — saving is what takes a file out of that lifecycle. |
| Delete the selected message | Ctrl+Shift+D | Cmd+Shift+D | Deletes the selected message, with the choice of removing it for everyone or only for you. Deleting for everyone has a time limit and cannot recover a message someone has already screenshotted. |
| Open the message context menu | Shift+F10 | Cmd+F12 | Opens the full right-click menu for the selected message from the keyboard. The route to per-message actions that have no shortcut of their own, and one of the few places Signal's Mac and Windows bindings share no structure at all. |
| Default action on the selected message | Enter | Return | Performs whatever the obvious action is for that message type — opening an attachment, following a link, expanding media. Context-dependent by design, which makes it quick once selection is where you want it. |
Calling Media
| Action | Windows | Mac | Description |
|---|---|---|---|
| Mute / unmute on a call | Shift+M | Shift+M | Toggles your microphone during a call. One of the few Signal shortcuts identical across platforms, and the only one most people need during a call. |
| Turn video on / off | Shift+V | Shift+V | Toggles your camera mid-call. Paired with Shift+M for the microphone, these two are the pair worth having in muscle memory before you need them urgently. |
| Start a voice or video call | Alt+Shift+C (voice) / Alt+Shift+Y (video) | Ctrl+Shift+C (voice) / Ctrl+Shift+Y (video) | Calls the person or group in the open conversation. Note the platform inversion — macOS uses Ctrl here where Windows uses Alt, the reverse of the usual convention. |
| Answer a call | Alt+Shift+V (with video) / Alt+Shift+A (without) | Ctrl+Shift+V / Ctrl+Shift+A | Two separate bindings so you can answer a video call with the camera off, without scrambling for a mute button after connecting. The video variant applies only to incoming video calls. |
| Decline or end a call | Alt+Shift+D (decline) / Alt+Shift+E (end) | Ctrl+Shift+D / Ctrl+Shift+E | Declines an incoming call or ends one in progress. Distinct bindings for the two, so the key that hangs up on a live call is not the one you press to dismiss a ringing one. |
| Open the All Media view | Ctrl+Shift+M | Cmd+Shift+M | Shows every photo, video and file shared in the current conversation in one grid. Considerably faster than scrolling a long history looking for something someone sent months ago. |
| Open the emoji, sticker or GIF picker | Ctrl+Shift+J / Ctrl+Shift+O / Ctrl+Shift+G | Cmd+Shift+J / Cmd+Shift+O / Cmd+Shift+G | Three separate pickers on three bindings — emoji, stickers and GIFs. Distinct from Ctrl+Shift+E, which reacts to a selected message rather than inserting into the composer. |
| Open Preferences | Ctrl+, | Cmd+, | Opens application settings, following the platform convention. Where audio and video device selection lives, which is worth checking before a call rather than during one. |
Frequently Asked Questions
Why does Ctrl+Shift+R do nothing when I press it?
Because it acts on a selected message, and you almost certainly do not have one. Signal's per-message shortcuts — reply, react, forward, delete, details — all require a message to have keyboard selection, which is separate from having the conversation open or the composer focused. Ctrl+J is the usual way in: it moves selection to the oldest unread message, or the most recent one if everything is read. From there the arrow keys move between messages and the Ctrl+Shift family works. This single missing step is the reason most people conclude Signal has far fewer shortcuts than it does.
How do I write a multi-line message without sending it early?
Shift+Enter inserts a line break in the ordinary composer. Once a message runs past two or three lines, Ctrl+Shift+K opens the expanded composer, and the send key changes there — Ctrl+Enter sends, while plain Enter becomes an ordinary newline. That inversion is the point of the expanded view: in a larger writing area you want Enter to behave the way it does in every text editor rather than firing the message off mid-thought.
Can I format text in Signal, and does the recipient see it?
Yes to both. Ctrl+B bolds, Ctrl+I italicises, Ctrl+Shift+X strikes through, Ctrl+E sets monospace and Ctrl+Shift+B marks a spoiler — all applied to selected text in the composer, with Cmd in place of Ctrl on macOS. Signal transmits formatting as message metadata rather than as literal markdown characters, so recipients see genuinely formatted text rather than asterisks and underscores. Formatting survives to Android and iOS as well, so a monospaced command sent from Desktop arrives monospaced on a phone.
What does the spoiler formatting actually do?
Ctrl+Shift+B hides the selected text behind a blur that the recipient taps or clicks to reveal. It is a display treatment, not a security feature — the text is delivered normally and anyone who reveals it sees it, so it protects against accidental reading rather than against a determined reader. That said, accidental reading is the actual problem it solves: plot details in a group where not everyone has watched the thing, a result someone is deliberately avoiding, a surprise that should not be spoiled by a notification preview.
Why are the calling shortcuts Ctrl on Mac and Alt on Windows?
That is genuinely how Signal has bound them, and it is the reverse of the usual pattern. Everywhere else in the application, macOS uses Cmd where Windows uses Ctrl, exactly as you would expect. The calling group breaks that: starting a voice call is Ctrl+Shift+C on macOS and Alt+Shift+C on Windows and Linux, and the same inversion applies to answering, declining and ending. No public rationale has been given. What matters practically is that this group alone cannot be derived from the others, so anyone switching between a Mac and a PC has to hold two sets in memory for calls specifically and one set for everything else.
How do I edit a message I have already sent?
Press the Up arrow with the composer empty, and your last message reopens for editing. Signal marks edited messages visibly and recipients can view the edit history, so this is an open correction rather than a silent rewrite — which is a deliberate design choice for a messaging app where 'what did they actually say' can matter. There is a time window after which editing is no longer offered, so a typo caught days later needs a follow-up message instead.
What is the difference between Ctrl+F and Ctrl+Shift+F?
Ctrl+F searches across every conversation, and Ctrl+Shift+F searches inside the one currently open. The distinction matters more in Signal than in most applications because searching everything for a common word returns a great deal, while you usually know which conversation something was in and simply cannot remember when. Ctrl+Shift+F is the one that answers 'they sent me the address at some point' quickly, and it is noticeably underused compared with the global search.
Does archiving a chat mute it?
No, and conflating the two causes real surprise. Ctrl+Shift+A archives a conversation, which removes it from the main list without deleting anything, and Ctrl+Shift+U brings it back. But an archived chat resurfaces on its own when a new message arrives, notification included. Muting is a separate setting, found through the chat menu on Ctrl+Shift+L. Archive is for tidying a list you have stopped needing; mute is for a conversation that is too noisy.
How do I find every photo someone sent me without scrolling?
Ctrl+Shift+M opens the All Media view for the current conversation — every photo, video and file in one grid, ordered by date. Scrolling a long history looking for an image is one of the more tedious things a messaging app asks of you, and this replaces it entirely. Inside the media viewer, Ctrl+S saves whatever you are looking at, which is worth knowing for disappearing messages, since saving is what takes a file out of that lifecycle before it goes.
Where does Signal list its own shortcuts?
Ctrl+/ or Cmd+/ opens the full list from inside the application, and Help ▸ Show Keyboard Shortcuts does the same from the menu bar. That is the authoritative reference for whichever version you have installed, which matters because Signal ships frequently and the set has grown over time — message editing and several formatting options are more recent additions than the app's overall age would suggest. Signal also publishes downloadable PDF reference cards for Windows/Linux and for macOS separately, precisely because the two differ in the ways described above.