dot.case Converter
Convert any phrase into dot.case — all lowercase, words joined by dots. Common in config keys, namespaced identifiers, and i18n translation keys.
User Profile Background Color → user.profile.background.color
Convert any phrase into dot.case — all lowercase, words joined by dots. Common in config keys, namespaced identifiers, and i18n translation keys.
User Profile Background Color → user.profile.background.color
dot.case is a naming convention where words are written in lowercase and joined by dots. It's used heavily for hierarchical configuration keys, internationalisation translation keys, and any context where the dot communicates a logical grouping.
Unlike snake_case or kebab-case, the dots in dot.case usually carry semantic meaning — they signal namespace or hierarchy boundaries, not just word separators.
nav.home.label, checkout.cart.empty.message, errors.validation.email. Translation libraries (i18next, vue-i18n, react-intl) use dot-separated keys to navigate a nested translation object.
Spring Boot's application.properties, log4j config, and many older Unix tools use dot.case for hierarchical configuration: spring.datasource.url, logging.level.root.
RBAC and ABAC systems often encode permissions as dot.case strings: user.read, billing.invoice.write, admin.users.delete. The dots make the hierarchy obvious.
Mixpanel, Segment, and similar analytics tools commonly use dot.case event names: user.signed_up, checkout.completed, video.playback.started.
Reverse-DNS package naming uses dot.case: com.example.app, org.apache.commons. Java, Android, and macOS bundle identifiers all rely on this convention.
The dot.case converter operates by applying a two-stage transformation to the input string. First, it lowercases all alphabetic characters using full Unicode case folding (not just ASCII), which handles accented letters (e.g., É → é). Second, it replaces every sequence of whitespace characters (spaces, tabs, newlines) with a single dot (.). Non-alphanumeric characters other than whitespace are preserved in their original positions, meaning punctuation, numbers, and symbols remain unchanged. The algorithm does not attempt to split camelCase or PascalCase; it only operates on whitespace-delimited tokens. This ensures deterministic, predictable output: the result is always a concatenation of lowercased tokens joined by dots, with no silent modification of acronyms or numbers.
Here's how this tool compares to two other common ways to produce dot.case.
| This tool | sed command | Python one-liner | |
|---|---|---|---|
| Lowercase handling | Full Unicode case folding | tr '[:upper:]' '[:lower:]' (ASCII only unless locale set) | str.lower() (full Unicode) |
| Whitespace reduction | Replaces any whitespace sequence with a single dot | Requires two substitutions: s/[[:space:]]+/./g and s/^\.//; s/\.$// | re.sub(r'\s+', '.', s).strip('.') |
| Preservation of non-whitespace | All non-whitespace characters kept intact | Same, but careful with regex escaping | Same, using re.sub pattern |
The dot.case convention emerged naturally from early programming languages that used dot notation for object property access (e.g., JavaScript, Python). Its adoption for configuration keys was popularized by frameworks like Django (settings.py) and Ruby on Rails (YAML locale files). There is no single inventor; rather, it evolved as a human-readable way to represent hierarchical namespaces in plain text, avoiding the ambiguity of underscores or hyphens in certain file systems and parsers.
They're often interchangeable for hierarchical paths. Dots are more common for in-code identifiers and config keys; slashes are more common for filesystem paths and URL segments. Choose based on context, not either-or.
Yes — most languages use dots for property access (obj.prop), so dot.case is for strings, not identifiers. Use it as the value of a string variable, not as the variable name itself.
The converter strips them. ".user.name." becomes "user.name". If you need the leading dot for a relative-path or hidden-file convention, add it back manually.
Possible but unusual — most operating systems treat the last dot as the extension separator, so my.config.file.json is interpreted as a JSON file named my.config.file. Use kebab-case for filenames unless your tool explicitly expects dots.