★ Bộ gõ tiếng Việt · mã nguồn mở

Gõ tiếng Việt,
mượt như ý.

Telex, Simple Telex, VNI và VIQR trên một lõi Rust nhỏ, thuần logic. Gõ thử bằng WASM trong trình duyệt, hoặc gọi API Python để tích hợp vào công cụ của bạn.

  • 4 kiểu gõ
  • 16 bảng mã
  • 0 phụ thuộc runtime
  • WASM + C ABI
Gõ thử Telex
Phím thô: — sẵn sàng
Tùy chọn nâng cao
Thử nhanh
Vì sao ViFastKey

Đủ thông minh để quên đi.
Đủ nhỏ để chạy mọi nơi.

Engine chỉ giữ chuỗi phím thô của từ hiện tại rồi dựng lại từ đầu. Nhờ vậy dấu luôn đúng vị trí, kể cả khi gõ dấu trước hay sau.

Telex · Simple Telex · VNI · VIQR

Đổi kiểu gõ tức thì. Hỗ trợ Quick Telex, w → ư, phím [ ] và kiểu đặt dấu cũ/mới.

Ưu tiên tiếng Việt

Từ Việt hợp lệ luôn thắng: mix → mĩ, too → tô. Gõ tiếng Anh bằng escape Telex (mixx → mix) hoặc chuyển chế độ Anh.

Macro & viết hoa

ko → không, vn → Việt Nam. Giữ đúng kiểu hoa/thường và tự viết hoa đầu câu nếu bật.

Hồ sơ theo ứng dụng

Terminal dùng preedit, Chrome chờ ack, Firefox tắt sửa từ cũ, game tắt bộ gõ. Cùng một engine, hành vi phù hợp từng app.

Sửa lại từ đã gõ

Gõ thêm dấu vào từ vừa xong: tiêng + s → tiếng. Backspace xoá đúng ký tự hiển thị và giữ dấu phần còn lại.

Một lõi, mọi nền tảng

Rust core + C ABI cho Windows hook, IMK, Fcitx5/IBus, WASM cho web, Python làm oracle. Cùng một bộ golden test và conformance.

Kiến trúc

Chuỗi phím thô
→ một Action.

Mỗi phím đi qua Composer rồi trả về đúng một hành động: chèn, thay thế, preedit hoặc để hệ điều hành xử lý. Adapter chỉ việc áp Action — không chứa logic tiếng Việt.

  • 13.337 ca core + 3.000 kịch bản engine
  • NFC/NFD ở đầu ra, UTF-16 ở ranh giới FFI
  • MAX_RAW = 24 chặn chi phí xử lý mỗi phím
action.json
// gõ: t i e e n g s
{
  "type": "replace",
  "delete_before": 3,
  "insert": "ếng",
  "pass_key": false
}
chạy local · không gọi mạng
API Python

Gọi engine bằng
một request.

Playground chạy WASM ngay trong trình duyệt. API Python chạy bản oracle của dự án — cùng engine dùng để sinh bộ conformance cho bản Rust — nên bạn có thể kiểm tra, tự động hoá hoặc tích hợp mà không cần cài gì.

POST /api/type sẵn sàng
Kết quả Tiếng Việt là ngôn ngữ rất hay.

Hỗ trợ < Backspace, | Enter, ~ Escape. Không lưu nội dung bạn gõ.

curl
# chuỗi phím thô → chữ Việt
curl -s https://vifastkey.hoctuthien.com/api/type \
  -H 'content-type: application/json' \
  -d '{"text":"Tieengs Vieejt","method":"telex","tone":"new"}'
{"output":"Tiếng Việt","engine":"python","version":"0.1.2"}
  • Đúng oracle. Cùng engine Python sinh conformance cho Rust, không phải bản rút gọn.
  • 16 bảng mã. /api/charset chuyển Unicode, TCVN3, VNI-Windows, VISCII, VIQR, CP1258, NCR...
  • Nhẹ. Không gọi mạng, không model, chạy trong container Python 3.12.
Hướng dẫn & tài liệu
Sản phẩm

Hai sản phẩm,
một hệ sinh thái.

Cùng chạy local-first, cùng mục tiêu tiếng Việt nhẹ và nhanh: một bên gõ thành chữ, một bên đọc thành tiếng.

Đang xem · Bộ gõ

ViFastKey

