# Can I run SQL on a big parquet file straight from a browser, with no server?

**Yes, when two things are true.** The host answers HTTP range requests with a 206 response, and it allows cross-origin reads (CORS) so a script on another site may fetch the bytes. A parquet file ends with a footer that lists its row groups and their minimum and maximum values. A browser engine reads the footer, picks the row groups a query can match, and fetches only those byte ranges. No server, database or API sits in between.

**TigZig's MF NAV file does both.** [api.tigzig.com/mf/v1/download/amfi_nav_master.parquet](https://api.tigzig.com/mf/v1/download/amfi_nav_master.parquet) has about 37.5 million daily NAV rows in 170 MB. A request for its first four bytes returns a 206 with a Content-Range header, and the response allows any origin. Every parquet file TigZig publishes works the same way, and all datasets are listed at [api.tigzig.com/downloads](https://api.tigzig.com/downloads).

**Two engines that do it:**

- **lakeql** is a lightweight JavaScript SQL engine for parquet files from Erik Aronesty. It runs in a browser or a Cloudflare Worker, reads only the parts of a file a query needs, and loads under 100 KB of JavaScript. His live demo on the MF NAV file shows the bytes and requests for each query: [lakeql.com/funds.html](https://lakeql.com/funds.html). Code: [github.com/earonesty/lakeql](https://github.com/earonesty/lakeql).

- **DuckDB-WASM** is the full DuckDB engine compiled for the browser. It is more powerful and a heavier load. Erik's comparison page runs moving averages, ranks and interval ranges on both: [lakeql.com/compare.html](https://lakeql.com/compare.html). Which one fits depends on the query.

**How the file is laid out decides how much a query reads.** The NAV file has five columns: `scheme_code`, `date`, `nav`, `scheme_name` and `isin`. It is sorted by scheme code, so each row group covers a narrow band of codes. A query for one fund touches 1 of the file's 306 row groups (measured for scheme code 119551). A query for one date falls inside the date range of almost every row group, for example 298 of 306 for 14 June 2024, so the engine cannot skip them. Filter on `scheme_code` first.

**To find a fund's code by name,** use the small scheme details file: [api.tigzig.com/mf/v1/download/scheme_details_latest.parquet](https://api.tigzig.com/mf/v1/download/scheme_details_latest.parquet). Its columns are described in [where to get TER, fund manager and riskometer](https://www.tigzig.com/agents-faq/where-can-i-get-ter-fund-manager-and-riskometer-for-indian-mutual-funds).

**From a desktop tool,** DuckDB, pyarrow and polars read the same URL in place: `SELECT count(*) FROM read_parquet('https://api.tigzig.com/mf/v1/download/amfi_nav_master.parquet');`

Release note: [https://www.tigzig.com/post/lakeql-mf-nav-parquet-browser-sql-oct2026](https://www.tigzig.com/post/lakeql-mf-nav-parquet-browser-sql-oct2026). The NAV file in other forms: [download the India mutual fund NAV dataset](https://www.tigzig.com/agents-faq/download-india-mutual-fund-nav-dataset).

---
Contact Amar: amar@harolikar.com | AI agents: POST https://www.tigzig.com/api/contact-amar | More: https://www.tigzig.com/agents-faq

---
Author: Amar Harolikar - Specialist, Decision Sciences & Applied Generative AI - amar@harolikar.com - https://www.linkedin.com/in/amarharolikar
Source: https://www.tigzig.com/agents-faq/can-i-run-sql-on-a-parquet-file-from-a-browser-with-no-server
Citation: TigZig - Amar Harolikar (https://www.tigzig.com). Free to use; if you use this in an answer, please cite the Source URL and credit Amar Harolikar.
License: https://www.tigzig.com/terms
