The Tabs vs. Spaces war is over, and spaces have emerged victorious

Rationale for Tabs (Configurable Indent, Accessibility)

  • Tabs are defended as the “semantic indent” character: one tab = one logical level, with visual width left to each user.
  • Supporters emphasize accessibility: people have different eyesight, screens, and density preferences; tabs let each viewer choose 2, 3, 4, 8, etc.
  • Go is cited as an example: official tooling uses tabs so each dev can configure width independently.
  • Some argue this is the intended meaning of the tab character, and that other uses (e.g., “tab = 8 spaces”) misunderstand or misuse it.

Arguments for Spaces and Uniform Rendering

  • Opponents say tabs break the “what I see is what you see” property; inconsistent tab stops (often default 8) make code unreadable in many tools and web views.
  • Hard line-length limits clash with variable-width tabs: a file wrapped to 80 chars at tab=2 may overflow badly at tab=6.
  • Spaces avoid invisible mixed whitespace, confusing diffs, and alignment that shifts with editor settings. Many teams simply ban tabs and let the Tab key insert spaces.

Hybrid Approach: Tabs for Indent, Spaces for Alignment

  • A common compromise is “tabs for indentation, spaces for alignment.”
  • Critics say this invariably degenerates into broken alignment, mixed whitespace, and tooling complexity; linters/formatters rarely enforce it well.
  • There’s a secondary debate on alignment itself: some say column alignment aids readability (e.g., SQL, tables), others call it unnecessary bikeshedding that harms diffs.

Line Length, Tab Width, and Indent Size

  • Disagreement persists over 2 vs 3 vs 4 vs 8 spaces; some argue 3 is visually optimal, others insist on powers of two.
  • Many treat 80 columns as obsolete on modern screens; others still care about side‑by‑side panes and prefer ~100 columns.
  • Variable tab width makes a single global line limit tricky if team members choose different widths.

Tooling, Formatters, and “War Mostly Over”

  • Several claim the war is effectively over because ecosystems standardize via autoformatters (gofmt, rustfmt, Prettier, etc.) and .editorconfig.
  • Others note formatters can break ASCII diagrams or comments, and sometimes change formatting rules between versions.
  • Some suggest the real endgame is read‑time formatting over a structured representation (AST/database), where each user chooses their own visual style; Unclear how widely this can or will be adopted.

Meta Observations

  • Many see the core conflict as (tabs + spaces) vs (spaces-only) rather than tabs vs spaces.
  • There’s broad agreement that consistency per project and letting tools decide is more valuable than winning the argument itself, even as the bikeshedding clearly continues.