Bộ gõ tiếng Việt nhỏ, nhanh, thuần logic trên lõi Rust.

  • Telex, Simple Telex, VNI và VIQR
  • 13.337 ca core + 3.000 kịch bản engine
  • WASM, C ABI, API Python; desktop, mobile và UEFI demo
Cùng hệ sinh thái · TTS

ViFastTts

Giọng đọc tiếng Việt non-autoregressive, ONNX CPU, 24 kHz.

  • Model Ngọc Huyền small 6,1M tham số
  • Windows, macOS, Linux, Android, iOS, extension
  • API REST/stream, CLI server, Python, ONNX
Tải về · v0.1.2

Chọn nền tảng.
Cài trong vài phút.

Bản phát hành đầu tiên: Windows hook-only, macOS IMK, Linux IBus/Fcitx5, Android, iOS Simulator, Chrome/Edge và UEFI x86_64 demo. Mỗi tab có file tải, yêu cầu hệ thống và các bước cài chi tiết.

v0.1.2 02/11/2026 · Bản phát hành chính thức Hướng dẫn cài đặt ↗ SHA256SUMS ↗ Hướng dẫn đầy đủ ↗

Windows 10/11 · x64

Hook-only một binary: Settings + tray + hook, không cần TSF, không cần Administrator.

Các bước cài

  1. Tải và giải nénChuột phải file ZIP → Extract All. Đừng chạy trực tiếp trong file nén.
  2. Chạy installerMở PowerShell tại thư mục vừa giải nén:
    Set-ExecutionPolicy -Scope Process Bypass
    .\install.ps1
    Installer chép app vào %LOCALAPPDATA%\ViFastKey, thêm autostart và chạy hook nền. Không cần quyền Administrator.
  3. Chọn English (US)Settings → Time & language → Language & region → thêm English (United States), rồi Win+Space chọn ENG. ViFastKey chỉ xử lý khi input source là English US; Vietnamese/Japanese sẽ pass-through.
  4. Kiểm traMở Notepad, gõ Tieengs Vieejt → Tiếng Việt. Alt+, đổi Việt/Anh; Ctrl+Shift+, mở Settings.
  5. Nếu SmartScreen cảnh báoBản chưa ký số: bấm More info → Run anyway. Chỉ tải từ trang này hoặc GitHub Release chính thức.
Xử lý sự cố Windows

Gõ bị đôi hoặc không gõ được: kiểm tra input source đang là English US (ENG), không phải Vietnamese; mở Settings → kiểm tra trạng thái hook.

Không thấy tray: chạy lại vifastkey-settings.exe hoặc kiểm tra Task Manager; menu tray → Thoát rồi mở lại.

Gỡ: chạy .\uninstall.ps1; config/macro trong %APPDATA%\ViFastKey được giữ lại.

Đã sửa

Lỗi đã sửa gần đây.

Phản hồi từ người dùng và cách đã xử lý. Build là versionCode của APK Android; versionName vẫn là 0.1.2.

Build 27 · 05/11/2026Đã sửa

“Menu tray mở cấu hình không lên; app chiếm taskbar; chọn app phải gõ id.”

Đã sửa: Windows Settings ẩn khỏi taskbar/Alt+Tab và mở lại được từ tray; tab Ứng dụng hiển thị danh sách app đã cấu hình, bên dưới là app đang chạy (process + tên cửa sổ) để chọn thay vì gõ id; macOS có picker app đang chạy để thêm vào danh sách loại trừ; menu bên trái có icon. Bản 0.1.2, Android build 27.

Build 25 · 02/11/2026Đã sửa

“Gõ sai nhiều ký tự rồi xoá hết, không khôi phục đúng từ trước.”

Đã sửa: engine giữ trạng thái soft-reset qua từ mới; xoá hết từ vừa gõ + dấu cách sẽ khôi phục từ trước (cả Preedit và Replace), sửa tiếp dấu/kiểu gõ bình thường.

Build 24 · 01/11/2026Đã sửa

“Ẩn rồi mở lại bàn phím vẫn ở trang ký tự đặc biệt.”

Đã sửa: mỗi lần input view được mở lại đều reset về layout chữ (hoặc bàn phím số nếu field số), không giữ trang ký tự của phiên trước.

Build 23 · 01/11/2026Đã sửa

“Replace trên Messenger/Facebook bị nháy do xoá rồi commit.”

