Line Counter
Text ToolsCount lines in text with separate totals for blank lines, non-blank lines, words, characters, and paragraphs for detailed statistics.. Free, private — all processing in your browser.
The Line Counter tells you how many lines are in any text, with separate tallies for total lines, blank lines, non-blank lines, paragraphs, words, and characters. It sounds like a one-number answer, but in practice the right number depends on what you are counting. Lines of code excludes blank lines and comments. Log file lines include every entry. Paragraph count treats double-newline-separated blocks as one each. Word counters need to know if punctuation separates tokens. This tool gives you all the numbers at once, so you can grab the one that matters for your context.
The tool is the fastest way to get text statistics for code reviews, document length checks, log file sizing, CSV row counts, and writing progress tracking. Paste text, read the numbers, copy the ones you need. Blank lines and non-blank lines are reported separately (useful when \"how many lines\" means \"how many lines with content\"). Paragraph count treats double-newline-separated blocks as one each. Character counts include or exclude whitespace, and count Unicode grapheme clusters (user-perceived characters) rather than code units. Everything runs in the browser without uploading a single byte.
Line Counter — key features
Multiple counts at once
Lines, blank lines, non-blank lines, paragraphs, words, characters — all shown simultaneously.
Unicode-correct character count
Uses grapheme clusters, so emoji and combined characters count as one each, not as multiple code units.
With and without whitespace
Character counts in both modes so you can pick the number that matches your form or tool.
Paragraph detection
Counts paragraphs as double-newline-separated blocks, matching how documents usually structure content.
Line ending agnostic
Handles Unix, Windows, Mac, and Unicode line separators correctly.
Live updates
Counts update as you type or paste, so you see the impact of each edit immediately.
Client-side only
No text leaves the browser — works on confidential documents without privacy concern.
Copy any stat
One-click copy for each count (total lines, words, characters) to paste into reports or code reviews.
How to use the Line Counter
- 1
Paste your text
Drop text into the input field. The counts update automatically.
- 2
Read the stats
Every relevant count appears in the stats panel — total lines, blank lines, non-blank, paragraphs, words, characters with and without spaces.
- 3
Pick the number you need
For code reviews, non-blank lines. For document length, word count. For character-limited forms, characters without spaces. Pick the one that matches.
- 4
Copy any stat
One-click copy for any individual number to paste into an email, ticket, or document.
- 5
Adjust options
Tweak whitespace-only-as-blank, word-boundary rules, or paragraph separator if the defaults do not fit your content.
Common use cases for the Line Counter
Development
- →Code review metrics: Count lines of code added in a pull request to evaluate review size before committing time to it.
- →Log file sizing: Quickly count lines in a log file to plan processing time or decide on retention policies.
- →File comparison: Compare line counts across two files to spot unexpected differences before diffing.
Writing
- →Article length check: Verify a submission meets a word-count requirement before sending to the editor.
- →Character-limited posts: Count characters for Twitter-style platforms with strict limits.
- →Long-form writing progress: Track word count as you work on a novel, chapter, or thesis.
Data
- →CSV row count: Verify the number of data rows in a CSV matches expected before importing into a database.
- →List size estimation: Count the number of entries in an email list, URL list, or ID list before processing.
- →Export audit: Confirm an export produced the expected number of lines before trusting its completeness.
Line Counter — examples
Simple text
Basic line and word count.
Hello world This is line two Line three
lines: 3 words: 9 characters: 39 (with spaces), 34 (without)
With blank lines
Showing blank vs non-blank count.
first paragraph second paragraph third
total lines: 6 blank: 3 non-blank: 3 paragraphs: 3
Character count with emoji
Grapheme clusters counted as one.
Hello 👋🌍
grapheme clusters: 8 UTF-16 code units: 11 (emoji are 2 code units each)
CSV
Counting data rows.
id,name,email 1,Ana,a@example.com 2,Ben,b@example.com 3,Cara,c@example.com
total lines: 4 excluding header: 3 words: 12
Log file
Quick count of log entries.
2024-05-05 INFO Server started 2024-05-05 ERROR Connection refused 2024-05-05 INFO Reconnecting
lines: 3 each entry is one line (for programs that output multi-line messages, actual event count may differ)
Technical details
Counting lines requires picking a separator. Unix uses \\n, Windows uses \\r\\n, classic Mac uses \\r, Unicode adds \\u2028 (line separator) and \\u2029 (paragraph separator). The tool normalizes all line endings to \\n internally before counting to avoid double-counting CRLF.
Total line count: (split text on \\n).length. If the text ends with a newline, the final \"line\" is empty — include it or exclude it depending on convention (most developers exclude).
Blank line count: count lines matching /^\\s*$/. This catches truly empty lines and lines containing only whitespace. Some tools count only \\s* = \"\" as blank, others include any-whitespace; this tool offers both modes.
Non-blank line count: total minus blank. Matches what most \"line count\" requests actually want.
Paragraph count: split on \\n\\n (or more blank lines) and count non-empty results. Matches how humans see paragraphs visually.
Word count: split on Unicode word boundaries using \\b and count. Handles contractions (\"don\\u2019t\" as one word) with a regex that considers apostrophes part of words. Or split on whitespace, which is simpler but counts \"don\\u2019t\" as one token either way.
Character count: text.length gives JavaScript UTF-16 code units. For user-perceived characters (emojis as one, combined accents as one), use Array.from(text).length or Intl.Segmenter. The tool reports both \"string length\" (code units) and \"visible characters\" (grapheme clusters).
Lines of code (LOC) specific metrics: total, comment, blank, and code lines. This requires parsing comments for the specific language, which is beyond this tool\u2019s scope. For programming-language LOC counts, use a dedicated tool like cloc.
Performance: counting is O(n) in text size. Multi-megabyte text counts instantly; even hundred-megabyte text takes under a second in modern browsers.
Common problems and solutions
⚠Trailing newline counts as extra line
A file ending with \n technically has N+1 lines if you count empty after the last \n. Most tools (wc -l, Git diff) do not count the trailing empty. The tool offers both conventions — pick what matches your tool.
⚠Mixed line endings cause miscount
CRLF endings can double-count if the tool treats \r and \n separately. The tool normalizes to \n internally to avoid this. Verify when pasting multi-origin text that the count matches expectation.
⚠Word count depends on word boundary definition
Is "don\u2019t" one word or two? Is "state-of-the-art" one word or four? Different boundary rules give different counts. The tool uses Unicode word boundaries by default; switch to whitespace-split for a simpler definition.
⚠Character count differs from character limit
Some platforms count code points, some count bytes, some count glyph clusters. A 280-character Twitter limit is code points, not bytes. An SMS 160-character limit is bytes in GSM encoding. Check which count your target platform uses.
⚠Blank vs whitespace-only
" " (three spaces) is not empty but often should be treated as blank. The tool offers both modes — truly empty strings only, or any whitespace-only line.
⚠Paragraph boundary ambiguity
Some texts separate paragraphs with \n, some with \n\n, some with \n\n\n. The tool uses \n\n or more as paragraph separator by default, but you can switch to single-newline mode if needed.
⚠Copy truncation
Some browsers truncate very long pastes. If counts seem low for a large file, check that the paste completed — the browser may have silently dropped content beyond a limit.
Line Counter — comparisons and alternatives
Compared to Unix wc -l, this tool gives multiple counts at once (lines, words, characters, paragraphs) with a visual UI. wc is still ideal for scripting and large files; this tool is ideal for interactive checking.
Compared to Word\u2019s word count, this tool is accessible for any text without needing to open Word and has more granular options. Word\u2019s count is the canonical reference when Word\u2019s interpretation matters for your context.
Compared to spreadsheet COUNTA or LEN formulas, this tool handles multi-line text and paragraph detection that spreadsheets do not. Spreadsheets win for per-cell stats; this tool wins for whole-text analysis.
Frequently asked questions about the Line Counter
▶How do I count lines in text?
Paste the text and the tool shows total lines automatically. By default, blank lines count; enable the "non-blank only" option if you want to exclude blank lines. The count updates live as you type or paste.
▶What is a paragraph for counting purposes?
The tool treats double newlines as paragraph boundaries. Text with a single newline between sentences counts as one paragraph; text with blank lines between sections counts each section as a separate paragraph. This matches how documents usually structure content.
▶Why is my character count different in different tools?
JavaScript string length counts UTF-16 code units. Emoji and non-BMP characters are 2 code units each. Grapheme clusters (what humans see as one character) can be more complex. This tool reports both — pick the one that matches the system you are comparing against.
▶How does the word count handle contractions and hyphens?
By default, the tool uses Unicode word boundaries which treat "don\u2019t" as one word and "state-of-the-art" as one word. If you prefer simple whitespace splitting (which gives different counts for hyphenated compounds), switch to whitespace-split mode in the options.
▶Does the line count include the final newline?
No — by default the tool matches the wc -l convention, which does not count a trailing empty line. A file with "a\nb\n" is 2 lines, not 3. Enable the "count trailing empty" option to include it if your tool expects that.
▶Can it count lines in code separate from comments?
No — code-specific LOC counting requires parsing the language. For programming-language LOC metrics (code lines, comment lines, blank lines broken out), use a dedicated tool like cloc or sloccount. This tool gives generic line counts.
▶How large a text can I count?
Counting is O(n) and fast — tested up to several hundred megabytes in modern browsers with delay under one second. Pasting very large text may slow down the browser tab’s input handling, but the counting itself scales well.
▶Is my text uploaded?
No. All counting runs in your browser. Whatever you paste stays local — no server logging, no third-party analytics. Safe for confidential documents.
Additional resources
- GNU wc manual — Unix wc command, the canonical reference for line, word, and character counting.
- Unicode Segmentation — Reference for word and sentence boundary definitions used in counting operations.
- MDN String.prototype.length — JavaScript string length semantics, explaining why character counts can differ.
- cloc — count lines of code — Dedicated LOC counter that parses programming languages, useful for code-specific counts.
- Intl.Segmenter — Browser API for grapheme-aware text segmentation, used for Unicode-correct character counts.
Related tools
All Text ToolsAdd Line Numbers
Prepend line numbers to every line of text with configurable starting number, padding width, and separator.
Case Converter
Convert between upper, lower, title, camel, snake, kebab, Pascal, CONSTANT cases
Find and Replace
Find and replace text with regex support, case sensitivity, whole-word matching, and preview of all changes before applying.
Remove Duplicate Lines
Remove duplicate lines from text with case-sensitive or case-insensitive matching, preserving original order or sorting the result.
Remove Line Breaks
Remove line breaks from text, convert to spaces, or keep paragraph breaks while flattening unwanted newlines.
Sort Lines
Sort text lines alphabetically, numerically, by length, randomly, or in reverse, with options for case sensitivity and duplicate removal.
Learn more
Explore more tools
200+ free tools that run in your browser.
Browse all tools →