npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

koroman

v1.0.16

Published

KOROMAN: Korean Romanizer with pronunciation rules based on 국립국어원 표기법

Readme

KOROMAN - Korean Romanizer

KOROMAN is a multilingual Romanizer for Korean text, based on the Revised Romanization system (국립국어원 표기법) with additional pronunciation rules. It converts Hangul syllables into Romanized Latin script across multiple languages: JavaScript, Python, and Java.

KOROMAN은 한국어 텍스트를 **로마자 표기법(국립국어원 표준)**에 따라 로마자로 변환해주는 다국어 라이브러리입니다. 자바스크립트, 파이썬, 자바 환경에서 모두 사용할 수 있으며, 실제 발음에 가까운 표기를 위해 발음 규칙도 적용할 수 있습니다.

🌐 Live Demo


📦 Features

  • Supports Revised Romanization of Korean
  • Applies key Korean phonological rules:
    • Liaison (연음화)
    • Nasal assimilation (비음화)
    • Lateralization (유음화)
    • Aspiration / consonant cluster simplification — refined in 1.0.15
  • Casing options (lower, upper, capitalized) — accepts full names, short aliases, or numeric codes (1.0.14+)
  • Optional hyphen at ambiguous syllable boundaries (useHyphen, 1.0.15+) — e.g. 중앙 → jung-ang, 반구대 → ban-gudae, 해운대 → hae-undae
  • User dictionary (customDictionary, 1.0.15+) — per-call or persistent module-level store; match Korean words and emit user-provided Romanization with the highest priority (casing/phonological rules are not applied to dictionary values)
  • ESM / CJS / TypeScript support
  • Fully tested in each language

📦 주요 기능

  • 표준 로마자 표기법 기반 변환 (국립국어원)
  • 발음 규칙 적용 지원:
    • 연음화 (예: 해돋이 → haedoji)
    • 비음화, 유음화, 거센소리되기, 자음군 단순화 — 1.0.15에서 규칙 다듬음
  • 대소문자 옵션 지원 (소문자, 대문자, 단어/줄 단위 대문자 등) — 1.0.14부터 짧은 별칭/숫자 코드도 허용
  • 모호 음절 경계 자동 붙임표 (useHyphen, 1.0.15+) — 예: 중앙 → jung-ang, 해운대 → hae-undae
  • 사용자 사전 (customDictionary, 1.0.15+) — 호출별 또는 모듈 내부 영구 저장소. 한국어 단어를 사용자 지정 표기로 최우선 치환 (사전 값에는 casing/음운 규칙 미적용)
  • 자바스크립트 ESM/CJS/TS 대응
  • 각 언어별 테스트 코드 포함

🆕 1.0.16 changes

  • 29항 n-insertion (-잎 trigger): 꽃잎kkonnip, etc.
  • Cluster + vowel liaison, 밟-, ㄷ+ㅎ+ㅣ→치
  • customDictionary store starts empty — see CHANGELOG.md

1.0.15 changes (heads-up)

  • Aspiration policy changed. Receiver-final ㄱ/ㄷ/ㅂ + initial ㅎ is now romanized as a single fortis (k/t/p/ch) consistently. The previous noun-only exception (e.g. 묵호 → Mukho, 집현전 → Jiphyeonjeon) required morphological analysis we cannot perform reliably, so it has been dropped:
    • 묵호 → muko, 집현전 → jipyeonjeon, 잡혀 → japyeo, 놓다 → nota
  • Consonant cluster simplification (자음군 단순화) fixed: 흙→heuk, 닭→dak, 삶→sam, 읊→eup, 값→gap.
  • ᆶ + ᄋ liaison preserved: 잃어→ireo (previously ileo).
  • Final ㄷ / ㅎ map to t in standard mode (previously d / h). The legacy mapping is kept for usePronunciationRules: false to preserve 1.0.14 behaviour.

Browser demo (local)

demo/index.html loads ../dist/koroman.browser.js — minimal smoke test without npm in the page.

npm run build
npx --yes serve . -p 8787
# open http://localhost:8787/demo/

🚀 Getting Started

