camelCase, PascalCase, snake_case, and kebab-case: The Complete Developer Guide to Naming Conventions

camelCase, PascalCase, snake_case, and kebab-case: The Complete Developer Guide to Naming Conventions

In software engineering, identifier naming conventions establish team consistency, reduce cognitive load, and streamline cross-disciplinary collaboration. In modern multi-tier application architectures—spanning relational databases, microservice REST APIs, styling systems, and frontend client frameworks—developers constantly navigate conflicting naming requirements. A single business entity may be stored as user_profile_id in PostgreSQL (snake_case), serialized as userProfileId in TypeScript models (camelCase), and referenced as .user-profile-id in CSS selectors (kebab-case).

Understanding the history, syntactical rules, and ecosystem standards governing each casing convention is vital for writing maintainable code and building seamless data conversion pipelines.

The Comprehensive Casing Specification Matrix

Convention Example Identifier Delimiter Rule Primary Ecosystem Standards
camelCase userAccountBalance Capitalize every word except the first; zero spaces. JavaScript, TypeScript, Java variables, Swift, JSON properties.
PascalCase UserAccountBalance Capitalize first letter of every word; zero spaces. C#, .NET classes, React/Vue components, Java class names.
snake_case user_account_balance All lowercase words separated by underscores (_). Python (PEP 8), Rust, Ruby, PostgreSQL & MySQL column names.
kebab-case user-account-balance All lowercase words separated by hyphens (-). CSS class selectors, HTML attributes, URL slugs, REST paths.
CONSTANT_CASE MAX_RETRY_COUNT All uppercase words separated by underscores (_). Global environment variables, immutable application constants.

Ecosystem Norms: Why Python Uses Snake and JS Uses Camel

Why didn't the software industry settle on a single universal standard? Language syntax rules and community style guides drove divergence:

  • The Kebab-Case Constraint in Programming: Kebab-case cannot be used for variable names in most languages because the hyphen (-) is reserved as the subtraction arithmetic operator. An expression like total-cost would be evaluated by compilers as total minus cost. Kebab-case found its home in CSS and URLs where hyphens do not conflict with arithmetic operations.
  • Python's Readability Philosophy: Guido van Rossum and PEP 8 codified snake_case based on psychological studies indicating that human eyes scan words separated by underscores with lower visual friction than capitalized letter transitions.
  • JavaScript's Java Heritage: Developed under marketing pressure to resemble Java in 1995, JavaScript inherited Java's strict camelCase standard for variables and methods and PascalCase for constructors and classes.

The Acronym Dilemma in camelCase

One of the most heated debates in engineering style guides is handling multi-letter acronyms (such as HTTP, URL, or XML) inside camelCase identifiers:

// Strict CamelCase (Recommended by TypeScript & Google Style Guides)
const parseXmlDocument = (url: string) => { ... };
const userHttpEndpoint = "https://api.example.com";

// Uppercase Acronym Retention (Traditional Java Convention)
const parseXMLDocument = (url: string) => { ... };
const userHTTPEndpoint = "https://api.example.com";

Modern linters strongly favor treating acronyms as standard words (parseXmlDocument). This avoids awkward sequences like parseDXMLNode where the boundary between D and XML is ambiguous.

Programmatic Conversion Recipes

When mapping database rows to API payloads, automated conversion algorithms eliminate manual boilerplate:

// JavaScript: Converting snake_case to camelCase
function snakeToCamel(str) {
    return str.replace(/_([a-z0-9])/g, (_, letter) => letter.toUpperCase());
}
console.log(snakeToCamel("created_at_timestamp")); // "createdAtTimestamp"

// Converting camelCase to kebab-case
function camelToKebab(str) {
    return str
        .replace(/([a-z0-9])([A-Z])/g, '$1-$2')
        .toLowerCase();
}
console.log(camelToKebab("userProfileCard")); // "user-profile-card"

To convert entire documents, code models, or lists across conventions with zero setup, use our free client-side Case Converter.

Muhammad Sabir Uppal

Written by Muhammad Sabir Uppal

Lead Software Engineer & Founder of TU Web Tools

Muhammad is a full-stack software engineer specializing in browser-based developer tools, high-performance PHP architecture, and technical SEO. He builds zero-dependency, privacy-first web utilities and publishes in-depth engineering guides to help developers and businesses work faster.

Try the tools mentioned in this guide

All TU Web Tools utilities are free, browser based and need no signup.

Browse all tools

Related articles