In Japanese, Enter means “use this kanji.” Your app thinks it means “send.”

I check how your product handles Japanese input before you ship it: IME conversion, fonts, forms, CSV exports. You get a short report with screen recordings and the fix, usually within two days.

No access to your code needed. I use your product the way anyone in Tokyo would.

I read every public bug report I could find.

85bug reports about Japanese input or display, filed between 2024 and 2026
64different products they were filed against
75%were IME bugs. Most of those: Enter sends a half-typed message.
23came back after an update or a redesign
67,367likes on one Japanese post complaining that chat apps send on Enter

From GitHub issues, vendor forums and posts on X, October 2026. Not exhaustive. I stopped at 85.

What breaks

Enter sends a half-written message

Japanese is typed as kana and converted to kanji, and Enter confirms each conversion. If your keydown handler doesn't check for IME composition, the message, prompt or form goes out mid-sentence. New AI chat inputs are the worst offenders right now.

The fix doesn't survive a redesign

The fix usually lives in one component. Ship a new chat panel or a mobile screen and the bug is back. Your Japanese users tend to find it before your team does.

Kanji drawn with Chinese glyphs

Without lang="ja" and a Japanese font in the stack, browsers fall back to Chinese glyph shapes. Japanese readers notice at once, and it reads as “this wasn’t made for us.”

Forms and exports that don't fit Japan

Full-width digits rejected as invalid. No furigana field. Family name forced last. Addresses that don't start with the postal code. CSV files that open as mojibake in Excel.

Why your test suite misses it

Playwright, Cypress and WebDriver have no API for IME composition. The Playwright request for one has been open since March 2021.1

Simulating it gets you close, but not all the way. When I sent Playwright's keyboard.press('Enter') during a composition in Chrome, the page received keyCode 13 and inserted a newline. A real IME sends keyCode 229 and commits the text instead.2

Safari is its own case. It orders key and composition events differently, and WebKit switched off its fix in 2026 after too many regression reports.3 A Chromium-only CI won't see Safari-only bugs.

  1. github.com/microsoft/playwright/issues/5777
  2. My test, October 2026: headless Chrome 155 with playwright-core 1.56, composition started with the DevTools protocol.
  3. bugs.webkit.org/show_bug.cgi?id=317127

The fix is usually a few lines

Finding every input that needs it, and keeping it fixed release after release, is the hard part. That's the job.

input.addEventListener("keydown", (event) => {  // Enter that confirms an IME conversion is not a submit  if (event.isComposing || event.keyCode === 229) return;  if (event.key === "Enter" && !event.shiftKey) {    event.preventDefault();    send();  }});

What you get

A short report, ranked by impact. Every issue comes with a recording, steps to reproduce and a suggested fix.

Fig. 2 · Sample report
Zenkaku reportacme.appNov 4, 2026

macOS · Windows 11 · Chrome, Safari, Edge · macOS Japanese Input, Google Japanese Input, Microsoft IME

HighEnter during conversion sends the chat message

Where
Assistant panel, on every page
Steps
Type しようしょ, press Space to convert, press Enter to accept 仕様書.
Result
The message goes out as しようしょ. Chrome and Safari, all three IMEs.
Video
0:38
Fix
In the input's keydown handler, return early when event.isComposing is true or event.keyCode is 229.

MediumKanji in the sidebar use Chinese glyph shapes

Fix
Set lang="ja" on the root element for the Japanese locale, and list a Japanese font before the generic fallback.

+ 4 more issues, 2 of them in the signup form

An example. The product and findings are made up.

How it works

  1. Tell me what to check

    Your product URL and the flows that matter. Chat, editor, search, signup, checkout, exports.

  2. I test with real Japanese input

    macOS Japanese Input, Google Japanese Input and Microsoft IME, in Chrome, Safari, Edge and Firefox. iOS and Android if you need them.

  3. You get the report

    Usually within two days. Reply to it with questions and I'll answer them.

Pricing

Start with a free check. If it's useful, keep Japanese working with a check before every release.

Free check

$0 once

One check of up to three flows. I take on 10 teams a month.

  • Real IMEs on macOS and Windows
  • Chrome, Safari, Edge and Firefox
  • Report with recordings and fixes
Request a free check

Release Check

$300 a month

Three-month pilot. Cancel anytime.

  • A check before every release, or twice a month
  • Report within two days of each check
  • A monthly note on Japanese UX
  • Email or Slack, straight to me
Apply for the pilot

Prices in USD. Need Korean or Chinese checked too? Say so in the form.

Request a free check

Tell me about your product. I'll reply within two business days to agree on the flows.

Questions

Who's behind Zenkaku?
Me. I'm a frontend engineer in Tokyo and I type Japanese all day. Every check is done by hand, by a native speaker, on real devices.
Do you need access to our code?
No. I use your product as a normal user, on a free or trial account you choose. No security or load testing. If you want staging builds checked, we can set that up.
Is this translation review?
No, I don't grade your translations. I check that Japanese works: typing, conversion, fonts, line breaks, forms, search, exports, dates and currency. If a translation is clearly wrong, I'll mention it.
Can you check Korean or Chinese?
Not yet. Japanese is what I know. If you need the others, tell me in the form. It helps me decide what to add.
What happens to what we send you?
I use it to run your check and to talk to you about Zenkaku. Details are in the privacy policy.

Apply for the Release Check pilot

$300 a month for three months, cancel anytime. Nothing to pay now. We agree on scope first.