JavaScript (jsDelivr)

<script src="https://cdn.jsdelivr.net/gh/gerosyab/[email protected]/js/dist/koroman.browser.js"></script>
<script>
  const result = koroman.romanize("안녕하세요");
  console.log(result); // → annyeonghaseyo
</script>

JavaScript (Node.js)

npm install koroman

CommonJS

const koroman = require('koroman');

// Basic usage
koroman.romanize("한글"); // → "hangeul"

// With pronunciation rules disabled
koroman.romanize("해돋이", { usePronunciationRules: false }); // → "haedodi"

// With pronunciation rules enabled (default)
koroman.romanize("해돋이"); // → "haedoji"

// Casing options (full names)
koroman.romanize("한글", { casingOption: "uppercase" }); // → "HANGEUL"
koroman.romanize("안녕 한글", { casingOption: "capitalize-word" }); // → "Annyeong Hangeul"
koroman.romanize("안녕\n한글 로마자 변환", { casingOption: "capitalize-line" }); // → "Annyeong\nHangeul romaja byeonhwan"

// 1.0.14+ : short aliases / numeric codes are also accepted
koroman.romanize("한글", { casingOption: "u" });   // → "HANGEUL"
koroman.romanize("한글", { casingOption: "uc" });  // → "HANGEUL"
koroman.romanize("한글", { casingOption: 1 });     // → "HANGEUL"
koroman.romanize("안녕 한글", { casingOption: "cw" }); // → "Annyeong Hangeul"
koroman.romanize("안녕\n한글 로마자 변환", { casingOption: 2 }); // → "Annyeong\nHangeul romaja byeonhwan"

// 1.0.15+ : useHyphen — insert '-' at ambiguous syllable boundaries
koroman.romanize("중앙",   { useHyphen: true }); // → "jung-ang"
koroman.romanize("반구대", { useHyphen: true }); // → "ban-gudae"
koroman.romanize("해운대", { useHyphen: true }); // → "hae-undae"

// 1.0.15+ : customDictionary — per-call user dictionary (highest priority, casing-safe)
koroman.romanize("나는 김철수입니다", {
  customDictionary: { "김철수": "Kim Chul-soo" }
}); // → "naneun Kim Chul-sooimnida"

// 1.0.15+ : persistent dictionary (module-level store)
koroman.setCustomDictionary({ "김철수": "Kim Chul-soo", "서울": "Seoul" });
koroman.addCustomDictionary("부산", "Busan");
koroman.romanize("서울에 사는 김철수"); // → "Seoule saneun Kim Chul-soo"
koroman.romanize("부산", { useCustomDictionary: false }); // → "busan"
koroman.clearCustomDictionary();

casingOption aliases (1.0.14+)

| Canonical | Aliases | Numeric | |--------------------|--------------------------------------|-----------| | lowercase | lower, l, lc | 0 | | uppercase | upper, u, uc | 1 | | capitalize-line | cap-line, cline, cl | 2 | | capitalize-word | cap-word, cword, cw | 3 |

Case-insensitive. Unknown / null / undefined falls back to lowercase.

Persistent customDictionary API (1.0.15+)

| API | Description | |---|---| | setCustomDictionary(dict?) | Replace the entire store. null/empty object clears it. | | addCustomDictionary(dict) / addCustomDictionary(key, value) | Merge/insert entries. | | removeCustomDictionaryEntry(key) | Remove a single key (returns true on success). | | clearCustomDictionary() | Empty the store. | | getCustomDictionary() | Shallow snapshot of the current store. |

Combine with the per-call customDictionary option to override the store on a single call (same-key entries in the option win). Set useCustomDictionary: false on a call to ignore the persistent store entirely.

ESM (requires "type": "module" in package.json)

import { romanize } from 'koroman';

romanize("한글"); // → "hangeul"

TypeScript

import { romanize } from 'koroman';

const result: string = romanize("로마자", {
  usePronunciationRules: true,
  casingOption: "capitalize-line"
}); // → "Romaja"

📜 LICENSE

MIT License

2025 ⓒ Donghe Youn (Daissue)