isnady 0.1.8 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +466 -346
  2. package/index.js +1 -1
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -3,39 +3,41 @@
3
3
 
4
4
  <p align="center">
5
5
  <strong>Hadith search built around the isnad, the chain of transmission</strong><br>
6
- <sub>Search the collections, read every chain narrator by narrator, and see how the scholars read it</sub>
6
+ <sub>Search the Sunni and Shia collections, read every chain narrator by narrator, and see how the scholars of each tradition read it</sub>
7
7
  </p>
8
8
 
9
9
  <p align="center">
10
10
  <a href="https://pypi.org/project/isnady/">
11
- <img src="https://img.shields.io/badge/PyPI-v0.1.8-1D4777?style=for-the-badge&logo=pypi&logoColor=white" alt="PyPI">
11
+ <img src="https://img.shields.io/badge/PyPI-v0.1.9-1D4777?style=for-the-badge&logo=pypi&logoColor=white" alt="PyPI">
12
12
  </a>
13
13
  <img src="https://img.shields.io/pypi/pyversions/isnady?style=for-the-badge&color=A47E24&logo=python&logoColor=white" alt="Python">
14
14
  <img src="https://img.shields.io/badge/Platform-Windows%20%7C%20Linux%20%7C%20macOS-5B6878?style=for-the-badge" alt="Platform">
15
15
  <a href="https://www.npmjs.com/package/isnady">
16
- <img src="https://img.shields.io/badge/npm-v0.1.8-14304F?style=for-the-badge&logo=npm" alt="npm">
16
+ <img src="https://img.shields.io/badge/npm-v0.1.9-14304F?style=for-the-badge&logo=npm" alt="npm">
17
+ </a>
18
+ <a href="https://github.com/bayramkotan/isnady-data">
19
+ <img src="https://img.shields.io/badge/data-isnady--data-2E6B4F?style=for-the-badge&logo=github" alt="isnady-data">
17
20
  </a>
18
21
  <img src="https://img.shields.io/badge/License-MIT-D6B25E?style=for-the-badge" alt="License">
19
22
  </p>
20
23
 
21
24
  <p align="center">
25
+ <a href="#-two-repositories-one-project">Repositories</a> •
22
26
  <a href="#-why-isnady">Why</a> •
23
27
  <a href="#-install">Install</a> •
24
28
  <a href="#-quick-start">Quick Start</a> •
29
+ <a href="#-isnady-data--the-data">isnady-data</a> •
25
30
  <a href="#-search">Search</a> •
31
+ <a href="#-chains-of-transmission">Chains</a> •
32
+ <a href="#-sunni-and-shia-two-roads">Sunni and Shia</a> •
26
33
  <a href="#-narrators">Narrators</a> •
27
- <a href="#-hadith-scholars">Scholars</a> •
28
34
  <a href="#-books">Books</a> •
29
- <a href="#-shia-rijal">Shia Rijal</a> •
35
+ <a href="#-hadith-scholars">Scholars</a> •
30
36
  <a href="#-statistics">Statistics</a> •
31
37
  <a href="#-learn">Learn</a> •
32
38
  <a href="#-search-by-meaning-ai">Meaning (AI)</a> •
33
- <a href="#-chains-of-transmission">Chains</a> •
34
- <a href="#-educational-by-design">Educational</a> •
35
- <a href="#-appearance">Appearance</a> •
36
- <a href="#-data-and-licences">Data</a> •
39
+ <a href="#-appearance-and-settings">Appearance</a> •
37
40
  <a href="#%EF%B8%8F-cli">CLI</a> •
38
- <a href="#-screenshots">Screenshots</a> •
39
41
  <a href="#%EF%B8%8F-roadmap">Roadmap</a>
40
42
  </p>
41
43
 
@@ -43,8 +45,9 @@
43
45
  <img src="https://raw.githubusercontent.com/bayramkotan/isnady/main/assets/screenshots/search-arabic.png" alt="Searching النيات finds بالنيات in Sahih al-Bukhari 1, with the chain above the text" width="850">
44
46
  </p>
45
47
 
46
- > **Pre-alpha (0.1.8).** Search and chains of transmission work today, on data you import
47
- > in one command. Narrators, scholars, gradings and the rest are being built, in the open.
48
+ > **Pre-alpha (0.1.9).** Search, chains of transmission, narrators, books, scholars, statistics and
49
+ > the glossary work today, Sunni and Shia, on data you import in one click. Everything is built in
50
+ > the open, one piece at a time.
48
51
 
49
52
  ---
50
53
 
@@ -61,23 +64,53 @@
61
64
  > console.log(info()); // { name, version, dataLoaded, homepage }
62
65
  > ```
63
66
 
67
+ ## 🧭 Two repositories, one project
68
+
69
+ isnady is two repositories that work as one:
70
+
71
+ | | [**bayramkotan/isnady**](https://github.com/bayramkotan/isnady) — the application | [**bayramkotan/isnady-data**](https://github.com/bayramkotan/isnady-data) — the data |
72
+ |---|---|---|
73
+ | **What it is** | The program: a desktop window and a command line on one engine | Every hadith collection and rijal work isnady reads, in one format |
74
+ | **What is in it** | Search, the chain reader (Sunni and Shia), narrator identification, books, scholars, statistics, the glossary, meaning search | **17 Sunni and 16 Shia hadith collections — 99,746 hadith** — in Arabic and up to eight translations, with their grades; **Ibn Hajar's *Taqrib*** (8,824 narrators) and **al-Najashi's *Rijal*** (1,266) |
75
+ | **How you get it** | [PyPI](https://pypi.org/project/isnady/) (`pip install isnady`), the desktop applications of the [Releases](https://github.com/bayramkotan/isnady/releases/latest), or the one-line installers | Nothing to download by hand: isnady lists its books in **Data sources** and imports them in one click — or clone it and read it offline, or take a whole [ready database](https://github.com/bayramkotan/isnady-data/releases) |
76
+ | **Licence** | MIT | each book its own, recorded with it (Help → Licences) |
77
+
78
+ ```
79
+ bayramkotan/isnady-data bayramkotan/isnady
80
+ ─────────────────────── ──────────────────
81
+ catalog.json ─────────────── Data sources ───▶ import ─▶ isnady.db ─▶ search · chains · narrators
82
+ sunni/<book>/ shia/<book>/ (your data folder) books · scholars · statistics
83
+ rijal/sunni/ rijal/shia/ window and command line
84
+ Releases: isnady-db-<date>.zip ── Use a ready database… ──▶ isnady.db
85
+ ```
86
+
87
+ The application ships without hadith data, so it stays small and the data can grow on its own:
88
+ a new book in isnady-data reaches every isnady at once, without a new version of the program.
89
+
90
+ ---
91
+
64
92
  ## 🎯 Why isnady
65
93
 
66
- A hadith is two things: the text (*matn*) and the chain of people who passed it on
67
- (*isnad*). Most hadith sites let you search the text and show a grade. isnady is built
68
- the other way round: the chain comes first, because that is where the scholars of hadith
69
- did their work.
70
-
71
- - **The chain is read, not typed in.** isnady reads the chain from the Arabic text itself:
72
- who narrated to whom, with which words, and whether it reaches the Prophet.
73
- - **Nothing is guessed.** Where the wording cannot be read with confidence, the chain is
74
- kept whole and marked, never split wrongly. A missing link is shown as missing.
75
- - **Every fact has a source.** Every hadith, text and grade records where it came from,
76
- under which licence.
77
- - **Grades are shown as the scholars gave them.** Each grade keeps its scholar's name and
78
- wording; isnady does not merge them or invent its own.
79
- - **Window and command line, same engine.** Everything the window does, the command line
80
- does too, with the same results.
94
+ A hadith is two things: the text (*matn*) and the chain of people who passed it on (*isnad*).
95
+ Most hadith sites let you search the text and show a grade. isnady is built the other way round:
96
+ the chain comes first, because that is where the scholars of hadith did their work.
97
+
98
+ - **The chain is read, not typed in.** isnady reads the chain from the Arabic text itself: who
99
+ narrated to whom, with which words, and whom it reaches.
100
+ - **Each tradition by its own road.** A Sunni book's chains are read the Sunni way and judged by
101
+ the Sunni critics; a Shia book's chains are read the Shia way and judged by the Imami critics.
102
+ The two meet on the same pages and are never measured by each other's scale.
103
+ - **Nothing is guessed.** Where the wording cannot be read with confidence, the chain is kept
104
+ whole and marked, never split wrongly. A narrator is named only when the evidence leaves one
105
+ person; otherwise isnady says how many it could be.
106
+ - **Every fact has a source.** Every hadith, text and grade records where it came from, under
107
+ which licence.
108
+ - **Grades are shown as the scholars gave them.** Each grade keeps its scholar's name and wording;
109
+ grades are ordered categories, never averaged, and isnady never invents its own.
110
+ - **Computed once, kept.** Every statistic and model is saved as JSON beside your data and read
111
+ back, never computed again for the same data.
112
+ - **Window and command line, same engine.** Everything the window does, the command line does
113
+ too, with the same results.
81
114
 
82
115
  ---
83
116
 
@@ -149,60 +182,140 @@ pip install isnady --break-system-packages --no-cache-dir -U
149
182
 
150
183
  </details>
151
184
 
152
- ### Something not right?
153
-
154
- `iy update` updates every copy of isnady where it is installed. `iy doctor` lists every copy and
155
- which one each command really starts — an older copy in the user folder can start before a newer
156
- one elsewhere, so every copy is kept at the same version. The same report is under
157
- **Help → Check Installation**. If an old copy starts even for `iy update`, run
158
- `python3 -s -m isnady update` (Windows: `py -s -m isnady update`).
159
-
160
- ### Upgrading
185
+ ### Upgrading, and when something is not right
161
186
 
162
187
  ```bash