Đã sửa: Android 14+ dùng InputConnection.replaceText() thay cả range trong một lệnh; Android cũ hoặc field dài hơn 4096 ký tự fallback batch delete + commit.

Build 22 · 01/11/2026Đã sửa

“Mở bàn phím ở Facebook/app mới lại hiện tab ký tự đặc biệt thay vì chữ.”

Đã sửa: vào field/app mới tự reset về layout chữ (hoặc bàn phím số nếu field số); chỉ giữ layout đang dùng khi quay lại cùng field.

Build 21 · 01/11/2026Đã sửa

“Gõ chế độ Replace hơi nháy do xoá rồi commit từng phím.”

Đã sửa: gộp delete + commit vào batch edit, bỏ setComposingText/finish rỗng ở chế độ không gạch chân; suggestion/autocorrect cũng dùng batch.

Build 20 · 01/11/2026Đã sửa

“Gõ ‘thoảng’ rồi thêm e, xoá e không quay lại ‘thoảng’.”

Đã sửa: sửa trong engine/core: khôi phục khi phần còn lại là âm tiết Việt hợp lệ, không chỉ khi có trong từ điển common; áp dụng cho mọi UI.

Build 20 · 01/11/2026Đã sửa

“Muốn mặc định không có gạch chân preedit như Gboard.”

Đã sửa: mặc định dùng Replace/commit, không gạch chân; bật “Hiện gạch chân chữ đang gõ” trong Cài đặt → Nâng cao nếu muốn preedit.

Build 19 · 01/11/2026Đã sửa

“APK Android có thể dùng JNI cũ sau khi sửa core; gõ vẫn gặp lỗi cũ.”

Đã sửa: build Android chạy lại vfk-jni từ core trước khi đóng APK; build 19 dùng native library mới thay vì .so cũ trong jniLibs.

Build 19 · 01/11/2026Đã sửa

“Chiều cao bàn phím cố định, không chỉnh cao hơn được.”

Đã sửa: thêm chiều cao 100/115/130/145% trong Settings → Bàn phím; áp dụng cho layout chữ, ký tự, số, emoji và cả hàng số.

Build 19 · 01/11/2026Đã sửa

“Muốn cài đặt nhanh ngay trong bàn phím như Gboard.”

Đã sửa: thêm nút 4 ô ở thanh trên: đổi nhanh chiều cao, bật/tắt hàng số và mở Cài đặt đầy đủ; VNI vẫn khóa hàng số.

Build 18 · 01/11/2026Đã sửa

“Telex không có hàng số 1–0; VNI thì không có cách bật/tắt rõ ràng.”

Đã sửa: thêm tùy chọn “Hiện hàng số 1–0 trên bàn phím chữ”: Telex mặc định tắt, có thể bật; VNI luôn bật và khóa tắt vì cần số để gõ dấu/âm.

Build 18 · 01/11/2026Đã sửa

“Gõ ký tự đặc biệt xong tự nhảy về bàn phím chữ; người quen ở lại bàn phím ký tự.”

Đã sửa: tùy chọn nằm trong Cài đặt → Nâng cao, mặc định tắt; bật nếu muốn tự quay về bàn phím chữ.

Build 18 · 01/11/2026Đã sửa

“Khó phân biệt các bản build Android vì chỉ thấy 0.1.0.”

Đã sửa: Settings hiển thị “Phiên bản 0.1.0 · build 18”; versionCode vẫn là định danh chính thức, versionName giữ 0.1.0.

Build 17 · 01/11/2026Đã sửa

“Chiều cao tab emoji cao hơn layout khác nên bàn phím bị giật khi chuyển tab.”

Đã sửa: tab emoji cao bằng layout hiện tại (chữ/ký tự/số, kể cả VNI); hàng “Hay dùng” co lại, lưới tự bù và vẫn lộ một phần hàng kế tiếp.

Build 16 · 01/11/2026Đã sửa

“Gõ ‘Nguyễn’ trong app ghi chú rồi để nguyên, một lúc sau thành ‘NguyễnNguyễn’.”

Đã sửa: khi app tự chốt vùng soạn thảo, IME chỉ finishComposingText và không chèn lại preedit; hết nhân đôi chữ.

Build 16 · 01/11/2026Đã sửa

“Danh sách emoji còn ít.”

Đã sửa: mở rộng lên 1.121 emoji: mặt, người, động vật, thiên nhiên, đồ ăn, du lịch, hoạt động, đồ vật, biểu tượng và cờ; vẫn lazy + hàng “Hay dùng”.

