Dvorak QWERTY converter
Recover text typed with the wrong US keyboard layout: Hello typed on QWERTY keys while the computer expected Dvorak comes out as D.nnr, and one swap brings it back to Hello. Works in both directions. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Text
- Hello world
- Direction
- Qwerty to dvorak
- Result
- D.nnr ,rpne
- Length
- 11
- Mapped count
- 10
- Unmapped count
- 0
When the operating system is set to Dvorak and you type on a QWERTY-labeled keyboard—or the reverse—you get readable-looking garbage that is not a cipher but a layout mismatch. Characters outside the US layout tables pass through unchanged and are listed under unmapped keys so you can see what did not remap.
How QWERTY and Dvorak share key positions
United States QWERTY and United States Dvorak place different glyphs on the same physical keys. This converter does not rotate letters along the alphabet and does not implement a keyboard-shift cipher that slides within a row. It builds two parallel tables of forty-seven unshifted keys: the number row, the three alphabetic rows, and the backslash key.
Index i in the QWERTY string is the same key as index i in the Dvorak string. Uppercase Latin letters are handled by mapping the lowercase form and restoring case when the target glyph is also a letter, so Hello on QWERTY becomes D.nnr on Dvorak and the reverse direction restores Hello. Digits and the punctuation that appear on those US rows remap the same way.
Spaces, tabs, and newlines are preserved silently so multi-word phrases keep their shape. There is no wall-clock timestamp, no random seed, and no external service.
Where layout remapping shows up in real work
Developers and writers who switch between Dvorak and QWERTY often discover a whole sentence was entered under the wrong OS layout after they already hit send; a single trusted remap recovers the intended English without retyping. Support desks and IT help channels receive garbled tickets from users who left an alternate layout enabled on a shared machine and need the inverse conversion before the issue can be understood.
Curriculum authors teaching keyboard ergonomics or layout history want a live demo that shows the same physical key producing different characters on QWERTY versus Dvorak without installing native tools. Capture-the-flag warm-ups and puzzle hunts sometimes hide messages that look like nonsense until you apply a layout swap rather than a classical cipher. If you need a QWERTY adjacent-key shift cipher, Caesar alphabet rotation, or a general encoding such as Base64, treat those as separate search intents and landings rather than overloading this Dvorak–QWERTY key-position page.
What you can do with it
Recover text typed on the wrong layout
Paste a message or password prompt entered under Dvorak while QWERTY was expected (or the reverse) and restore the intended string in one step.
IT and support ticket cleanup
Decode garbled reports from users who left an alternate US layout enabled on a shared workstation before the ticket text makes sense.
Classroom and puzzle layout demos
Show students or solvers how the same physical keys produce different glyphs on QWERTY versus Dvorak with a deterministic, reversible map.
FAQ
What does this Dvorak QWERTY converter do?
It remaps each character by physical key position between the US QWERTY and US Dvorak layouts, in either direction, and lists characters that are not on those tables.
Is this the same as a keyboard shift cipher?
No. A keyboard shift cipher slides letters along a QWERTY row by an offset. This tool swaps glyphs between two full layouts by shared key position and is fully reversible with the opposite direction.
What does it cost?
The browser tool is free and runs locally.
How do I fix a message I typed with the wrong keyboard layout?
Paste the garbled text and pick the direction that matches what happened. If the computer was set to Dvorak while you typed by QWERTY habit, choose Dvorak to QWERTY: D.nnr ,rpne turns back into Hello world.
What happens to accented letters and emoji?
They are copied into the result unchanged, because they have no place on the US QWERTY or Dvorak key tables. Each one is listed once, so you can see exactly what was not remapped.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/enc/dvorak-qwerty \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Hello"}'const res = await fetch("https://api.kit.forhosting.com/enc/dvorak-qwerty", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "Hello"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/dvorak-qwerty",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "Hello"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/dvorak-qwerty", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"Hello"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"Hello"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/dvorak-qwerty", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"text": "Hello"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.dvorak_qwerty",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
This Dvorak QWERTY converter translates each character by the physical key it shares on the other United States layout: the same keycap position that produces Q on QWERTY produces the apostrophe on Dvorak, W becomes comma, and so on across the number row and three letter rows. Choose qwerty_to_dvorak or dvorak_to_qwerty, paste the mistyped string, and recover what you meant to write. The free browser tool and the paid API share one pure deterministic function with no network call and no randomness.
How QWERTY and Dvorak share key positions
Converting qwerty_to_dvorak replaces each source character with the Dvorak glyph at that index; dvorak_to_qwerty applies the inverse map. Any other character—emoji, accented letters, currency symbols, or keys from other national layouts—is copied into the result and recorded once in the unmapped_keys list. Because the tables are fixed constants and the walk is a pure loop, identical text and direction always produce identical JSON.
What you send and what you get back
Send a required string field named text and an optional direction field. Direction accepts qwerty_to_dvorak or dvorak_to_qwerty; when omitted, qwerty_to_dvorak is the default so a minimal payload still remaps usefully. On success the response echoes the original text and the resolved direction, returns the remapped result string, length of that result, mapped_count for how many characters hit a layout table entry, unmapped_count and unmapped_keys for characters that were passed through, plus layout_from and layout_to labels naming the source and target profiles. Missing text, non-object payloads, non-string objects for text, strings longer than the documented maximum, and unknown direction values fail with invalid_input and a clear English message. Validation failures do not consume prepaid balance. Classic checks include remapping Hello with qwerty_to_dvorak to D.nnr, reversing that string with dvorak_to_qwerty to recover Hello, remapping hello world including the space, and confirming that a string with emoji reports the emoji in unmapped_keys while still returning a full result. Pricing for successful API calls is the published base of $0.002 per item.
Where layout remapping shows up in real work
Because this capability is a pure parse engine, API pricing is the published base of $0.002 per successful item and failed validation does not consume balance.
Technical questions
Which direction should I choose?
Use qwerty_to_dvorak when the text was produced as QWERTY characters and should be read as Dvorak key positions; use dvorak_to_qwerty for the inverse. The default is qwerty_to_dvorak.
What are unmapped keys?
Characters outside the US layout tables—such as emoji or accented letters—are copied into the result unchanged and listed uniquely in unmapped_keys so you can see what did not remap.