What is lf and crlf

Last updated: April 1, 2026

Quick Answer: LF (line feed) and CRLF (carriage return + line feed) are different text file line ending formats: LF uses one character (Unix/Linux/Mac), while CRLF uses two characters (Windows). This difference can cause compatibility issues in development.

Key Facts

Overview

LF and CRLF are two different ways of representing line breaks in text files. This seemingly trivial difference stems from the history of computer hardware and has surprisingly significant implications for modern development. Understanding line endings is essential for developers working across different operating systems or in collaborative projects.

The History

These line ending formats originated from teletype machines and early computer terminals. A carriage return (CR) physically returned the printhead to the left margin, while a line feed (LF) advanced the paper to the next line. On early systems, you needed both characters to complete a line break. When personal computers emerged, different manufacturers chose different approaches. Unix-like systems adopted LF alone, while DOS and Windows retained both CR and LF.

Technical Differences

LF (Line Feed): Uses a single byte (ASCII 10, represented as \n) to mark line endings. Requires 1 byte per line break.

CRLF (Carriage Return + Line Feed): Uses two bytes (ASCII 13 + ASCII 10, represented as \r\n) to mark line endings. Requires 2 bytes per line break.

CR (Carriage Return): A historical format using only ASCII 13, rarely encountered in modern systems.

Operating System Standards

Different operating systems default to different line endings:

Why It Matters

Files with inconsistent line endings can cause problems in version control systems like Git, which may report every line as changed. Cross-platform teams often encounter merge conflicts due to line ending differences. Build systems, linters, and shell scripts may malfunction with unexpected line endings. Modern text editors and IDEs typically handle line endings transparently, but understanding them prevents subtle bugs in automated systems.

Managing Line Endings

Developers use `.gitattributes` files to normalize line endings across teams. Many code editors include settings to automatically convert line endings. Tools like `dos2unix` and `unix2dos` can convert between formats. Version control systems like Git can be configured with `core.autocrlf` to handle conversion automatically.

FeatureLF (Line Feed)CRLF (Carriage Return + Line Feed)
ASCII Code10 (\n)13 + 10 (\r\n)
Bytes Per Line1 byte2 bytes
Primary OSUnix, Linux, macOSWindows
File Size ImpactSmaller filesSlightly larger files
CompatibilityModern systemsWindows-focused systems

Related Questions

How do I convert LF to CRLF?

Use tools like `dos2unix` or `unix2dos` command-line utilities, or configure your text editor to convert on save. Git can automate this with `core.autocrlf=true`. Many IDEs also offer line ending conversion in settings.

What is .gitattributes used for?

.gitattributes is a Git configuration file that defines how files should be handled. It's commonly used to enforce consistent line endings across teams using the `eol` setting, preventing conflicts from line ending differences.

Do line endings affect code execution?

Generally no, modern systems handle line endings transparently. However, shell scripts, Windows batch files, and some legacy systems may fail with unexpected line endings. Build tools and linters may also report false errors.

Sources

  1. Wikipedia - Newline CC-BY-SA-4.0