Open source · no key, no sign-up

The Qurʾān, as a file your app can read.

Seven riwāyāt, letter for letter as the King Fahd Complex prints them. Pick a riwāyah and a format, and the URL you get is the file — the same bytes, forever.

Riwāyahedition
Not sure which? Ḥafṣ — it is what most of the world reads.
Formatformat
One āyah per line (txt), a flat array (json), a table (csv), Tanzil-compatible (xml), CREATE TABLE and INSERTs (sql), or readable Markdown.
How muchscope
In this riwāyah's own count: 2:255 in Ḥafṣ is 2:253-254 in Warsh.
Set it in KFGQPC HAFS Uthmanic Script — other Arabic fonts show gaps for some letters. Ship the font with the text. Font .ttf
quran-hafs-rasm_uthmani.txt
the first rows, exactly as the file has them
loading…
reading the dataset…
Needs the font KFGQPC HAFS Uthmanic Script. download .ttf
GET /editions

The seven riwāyāt.

Āyah numbers differ between them; word numbers do not. Word 5,177 is إِلَٰهَ in all seven. Join your data on the word number, never on sūrah:āyah.

keyriwāyahqārīāyah numberingāyātwordsḤafṣ 2:255 is herefont
Need the āyah correspondence as a file? GET /map
Download the mapping
GET /compare

One āyah, in all seven.

letters differ
vowelling differs
same qiraah, written with other codepoints

Building something bigger?

Take the muṣḥaf's own file.

Every word of one riwāyah with its āyah, page, line, juz and marks, in one flat JSON. Every format above is cut from it. An āyah is a slice, a page is a slice; no nesting, no ids to join.

format quran-mushaf 1.0 · format spec →

Or skip the file. A small library per platform with Ḥafṣ and its font inside, no dependencies: python · js · php · dart · swift · kotlin.
mushaf/hafs.jsonabridged
one minute, no librarypython
import json m = json.load(open("hafs.json")) # sūrah 2, āyah 255 is a slice a = m["ayah_starts"] k = m["surahs"][1]["first_ayah"] + 254 print(" ".join(m["words"][a[k]:a[k+1]])) # page 3 is a slice too p = m["page_starts"] page3 = m["words"][p[2]:p[3]]
Every file the build writes, with its SHA-256 GET /files