Send feedback

Getting Started

Welcome to the Serenade docs! Here, you'll find an overview of everything Serenade can do, along with examples. First, let's get Serenade installed on your device.


First, download and install Serenade. Serenade supports macOS, Windows, and Linux—platform-specific installation instructions can be found on the download page.


After installing Serenade, you'll be prompted to activate the app via an email link. If that link doesn't work, you can use the code provided on the activation page to activate manually.

The Serenade application will help you install the extension from the Chrome Web Store.


Serenade floats above all your other windows, so you can keep it side-by-side with other applications, like your code editor. You can toggle Serenade by clicking the Listening switch or pressing Alt+Space. Then, as you speak, you'll see a list of transcripts in the Serenade window.

Sometimes, Serenade isn't sure what you said, so you'll see a few different options. The first one will be used automatically, but to use a different option (and undo the first one), just say the number you want to use instead. For instance, to use the second option, just say two. If none of the options are right, you can just say undo.


As you'll see, many Serenade commands take the same form: an action followed by a selector. An action is something you want to do to code, like a add, change, or delete. A selector is a block of code to operate on, like line, word, function, or class. To quickly reference common actions and selectors, check out the Reference section.

Throughout the documentation, you'll see blocks that look like this:


(insert | type) [above | below] <text>


insert sunshine
Good morning, ""
Good morning, "sunshine"
  • Text in <angle brackets> is free-form text, like the name of a function or variable.
  • Text separated by pipes, like (foo | bar), represents a list of choices (i.e., an or).
  • Text in [square brackets] is optional.


Serenade supports different commnads depending on which application is currently in the foreground (i.e., focused). At the bottom-left of the Serenade window, you can see which application is currently active, along with an icon indicating which commands are available. Here the various modes Serenade can be in when using Chrome:

Chrome mode

When Chrome is in focus and the extension is connected, commands on this page will be available.

Global mode

When another app is in focus, Serenade can still type raw text and run system commands.

The automatic reminder can be turned off in "Settings > Editor > Active app reminder", and it will always be available when the active app indicator is hovered over.

Tab Management

You can manage your browser tabs with commands like new tab and previous tab.

Create a new tab

new tab

Close the current tab

close tab

Switch to the next or previous tab

(next | previous) tab

Switch to a specific tab

tab (one | two | three ...)

Switch to a specific tab

(first | second | ...) tab

Adding Text

With the insert command, you can dictate text into websites like Gmail and Stack Overflow.


(insert | type) [above | below] <text>


insert hello world
hello world
type camel case foo bar
type below world

The dictate command inserts text, but doesn't convert coding symbols to their equivalents. This can be useful for writing comments or docs, rather than code.


dictate <text>


dictate a plus b greater than not c
a plus b greater than not c

Editing Text

In this section, we'll take a look at voice commands you can use for editing. You can use the delete command to remove text and the change command to change text to something else. Serenade also supports common operations like copy, cut, and paste.


You can delete text with the delete command.

Delete text

delete <text>


delete two words
I think Serenade is great
Serenade is great
delete now
Are you free now?
Are you free?


The change command selects the nearest match to the cursor and replaces it with some text.

Changing text

change <text> to <text>


change word to goodbye
hello everyone
goodbye everyone
change people to dogs
I like all people
I like all dogs


You can use commands likecopy, cut, andpaste to manipulate text.

Copying text

(copy | cut) <text>


copy next two words
copy lines fifty to sixty
cut line

Pasting code from the clipboard

paste [above | below | inline]


paste below

Symbols & Formatting

You can also specify symbols and formatting when you're dictating text.

Text Formatting

To format text using camel case, underscores, etc., you can prefix any text with a style:

lowercasesing song
camel, camel casesingSong
pascal, pascal caseSingSong
all capsSING_SONG
underscores / snakesing_song
one wordsingsong

Creating text with formatting

insert <formatting> <text>


insert camel case my balance equals all caps starting balance plus one
myBalance = STARTING_BALANCE + 1

You can also style existing text by describing a style, followed by a selector to change:

Applying formatting to existing text

(capitalize | camel | pascal | all caps | underscores) <selector>


capitalize foo
camel case next two words
sing song


You can include symbols when speaking any insert command. Here's a list of all of the symbols supported by Serenade.

plus+dash, minus-
star, times*slash, divided by/
less than or equal to<=less than<
greater than or equal to>=greater than>
not equal!=double equal==
triple equal===equal=
left shift<<right shift>>
dot, period.underscore_
semicolon;bang, exclam!
question mark?tilde~
percent, mod%at@
dollar$right arrow->
left brace{right brace}
left bracket[right bracket]
single quote'quote, double quote"

Enclosure Symbols

Enclosure symbols can be used to wrap text. You can also dictate opening and closing enclosure symbols separately. Here's a list of all of the enclosure symbols supported by Serenade:

braces{ }brackets[ ]
comparators, angle brackets< >quotes, string" "
single quotes' 'triple quotes""" """
of, parens( )underscores_ _
double underscores__ __

You can use enclosure symbols in any insert command.

Creating text with enclosures

insert <enclosure> <text>


insert f of x
add greeting equals string name
greeting = "name"
insert value equals values brackets zero
value = values[0]

Escaping Symbols

If you need to use the literal text representation of a symbol (e.g., the word dash rather than the - character, you can escape it in a few ways:


(insert | type) (escape | the word) <symbol>


insert plus
insert escape plus

System-Wide Commands

Serenade doesn't just work for applications that have a native Serenade plugin—you can control any application with voice using Serenade. No matter what application you're using, you can use commands like insert to insert text, press to press keys (to trigger shortcuts), and focus to switch apps.

App Control

With commands like focus, launch, and close, you can quickly switch, open, and close apps with voice.

Bring an application to the foreground

focus <text>


focus chrome
focus code

Launch an application

launch <text>


launch atom
launch slack

Close an application

close <text>


close terminal
close music

Switching among windows of the current app (macOS only)

switch window

Pause Serenade

(pause | stop listening)

Sending Keystrokes

Inside of any application, you can use the press command to press combinations of keyboard keys—handy for triggering keyboard shortcuts—or the insert command to dictate text.

Press a key combination

press <key>


press enter
press control tab
press command k

Type a string

(insert | type) <text>


insert g mail dot com

Manipulate tabs

(new | close | next | previous) tab

Trigger an undo or redo

(undo | redo)

Copy and paste text

(cut | copy | paste)

Type a string and press enter

run <text>

Trigger a mouse click

[left | right | middle] <click>

Tips and Tricks

  • Instead of worrying about spacing while writing code, use style file once your code is in a reasonable state, and Serenade will automatically format the entire file.
  • Long insert or add commands can be less accurate than shorter commands. If you're seeing low accuracy, try breaking up longer commands into smaller, separate commands.
  • The insert and add commands are similar, but have distinct use cases—add works best for writing new lines of code, including larger constructs like functions or classes, while insert works best for inserting or appending text to an existing line.
  • Use copy/cut, paste, and go to liberally in order to more quickly move code around.
  • Make sure your system's microphone volume is set to the right level. We've found that around 80%, to make sure the input isn't too loud or too quiet, works best, but try moving it around if Serenade's results aren't accurate.
  • When using Serenade, try to speak conversationally, as though you were pair programming with someone seated next to you. Over-enunciating words can actually make Serenade less accurate!
  • If Serenade doesn't know a word, like numpy, you can spell it in a command, as with add import n u m p y.