quranlab/hadith
Dataset Card for QuranLab — Hadith & Sunnah (Ahl al-Sunnah) A clean Ahl-al-Sunnah hadith corpus: the canonical Sunni collections (the Six Books + the Muwaṭṭaʾ, Musnad Aḥmad, al-Dārimī, and the famous forty-collections) in Arabic plus many translations, with grader-attributed gradings — one config per (collection × language). This is the audio/text family's hadith modality — companion to quranlab/quran (Qurʾan text) and quranlab/quran-audio (recitation). QuranLab is a… See the full description on the dataset page: https://huggingface.co/datasets/quranlab/hadith.
Dataset Card for QuranLab — Hadith & Sunnah (Ahl al-Sunnah)
A clean Ahl-al-Sunnah hadith corpus: the canonical Sunni collections (the Six Books + the Muwaṭṭaʾ, Musnad Aḥmad, al-Dārimī, and the famous forty-collections) in Arabic plus many translations, with grader-attributed gradings — one config per (collection × language). This is the audio/text family's hadith modality — companion to **`quranlab/quran`** (Qurʾan text) and **`quranlab/quran-audio`** (recitation).
QuranLab is a volunteer, non-commercial, community-service project. This dataset is offered freely to students, researchers, and developers building tools for studying the Sunnah of the Prophet ﷺ. It is strictly Ahl al-Sunnah wa'l-Jamāʿah: sources outside Sunni orthodoxy (the Shia canon, Ibāḍī, Ahmadiyya, hadith-rejecter framings) are excluded by design.
QuranLab is a volunteer effort. Our aim is to present these works carefully and at high quality, and to help them travel faithfully — in the spirit in which they were written — not to claim them as ours.
The text here reaches you through the work of fawazahmed0/hadith-api, mhashim6/Open-Hadith-Data and HadeethEnc.com. Who to thank, and what we consulted without ever quoting, is set out in `SOURCES.md`.
What's inside
13 collections — Arabic + translations + grades. The Six Books, the Muwaṭṭaʾ and the famous forty-collections come aligned across languages with multi-grader gradings; Musnad Aḥmad and al-Dārimī are Arabic matn; and a many-language graded selection covers HadeethEnc's material. Each collection below is the work of the muḥaddith who compiled it — the repositories we drew the text from are listed in LICENSES.md.
On grading. Gradings are grader-attributed, never asserted by us, and never auto-stamped. The four Sunan, the Muwaṭṭaʾ and the forty-collections (from fawazahmed0) carry per-hadith gradings from multiple muḥaddiths (al-Albānī, Aḥmad Shākir, Zubair ʿAlī Zaʾī, …) in thegradescolumn; every HadeethEnc row carries a grade + attribution. The two Ṣaḥīḥs are ṣaḥīḥ by Sunni consensus (a collection-level note in thecollectionsconfig). The Arabic matn of Musnad Aḥmad and al-Dārimī (mhashim6) is left ungraded — we don't hold per-hadith grades for it, so we assert none.
Graded multilingual layer — HadeethEnc (72 languages)
In addition to the Arabic Nine Books, this dataset includes 3,574 curated, authentic prophetic hadith in 72 languages from HadeethEnc.com (the Encyclopedia of Translated Prophetic Hadiths — a service of IslamHouse / the Saudi Ministry of Islamic Affairs), one config per language (hadeethenc-<lang>). Unlike the Arabic matn spine, every HadeethEnc hadith carries a grade and an attribution (e.g. Authentic, Agreed upon), reproduced verbatim with its version. Each row: hadith_key, hadeethenc_id, language, title, text, intro, grade, grader, grade_source, attribution_text, explanation, status, theological_status, source, license, attribution.
Quick start
from datasets import load_dataset
# Default: a slim cross-collection index of every hadith
index = load_dataset("quranlab/hadith")
# One collection — Arabic, and an aligned translation (join on hadith_number)
bukhari_ar = load_dataset("quranlab/hadith", "bukhari-ar", split="train")
bukhari_en = load_dataset("quranlab/hadith", "bukhari-en", split="train")
# A graded Sunan — the `grades` column carries multiple muhaddith verdicts
tirmidhi = load_dataset("quranlab/hadith", "tirmidhi-en", split="train")
# The collection registry (authors, types, counts, languages, status notes)
collections = load_dataset("quranlab/hadith", "collections", split="train")
# Graded, multilingual selection (HadeethEnc) — e.g. English / Turkish
he_en = load_dataset("quranlab/hadith", "hadeethenc-en", split="train")
he_tr = load_dataset("quranlab/hadith", "hadeethenc-tr", split="train")Within a fawazahmed0-sourced collection, the Arabic and each translation align by `hadith_number` (the standard Abdul-Baqi / sunnah.com numbering). The primary keys are hadith_key ("{collection}:{number}", citable) and urn (a stable unique integer per row).
Structure & fields
- `index` (default) — slim cross-collection spine (one row per hadith, Arabic):
hadith_key, urn, seq, collection, collection_type, hadith_number, language, n_languages, n_chars, has_grade, has_text. - `collections` — one row per collection: id, names (ar/en), author, death year (AH), type, school, hadith count,
languages,n_languages,graded,numbering,source,status_note. - `{collection}-{lang}` — one config per (collection × language). fawazahmed0 collections carry:
hadith_key, urn, seq, collection, language, hadith_number, number_sort, book_number, in_book_number, sunnah_url, text, grades(a list of{grader, grade}),n_grades, grade_summary, is_muallaq. mhashim6 Arabic (ahmad-ar,darimi-ar) is matn-only (ungraded). HadeethEnc (hadeethenc-{lang}) addstitle, intro, grade, grader, grade_source, attribution_text, explanation. - `metadata/configs.csv` — one row per config with its collection names, numbering, terms and credit. These describe the config, not the individual hadith, so they are not repeated on every row.
hadith_number is a string (numbering follows the source edition); urn is the unique row id; seq is a contiguous 1..N spine within each edition.
Scope, sources & licensing
- Theology: strictly Ahl al-Sunnah. Excluded by design (see the project's governance): the Shia Four Books and other Shia/Ismāʿīlī collections, Ibāḍī (Musnad al-Rabīʿ), Ahmadiyya, Quranist/hadith-rejecter sources, and hostile-orientalist grade framings.
- Arabic matn: public domain, kept verbatim.
- Translations and gradings: the work of their translators, publishers, and the muḥaddith graders, included with full credit.
- Graded multilingual selection: verbatim, version-pinned hadith from HadeethEnc, each with its grade and attribution.
- Diyanet (Turkish official): Hadislerle İslam — the DİB's thematic exposition of the Sunnah (Kütüb-i Tis'a only), page-grain Turkish with cited Arabic matn and canonical cross-references.
- Reference links: fawazahmed0-sourced hadith carry a
sunnah_urlto the matching page on sunnah.com — a link only. - Roadmap: more Tier-2/3 collections, a per-hadith cross-collection
xrefgraph, and arijāl(narrator) layer.
Per-collection credits and terms are in LICENSES.md and metadata/. If you hold rights to a work here and would like it removed, open a discussion on the Community tab; we act promptly.
The QuranLab family
These datasets are built by the same volunteers and are meant to be used together; they join on shared keys — verse_key on the Qur'an side, hadith_key on the Sunnah side.
You are reading the card for `quranlab/hadith`. Corrections, additions, and removal requests are welcome on any of them through the Community tab.
Acknowledgments
With gratitude to `mhashim6/Open-Hadith-Data` for the open Arabic matn, and to the scholars and institutions who have preserved and transmitted the Sunnah across the centuries. Above all, this is offered seeking the pleasure of Allah.
Citation
@misc{quranlab_hadith_2026,
title = {QuranLab --- Hadith (Ahl al-Sunnah): the Nine Books},
author = {{QuranLab}},
year = {2026},
publisher = {Hugging Face},
howpublished = {\url{https://huggingface.co/datasets/quranlab/hadith}}
}Offered freely as a service to the worldwide community of learners — that the Sunnah of the Prophet ﷺ be a little easier to study, build with, and share. May it be of benefit.
For agents and pipelines
Deterministic facts an automated consumer needs, so nothing has to be inferred from a sample.
- Config naming:
{collection}-{lang}— e.g.bukhari-ar,bukhari-en; plusindex(cross-collection spine) andcollections(registry) - Join key:
hadith_key(collection:number) across languages;urnis the unique row id - Default config:
index - Format: Parquet, one directory per config, split
train. - Terms and credit are per config in
metadata/, never per row — join on the config name when you need them. - Never infer a grade.
grade/gradesare populated only where a named muhaddith graded that hadith; an empty grade means no grade is known, not “unauthenticated”. attribution_textis the hadith's own chain/companion attribution — content, not a licence field.- Start from
indexto discover what exists, then load the specific{collection}-{lang}config.
Inspect it without downloading the data:
# every config and split
curl https://datasets-server.huggingface.co/splits?dataset=quranlab/hadith
# a first page of rows
curl "https://datasets-server.huggingface.co/first-rows?dataset=quranlab/hadith&config=bukhari-ar&split=train"
# machine-readable schema and provenance (Croissant JSON-LD)
curl https://huggingface.co/api/datasets/quranlab/hadith/croissantQuery it in place with SQL — no full download:
hf datasets sql quranlab/hadith "SELECT * FROM 'bukhari-ar' LIMIT 5"import duckdb
duckdb.sql("SELECT count(*) FROM 'hf://datasets/quranlab/hadith/bukhari-ar/*.parquet'")Quality, and how to check it yourself
Nothing is released until the integrity gate passes. Every claim below is something you can re-run rather than take on trust — here on the published data, not in our build tree:
from datasets import load_dataset
ar = load_dataset("quranlab/hadith", "bukhari-ar", split="train")
en = load_dataset("quranlab/hadith", "bukhari-en", split="train")
assert ar["hadith_key"] == en["hadith_key"] # same key, any language
# every grade names the muhaddith who gave it
he = load_dataset("quranlab/hadith", "hadeethenc-en", split="train")
assert all(g and s for g, s in zip(he["grade"], he["grader"]))
# the ungraded matn layer stays ungraded, never auto-stamped
ah = load_dataset("quranlab/hadith", "ahmad-ar", split="train")
assert all(g is None for g in ah["grade"])Where a source is genuinely missing, the row is published empty and labelled rather than filled by guessing from a neighbouring entry. Coverage numbers in this card count only real content.
Citation
@misc{quranlab_hadith_2026,
title = {QuranLab — Hadith and Sunnah Corpus (Ahl al-Sunnah)},
author = {QuranLab},
year = {2026},
publisher = {Hugging Face},
howpublished = {\url{https://huggingface.co/datasets/quranlab/hadith}}
}