March 28, 2026Updated November 7, 20265 min read

How to Dictate camelCase and snake_case on Mac (Honest Answer)

People searching for how to dictate camelCase usually want one of two things: to write new code by voice, or to mention existing identifiers (useEffect, get_user_profile, UserService) in prompts, comments and messages without fixing them afterwards. Whisperer handles the second well and the first differently than you might expect.

The short answer: Whisperer doesn't have spoken casing commands. Saying "camel case get user name" gives you those words, not getUserName. For new code, let an AI coding agent do the naming. For identifiers you say often, add them to the personal dictionary once.

Why spoken casing commands are a poor fit#

Casing commands sound neat in a demo: say "snake case", then the words, and get underscores. In practice:

  • You have to plan every name before you say it. Where does the casing stop? Is it getUserId or getUserID? You end up thinking in syntax, which is what voice was supposed to free you from.
  • Mistakes are hard to fix by voice. A misheard word inside an identifier means reaching for the keyboard anyway.
  • One name is rarely the task. Identifiers live inside lines of code full of symbols, and dictating those is slower still.
  • Your codebase already has conventions. An agent that reads your project picks names that match them. You don't need to say the casing at all.

Whisperer 1.x had a Code Mode with commands like these. It's gone in 2.0.

For new code: describe it, let the agent name it#

Say what the code should do. The agent picks camelCase for your TypeScript, snake_case for your Python and PascalCase for classes, because that's what your files already use.

You say

“add a function that takes a list of orders and returns the total price including tax use the tax rate from the config module”

OutputPrompt
Add a function that takes a list of orders and returns the total price, including tax. Use the tax rate from the config module.

In a Python project an agent will typically write something like calculate_total_price(orders); in TypeScript, calculateTotalPrice(orders). You review the name in the diff, and rename with the keyboard if you want something else.

This works the same in Cursor, Claude Code, Codex, Windsurf and Copilot Chat: hold Fn, speak, release, press ⌘V, send. See how to dictate code on Mac for the full workflow.

For identifiers you mention: use the dictionary#

When you write a prompt, a code review comment or a Slack message, you often name things that already exist. A speech model hears "use effect" and writes two words. The personal dictionary fixes this per word.

What the app hearsCorrect form
use effectuseEffect
use stateuseState
get user profilegetUserProfile
user serviceUserService
max retriesMAX_RETRIES
fetch with retryfetch_with_retry
You say

“the get user profile call fails when use state is still null on first render”

OutputWith dictionary entries
The getUserProfile call fails when useState is still null on first render.

Things to know:

  • Each entry is one word or phrase you choose. It's a spelling fix, not a casing rule. Adding getUserProfile doesn't teach Whisperer to camelCase anything else.
  • Pick entries that won't clash with normal speech. "User service" as UserService is fine in a dev context. Mapping a common phrase you also say in plain English may surprise you in emails.
  • It learns from corrections. Fix a word and Whisperer can add it to the dictionary as a Learned entry.
  • Prompt words (a second tab on the Dictionary page) tell the speech model to expect certain terms. Good for product names like Kubernetes or PostgreSQL that it otherwise mishears.

More in the dictionary setup guide.

Naming conventions, for reference#

ConventionExampleTypical use
camelCasegetUserProfileVariables and functions in JavaScript, TypeScript, Java, Swift
snake_caseget_user_profilePython, Rust, Ruby, SQL columns
PascalCaseUserServiceClasses and types in most languages
CONSTANT_CASEMAX_RETRY_COUNTConstants, environment variables
kebab-caseuser-profileCSS classes, URLs, CLI flags, file names

If you're asking an agent to create something, you can say the convention in plain words when it matters: "name it in snake case". The agent understands that as an instruction; Whisperer just writes your sentence.

What to type instead#

Some things are still faster on the keyboard:

  • A single new variable name in the middle of a line
  • Renames (use your editor's rename symbol)
  • Anything where you'd have to spell letters out loud

Voice is for the sentences around the code. The keyboard is for the code you touch by hand.

FAQ#

Does Whisperer have a "camel case" voice command?#

No. Whisperer does not convert spoken casing or symbol commands. It transcribes what you say as text. You can add specific identifiers to the personal dictionary so they are always written the way you want.

How do I get useEffect instead of "use effect" when dictating?#

Add a dictionary entry with "use effect" as the incorrect form and useEffect as the correct form. From then on, every dictation writes useEffect when you say it.

What's the fastest way to write identifiers by voice?#

Don't dictate them one by one. Describe what the code should do to an AI coding agent and let it pick names that follow your project's conventions. Save dictionary entries for the names you mention in prompts, comments and messages.

Related: How to dictate code on Mac, Voice coding guide, Voice to text for developers, Personal dictionary. See pricing.

Meeting notes and dictation that run on your Mac

$2.99 app, Pro $14.99, paid once. No account, no subscription.

Get Whisperer

Related articles