indent · dedent · auto-dedent

Indent or dedent every line

Add or remove leading whitespace. Auto-dedent strips the common leading indent across all lines.

Indent Text Workspace
Lines
3
38 B
Action
indent
2 spaces
Output
44 B
larger
Diff
+6
bytes
Amount
input · code/text
output
  function hello() {
    return 'world';
  }
Quick Start

How to indent or dedent text

Three modes — add a fixed indent, remove a fixed indent, or auto-detect the common leading whitespace and strip it.

  1. 01

    Paste text

    Code, prose, anything.

    Tokenisation is Unicode-aware via \p{L}\p{N} property classes — so accented letters, ideographs, and emoji code points all count correctly.

    anyUTF-8Unicodecode pointslive
    input · textraw · UTF-8
    A
    B
    loaded · UTF-8UTF-8 · ready
  2. 02

    Indent

    Adds N spaces/tabs to the start of every non-empty line.

    Live re-counts run on every keystroke through a memoised reducer, so even multi-megabyte inputs stay smooth in the editor.

    indentlivememoisedoptionssnappy
    indent · options+2 · live
      A
      B
    options applied · livelive
  3. 03

    Dedent

    Removes up to N spaces/tabs from the start of every line.

    Output preserves the original line endings (\n vs \r\n) and trailing whitespace is reported separately so you can spot diff-only changes.

    dedentline endingswhitespacediff-cleanreproducible
    dedent · counted-2 · ready
    A
    B
    counted · livecounted
  4. 04

    Auto-dedent

    Strips the longest common prefix of whitespace from all non-empty lines (Python textwrap.dedent style).

    Copy writes via the Async Clipboard API; downloads ship as text/plain; charset=utf-8 — nothing leaves your tab.

    autoclipboardtext/plainblobclient-side
    auto · copiedcommon · done
    A
    B
    ready · ready to shipsuccess
Pro tips

Text-processing fundamentals worth knowing

Tokenise with Unicode classes

Use \p{L}\p{N} with the u flag so accents, ideographs, and emoji count properly.

Normalise line endings

Convert \r\n to \n before diffing or hashing — Windows-vs-Unix endings produce phantom changes.

Mind invisible characters

Zero-width joiners, BOMs, and non-breaking spaces look identical to ASCII space. Strip them before comparison or storage.

Stream don’t slurp

For multi-megabyte text, iterate line-by-line rather than loading everything to memory — keeps the tab responsive.

Choose collation deliberately

Default JS sort is code-point order, not human alphabetical. Use Intl.Collator for locale-aware sorting.

Re-run after normalisation

NFC vs NFD changes byte length but not visible glyphs. String.prototype.normalize() before counts and comparisons.

Use Cases

When to indent / dedent

Anywhere alignment matters.

Embedding code

Indent a snippet to fit inside a markdown bullet. Tokenisation uses Unicode property classes (\p{L}, \p{N}) with the u flag so accents, ideographs, and emoji code points all count correctly. Surrogate-pair-aware counts mean 🚀 weighs 1, not 2.

Unicode-correct

Heredoc cleanup

Strip the heredoc's leading indent from a template. Result updates as you type — paste and watch totals settle in milliseconds even on multi-megabyte inputs. Heavy work runs through a memoised reducer so the editor never janks.

diff-clean

YAML editing

Re-align nested YAML keys. Output normalises line endings to LF for clean diffs across platforms. Windows-vs-Unix CRLF mismatches disappear, which keeps git blame honest and review comments focused on real changes.

instant counts

PR descriptions

Indent code block snippets in a markdown PR. Code-point counts are stable across NFC/NFD normalisation. Pair with the Reading Time Calculator to layer scan-time on top of raw counts, useful for editorial budgets and SEO meta-description limits.

platform-aware

Copy from PDF

Strip excess leading indent from extracted text. All processing runs client-side — paste sensitive or pre-publish copy without it leaving the tab. The clipboard API writes UTF-8 text/plain so it survives transit to any editor or CMS.

code-point-accurate

Test fixtures

Auto-dedent a heredoc-defined fixture to its canonical form. Same input plus same options always produces identical output, so the tool is safe to embed in CI scripts or doc-generation pipelines without race conditions.

lossless
FAQ

Frequently asked questions

Finds the longest common leading whitespace prefix across all non-empty lines and removes it — like Python's textwrap.dedent.
No — only non-empty lines get the prefix in Indent mode.
Pick either. The Amount slider is in units (1 tab or 1 space each).
Auto-dedent handles mixed indentation by finding the shared prefix; manual dedent removes only the unit you select.
No. All processing runs locally.
Suggest a tool

Something missing?

Tell us what you need. We ship the top requests every two weeks.

Sent straight to the maintainers · no account needed
47 in queue·8 shipped this month
Request queued. Thanks!