Build 16 · 01/11/2026Đã sửa

“Tab emoji bị cách một hàng trống; lưới khớp đúng hàng cuối nên khó thấy còn cuộn.”

Đã sửa: bỏ hàng gợi ý trống khi ở tab emoji, hàng “Hay dùng” sát thanh trên; lưới luôn lộ một phần hàng kế tiếp kèm scrollbar.

Build 16 · 01/11/2026Đã sửa

“Chạm/kéo để cuộn tab emoji vẫn rung dù chưa chọn icon.”

Đã sửa: chỉ rung và phát âm thanh khi thực sự chọn emoji; cuộn không rung.

Build 15 · 01/11/2026Đã sửa

“Muốn gợi ý emoji theo thói quen; icon hay dùng nằm bên phải nhãn.”

Đã sửa: hàng “Hay dùng” ở đầu bảng emoji, xếp theo tần suất và lần dùng gần nhất, lưu local; nhãn bên trái, các icon gợi ý bên phải.

Build 15 · 01/11/2026Đã sửa

“Nút Lưu cấu hình nằm cuối trang nên dễ bị bỏ sót.”

Đã sửa: thanh Lưu cố định ở đáy màn hình, nút cam luôn hiển thị kèm ghi chú “Cấu hình áp dụng ngay sau khi lưu.”

Build 14 · 01/11/2026Đã sửa

“Chế độ VNI không có số nên không gõ được.”

Đã sửa: layout chữ tự thêm hàng số 1–0 khi chọn VNI để gõ dấu/âm VNI ngay, không cần mở ?123.

Build 14 · 01/11/2026Đã sửa

“Giữ phím chọn số xong phím còn sáng; dấu phẩy sát đáy.”

Đã sửa: popup biến thể mặc định số, kéo ngang để chọn dấu; phím không còn highlight sau khi chọn. Nút phẩy giữ nguyên vị trí, chỉ nhích dấu phẩy bên trong lên.

Build 13 · 01/11/2026Đã sửa

“Bảng nhớ tạm không có nút đóng, chạm lại icon không tắt, che icon clipboard.”

Đã sửa: thêm nút ✕, chạm ra ngoài hoặc chạm lại nút 📋 để đóng; panel nằm dưới thanh trên nên không che icon.

Build 13 · 01/11/2026Đã sửa

“Emoji render hết một lần nên giật lag, khớp 3 hàng khó biết còn icon bên dưới.”

Đã sửa: chuyển sang GridView lazy, chỉ render ô đang nhìn thấy; hiện 3,5 hàng và scrollbar để thấy còn cuộn.

Build 12 · 01/11/2026Đã sửa

“Bấm Backspace ký tự cuối bị khựng, phải bấm lần nữa.”

Đã sửa: xoá composing region thay vì commit lại preedit rỗng; Backspace cũng xoá được vùng bôi đen và tăng tốc khi giữ.

Build 7 · 01/11/2026Đã sửa

“Bôi đen xoá không được; giữ phím xoá tốc độ đều.”

Đã sửa: Backspace xoá selection bằng một lần commit rỗng; giữ Backspace lặp nhanh dần 65ms → 22ms.

Build 3/4 · 01/11/2026Đã sửa

“Gửi tin nhắn lúc còn preedit thì sót chữ.”

Đã sửa: phát hiện host đã xoá field thì xoá composition, không commit lại preedit vào ô nhập.

Build 2 · 01/11/2026Đã sửa

“Bàn phím nhỏ, khó gõ; muốn bỏ hàng số; thiếu auto Shift.”

Đã sửa: phím lớn theo Gboard, bỏ hàng số khỏi layout chữ, tự Shift đầu câu, rung/âm thanh khi chạm phím.

Thống kê

Con số ẩn danh.

Số liệu tổng hợp từ API Python, tự làm mới khi tải trang. Không lưu nội dung bạn gõ.

—lượt xem trang
—lượt chạy API
—khách ẩn danh
—ký tự đã chuyển
—góp ý / báo lỗi
—lượt bấm tải

Lượt bấm tải theo nền tảng

Đang tải…

“Khách ẩn danh” là ước lượng theo hash visitor/IP; không lưu nội dung gõ thử hay IP thô. Lượt tải chỉ đếm lúc bấm nút trên landing, không phải số file đã tải xong. Mở trang admin ↗