sunan-al-nasai
v1.0.1
Published
Complete Sunan al-Nasa'i. Offline-first, zero dependencies. CLI + Node + React/Vue/Vite.
Maintainers
Readme
✨ Features
| | Feature | Details |
|---|---|---|
| 📚 | Complete Collection | All 5,768 authentic hadiths from Sunan al-Nasa'i |
| 🌐 | Bilingual | Full Arabic text + English translation |
| ⚡ | Offline-first | Data bundled — no CDN needed |
| 🔧 | Zero Dependencies | Nothing extra to install |
| 🔍 | Full-text Search | Search English text and narrator names |
| 🖥️ | CLI | Terminal access with Arabic/English/both flags |
| ⚛️ | React Hook | One command generates useNasai() |
| 🐍 | Python | Identical API — same camelCase method names |
| 📘 | TypeScript | Full type definitions included |
🚀 Installation
npm install sunan-al-nasai # JS local
npm install -g sunan-al-nasai # JS global CLI
pip install sunan-al-nasai # Python🟨 JavaScript / Node.js
const nasai = require('sunan-al-nasai'); // CJS
import nasai from 'sunan-al-nasai'; // ESM
nasai.get(1)
nasai.getByChapter(1)
nasai.search('prayer')
nasai.search('prayer', 5)
nasai.getRandom()
nasai[0]
nasai.length
nasai.metadata
nasai.chapters
nasai.find(h => h.id === 23)
nasai.filter(h => h.chapterId === 1)
nasai.slice(0, 10)⚛️ React
cd my-react-app
nasai --react # generates src/hooks/useNasai.jsimport { useNasai } from '../hooks/useNasai';
function HadithOfTheDay() {
const nasai = useNasai();
if (!nasai) return <p>Loading...</p>;
const h = nasai.getRandom();
return <div><strong>{h.english.narrator}</strong><p>{h.english.text}</p></div>;
}🐍 Python
from sunan_al_nasai import Nasai
nasai = Nasai()
nasai.get(1)
nasai.getByChapter(1)
nasai.search("prayer")
nasai.search("prayer", limit=5)
nasai.getRandom()
nasai[0]
nasai.length
nasai.find(lambda h: h.id == 23)
nasai.filter(lambda h: h.chapterId == 1)
nasai.slice(0, 10)
# Custom path
nasai = Nasai(data_path="/path/to/nasai.json")🖥️ CLI
nasai 1
nasai 2345 -a # Arabic only
nasai 2345 -b # Arabic + English
nasai 23 34 # Hadith 34 within chapter 23
nasai --search "prayer"
nasai --search "fasting" --all
nasai --chapter 1
nasai --random
nasai --react
nasai --version📂 Structure
sunan-al-nasai/
├── data/
│ ├── nasai.json ← source of truth (replace with real data)
│ ├── nasai.json.gz ← generated (shipped in packages)
│ └── chapters/ ← generated (gitignored)
├── bin/index.js ← CLI
├── src/ ← JS source
├── types/index.d.ts
├── python/sunan_al_nasai/ ← Python package
├── scripts/build.mjs
├── examples/
├── docs/
└── tests/🔧 Development
# 1. Place your real nasai.json in data/
node scripts/build.mjs
# 2. Test locally (no internet needed)
python -m build --no-isolation --wheel
python -m zipfile -l dist\sunan_al_nasai-1.0.0-py3-none-any.whl | findstr "nasai.json.gz"
pip install dist\sunan_al_nasai-1.0.0-py3-none-any.whl --force-reinstall
nasai 23
# 3. Release (triggers GitHub Actions → auto-publishes to npm + PyPI)
git add .
git commit -m "v1.0.0 — initial release"
git push origin main
gh release create v1.0.0 --title "v1.0.0" --notes "initial release"📄 License
GNU Affero General Public License v3.0 (AGPL-3.0)
Made with ❤️ for the Muslim community · Seeking knowledge together