163
188
  iy update
164
189
  ```
165
190
 
166
- Your data stays where it is; a newer isnady upgrades the database in place the first time
167
- it opens it.
191
+ `iy update` updates every copy of isnady where it is installed. Your data stays where it is; a
192
+ newer isnady upgrades the database in place the first time it opens it, and reads the chains again
193
+ when its chain reader has changed (a minute or two, once).
194
+
195
+ `iy doctor` lists every copy and which one each command really starts — an older copy in the user
196
+ folder can start before a newer one elsewhere, so every copy is kept at the same version. The same
197
+ report is under **Help → Check Installation**. If an old copy starts even for `iy update`, run
198
+ `python3 -s -m isnady update` (Windows: `py -s -m isnady update`).
168
199
 
169
200
  ---
170
201
 
171
202
  ## 🚀 Quick Start
172
203
 
173
- isnady ships without hadith data; it reads it from a **data repository**. The default is
174
- isnady's own, [**bayramkotan/isnady-data**](https://github.com/bayramkotan/isnady-data), which
175
- holds every Sunni and Shia collection and rijal work isnady can read — 35 sources, from Sahih
176
- al-Bukhari to al-Kafi (see [Data sources](#-data-sources) below). Open the window with `iy`,
177
- choose **File → Data Sources**, and import any of them with one click — or **Import all** — in
178
- the languages you tick. The same from the command line:
204
+ 1. **Open isnady** — `iy`, or the desktop application.
205
+ 2. **File → Data Sources.** The repository is already chosen: **isnady-data**. Tick the books and
206
+ the languages you want and press **Import** — or **Import all**.
207
+ 3. **Import the narrators too** — Ibn Hajar's *Taqrib* for the Sunni books, al-Najashi's *Rijal*
208
+ for the Shia books — and every name in every chain is matched to its narrator.
209
+ 4. **Search**, open a chain, open a narrator, read a book.
210
+
211
+ The same from the command line:
179
212
 
180
213
  ```bash
181
- iy catalog list # the sources of the repository in use
214
+ iy catalog list # the books of isnady-data
182
215
  iy catalog import sahih_al_bukhari --language ara --language tur
183
216
  iy catalog import musnad_ahmad_ibn_hanbal
184
- iy catalog import al_kafi_al_kulayni # with al-Majlisi's and al-Behbudi's grades
185
- iy catalog import taqrib_al_tahdhib_ibn_hajar_al_asqalani # identifies the narrators in the chains
186
- iy catalog import --all # everything
217
+ iy catalog import al_kafi_al_kulayni # with al-Majlisi's and al-Behbudi's grades
218
+ iy catalog import taqrib_al_tahdhib_ibn_hajar_al_asqalani # the narrators of the Sunni chains
219
+ iy catalog import rijal_al_najashi_ahmad_ibn_ali_al_najashi # the narrators of the Shia chains
220
+ iy catalog import --all # everything
221
+
222
+ iy search النيات # Arabic, with or without diacritics
223
+ iy search "niyetlere göre" # Turkish, English, any imported language
224
+ iy chain bukhari 1 # one chain, narrator by narrator
225
+ iy chain kafi 5:1740 # a Shia chain, read the Shia way
226
+ iy narrator الزهري # who a narrator is
227
+ ```
228
+
229
+ Importing takes a minute or two a book; the search index, the chains and the narrators are built as
230
+ part of it. No network? See [Without the network](#without-the-network) below.
231
+
232
+ ---
233
+
234
+ ## 📚 isnady-data — the data
235
+
236
+ **[bayramkotan/isnady-data](https://github.com/bayramkotan/isnady-data)** is isnady's own data
237
+ repository and its default: every source isnady reads, converted once into isnady's own format.
238
+
239
+ | | Sunni | Shia |
240
+ |---|---|---|
241
+ | **Hadith collections** | **17 books, 76,132 hadith.** Sahih al-Bukhari, Sahih Muslim, Sunan Abi Dawud, Jami' al-Tirmidhi, Sunan al-Nasa'i, Sunan Ibn Majah, the Muwatta — Arabic and up to eight translations (English, Turkish, Urdu, Indonesian, Bengali, French, Russian, Tamil), graded by al-Albani, Shu'ayb al-Arna'ut, Zubair 'Ali Za'i and others · the Forty of al-Nawawi, Forty Hadith Qudsi, the Forty of Shah Waliullah · Musnad Ahmad ibn Hanbal (26,363) and Sunan al-Darimi, fully voweled · Riyad al-Salihin, al-Shama'il al-Muhammadiyya, Bulugh al-Maram, al-Adab al-Mufrad, Mishkat al-Masabih, Arabic and English | **16 books, 23,614 hadith.** al-Kulayni's **al-Kafi** (8 volumes, 14,241 hadith, al-Majlisi's grade on nearly every one, al-Behbudi's selection) · al-Saduq's 'Uyun Akhbar al-Rida, al-Amali, al-Khisal, al-Tawhid, Ma'ani al-Akhbar, Thawab al-A'mal, Sifat al-Shi'a, Fada'il al-Shi'a · al-Mufid's al-Amali · Ibn Qulawayh's Kamil al-Ziyarat · al-Nu'mani's and al-Tusi's Kitab al-Ghayba · al-Ahwazi's al-Mu'min and al-Zuhd · al-Muhsini's Mu'jam al-Ahadith al-Mu'tabara — Arabic and English |
242
+ | **Narrators** | Ibn Hajar, *Taqrib al-Tahdhib* — 8,824 narrators: verdict, rank of twelve, tabaqa, death year, book marks | al-Najashi, *Rijal* — 1,266 authors and narrators: reliability and creed in the Imami terms |
243
+
244
+ ### How it is laid out
245
+
187
246
  ```
247
+ isnady-data/
248
+ ├── catalog.json the list isnady reads (isnady-catalog/1)
249
+ ├── sunni/sahih_al_bukhari/ book.json (numbers, chapters, references, grades) + ara.json, eng.json, tur.json …
250
+ ├── sunni/musnad_ahmad_ibn_hanbal/
251
+ ├── shia/al_kafi_al_kulayni/
252
+ ├── rijal/sunni/taqrib_al_tahdhib_ibn_hajar_al_asqalani.md
253
+ ├── rijal/shia/rijal_al_najashi_ahmad_ibn_ali_al_najashi.md
254
+ ├── derived/ statistics and models already computed, as JSON
255
+ └── database.json the ready database of the latest Release
256
+ ```
257
+
258
+ - **Full names, never a bare one.** Every folder and every id is the book's full title with its
259
+ compiler's name — `musnad_ahmad_ibn_hanbal`, `al_kafi_al_kulayni`,
260
+ `taqrib_al_tahdhib_ibn_hajar_al_asqalani`. isnady imports by these ids, and names its exports and
261
+ saved computations after them.
262
+ - **One format for every book** (`isnady-book/1`): a `book.json` with each hadith's number, place,
263
+ chapter, other numberings and every grade as `[scholar, grade]`, exactly as written; and one file
264
+ per language with the chapter titles and the texts. The formats are described in the
265
+ [isnady-data README](https://github.com/bayramkotan/isnady-data#-the-formats).
266
+ - **Sunni and Shia apart.** Every book says its tradition, and isnady keeps them on their own roads
267
+ (below).
268
+ - **Your own data stays yours.** What you import from your own files is never written into a
269
+ ready database for isnady-data: it does not leave your computer.
188
270
 
189
- Other repositories can be chosen instead — the datasets others publish on GitHub and Hugging
190
- Face are in the list — and any repository with an isnady catalog can be added
191
- (`iy repo add https://github.com/owner/name`). Your own files and links can be added too, and
192
- the data folder can be moved anywhere you like.
271
+ ### Without the network
193
272
 
194
- On the command line:
273
+ isnady-data works the same from a folder on your computer — a `git clone`, a USB stick, a shared
274
+ folder:
195
275
 
196
276
  ```bash
197
- iy search النيات # Arabic, with or without diacritics
198
- iy search "niyetlere göre" # Turkish, English, any imported language
199
- iy chain bukhari 1 # one chain, narrator by narrator
277
+ git clone https://github.com/bayramkotan/isnady-data ~/isnady-data
278
+ iy repo add ~/isnady-data # in the window: Data sources → A folder on this computer…
279
+ iy catalog import --all
200
280
  ```
201
281
 
