Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 21 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,22 @@
# LeanRows: a free large CSV viewer for Windows

**Open a 1.5 GB CSV with 20 million rows using 18 MB of RAM. No installer, no
runtime, no admin rights.**
**Open CSV files too big for Excel. A 1.5 GB CSV with 20 million rows opens
using 18 MB of RAM. Also TSV, JSONL, logs and Excel `.xlsx` workbooks (read-only,
one sheet at a time). No installer, no runtime, no admin rights.**

[Website](https://abooodbah.github.io/leanrows/) · [Microsoft Store](https://apps.microsoft.com/detail/9NMV8GKJXSN0) · [All Lean apps](https://abooodbah.github.io/)
[Website](https://abooodbah.github.io/leanrows/) · [Microsoft Store](https://apps.microsoft.com/detail/9NMV8GKJXSN0) · [Releases](https://github.com/abooodbah/leanrows/releases) ([feed](https://github.com/abooodbah/leanrows/releases.atom)) · [All Lean apps](https://abooodbah.github.io/)

[![winget](https://img.shields.io/winget/v/abooodbah.LeanRows)](https://github.com/microsoft/winget-pkgs/tree/master/manifests/a/abooodbah/LeanRows) [![GitHub release](https://img.shields.io/github/v/release/abooodbah/leanrows)](https://github.com/abooodbah/leanrows/releases/latest) [![License: MIT](https://img.shields.io/github/license/abooodbah/leanrows)](LICENSE) [![Downloads](https://img.shields.io/github/downloads/abooodbah/leanrows/total)](https://github.com/abooodbah/leanrows/releases)

![LeanRows with a 20 million row CSV open](docs/images/leanrows-20m-rows.png)

*20,000,001 rows, 1,532,454,643 bytes, fully indexed. Peak working set: 18.4 MB.*

Excel stops at about 1.05 million rows. Most tools that go further are paid, need
an installer, or live in a terminal. LeanRows is a single 1,025 KB executable you
can copy onto a locked-down work machine and run.
an installer, or live in a terminal. LeanRows is a single executable (1,024,512
bytes in v0.5.1) you can copy onto a locked-down work machine and run. For the
other options, see
[how to open a CSV file that is too large for Excel](https://abooodbah.github.io/leanrows/open-csv-too-large-for-excel/).

It is strictly read-only, so it cannot alter the file it is inspecting. There is
no telemetry and no network access of any kind.
Expand All @@ -25,6 +30,16 @@ theme and zoom settings, under `HKCU\Software\LeanRows`, and a scratch folder fo
search results, under `%LOCALAPPDATA%\LeanRows`. Column sorting also keeps
temporary sort data there.

### winget

LeanRows is in the winget community repository. winget installs the portable
ZIP from the GitHub Release after checking its SHA-256 and adds a `leanrows`
command:

```powershell
winget install abooodbah.LeanRows
```

### Microsoft Store

<a href="https://apps.microsoft.com/detail/9NMV8GKJXSN0"><img src="https://get.microsoft.com/images/en-us%20dark.svg" width="200" alt="Download from the Microsoft Store"></a>
Expand Down Expand Up @@ -320,6 +335,7 @@ cargo +1.97.1 clippy --workspace --all-targets --locked -- -D warnings
- [Architecture](docs/ARCHITECTURE.md)
- [Acceptance and assurance](docs/ACCEPTANCE.md)
- [Validation status](docs/VALIDATION_STATUS.md)
- [LeanRows 0.5.1 release notes](docs/releases/v0.5.1.md)
- [LeanRows 0.5.0 release notes](docs/releases/v0.5.0.md)
- [LeanRows 0.4.0 release notes](docs/releases/v0.4.0.md)
- [LeanRows 0.3.0 release notes](docs/releases/v0.3.0.md)
Expand Down
32 changes: 24 additions & 8 deletions site/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
<meta property="og:image:alt" content="LeanRows, a large CSV viewer for Windows, with a 20 million row CSV open. 1.5 GB, 18.4 MB peak working set.">
<meta name="twitter:card" content="summary_large_image">
<link rel="canonical" href="https://abooodbah.github.io/leanrows/">
<link rel="alternate" type="application/atom+xml" title="LeanRows releases" href="https://github.com/abooodbah/leanrows/releases.atom">
<link rel="icon" href="assets/leanrows-icon.svg" type="image/svg+xml">
<link rel="icon" href="assets/leanrows-icon.png" type="image/png">
<link rel="stylesheet" href="styles.css">
Expand All @@ -34,20 +35,28 @@
"name": "LeanRows",
"description": "A free, read-only Windows viewer for large CSV, TSV, JSONL, NDJSON, log, and text files and Excel .xlsx workbooks, including CSV files too big for Excel.",
"url": "https://abooodbah.github.io/leanrows/",
"codeRepository": "https://github.com/abooodbah/leanrows",
"applicationCategory": "UtilitiesApplication",
"operatingSystem": "Windows 10 and Windows 11 (x64)",
"softwareVersion": "0.5.0",
"softwareVersion": "0.5.1",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD"
},
"license": "https://github.com/abooodbah/leanrows/blob/main/LICENSE",
"downloadUrl": "https://github.com/abooodbah/leanrows/releases/latest",
"screenshot": "https://abooodbah.github.io/leanrows/assets/leanrows-20m-rows.webp",
"image": "https://abooodbah.github.io/leanrows/assets/social-preview.png",
"sameAs": [
"https://github.com/abooodbah/leanrows",
"https://apps.microsoft.com/detail/9NMV8GKJXSN0",
"https://github.com/microsoft/winget-pkgs/tree/master/manifests/a/abooodbah/LeanRows",
"https://community.chocolatey.org/packages/leanrows"
],
"author": {
"@type": "Person",
"name": "Abdulfatah Bahbouh"
"name": "Abdulfatah Bahbouh",
"url": "https://abooodbah.github.io/"
}
}
</script>
Expand Down Expand Up @@ -104,7 +113,7 @@ <h1 id="hero-title">
<span aria-hidden="true">→</span>
</a>
<p id="release-note">
v0.5.0 is an unsigned Windows x64 ZIP. Verify the accompanying
v0.5.1 is an unsigned Windows x64 ZIP. Verify the accompanying
<code>.sha256</code> file before running it.
LeanRows is also in the
<a href="https://apps.microsoft.com/detail/9NMV8GKJXSN0">Microsoft Store</a>, signed by Microsoft.
Expand Down Expand Up @@ -173,6 +182,7 @@ <h2 id="measured-title">20 million rows in 18.4 MB of memory.</h2>
src="assets/leanrows-20m-rows.webp"
width="1400"
height="792"
fetchpriority="high"
decoding="async"
alt="LeanRows in Dark appearance with demo_events_20M.csv open, showing the first rows of an event log, with the status bar reading Ready, 20000001 rows, 1532454643 of 1532454643 bytes, 100 percent"
>
Expand Down Expand Up @@ -412,7 +422,7 @@ <h2 id="evidence-title">The release is built around reproducible checks.</h2>
<section class="release-note-section" aria-labelledby="release-warning-title">
<div class="shell release-note-grid">
<div>
<p class="eyebrow">Before installing v0.5.0</p>
<p class="eyebrow">Before installing v0.5.1</p>
<h2 id="release-warning-title">The Windows build is intentionally unsigned.</h2>
</div>
<div>
Expand All @@ -421,7 +431,13 @@ <h2 id="release-warning-title">The Windows build is intentionally unsigned.</h2>
matching SHA-256 sidecar from the same GitHub Release, then compare the
published value before running or installing LeanRows.
</p>
<pre aria-label="PowerShell checksum verification command"><code>Get-FileHash .\LeanRows-v0.5.0-windows-x64-unsigned.zip -Algorithm SHA256</code></pre>
<pre aria-label="PowerShell checksum verification command"><code>Get-FileHash .\LeanRows-v0.5.1-windows-x64-unsigned.zip -Algorithm SHA256</code></pre>
<p>
LeanRows is also in the winget community repository. winget installs
the portable ZIP from the GitHub Release after checking its SHA-256
and adds a <code>leanrows</code> command.
</p>
<pre><code>winget install abooodbah.LeanRows</code></pre>
<p>
To avoid the warning, install LeanRows from the
<a href="https://apps.microsoft.com/detail/9NMV8GKJXSN0">Microsoft Store</a>
Expand Down Expand Up @@ -453,7 +469,7 @@ <h2 id="faq-title">Opening large CSV files on Windows</h2>
<div class="faq-list">
<div class="faq-item">
<h3>How do I open a CSV file that is too large for Excel?</h3>
<p>Excel shows at most 1,048,576 rows. LeanRows reads the file in blocks and keeps only the visible rows in memory, so the row count is not limited by RAM. On the developer's PC it fully indexed a 1.5 GB, 20 million row CSV with an 18.4 MB peak working set.</p>
<p>Excel shows at most 1,048,576 rows. LeanRows reads the file in blocks and keeps only the visible rows in memory, so the row count is not limited by RAM. On the developer's PC it fully indexed a 1.5 GB, 20 million row CSV with an 18.4 MB peak working set. <a href="open-csv-too-large-for-excel/">Other ways to open a CSV that is too large for Excel</a> include Power Query, splitting the file, and DuckDB or Python.</p>
</div>
<div class="faq-item">
<h3>Is LeanRows free?</h3>
Expand All @@ -469,7 +485,7 @@ <h3>Which formats does it open?</h3>
</div>
<div class="faq-item">
<h3>Do I need to install anything?</h3>
<p>No. Extract the portable ZIP and run its single 618 KB executable; it needs no administrator rights, and an optional per-user installer is included. Outside its folder it writes only its appearance setting under <code>HKCU\Software\LeanRows</code> and a search scratch folder under <code>%LOCALAPPDATA%\LeanRows</code>.</p>
<p>No. Extract the portable ZIP and run its single executable (1,024,512 bytes in v0.5.1); it needs no administrator rights, and an optional per-user installer is included. Outside its folder it writes only its appearance setting under <code>HKCU\Software\LeanRows</code> and a search scratch folder under <code>%LOCALAPPDATA%\LeanRows</code>.</p>
</div>
<div class="faq-item">
<h3>Can I search and jump to a row?</h3>
Expand Down
147 changes: 147 additions & 0 deletions site/open-csv-too-large-for-excel/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="color-scheme" content="light dark">
<meta
name="description"
content="Excel stops at 1,048,576 rows. Five ways to open a larger CSV on Windows: Power Query, splitting the file, DuckDB, Python, or a large-file viewer such as LeanRows."
>
<meta property="og:type" content="article">
<meta property="og:title" content="How to open a CSV file that is too large for Excel">
<meta
property="og:description"
content="Excel stops at 1,048,576 rows. Five ways to open a larger CSV on Windows: Power Query, splitting the file, DuckDB, Python, or a large-file viewer such as LeanRows."
>
<meta property="og:url" content="https://abooodbah.github.io/leanrows/open-csv-too-large-for-excel/">
<meta property="og:image" content="https://abooodbah.github.io/leanrows/assets/social-preview.png">
<meta name="twitter:card" content="summary_large_image">
<link rel="canonical" href="https://abooodbah.github.io/leanrows/open-csv-too-large-for-excel/">
<link rel="icon" href="../assets/leanrows-icon.svg" type="image/svg+xml">
<link rel="icon" href="../assets/leanrows-icon.png" type="image/png">
<link rel="stylesheet" href="../styles.css">
<title>How to open a CSV file that is too large for Excel</title>
</head>
<body>
<a class="skip-link" href="#main-content">Skip to content</a>

<header class="site-header">
<div class="shell header-inner">
<a class="brand" href="../" aria-label="LeanRows home">
<img src="../assets/leanrows-icon.svg" width="32" height="32" alt="">
<span>LeanRows</span>
</a>
<nav aria-label="Primary navigation">
<a href="../">LeanRows</a>
<a href="../#faq">FAQ</a>
<a href="https://github.com/abooodbah/leanrows">Source</a>
</nav>
</div>
</header>

<main id="main-content">
<article class="section task-page">
<div class="shell task-copy">
<p class="eyebrow">Large CSV files · Windows</p>
<h1>How to open a CSV file that is too large for Excel</h1>
<p>
An Excel worksheet holds at most 1,048,576 rows. When a CSV file has
more, Excel opens the first 1,048,576 rows, warns that the file was
not loaded completely, and leaves the rest out. Saving that workbook
back over the CSV loses the missing rows.
</p>
<p>
Which way works best depends on whether you need to read the rows,
analyse them, or change them. These are the common options on Windows.
</p>

<h2>1. Load it with Power Query</h2>
<p>
In Excel, use Data &gt; Get Data &gt; From Text/CSV, then Load To and
choose the Data Model or a connection only. The rows stay in the data
model, not on a worksheet, so the row limit does not apply. You can
filter and summarise with PivotTables. You cannot scroll through every
row on a sheet, and very large files take time and memory to load.
</p>

<h2>2. Split the file into parts</h2>
<p>
Cut the file into pieces under the row limit and open each in Excel.
This works when the rows are independent. Keep the header row in every
part, and take care with quoted fields that contain line breaks: a
tool that splits on every line break will cut such a record in two.
</p>

<h2>3. Query it with DuckDB</h2>
<p>
DuckDB runs SQL directly on a CSV file without importing it first.
For example, <code>SELECT * FROM read_csv('data.csv') LIMIT 100;</code>
shows the first rows, and a <code>WHERE</code> or
<code>GROUP BY</code> clause filters or summarises the whole file.
This suits people who are comfortable with SQL.
</p>

<h2>4. Read it in chunks with Python</h2>
<p>
With pandas, <code>pd.read_csv('data.csv', chunksize=1_000_000)</code>
reads the file one block of rows at a time, so you can filter or
aggregate a file larger than memory. This needs Python and some
scripting.
</p>

<h2>5. Open it in a large-file viewer</h2>
<p>
If you only need to look at the rows, search them, or copy a few out,
a viewer built for large files avoids loading the whole file. LeanRows
is one of these: a free, open-source, read-only viewer for Windows 10
and 11. It reads the file in blocks, keeps only the visible rows in
memory, shows the first rows while it is still indexing, and can
search, jump to a row number, and sort by a column without changing
the file.
</p>
<p>
On the developer's Windows PC, LeanRows fully indexed a generated CSV
of 20,000,001 rows and 1,532,454,643 bytes (1.5 GB) with a peak working
set of 18.4 MB. The
<a href="https://github.com/abooodbah/leanrows/blob/main/docs/releases/v0.2.0.md">0.2.0 release notes</a>
record two more runs on a 20,000,001-row CSV at 18.15 to 18.18 MiB.
The PC's hardware is not recorded. LeanRows does not edit files,
calculate formulas, or run on macOS or Linux. Other large-file viewers
and text editors exist too, some of them paid; compare their limits
before you choose.
</p>
<p>
<a class="text-link" href="../">
See LeanRows and how to install it <span aria-hidden="true">&rarr;</span>
</a>
</p>

<h2>Which one to use</h2>
<p>
To analyse the data inside Excel, use Power Query. To query or
transform it repeatedly, use DuckDB or Python. To look at the rows
quickly without writing anything, use a viewer. Splitting the file is
a last resort, because it is easy to break quoted records.
</p>
</div>
</article>
</main>

<footer class="site-footer">
<div class="shell footer-grid">
<div class="footer-brand">
<img src="../assets/leanrows-icon.svg" width="28" height="28" alt="">
<p><strong>LeanRows</strong><span>Large row files, kept lean.</span></p>
</div>
<nav aria-label="Project links">
<a href="../">LeanRows</a>
<a href="https://github.com/abooodbah/leanrows">GitHub</a>
<a href="https://abooodbah.github.io/leanmark/">LeanMark</a>
<a href="https://abooodbah.github.io/leandoc/">LeanDoc</a>
<a href="https://abooodbah.github.io/">All Lean apps</a>
</nav>
</div>
</footer>
</body>
</html>
6 changes: 5 additions & 1 deletion site/sitemap.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://abooodbah.github.io/leanrows/</loc>
<lastmod>2026-11-06</lastmod>
<lastmod>2026-11-08</lastmod>
</url>
<url>
<loc>https://abooodbah.github.io/leanrows/open-csv-too-large-for-excel/</loc>
<lastmod>2026-11-08</lastmod>
</url>
</urlset>
23 changes: 23 additions & 0 deletions site/styles.css
Original file line number Diff line number Diff line change
Expand Up @@ -1151,3 +1151,26 @@ pre {
.android-join {
margin: 1.5rem 0 1rem;
}

/* Task pages, such as open-csv-too-large-for-excel/. */
.task-copy {
max-width: 46rem;
}

.task-copy h1 {
font-size: clamp(2.25rem, 4vw, 3rem);
line-height: 1.1;
}

.task-copy h2 {
max-width: none;
margin-top: var(--space-10);
margin-bottom: var(--space-4);
font-size: clamp(1.5rem, 2.6vw, 2rem);
}

.task-copy p {
color: var(--text-secondary);
font-size: 1.125rem;
line-height: 1.6;
}
Loading