202
- Importing takes a minute or two; the search index and the chains are built as part of it.
282
+ Or take **a whole ready database** — every book imported, every chain read, every narrator
283
+ identified — from the [isnady-data Releases](https://github.com/bayramkotan/isnady-data/releases):
284
+
285
+ ```bash
286
+ iy database use ~/Downloads/isnady-db-<date>.zip # in the window: Data folder → Use a ready database…
287
+ ```
203
288
 
204
- With Ibn Hajar's *Taqrib al-Tahdhib* imported (8,824 narrators, his verdict on each), every
205
- chain is read narrator by narrator: `iy narrator الزهري`.
289
+ isnady checks the file (the zip must hold `isnady.db`, the schema must be one it reads, the sha256
290
+ must match the `database.json` beside it), puts it in place at the next start and keeps your
291
+ previous database beside it (`isnady.<date-time>.bak.db`). Nothing is deleted.
292
+
293
+ <p align="center">
294
+ <img src="https://raw.githubusercontent.com/bayramkotan/isnady/main/assets/screenshots/data-sources.png" alt="Settings → Data sources — isnady-data by default, a folder on this computer, or another repository; its books, Sunni and Shia apart" width="760">
295
+ </p>
296
+
297
+ ### Other repositories
298
+
299
+ isnady-data is all you need. isnady can also read a few datasets that others publish, as they
300
+ publish them, under their own keys (e.g. `bukhari-lk`) so that editions with other numbering never
301
+ mix with isnady-data's. Choose one in **Settings → Data sources** (`iy repo use ID`) or add any
302
+ repository with an isnady catalog, a Hugging Face dataset, a URL or a folder (`iy repo add …`):
303
+
304
+ | Repository | Holds | Licence |
305
+ |---|---|---|
306
+ | [fawazahmed0/hadith-api](https://github.com/fawazahmed0/hadith-api) | 10 collections, Arabic + 8 languages, grades | Unlicense |
307
+ | [Thaqalayn](https://github.com/MohammedArab1/ThaqalaynAPI) | 16 Shia collections, Arabic + English | not stated |
308
+ | [Open Hadith Data](https://github.com/mhashim6/Open-Hadith-Data) | the nine books, voweled Arabic | ODbL |
309
+ | [hadith-json](https://github.com/AhmedBaset/hadith-json) | 17 books, Arabic + English | not stated |
310
+ | [LK Hadith Corpus](https://github.com/ShathaTm/LK-Hadith-Corpus) | the six books, isnad and matn marked apart | not stated |
311
+ | [meeAtif/hadith_datasets](https://huggingface.co/datasets/meeAtif/hadith_datasets) (Hugging Face) | the six books, Arabic + English | MIT (as declared) |
312
+ | [Hadith-Data-Sets](https://github.com/abdelrahmaan/Hadith-Data-Sets) | the nine books, Arabic | not stated |
313
+ | [OpenITI](https://github.com/OpenITI) | the Taqrib, al-Najashi's Rijal | not stated |
314
+
315
+ Every source records a licence **tier** — **A** may be redistributed, **B** under its conditions,
316
+ **C** may not — and **Help → Licences** lists them all. Any CSV or JSON table of hadith can be read
317
+ through a catalog that names its columns (format `table`); files and links of your own, with or
318
+ without authentication (credentials are never stored), are read as well.
206
319
 
207
320
  ---
208
321
 
@@ -213,63 +326,171 @@ chain is read narrator by narrator: `iy narrator الزهري`.
213
326
  | **Arabic without diacritics** | `الاعمال` finds `الأَعْمَالُ`. Alef forms, alef maqsura, hamza seats and ta marbuta are treated alike, so you type the way you normally write |
214
327
  | **Attached prefixes** | `النيات` finds `بالنيات`, because Arabic joins bi-, wa-, fa- and al- to the word. *Whole words only* turns this off |
215
328
  | **Latin-script text** | Case and accents are ignored: `NIYET`, `niyet` and `nîyet` are one word; `Muʿādh`, `Mu'adh` and `Muadh` too |
216
- | **Match** | All words, any word, or the exact phrase |
217
- | **Books** | All books, all Sunni, all Shia, or any few ticked one by one — Sunni collections listed first, Shia after them |
218
- | **Language** | One language to search in; the languages you do not read are folded behind an arrow on each hadith (**Settings → Books and languages**), a click opens them |
329
+ | **Match** | All words, any word, the exact phrase — or by meaning (AI, below) |
330
+ | **Books** | All books, all Sunni, all Shia, or any few ticked one by one |
331
+ | **Order** | Book by book in the order of the book lists — Sahih al-Bukhari, Sahih Muslim, Sunan Abi Dawud … then the Shia books — and within a book by its numbering |
332
+ | **Language** | One language to search in; the languages you do not read are folded behind an arrow on each hadith, a click opens them |
219
333
  | **Active books** | A book can be switched off in **Settings → Books and languages**: it stays imported but is left out of searches, book lists and statistics until switched on |
220
- | **Grades** | Shown under each hadith with the scholar's name, exactly as given |
334
+ | **Grades** | Shown under each hadith with the scholar's name, exactly as given, and explained when you point at them |
221
335
  | **Highlighting** | On the original, diacritised text, diacritics included |
336
+ | **Narrators and scholars** | The same box finds narrators — Sunni and Shia, each marked — and scholars, by Arabic or Latin name |
222
337
 
223
338
  Results appear at once and fill in as you read; the window never waits for them.
224
339
 
225
- ### 👥 Narrators
340
+ <p align="center">
341
+ <img src="https://raw.githubusercontent.com/bayramkotan/isnady/main/assets/screenshots/search-folded.png" alt="Search in two books with Arabic chosen: the English and Turkish texts folded behind ▸ Other languages, opened with a click" width="850">
342
+ </p>
343
+ <p align="center">
344
+ <img src="https://raw.githubusercontent.com/bayramkotan/isnady/main/assets/screenshots/book-picker.png" alt="Books — tick all books, all Sunni, all Shia, or any few one by one" width="420">
345
+ </p>
346
+
347
+ ---
348
+
349
+ ## 🔗 Chains of transmission
226
350
 
227
- The **Narrators** page lists every narrator of the imported rijal work — 8,824 from Ibn
228
- Hajar's *Taqrib* — searchable in Arabic or in Latin letters (`Abu Hurayra`, `Zuhri`, `Ibn Umar`),
229
- and filtered by tabaqa, rank and book. For each narrator: Ibn Hajar's verdict and its rank, the
230
- tabaqa and death year, the books his hadith appear in, **whom he narrates from and who
231
- narrates from him** in the imported chains, the compilers who narrate from him directly, and
232
- every hadith whose chain includes him. On the Isnad Chains page a click on a narrator's name
233
- opens him here.
351
+ Every Arabic text is read for its chain:
352
+
353
+ ```
354
+ Sahih al-Bukhari 1
355
+ 1. حدثنا (narrated to us) الْحُمَيْدِيُّ عَبْدُ اللَّهِ بْنُ الزُّبَيْرِ
356
+ 2. حدثنا (narrated to us) سُفْيَانُ
357
+ 3. حدثنا (narrated to us) يَحْيَى بْنُ سَعِيدٍ الْأَنْصَارِيُّ
358
+ 4. أخبرني (informed me) مُحَمَّدُ بْنُ إِبْرَاهِيمَ التَّيْمِيُّ
359
+ 5. سمع (heard) عَلْقَمَةَ بْنَ وَقَّاصٍ اللَّيْثِيَّ
360
+ 6. سمعت (I heard) عُمَرَ بْنَ الْخَطَّابِ
361
+ -> the Prophet ﷺ
362
+ ```
234
363
 
235
- Each narrator — and each scholar — is shown by the name he is **known by** (al-A'mash, Ibn 'Umar,
236
- Abu Hurayra), with his full name and every part of it laid out: name, lineage, kunya, by-name,
237
- nisbas, client of; the part he is known by is marked ★.
364
+ In the window, each result shows its chain as a row of names ending at whom it reaches, and
365
+ **View chain** opens it as a timeline from the book to the Prophet ﷺ — or, in a Shia book, to the
366
+ Imam — with the Arabic text below: the chain in lighter ink, the text of the hadith in full ink.
367
+ Every link says who the narrator is and what his critic says of him; a click opens him.
238
368
 
239
369
  <p align="center">
240
- <img src="https://raw.githubusercontent.com/bayramkotan/isnady/main/assets/screenshots/narrators.png" alt="Narrators — 'Abdullah b. 'Umar: Ibn Hajar's verdict, tabaqa, death year, teachers and students in the chains" width="850">
370
+ <img src="https://raw.githubusercontent.com/bayramkotan/isnady/main/assets/screenshots/chain.png" alt="Isnad Chains — the chain of Sahih al-Bukhari 1 as a timeline from the book to the Prophet" width="850">
241
371
  </p>
242
372
 
243
- ### 🎓 Hadith Scholars
373
+ ### 👤 Who each narrator is
374
+
375
+ Every name in a chain is matched to a narrator of its own tradition's rijal work — the *Taqrib*
376
+ for a Sunni book, al-Najashi for a Shia book. A name is linked only when the evidence leaves one
377
+ person: the words of the name, the book marks (a narrator in al-Bukhari must be one Ibn Hajar marks
378
+ خ), the order of generations along the chain, the last link before the Prophet being a Companion,
379
+ and — in al-Kafi — al-Kulayni's own teachers at the head of his chains. When several narrators
380
+ remain — "Sufyan" can be al-Thawri or Ibn 'Uyayna — the chain says so and names how many, rather
381
+ than choosing one. In blind, hand-checked samples of the identified names, the last fifty were all
382
+ correct. Names are kept exactly as written, with the clarifications the compilers added
383
+ (*"— yaʿnī Ibn Muḥammad —"*).
384
+
385
+ <details>
386
+ <summary><b>📊 How well it reads today</b></summary>
387
+ <br>
388
+
389
+ | | Chains | Split into narrators | Reaching the Prophet / a Ma'sum | Names identified |
390
+ |:--|--:|--:|--:|--:|
391
+ | Sahih al-Bukhari | 7,580 | 85.5% | | 51.5% |
392
+ | Sunan Abi Dawud | 5,272 | 71.9% | | 53.0% |
393
+ | al-Kafi (read the Shia way) | 14,239 | 96.8% | 92% | 48.5% |
394
+
395
+ In a blind, hand-checked sample of 30 Sunni chains: **no wrong narrator**, 27 complete. The rest are
396
+ kept whole, each with its reason: *tahwil* (ح, a second chain joining), two teachers at one link
397
+ (*qiran*), a chain that refers to an earlier one (*bi-isnadihi*), or wording that could not be read
398
+ with confidence. `iy isnads` gives the figures for every book you imported.
399
+
400
+ </details>
401
+
402
+ ### 🎓 The words of transmission explain themselves
244
403
 
245
- The scholars whose work is in the imported data, and what the data measures of it:
246
- **compilers** (their collection, the teachers their chains begin with, the Companions they end
247
- with), **graders** (how they grade, and how far they agree with each other on the same hadith —
248
- agreement, Cohen's kappa, and a strictness index: the classical *mutashaddid* / *mutasahil*,
249
- measured), and **critics** of narrators (Ibn Hajar's twelve ranks). On Sunan Abi Dawud, for
250
- example, Zubair 'Ali Za'i grades most strictly (−0.21) and agrees with al-Albani on 70% of the
251
- hadith; the page also flags a pair of graders whose 98% agreement suggests the source did not keep
252
- them independent.
404
+ | Term | Reads | What the critics took it to mean |
405
+ |:--:|:--|:--|
406
+ | حدثنا | narrated to us | The teacher recited it to a group: heard directly |
407
+ | حدثني | narrated to me | Recited to the narrator alone: heard directly |
408
+ | أخبرنا | informed us | Often a text read back to the teacher (*ʿarḍ*) |
409
+ | أنبأنا | told us | Later often transmission by permission (*ijāza*) |
410
+ | سمعت | I heard | Direct hearing, stated explicitly |
411
+ | قرأت على | I read to | The narrator read the text back to the teacher |
412
+ | عن | from | Does not say how it was received (*ʿanʿana*); connected when the two could have met and the narrator is not known for *tadlīs* |
413
+ | أن | that | Treated by most critics like ʿan (*muʾannan*) |
414
+ | — | (his teacher) | The compiler names his teacher without a term, as al-Kulayni does: his own transmission from that teacher |
415
+
416
+ ---
417
+
418
+ ## 🕌 Sunni and Shia: two roads
419
+
420
+ Sunni and Shia meet on the same pages — one search, one Narrators page, one shelf of books — and
421
+ every Shia narrator and book carries a gold **Shia** tag. They meet without being mixed: every value
422
+ isnady derives is reached along the road of the book's own tradition.
423
+
424
+ | | Road A — Sunni books | Road B — Shia books |
425
+ |---|---|---|
426
+ | How a chain opens | a transmission term on every link (حدثنا، أخبرنا، عن …) | al-Kulayni names his teacher without a term (علي بن إبراهيم عن أبيه …) |
427
+ | Groups and joined roads | two narrators at one link (qiran) | "عدة من أصحابنا" — al-Kulayni's groups, shown with the teachers he said they stand for; "… جميعاً عن …", two roads joined; "رفعه"; "عن رجل"; "عنه" |
428
+ | Where it ends | the Prophet ﷺ | one of the Fourteen Ma'sumun: the Prophet ﷺ or an Imam, most often by his kunya — أبو عبد الله is Ja'far al-Sadiq, أبو جعفر al-Baqir, أبو الحسن al-Kazim or al-Rida; "سألته" is *mudmar* |
429
+ | Who identifies its narrators | Ibn Hajar's *Taqrib al-Tahdhib* | only the Shia rijal works: al-Najashi's *Rijal* (al-Tusi's next) |
430
+ | How a narrator is judged | Ibn Hajar's twelve ranks | the Imami critics' own terms — **reliability** (*thiqa*; praised — *jalil*, *wajh*, *'ayn*; weak) and **creed** (Imami, or Waqifi, Fathi, Zaydi, *'ammi* …): an Imami *thiqa*, a praised narrator (*mamduh*), a *thiqa* of another school (*muwaththaq*), a weak one |
431
+ | Whose grades | al-Albani, Shu'ayb al-Arna'ut, Zubair 'Ali Za'i … | al-Majlisi (*Mir'at al-'Uqul*), al-Behbudi (*Sahih al-Kafi*) … |
432
+
433
+ Nothing is mapped onto the other tradition's measure, and a narrator of one tradition is never a
434
+ candidate for a link of the other's chains. Read this way, **96.8%** of al-Kafi's 14,239 chains
435
+ split into their narrators (9 did when they were read the Sunni way), **92%** reach a Ma'sum, and
436
+ half of their 61,160 names are identified in al-Najashi's *Rijal* (3 were before).
253
437
 
254
438
  <p align="center">
255
- <img src="https://raw.githubusercontent.com/bayramkotan/isnady/main/assets/screenshots/scholars.png" alt="Hadith Scholars — al-Albani: his grades on Sunan Abi Dawud and his agreement with the other graders" width="850">
439
+ <img src="https://raw.githubusercontent.com/bayramkotan/isnady/main/assets/screenshots/chain-shia.png" alt="A chain of al-Kafi read the Shia way: al-Kulayni's group of teachers, the narrators judged by al-Najashi, ending at Imam Ja'far al-Sadiq" width="850">
440
+ </p>
441
+
442
+ ```bash
443
+ iy chain kafi 5:1740 # al-Kulayni's group, al-Najashi's verdicts, the Imam it reaches
444
+ iy search "زرارة" --in narrators --tradition shia
445
+ iy isnads # per book: chains split, and whom they reach
446
+ ```
447
+
448
+ ---
449
+
450
+ ## 👥 Narrators
451
+
452
+ The **Narrators** page lists every narrator of the imported rijal works — **All**, **Sunni** or
453
+ **Shia** at the top of the list — searchable in Arabic or in Latin letters (`Abu Hurayra`, `Zuhri`,
454
+ `Ibn Umar`, `زرارة`). For each narrator:
455
+
456
+ - the name he is **known by** (al-A'mash, Ibn 'Umar, Zurara), with his full name and every part of
457
+ it laid out — name, lineage, kunya, by-name, nisbas, client of — the part he is known by marked ★;
458
+ - what his critic says, in the critic's own words: Ibn Hajar's verdict and its rank for a Sunni
459
+ narrator; al-Najashi's words, reliability and creed for a Shia narrator — the entry as written one
460
+ click away;
461
+ - tabaqa and death year, the books his hadith appear in (Ibn Hajar's marks);
462
+ - **whom he narrates from and who narrates from him** in the imported chains, and the compilers who
463
+ narrate from him directly;
464
+ - every hadith whose chain includes him, each a click from its chain.
465
+
466
+ Sunni narrators filter by tabaqa, rank and book; Shia narrators by the Imami assessment.
467
+
468
+ <p align="center">
469
+ <img src="https://raw.githubusercontent.com/bayramkotan/isnady/main/assets/screenshots/narrators.png" alt="Narrators — 'Abdullah b. 'Umar: Ibn Hajar's verdict, tabaqa, death year, teachers and students in the chains" width="850">
256
470
  </p>
471
+ <p align="center">
472
+ <img src="https://raw.githubusercontent.com/bayramkotan/isnady/main/assets/screenshots/narrators-shia.png" alt="Narrators — Zurara b. A'yan, a Shia narrator: al-Najashi's words and their reading in the Imami terms" width="850">
473
+ </p>
474
+
475
+ ---
257
476
 
258
- ### 📚 Books
477
+ ## 📖 Books
259
478
 
260
479
  isnady is not only for searching: the **Books** section opens every imported work and reads it in
261
480
  its own order. A hadith collection reads chapter by chapter, each hadith with its card (chain,
262
- narrators, other narrations, grades) and the languages you choose; Ibn Hajar's *Taqrib* reads
263
- letter by letter and name by name, each entry with its narrator a click away. Find within a
264
- chapter, go to the previous or next one, and isnady remembers where you were. From any search
265
- result, **In its book** opens the hadith where it stands, among the hadith of its chapter.
481
+ narrators, other narrations, grades) and the languages you choose; Ibn Hajar's *Taqrib* and
482
+ al-Najashi's *Rijal* read entry by entry, each narrator a click away. Find within a chapter, go to
483
+ the previous or next one, and isnady remembers where you were. From any search result, **In its
484
+ book** opens the hadith where it stands, among the hadith of its chapter.
266
485
 
267
- Books are not tied to hadith collections: a work is a tree of any depth (volume, book, chapter,
268
- section) whose leaves are hadith, narrators' entries or paragraphs — so the commentaries, manuals
269
- of fiqh and other works of the scholars can be read the same way as they are added.
486
+ The shelf holds the Sunni and the Shia books together, each under its own heading — *All*, *Sunni*
487
+ or *Shia* at the top shows one of them alone — and every Shia book carries a gold *Shia* tag. Books
488
+ are not tied to hadith collections: a work is a tree of any depth (volume, book, chapter, section)
489
+ whose leaves are hadith, narrators' entries or paragraphs — so commentaries, manuals of fiqh and the
490
+ other works of the scholars can be read the same way as they are added.
270
491
 
271
492
  <p align="center">
272
- <img src="https://raw.githubusercontent.com/bayramkotan/isnady/main/assets/screenshots/books.png" alt="Books — reading Sahih al-Bukhari chapter by chapter, Arabic and Turkish, each hadith with its chain" width="850">
493
+ <img src="https://raw.githubusercontent.com/bayramkotan/isnady/main/assets/screenshots/books.png" alt="Books — the Sunni and Shia shelves; reading Sahih al-Bukhari chapter by chapter, Arabic, English and Turkish, each hadith with its chain" width="850">
273
494
  </p>
274
495
 
275
496
  ```bash
@@ -279,87 +500,99 @@ iy book bukhari 2 --language Turkish
279
500
  iy book taqrib 1
280
501
  ```
281
502
 
282
- ### 🕌 Shia Rijal
503
+ ---
504
+
505
+ ## 🎓 Hadith Scholars
283
506
 
284
- The Imami tradition's judgments on narrators, on its own terms: al-Najashi's *Rijal* — 1,266
285
- authors and narrators — read along the two axes of the Imami critics, **reliability** (thiqa;
286
- praised — *jalil*, *wajh*, *'ayn*; weak) and **creed** (Imami, or Waqifi, Fathi, Zaydi, *'ammi* …),
287
- which together give the classical four: an Imami *thiqa*, a praised narrator (*mamduh*), a *thiqa*
288
- of another school (*muwaththaq*), a weak one. The critic's own words are always shown; a creed he
289
- does not state stays unknown; nothing is mapped onto Ibn Hajar's twelve ranks. Checked on four
290
- blind samples of entries, each round's misses corrected. The book itself reads in **Books**, and
291
- the Shia narrators are kept apart from the (Sunni) chains: no chain link is matched to them.
507
+ The scholars whose work is in the imported data, and what the data measures of it: **compilers**
508
+ (their collection, the teachers their chains begin with, the Companions they end with), **graders**
509
+ (how they grade, and how far they agree with each other on the same hadith — agreement, Cohen's
510
+ kappa, and a strictness index: the classical *mutashaddid* / *mutasahil*, measured), and **critics**
511
+ of narrators. On Sunan Abi Dawud, for example, Zubair 'Ali Za'i grades most strictly (−0.21) and
512
+ agrees with al-Albani on 70% of the hadith; the page also flags a pair of graders whose 98%
513
+ agreement suggests the source did not keep them independent.
292
514
 
293
515
  <p align="center">
294
- <img src="https://raw.githubusercontent.com/bayramkotan/isnady/main/assets/screenshots/shia-rijal.png" alt="Shia Rijal — al-Najashi on 'Ali b. al-Husayn b. Babawayh: his words and their reading on the Imami scale" width="850">
516
+ <img src="https://raw.githubusercontent.com/bayramkotan/isnady/main/assets/screenshots/scholars.png" alt="Hadith Scholars — al-Albani: his grades on Sunan Abi Dawud and his agreement with the other graders" width="850">
295
517
  </p>
296
518
 
297
- Next: al-Tusi's *Rijal* and *Fihrist*, al-'Allama al-Hilli's *Khulasat al-aqwal*, Ibn Dawud's
298
- *Rijal*, al-Kashshi's reports, and the Four Books with their chains.
299
-
300
- ### 📊 Statistics
519
+ ---
301
520
 
302
- Measured in depth, each figure with what it means and how sure it is. Grades are ordered
303
- categories, so they are never turned into numbers or averaged. The first tab, **Graders**, takes
304
- the scholars who graded a book (al-Albani, Shu'ayb al-Arna'ut, Zubair 'Ali Za'i, Muhammad Muhyi
305
- al-Din 'Abd al-Hamid on Sunan Abi Dawud) and shows:
521
+ ## 📊 Statistics
306
522
 
307
- - agreement of every pair — same grade, Cohen's kappa and the ordinal kappa — with 95% intervals,
308
- and Krippendorff's alpha for all of them together;
309
- - a **Dawid–Skene model** of each hadith's true grade: each grader's confusion matrix (how he grades
310
- a hadith of each true grade) and, for every hadith, how sure the model is;
311
- - **strictness** — the classical *mutashaddid* and *mutasahil*, measured by order only, with intervals;
312
- - the **disputed hadith**, where the scholars are furthest apart — a double-click opens one in its book.
523
+ Measured in depth, each figure with what it means in plain words and how sure it is. Grades are
524
+ ordered categories, so they are never turned into numbers or averaged, and no figure is read
525
+ against the science of hadith: the statistics measure what the scholars did, they do not overrule
526
+ it. Every result is computed once and saved as JSON in your data folder (`derived/`).
313
527
 
314
- Two graders who agree far too often to be independent (98.1%) count as one voice in the model,
315
- and the page says so. Results are computed once and kept in a file. `iy stats graders`.
316
- Narrators, books, hadith, chains, correlations and the models follow, tab by tab. **Correlations
317
- and tests** sets every measure against every other — Spearman's ρ with Benjamini–Hochberg q-values,
318
- and the partial ρ with all the others held equal (what each factor of the chain says of each
319
- scholar's grade on its own) — and tests what differs: the scholars' grades pair by pair
320
- (Stuart–Maxwell), the books (Kruskal–Wallis, Mann–Whitney with Cliff's δ), and whether the hadith
321
- model's shape holds (Brant's test). `iy stats lab`.
528
+ | Section | What it shows |
529
+ |---|---|
530
+ | **Overview** | the corpus at a glance: books, hadith, chains, narrators, grades |
531
+ | **Narrators** | reliability, concentration (the busiest 10% carry 75% of the transmission — the Lorenz curve) and the pillars of transmission |
532
+ | **Chains** | length, the weakest link, and the time between narrators (who could not have met) |
533
+ | **Grades and chains** | the weakest narrator and the length of a chain against its grade |
534
+ | **Books** | the books side by side |
535
+ | **Graders** | agreement of every pair (same grade, Cohen's and the ordinal kappa, 95% intervals, Krippendorff's alpha); a **Dawid–Skene model** of each hadith's true grade and each grader's confusion matrix; **strictness**; the **disputed hadith** |
536
+ | **The hadith model** | what each scholar's grade follows — ordinal regression with odds ratios and 95% intervals, and the hadith graded higher or lower than their chain |
537
+ | **Correlations and tests** | every measure against every other (Spearman's ρ with Benjamini–Hochberg q-values, the partial ρ with the others held equal) and what differs: graders pair by pair (Stuart–Maxwell), books (Kruskal–Wallis, Mann–Whitney with Cliff's δ), whether the model's shape holds (Brant) |
322
538
 
323
539
  <p align="center">
324
- <img src="https://raw.githubusercontent.com/bayramkotan/isnady/main/assets/screenshots/statistics.png" alt="Statistics — the graders of Sunan Abi Dawud: Krippendorff's alpha, agreement with intervals, the model's certainty" width="850">
540
+ <img src="https://raw.githubusercontent.com/bayramkotan/isnady/main/assets/screenshots/statistics.png" alt="Statistics — Narrators: the busiest 10% of narrators carry 75% of the transmission; the Lorenz curve and the pillars" width="850">
541
+ </p>
542
+ <p align="center">
543
+ <img src="https://raw.githubusercontent.com/bayramkotan/isnady/main/assets/screenshots/statistics-model.png" alt="The hadith model — for al-Albani, a weak or unknown weakest narrator multiplies the odds of a weaker grade by 14; odds ratios with 95% intervals" width="850">
544
+ </p>
545
+ <p align="center">
546
+ <img src="https://raw.githubusercontent.com/bayramkotan/isnady/main/assets/screenshots/statistics-lab.png" alt="Correlations and tests — each factor against each scholar's grade with the others held equal (partial Spearman's rho), Sunan Abi Dawud" width="850">
325
547
  </p>
326
548
 
327
- ### 🎓 Learn
549
+ ```bash
550
+ iy stats # what the database holds, per book
551
+ iy stats graders --book abudawud
552
+ iy stats model --grader albani
553
+ iy stats lab --csv ./lab # every table behind the figures, as CSV
554
+ ```
555
+
556
+ ---
557
+
558
+ ## 🎓 Learn
328
559
 
329
560
  The terms of hadith and its sciences, written for isnady with their classical sources: 81 terms —
330
561
  the grades (sahih, hasan, da'if, mawdu', shadhdh, munkar, mu'allal), the kinds of hadith by their
331
562
  chain (mutawatir, mursal, munqati', mu'allaq, mudallas …), chain and text (mutaba'a, shahid,
332
563
  takhrij, madar), the ways of receiving (sama', ijaza, haddathana, 'an), judging narrators (the
333
564
  twelve ranks of Ibn Hajar, thiqa, saduq, majhul, matruk, mudallis), generations, the parts of an
334
- Arabic name, Imami rijal, the books, and isnady's own measures. Each with its Arabic, a one-line
335
- and a longer definition in **English or Turkish**, related terms one click away, and its source.
336
- The grades on every result explain themselves when you point at them. `iy term mursal --lang tr`.
565
+ Arabic name, the Imami grades (sahih, hasan, muwaththaq, da'if), the books, and isnady's own
566
+ measures. Each with its Arabic, a one-line and a longer definition in **English or Turkish**,
567
+ related terms one click away, and its source. The grades on every result explain themselves when
568
+ you point at them. `iy term mursal --lang tr`.
337
569
 
338
570
  <p align="center">
339
571
  <img src="https://raw.githubusercontent.com/bayramkotan/isnady/main/assets/screenshots/learn.png" alt="Learn — the term mursal: Arabic, definition, related terms and source" width="850">
340
572
  </p>
341
573
 
342
- ### 🧠 Search by meaning (AI)
574
+ ---
575
+
576
+ ## 🧠 Search by meaning (AI)
343
577
 
344
578
  Choose **Match → By meaning (AI)** to find hadith that say the same thing in other words or in
345
579
  another language: `komşu hakları` finds the hadith on the neighbour's rights, a Turkish sentence
346
580
  finds its Arabic original, and `إنما الأعمال بالنيات` gathers the narrations of the hadith on
347
- intentions from every imported book. Each result shows how close it is in meaning (0–1), which
348
- says nothing about authenticity.
349
-
350
- The model is learnt on your computer from the texts you imported — Arabic beside its
351
- translations is a parallel corpus, and cross-lingual latent semantic analysis learns the
352
- concepts the languages share. Nothing is downloaded and no outside model is used. Measured on
353
- al-Bukhari and Abu Dawud: for hadith the model never saw while learning, a Turkish translation
354
- finds its Arabic original first 68% of the time and among the first ten 93% of the time (chance:
355
- 0.8%). For an exact quotation the ordinary word search stays the better tool.
356
-
357
- The same step finds the **other narrations of each hadith** across the imported books
358
- (takhrij): every result card says where else it is narrated — *Also narrated in: Sahih
359
- al-Bukhari 5070 · 6689 · 6953 | Sunan Abi Dawud 2201* — and each number opens that hadith.
360
- Only the texts are compared, never the chains; upright numbers share the text, italic ones
361
- probably report the same event from the same Companion. In blind, hand-checked samples 34 of
362
- 35 pairs of the first kind and 18 of 20 of the second were right.
581
+ intentions from every imported book. Each result shows how close it is in meaning (0–1), which says
582
+ nothing about authenticity.
583
+
584
+ The model is learnt on your computer from the texts you imported — Arabic beside its translations
585
+ is a parallel corpus, and cross-lingual latent semantic analysis learns the concepts the languages
586
+ share. Nothing is downloaded and no outside model is used. Measured on al-Bukhari and Abu Dawud: for
587
+ hadith the model never saw while learning, a Turkish translation finds its Arabic original first 68%
588
+ of the time and among the first ten 93% of the time (chance: 0.8%). For an exact quotation the
589
+ ordinary word search stays the better tool.
590
+
591
+ The same step finds the **other narrations of each hadith** across the imported books (takhrij):
592
+ every result card says where else it is narrated — *Also narrated in: Sahih al-Bukhari 5070 · 6689 ·
593
+ 6953 | Sunan Abi Dawud 2201* — and each number opens that hadith. Only the texts are compared, never
594
+ the chains. In blind, hand-checked samples 34 of 35 pairs of the first kind and 18 of 20 of the
595
+ second were right.
363
596
 
364
597
  ```bash
365
598
  pip install "isnady[ai]" # numpy and scipy
@@ -370,201 +603,84 @@ iy tahric bukhari 1 # the other narrations of a hadith
370
603
 
371
604
  ---
372
605
 
373
- ## 🔗 Chains of transmission
374
-
375
- Every Arabic text is read for its chain:
376
-
377
- ```
378
- Sahih al Bukhari 1
379
- 1. حدثنا (narrated to us) الْحُمَيْدِيُّ عَبْدُ اللَّهِ بْنُ الزُّبَيْرِ
380
- 2. حدثنا (narrated to us) سُفْيَانُ
381
- 3. حدثنا (narrated to us) يَحْيَى بْنُ سَعِيدٍ الْأَنْصَارِيُّ
382
- 4. أخبرني (informed me) مُحَمَّدُ بْنُ إِبْرَاهِيمَ التَّيْمِيُّ
383
- 5. سمع (heard) عَلْقَمَةَ بْنَ وَقَّاصٍ اللَّيْثِيَّ
384
- 6. سمعت (I heard) عُمَرَ بْنَ الْخَطَّابِ
385
- -> the Prophet
386
- ```
387
-
388
- In the window, each result shows its chain as a row of names ending at the Prophet, and
389
- **View chain** opens it as a timeline from the book to the Prophet, with the Arabic text
390
- below: the chain in lighter ink, the text of the hadith in full ink.
391
-
392
- ### 👤 Who each narrator is
393
-
394
- With Ibn Hajar's *Taqrib al-Tahdhib* imported, every name in a chain is matched to a
395
- narrator, and the chain shows what Ibn Hajar says of him: his verdict in his own words, its
396
- rank on Ibn Hajar's twelve-step scale, the narrator's *tabaqa* (generation) and his death
397
- year.
398
-
399
- A name is linked only when the evidence leaves one person: the words of the name, the book
400
- marks (a narrator in al-Bukhari must be one Ibn Hajar marks خ), the order of generations
401
- along the chain, and the last link before the Prophet being a Companion. When several
402
- narrators remain — "Sufyan" can be al-Thawri or Ibn 'Uyayna — the chain says so and names
403
- how many, rather than choosing one. Today about half of all names are identified; in blind,
404
- hand-checked samples of the identified ones, the last fifty were all correct.
405
-
406
- Names are kept exactly as written, with the clarifications the compilers added
407
- (*"— yaʿnī Ibn Muḥammad —"*, *"mawlā Ibn ʿAbbās"*), because identifying each narrator is
408
- a separate step that comes next.
409
-
410
- <details>
411
- <summary><b>📊 How well it reads today</b></summary>
412
- <br>
413
-
414
- Measured on Sahih al-Bukhari and Sunan Abi Dawud (12,852 chains):
415
-
416
- | | Bukhari | Abu Dawud | Both |
417
- |:--|:--:|:--:|:--:|
418
- | Split into narrators | 85.5% | 71.9% | 79.9% |
419
- | Of those, reaching the Prophet | | | 78.3% |
420
- | Narrators per chain | | | 5.0 |
421
-
422
- In a blind, hand-checked sample of 30 chains: **no wrong narrator**, 27 complete.
423
-
424
- The rest are kept whole, each with its reason: *tahwil* (ح, a second chain joining), two
425
- teachers at one link (*qiran*), a second chain after the first, or wording that could not be
426
- read with confidence. Abu Dawud uses *qiran* and *tahwil* far more often than Bukhari, which
427
- is why its share is lower. One known limit: a last narrator introduced only by *qāla*
428
- ("قال قال عبد الله") is not added, because the same words also begin stories.
429
-
430
- </details>
431
-
432
- ---
433
-
434
- ## 🎓 Educational by Design
435
-
436
- isnady teaches the science it uses. Every transmission term in a chain explains itself:
437
-
438
- | Term | Reads | What the critics took it to mean |
439
- |:--:|:--|:--|
440
- | حدثنا | narrated to us | The teacher recited it to a group: heard directly |
441
- | حدثني | narrated to me | Recited to the narrator alone: heard directly |
442
- | أخبرنا | informed us | Often a text read back to the teacher (*ʿarḍ*) |
443
- | أنبأنا | told us | Later often transmission by permission (*ijāza*) |
444
- | سمعت | I heard | Direct hearing, stated explicitly |
445
- | قرأت على | I read to | The narrator read the text back to the teacher |
446
- | عن | from | Does not say how it was received (*ʿanʿana*); connected when the two could have met and the narrator is not known for *tadlīs* |
447
- | أن | that | Treated by most critics like ʿan (*muʾannan*) |
448
-
449
- The Learn section — hadith terminology, grading, *jarḥ wa taʿdīl* and the classical works,
450
- each shown on real hadith and real chains — is on the roadmap.
451
-
452
- ---
453
-
454
- ## 🎨 Appearance
606
+ ## 🎨 Appearance and settings
455
607
 
456
608
  Seven themes, chosen in **Edit → Preferences → Themes** — each shown as a small live isnady window —
457
609
  or in **View → Theme**: *Lapis* (lapis and gold of illuminated manuscripts) and *Lapis Night*, which
458
- "Follow system" switches between; *Paper* (warm cream and ink, for long reading); *Slate* (quiet and
459
- modern, with a light sidebar); *Emerald*; *Midnight* (deep dark with teal); and *High Contrast*
460
- (black, white and yellow, for low vision). `iy config set view.theme paper`.
610
+ "Follow system" switches between; *Paper* (warm cream and ink, for long reading); *Slate*;
611
+ *Emerald*; *Midnight*; and *High Contrast* (black, white and yellow, for low vision).
461
612
 
462
- Every script has its own reading font, size, colour and line spacing — Arabic, Latin,
463
- Cyrillic, Bengali and Tamil today, more as sources in other scripts arrive. The light and
464
- the dark theme each keep their own colours, and the interface font can be changed too.
465
- **Edit → Preferences** (Ctrl + ,) applies every change at once; each row has its own
466
- Default button.
613
+ Every script has its own reading font, size, colour and line spacing — Arabic, Latin, Cyrillic,
614
+ Bengali and Tamil today. The light and the dark theme each keep their own colours, and the interface
615
+ font can be changed too. **Edit → Preferences** (Ctrl + ,) applies every change at once; each row
616
+ has its own Default button.
467
617
 
468
618
  <p align="center">
469
619
  <img src="https://raw.githubusercontent.com/bayramkotan/isnady/main/assets/screenshots/preferences.png" alt="Preferences — font, size, line spacing and colour for each script" width="760">
470
620
  </p>
471
621
 
472
- The same settings from the command line:
622
+ **Settings → Books and languages** switches imported books on and off (Sunni and Shia apart) and
623
+ chooses the languages the texts are shown in; the others are folded behind an arrow on each hadith.
624
+
625
+ <p align="center">
626
+ <img src="https://raw.githubusercontent.com/bayramkotan/isnady/main/assets/screenshots/books-languages.png" alt="Settings → Books and languages — books on and off, Sunni and Shia apart; the languages shown, the others folded behind an arrow" width="760">
627
+ </p>
473
628
 
474
629
  ```bash
475
630
  iy config list --prefix text.arabic # what is set, and what is changed
476
631
  iy config set text.arabic.size 22
477
- iy config set text.latin.family "Noto Serif"
478
- iy config set colors.dark.gilt "#5A4A1E" # matched words in the dark theme
632
+ iy config set view.theme paper
479
633
  iy config reset text.arabic # back to the defaults
480
634
  ```
481
635
 
482
- Settings live in `settings.json` in the isnady data folder, shared by the window and the
483
- command line.
484
-
485
- ---
636
+ ### Your data folder
486
637
 
487
- ## 📚 Data sources
638
+ Everything isnady keeps is in one folder — `iy datadir` shows it, `iy datadir /elsewhere` moves it,
639
+ and a folder named `isnady-data` beside a portable application is used instead:
488
640
 
489
- isnady reads its sources from a **repository**: a `catalog.json` listing books and rijal works,
490
- where each file is, its format, its licence and its tradition. Choose one in **Settings → Data
491
- sources** (or `iy repo use ID`); add your own with **Add a repository…** (`iy repo add URL`: a
492
- GitHub repository, a Hugging Face dataset, a catalog URL or a folder).
493
-
494
- **The default — [isnady-data](https://github.com/bayramkotan/isnady-data)** holds every source
495
- below in one place and in isnady's own format, each book in a folder named by its full title and
496
- its compiler — `sunni/sahih_al_bukhari/`, `sunni/musnad_ahmad_ibn_hanbal/`, `shia/al_kafi_al_kulayni/`
497
- (a `book.json` and one file per language) — and the works on the narrators in `rijal/sunni/`,
498
- `rijal/shia/`.
499
-
500
- | | Sunni | Shia |
501
- |---|---|---|
502
- | **Hadith** | Sahih al-Bukhari, Sahih Muslim, Sunan Abi Dawud, Jami' al-Tirmidhi, Sunan al-Nasa'i, Sunan Ibn Maja, the Muwatta, the Forty of al-Nawawi, Forty Hadith Qudsi, the Forty of Shah Waliullah — Arabic and up to eight translations, with grades · Musnad Ahmad, Sunan al-Darimi · Riyad al-Salihin, al-Shama'il al-Muhammadiyya, Bulugh al-Maram, al-Adab al-Mufrad, Mishkat al-Masabih | al-Kulayni's al-Kafi (8 volumes, with al-Majlisi's and al-Behbudi's grades) · al-Saduq's 'Uyun Akhbar al-Rida, al-Amali, al-Khisal, al-Tawhid, Ma'ani al-Akhbar, Thawab al-A'mal, Sifat al-Shi'a, Fada'il al-Shi'a · al-Mufid's al-Amali · Ibn Qulawayh's Kamil al-Ziyarat · al-Nu'mani's and al-Tusi's Kitab al-Ghayba · al-Ahwazi's al-Mu'min and al-Zuhd · al-Muhsini's Mu'jam al-Ahadith al-Mu'tabara — Arabic and English |
503
- | **Narrators** | Ibn Hajar, *Taqrib al-Tahdhib* | al-Najashi, *Rijal* |
504
-
505
- The credits for where each text was first published are in the repository's README.
506
-
507
- **Optional repositories**, each the dataset as its authors publish it (their books under their
508
- own keys, e.g. `bukhari-lk`, so editions with other numbering never mix):
509
-
510
- | Repository | What it holds | Licence |
511
- |---|---|---|
512
- | [fawazahmed0/hadith-api](https://github.com/fawazahmed0/hadith-api) | 10 collections, Arabic + 8 languages, grades | Unlicense |
513
- | [Thaqalayn](https://github.com/MohammedArab1/ThaqalaynAPI) | 16 Shia collections, Arabic + English, grades of al-Kafi | not stated (from thaqalayn.net) |
514
- | [Open Hadith Data](https://github.com/mhashim6/Open-Hadith-Data) | the nine books in Arabic with diacritics, seven with a commentary of every hadith | ODbL |
515
- | [hadith-json](https://github.com/AhmedBaset/hadith-json) | 17 books, Arabic + English (50,884 hadith, from sunnah.com) | not stated |
516
- | [LK Hadith Corpus](https://github.com/ShathaTm/LK-Hadith-Corpus) | the six books, Arabic + English, isnad and matn marked apart, grades | not stated (cite the authors' paper) |
517
- | [Hugging Face — meeAtif/hadith_datasets](https://huggingface.co/datasets/meeAtif/hadith_datasets) | the six books, Arabic + English, chapter titles, grades | MIT (as declared; text from sunnah.com) |
518
- | [Hadith-Data-Sets](https://github.com/abdelrahmaan/Hadith-Data-Sets) | the nine books in Arabic (62,169 hadith) | not stated |
519
- | [OpenITI](https://github.com/OpenITI) | the Taqrib and al-Najashi's Rijal | not stated in the repository |
520
-
521
- Every source records a licence **tier**: **A** may be redistributed, **B** may be redistributed
522
- under its conditions, **C** may not. Sources you add yourself stay on your computer. **Help →
523
- Licences** lists every source in your database with its licence. Any CSV or JSON table of hadith
524
- can be read through a catalog that names its columns (format `table`); the fawazahmed0 JSON
525
- format, OpenITI mARkdown (the Taqrib, al-Najashi) and files of your own with or without
526
- authentication (credentials are never stored) are read as well.
641
+ | | |
642
+ |---|---|
643
+ | `isnady.db` | the database: books, texts, grades, chains, narrators (SQLite) |
644
+ | `derived/*.json` | statistics and models, computed once and kept |
645
+ | `settings.json` | appearance and other settings, shared by the window and the command line |
646
+ | `repos/`, `user_repositories.json` | the catalogs read from the repositories, and the repositories you added |
647
+ | `isnady.<date-time>.bak.db` | a database replaced by a ready one, kept |
527
648
 
528
649
  ---
529
650
 
530
651
  ## ⌨️ CLI
531
652
 
532
- Everything the window does also works without it — on a server, over SSH, or in a
533
- script. The command line never loads Qt.
653
+ Everything the window does also works without it — on a server, over SSH, or in a script. The
654
+ command line never loads Qt. Every command that takes a book accepts its full name
655
+ (`musnad_ahmad_ibn_hanbal`) or its short key (`ahmad`).
534
656
 
535
- | Short | Full | What it does |
657
+ | Short | Example | What it does |
536
658
  |:------|:-----|:-------------|
537
659
  | `iy` | `isnady` | Open the window |
538
- | `iy search WORDS` | `isnady search WORDS` | Search; `--mode all\|any\|phrase`, `--whole-words`, `--book`, `--language`, `--limit` |
539
- | `iy chain BOOK NUMBER` | `isnady chain bukhari 1` | One chain, narrator by narrator, with who each one is; `--raw` adds the wording |
540
- | `iy isnads` | `isnady isnads` | Read every chain and report per book; `--rebuild` reads them again |
541
- | `iy ai build` | `isnady ai build` | Learn the meaning index from the imported texts (`iy ai status` to check) |
542
- | `iy import najashi FILE` | `isnady catalog import najashi` | al-Najashi's Rijal: Shia narrators read on the Imami scale, and the book |
543
- | `iy shortcut` | `isnady shortcut --no-desktop` | A desktop and applications-menu shortcut, with isnady's icon |
544
- | `iy term [NAME]` | `isnady term --search tadlis` | The glossary: a term's meaning, English or Turkish (`--lang tr`) |
545
- | `iy stats graders` | `isnady stats graders --book abudawud` | The graders of a book in depth: agreement, model, strictness |
546
- | `iy stats model` | `isnady stats model --grader albani` | What each scholar's grade follows: ordinal regression, odds ratios, surprises |
547
- | `iy stats lab` | `isnady stats lab --csv ./lab` | Correlations (Spearman, partial, BH q) and tests (Stuart–Maxwell, Kruskal–Wallis, Mann–Whitney, Brant) |
548
- | `iy book [KEY [CHAPTER]]` | `isnady book bukhari 2` | The books; a book's chapters; a chapter read in order |
549
- | `iy scholar [NAME]` | `isnady scholar albani` | The scholars in the data, or one of them with his measured statistics |
550
- | `iy tahric BOOK NUMBER` | `isnady tahric bukhari 1` | Other narrations of a hadith in the imported books (takhrij) |
551
- | `iy search --mode meaning WORDS` | `isnady search --mode meaning "komşu hakları"` | Search by meaning and across languages |
552
- | `iy narrator NAME` | `isnady narrator "Ibn Umar"` | A narrator: Ibn Hajar's verdict and rank, tabaqa, death year, books, other names; with `--limit 1` also teachers, students and hadith |
553
- | `iy import FORMAT FILE-OR-URL` | `isnady import …` | Import a source; `--book`, `--language`, `--license`, `--user`, `--token-env`, `--api-key-env` |
554
- | `iy repo [list\|use\|show\|add\|remove]` | `isnady repo use thaqalayn` | The data repositories: isnady's own (default), the optional ones, yours |
555
- | `iy catalog list` | `isnady catalog list --repo lk-hadith-corpus` | The sources of the repository in use, and your own, with what is imported — the same as File → Data Sources |
556
- | `iy catalog import ID` | `isnady catalog import sahih_muslim --language tur` | Import a listed source; `remove`, `add`, `delete` manage the list |
557
- | `iy catalog import --all` | `isnady catalog import --all --language ara` | Every source of the repository at once |
558
- | `iy datadir [FOLDER]` | `isnady datadir /data/isnady` | Show or change where the database and settings live; `--as-is`, `--default` |
559
- | `iy formats` | `isnady formats` | Formats that can be imported |
560
- | `iy sources` | `isnady sources` | Imported sources, their licence and tier |
561
- | `iy stats` | `isnady stats` | Hadith, texts, grades and chains per book |
562
- | `iy remove KEY` | `isnady remove KEY` | Remove a source and everything imported from it |
563
- | `iy config list\|get\|set\|reset` | `isnady config …` | Appearance and other settings — the same as Edit → Preferences |
564
- | `iy update` | `isnady update` | Update every copy of isnady where it is installed (system, user, venv, pipx, clone) |
565
- | `iy doctor` | `isnady doctor` | Every copy of isnady on this computer and which one each command starts |
566
- | `iy -V` | `isnady -V` | Show the version (also `-v`, `--version`, `version`) |
567
- | `iy -h` | `isnady -h` | Show help |
660
+ | `iy search WORDS` | `iy search niyet --book abudawud` | Search; `--mode all\|any\|phrase\|meaning`, `--whole-words`, `--book`, `--language`, `--limit`; `--in narrators\|scholars`, `--tradition sunni\|shia` |
661
+ | `iy chain BOOK NUMBER` | `iy chain kafi 5:1740` | One chain, narrator by narrator, with who each one is and whom it reaches; `--raw` adds the wording |
662
+ | `iy isnads` | `iy isnads --rebuild` | Read every chain and report per book: split, reaching the Prophet or a Ma'sum, identified |
663
+ | `iy narrator NAME` | `iy narrator "Ibn Umar"` | A narrator: his critic's verdict (Ibn Hajar's rank, or the Imami terms), tabaqa, death year, books; `--limit 1` adds teachers, students and hadith |
664
+ | `iy book [KEY [CHAPTER]]` | `iy book bukhari 2` | The books; a book's chapters; a chapter read in order |
665
+ | `iy scholar [NAME]` | `iy scholar albani` | The scholars in the data, or one of them with his measured statistics |
666
+ | `iy tahric BOOK NUMBER` | `iy tahric bukhari 1` | Other narrations of a hadith in the imported books (takhrij) |
667
+ | `iy stats [SECTION]` | `iy stats graders --book abudawud` | `corpus`, `narrators`, `chains`, `grades`, `books`, `graders`, `model`, `lab`; `--csv DIR`, `--recompute` |
668
+ | `iy term [NAME]` | `iy term --search tadlis` | The glossary, English or Turkish (`--lang tr`) |
669
+ | `iy ai build` | `iy ai status` | Learn the meaning index from the imported texts |
670
+ | `iy catalog list` | `iy catalog list --repo lk-hadith-corpus` | The books of the repository in use, and your own, with what is imported |
671
+ | `iy catalog import ID` | `iy catalog import sahih_muslim --language tur` | Import a book; `--all` imports every one; `remove`, `add`, `delete` manage the list |
672
+ | `iy repo [list\|use\|show\|add\|remove]` | `iy repo add ~/isnady-data` | The data repositories: isnady-data (default), the optional ones, yours — a GitHub or Hugging Face address, a URL, or a folder |
673
+ | `iy database [use FILE]` | `iy database use isnady-db-<date>.zip` | A ready database from a file; your own is kept beside it |
674
+ | `iy import FORMAT FILE-OR-URL` | `iy import isnady ~/my_book/book.json` | Import a file of your own; `--book`, `--language`, `--license`, `--user`, `--token-env`, `--api-key-env` |
675
+ | `iy sources` | | Imported sources, their licence and tier |
676
+ | `iy remove KEY` | | Remove a source and everything imported from it |
677
+ | `iy formats` | | The formats that can be imported |
678
+ | `iy datadir [FOLDER]` | `iy datadir /data/isnady` | Show or move the data folder; `--as-is`, `--default` |
679
+ | `iy config list\|get\|set\|reset` | | Settings — the same as Edit → Preferences |
680
+ | `iy shortcut` | `iy shortcut --no-desktop` | A desktop and applications-menu shortcut |
681
+ | `iy update` | | Update every copy of isnady where it is installed |
682
+ | `iy doctor` | | Every copy of isnady on this computer and which one each command starts |
683
+ | `iy -V` / `iy -h` | | Version / help |
568
684
 
569
685
  ```console
570
686
  $ iy search niyet --book abudawud --limit 1
@@ -577,11 +693,8 @@ Sunan Abu Dawud #472
577
693
 
578
694
  ---
579
695
 
580
- ## 📸 Screenshots
696
+ ## 📸 More screenshots
581
697
 
582
- <p align="center">
583
- <img src="https://raw.githubusercontent.com/bayramkotan/isnady/main/assets/screenshots/chain.png" alt="Isnad Chains — the chain of Sahih al-Bukhari 1 as a timeline from the book to the Prophet" width="850">
584
- </p>
585
698
  <p align="center">
586
699
  <img src="https://raw.githubusercontent.com/bayramkotan/isnady/main/assets/screenshots/search-grades.png" alt="Search — Sunan Abi Dawud with each scholar's grade and the chain above the text" width="850">
587
700
  </p>
@@ -591,32 +704,39 @@ Sunan Abu Dawud #472
591
704
  <p align="center">
592
705
  <img src="https://raw.githubusercontent.com/bayramkotan/isnady/main/assets/screenshots/chains-overview.png" alt="Chains overview — per-book statistics and what was kept whole" width="850">
593
706
  </p>
707
+ <p align="center">
708
+ <img src="https://raw.githubusercontent.com/bayramkotan/isnady/main/assets/screenshots/books-taqrib.png" alt="Books — Ibn Hajar's Taqrib read letter by letter, each entry a click from its narrator" width="850">
709
+ </p>
594
710
 
595
711
  ---
596
712
 
597
713
  ## 🗺️ Roadmap
598
714
 
599
- - **Narrators** — the other half of the names identified through teachers and students
600
- (al-Mizzi's *Tahdhib al-Kamal*), the verdicts of other critics beside Ibn Hajar's, and
601
- whether each link could have met the next.
602
- - **Hadith scholars** — their lives in full, and more scholars as more collections and grades
603
- are imported.
604
- - **Shia rijal** — narrator verdicts from the Shia rijal works, beside the Sunni view.
605
- - **Learn** — the sciences of hadith, shown on real hadith and real chains.
606
- - **More sources and formats** — and adding your own from inside the window.
607
- - **Glossary** — every Arabic term of hadith and the Islamic sciences explained where it
608
- appears: hover or click a term, read its meaning in the interface language.
715
+ - **Shia narrators, further** — al-Tusi's *Rijal* and *Fihrist* and al-Kashshi's reports; names
716
+ resolved by teacher and student; the Shia books' statistics by the Imami scholars' grades, and a
717
+ Sunni–Shia comparison.
718
+ - **More in isnady-data** — al-Tusi's *Tahdhib al-Ahkam* and *al-Istibsar*, al-Saduq's *Man la
719
+ yahduruhu al-faqih*; al-Hakim's *Mustadrak*, al-Bayhaqi's *Sunan*, the *Mu'jam*s.
720
+ - **Narrators** — the other half of the names identified through teachers and students (al-Mizzi's
721
+ *Tahdhib al-Kamal*), the verdicts of other critics beside Ibn Hajar's, and whether each link could
722
+ have met the next; fuller, richer lives of narrators and scholars.
723
+ - **Statistics in plain words** — every finding said simply first, the method after.
724
+ - **Settings and export** — every setting in one place, export in every common format (named by the
725
+ books' full names), reset and remove from inside the window.
726
+ - **Twenty interface languages.**
609
727
  - **isnady.net** — the same engine on the web.
610
728
 
611
729
  ---
612
730
 
613
731
  ## 🔁 Versions and releases
614
732
 
615
- One version number on GitHub, PyPI and npm, always. A release builds the Python package and the Windows,
616
- Linux and macOS applications first; only when every build succeeds is anything published — PyPI, then the
617
- [GitHub Release](https://github.com/bayramkotan/isnady/releases) with every file and its checksum. What each
618
- version brought is in the [CHANGELOG](https://github.com/bayramkotan/isnady/blob/main/CHANGELOG.md). The
619
- README on npm is made from this one.
733
+ One version number on GitHub, PyPI and npm, always. A release builds the Python package and the
734
+ Windows, Linux and macOS applications first; only when every build succeeds is anything published —
735
+ PyPI, then the [GitHub Release](https://github.com/bayramkotan/isnady/releases) with every file and
736
+ its checksum. What each version brought is in the
737
+ [CHANGELOG](https://github.com/bayramkotan/isnady/blob/main/CHANGELOG.md). The README on npm is made
738
+ from this one. The data has its own rhythm: a book added to
739
+ [isnady-data](https://github.com/bayramkotan/isnady-data) needs no new version of isnady.
620
740
 
621
741
  ## 🏗️ Build from Source
622
742
 
@@ -627,18 +747,18 @@ pip install -e .
627
747
  iy
628
748
  ```
629
749
 
630
- Python 3.10 or newer and PySide6. The command line alone needs no PySide6.
631
-
632
- ---
633
-
634
-
635
- The desktop application of your own system: `pip install ".[ai]" pyinstaller`, then
750
+ Python 3.10 or newer and PySide6. The command line alone needs no PySide6. The desktop application
751
+ of your own system: `pip install ".[ai]" pyinstaller`, then
636
752
  `python packaging/build_app.py linux|windows|macos VERSION`.
637
753
 
754
+ The data repository is built by two tools in this one: `tools/build_data_repo.py --mirror DIR`
755
+ converts every source into isnady-data, and `tools/publish_database.py DIR` prepares a ready
756
+ database for its Releases.
757
+
638
758
  ## 📝 License
639
759
 
640
- MIT for the application code. Hadith data comes from separate sources, each under its own
641
- licence, recorded with the data and listed under **Help → Licences**.
760
+ MIT for the application code. Hadith data comes from separate sources, each under its own licence,
761
+ recorded with the data and listed under **Help → Licences**.
642
762
 
643
- The Arabic and reading typeface is [Amiri](https://github.com/aliftype/amiri) by Khaled
644
- Hosny, bundled under the SIL Open Font License 1.1 (`src/isnady/assets/fonts/OFL.txt`).
763
+ The Arabic and reading typeface is [Amiri](https://github.com/aliftype/amiri) by Khaled Hosny,
764
+ bundled under the SIL Open Font License 1.1 (`src/isnady/assets/fonts/OFL.txt`).
package/index.js CHANGED
@@ -6,7 +6,7 @@
6
6
  * database (used by both the Python and JavaScript packages) exists.
7
7
  */
8
8
 
9
- export const version = "0.1.8";
9
+ export const version = "0.1.9";
10
10
  export const name = "isnady";
11
11
 
12
12
  /** Returns basic package information. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "isnady",
3
- "version": "0.1.8",
3
+ "version": "0.1.9",
4
4
  "description": "Hadith search with full isnad chains, narrator biographies, jarh wa ta'dil verdicts and reliability scores",
5
5
  "type": "module",
6
6
  "main": "./index.js",