Quran With Tafsir

pub package License: MIT

A production-ready, fully offline Quran package for Dart & Flutter. All data is embedded — no network calls, no initialization step, no async loading.

Works with any Dart project (CLI, server, Flutter).


Features

Category Details
Quran Text Full Arabic text (Uthmani script) + English translation (Saheeh International)
Tafsir Arabic Tafsir Al-Muyassar for all 114 surahs
Search Fast local search with Arabic normalization (handles tashkeel, hamza variants)
Navigation By Surah, Page (604 pages), Juz (30 parts), or individual Ayah
Metadata Surah names (Arabic/English), ayah count, revelation type (Meccan/Medinan), sajda locations
Rub Al-Hizb Rub (quarter) boundary detection and index lookup
Audio URL generation for 40+ reciters via everyayah.com
Reciters Full catalog with English & Arabic display names
Offline Zero network dependencies — every byte is embedded
Pure Dart No Flutter dependency — use in CLI tools, servers, or Flutter apps

Installation

Add to your pubspec.yaml:

dependencies:
  quran_with_tafsir: ^1.0.1

Then run:

dart pub get        # Dart projects
flutter pub get     # Flutter projects

Quick Start

import 'package:quran_with_tafsir/quran_with_tafsir.dart';

void main() {
  final service = QuranService.instance;

  // Get Al-Fatihah
  final surah = service.getSurah(1);
  for (final ayah in surah.verses) {
    print('${ayah.id}: ${ayah.text}');
  }

  // Search
  final results = service.search('الحمد', limit: 10);
  print('Found ${results.length} results');
}

No initialize() call needed — all data is const and ready at import time.


API Reference

Metadata

final service = QuranService.instance;

// All 114 surahs
final List<SurahMetadata> surahs = service.getAllSurahs();

// Surah names
final String nameAr = service.getSurahNameArabic(1);   // "الفَاتِحة"
final String nameEn = service.getSurahNameEnglish(1);   // "Al-Fātiḥah"

// Revelation info
final String? place = service.getPlaceOfRevelation(1);  // "Meccan"
final bool isMeccan = service.getSurahMetadata(1).isMeccan; // true

// Ayah count
final int count = service.getVerseCount(1);  // 7

Surah & Ayah

// Full surah (Arabic)
final Surah surah = service.getSurah(1);

// English translation
final Surah surahEn = service.getSurah(1, language: QuranLanguage.english);

// Single ayah
final Ayah ayah = service.getAyah(1, 1);

// Ayah properties:
//   ayah.id          → ayah number within the surah
//   ayah.surahNumber → surah number
//   ayah.text        → ayah text
//   ayah.page        → page number (1-604)
//   ayah.juz         → juz number (1-30)
//   ayah.isSajda     → whether this ayah has a sajda

Page & Juz Navigation

// All ayahs on a page (1-604)
final List<Ayah> pageAyahs = service.getPage(1);

// All ayahs in a juz (1-30)
final List<Ayah> juzAyahs = service.getJuz(1);

// Look up page/juz for a specific ayah
final int? page = service.getPageNumber(1, 1);  // 1
final int? juz  = service.getJuzNumber(1, 1);   // 1

Tafsir

// Arabic Tafsir Al-Muyassar (keyed by ayah number)
final Map<int, String> tafsir = service.getTafsir(1);

for (final entry in tafsir.entries) {
  print('Ayah ${entry.key}: ${entry.value}');
}
// Arabic search (handles tashkeel, hamza normalization)
final List<Ayah> results = service.search('الحمد', limit: 50);

// English search
final List<Ayah> enResults = service.search(
  'mercy',
  language: QuranLanguage.english,
  limit: 20,
);

// Async wrapper for UI contexts
final List<Ayah> asyncResults = await service.searchAsync('الحمد');

Audio

// Audio URL for a specific ayah
final String url = service.getAudioUrl(1, 1, reciterIdentifier: Reciters.alafasy);
// → "https://everyayah.com/data/Alafasy_128kbps/001001.mp3"

// All reciter display names
final Map<String, String> names   = Reciters.displayNames;   // English
final Map<String, String> namesAr = Reciters.displayNamesAr; // Arabic

Built-in Reciters (40+)

Constant Reciter
Reciters.alafasy Mishary Alafasy
Reciters.abdulBasit Abdul Basit (Murattal)
Reciters.abdulBasitMujawwad Abdul Basit (Mujawwad)
Reciters.sudouk Abdurrahman As-Sudais
Reciters.shuraym Saood Ash-Shuraym
Reciters.husary Mahmoud Khalil Al-Husary
Reciters.minshawi Mohamed Siddiq Al-Minshawi
Reciters.maherMuaiqly Maher Al-Muaiqly
... See Reciters.displayNames

Sajda & Rub Al-Hizb

// Check if an ayah is a sajda location
final bool isSajda = service.isSajda(96, 19);  // true

// Check if an ayah is a rub al-hizb boundary
final bool isRub = service.isRubBoundary(2, 26);

// 1-based rub index (null if not a boundary)
final int? rubIndex = service.getRubIndex(2, 26);

Models

Ayah

Property Type Description
id int Ayah number within the surah
surahNumber int Surah number (1-114)
text String Ayah text
page int Page number (1-604)
juz int Juz number (1-30)
tafsir String? Tafsir text (if loaded)
audioUrl String? Audio URL (if set)
isSajda bool Whether this ayah has a sajda

Supports copyWith(), ==, and hashCode.

SurahMetadata

Property Type Description
number int Surah number (1-114)
nameEn String English name
nameAr String Arabic name
ayahCount int Number of ayahs
revelationType String? "Meccan" or "Medinan"
isMeccan bool Convenience getter
isMedinan bool Convenience getter

QuranLanguage

enum QuranLanguage { arabic, english }

Data Sources

Data Source
Arabic text King Fahd Complex for the Printing of the Holy Qur'an (Madinah)
Tafsir (Arabic) Tafsir Al-Muyassar — King Fahd Complex
English translation Saheeh International (via King Fahd Complex and QuranEnc)
Metadata Tanzil.net
Audio everyayah.com

See It in Action

This package powers the Al-Mu'min (المؤمن) app — a comprehensive Islamic companion:

Get it on Google Play Download on the App Store


The package is plain text — rendering is entirely up to the host app. For the best Arabic display we recommend these two fonts for Uthmanic Hafs Style:

Purpose Font Family name in Flutter
Quran text KFG Hafs Uthmanic Script (Uthmani script) QuranFont
Tafsir / prose Amiri Quran TafsirFont

Both fonts are included in the example/assets/fonts/ folder — copy them into your app and register them in pubspec.yaml:

flutter:
  fonts:
    - family: QuranFont
      fonts:
        - asset: assets/fonts/KfgqpcHafsUthmanicScriptRegular-nARZ1.ttf
    - family: TafsirFont
      fonts:
        - asset: assets/fonts/AmiriQuran-Regular.ttf

Then use them with standard Flutter TextStyle:

// Quran text
Text(
  ayah.text,
  textDirection: TextDirection.rtl,
  style: const TextStyle(fontFamily: 'QuranFont', fontSize: 24, height: 2.0),
);

// Tafsir
Text(
  ayah.tafsir,
  textDirection: TextDirection.rtl,
  textAlign: TextAlign.right,
  style: const TextStyle(fontFamily: 'TafsirFont', fontSize: 18, height: 1.8),
);

Example App

A full Flutter example app is included in the example/ directory with 4 tabs. It uses both bundled fonts out of the box — see example/assets/fonts/.

  • Surahs — Browse all 114 surahs, tap to read with tafsir toggle
  • Pages — Page-by-page navigation (1-604) with go-to dialog
  • Juz — Browse by juz (1-30)
  • Search — Full-text search with Arabic/English toggle
cd example
flutter run

About the Developer

This package is maintained by The Beast Code. We build high-quality digital experiences. Check out our website: thebeastcode.com


License

MIT — see LICENSE for details.

Libraries

data/meta/meta_data
data/meta/sajda_keys
data/meta/surah_metadata_list
data/quran/arabic/quran_data_index
data/quran/arabic/surah_1
data/quran/arabic/surah_2
data/quran/arabic/surah_3
data/quran/arabic/surah_4
data/quran/arabic/surah_5
data/quran/arabic/surah_6
data/quran/arabic/surah_7
data/quran/arabic/surah_8
data/quran/arabic/surah_9
data/quran/arabic/surah_10
data/quran/arabic/surah_11
data/quran/arabic/surah_12
data/quran/arabic/surah_13
data/quran/arabic/surah_14
data/quran/arabic/surah_15
data/quran/arabic/surah_16
data/quran/arabic/surah_17
data/quran/arabic/surah_18
data/quran/arabic/surah_19
data/quran/arabic/surah_20
data/quran/arabic/surah_21
data/quran/arabic/surah_22
data/quran/arabic/surah_23
data/quran/arabic/surah_24
data/quran/arabic/surah_25
data/quran/arabic/surah_26
data/quran/arabic/surah_27
data/quran/arabic/surah_28
data/quran/arabic/surah_29
data/quran/arabic/surah_30
data/quran/arabic/surah_31
data/quran/arabic/surah_32
data/quran/arabic/surah_33
data/quran/arabic/surah_34
data/quran/arabic/surah_35
data/quran/arabic/surah_36
data/quran/arabic/surah_37
data/quran/arabic/surah_38
data/quran/arabic/surah_39
data/quran/arabic/surah_40
data/quran/arabic/surah_41
data/quran/arabic/surah_42
data/quran/arabic/surah_43
data/quran/arabic/surah_44
data/quran/arabic/surah_45
data/quran/arabic/surah_46
data/quran/arabic/surah_47
data/quran/arabic/surah_48
data/quran/arabic/surah_49
data/quran/arabic/surah_50
data/quran/arabic/surah_51
data/quran/arabic/surah_52
data/quran/arabic/surah_53
data/quran/arabic/surah_54
data/quran/arabic/surah_55
data/quran/arabic/surah_56
data/quran/arabic/surah_57
data/quran/arabic/surah_58
data/quran/arabic/surah_59
data/quran/arabic/surah_60
data/quran/arabic/surah_61
data/quran/arabic/surah_62
data/quran/arabic/surah_63
data/quran/arabic/surah_64
data/quran/arabic/surah_65
data/quran/arabic/surah_66
data/quran/arabic/surah_67
data/quran/arabic/surah_68
data/quran/arabic/surah_69
data/quran/arabic/surah_70
data/quran/arabic/surah_71
data/quran/arabic/surah_72
data/quran/arabic/surah_73
data/quran/arabic/surah_74
data/quran/arabic/surah_75
data/quran/arabic/surah_76
data/quran/arabic/surah_77
data/quran/arabic/surah_78
data/quran/arabic/surah_79
data/quran/arabic/surah_80
data/quran/arabic/surah_81
data/quran/arabic/surah_82
data/quran/arabic/surah_83
data/quran/arabic/surah_84
data/quran/arabic/surah_85
data/quran/arabic/surah_86
data/quran/arabic/surah_87
data/quran/arabic/surah_88
data/quran/arabic/surah_89
data/quran/arabic/surah_90
data/quran/arabic/surah_91
data/quran/arabic/surah_92
data/quran/arabic/surah_93
data/quran/arabic/surah_94
data/quran/arabic/surah_95
data/quran/arabic/surah_96
data/quran/arabic/surah_97
data/quran/arabic/surah_98
data/quran/arabic/surah_99
data/quran/arabic/surah_100
data/quran/arabic/surah_101
data/quran/arabic/surah_102
data/quran/arabic/surah_103
data/quran/arabic/surah_104
data/quran/arabic/surah_105
data/quran/arabic/surah_106
data/quran/arabic/surah_107
data/quran/arabic/surah_108
data/quran/arabic/surah_109
data/quran/arabic/surah_110
data/quran/arabic/surah_111
data/quran/arabic/surah_112
data/quran/arabic/surah_113
data/quran/arabic/surah_114
data/quran/english/quran_data_index
data/quran/english/surah_1
data/quran/english/surah_2
data/quran/english/surah_3
data/quran/english/surah_4
data/quran/english/surah_5
data/quran/english/surah_6
data/quran/english/surah_7
data/quran/english/surah_8
data/quran/english/surah_9
data/quran/english/surah_10
data/quran/english/surah_11
data/quran/english/surah_12
data/quran/english/surah_13
data/quran/english/surah_14
data/quran/english/surah_15
data/quran/english/surah_16
data/quran/english/surah_17
data/quran/english/surah_18
data/quran/english/surah_19
data/quran/english/surah_20
data/quran/english/surah_21
data/quran/english/surah_22
data/quran/english/surah_23
data/quran/english/surah_24
data/quran/english/surah_25
data/quran/english/surah_26
data/quran/english/surah_27
data/quran/english/surah_28
data/quran/english/surah_29
data/quran/english/surah_30
data/quran/english/surah_31
data/quran/english/surah_32
data/quran/english/surah_33
data/quran/english/surah_34
data/quran/english/surah_35
data/quran/english/surah_36
data/quran/english/surah_37
data/quran/english/surah_38
data/quran/english/surah_39
data/quran/english/surah_40
data/quran/english/surah_41
data/quran/english/surah_42
data/quran/english/surah_43
data/quran/english/surah_44
data/quran/english/surah_45
data/quran/english/surah_46
data/quran/english/surah_47
data/quran/english/surah_48
data/quran/english/surah_49
data/quran/english/surah_50
data/quran/english/surah_51
data/quran/english/surah_52
data/quran/english/surah_53
data/quran/english/surah_54
data/quran/english/surah_55
data/quran/english/surah_56
data/quran/english/surah_57
data/quran/english/surah_58
data/quran/english/surah_59
data/quran/english/surah_60
data/quran/english/surah_61
data/quran/english/surah_62
data/quran/english/surah_63
data/quran/english/surah_64
data/quran/english/surah_65
data/quran/english/surah_66
data/quran/english/surah_67
data/quran/english/surah_68
data/quran/english/surah_69
data/quran/english/surah_70
data/quran/english/surah_71
data/quran/english/surah_72
data/quran/english/surah_73
data/quran/english/surah_74
data/quran/english/surah_75
data/quran/english/surah_76
data/quran/english/surah_77
data/quran/english/surah_78
data/quran/english/surah_79
data/quran/english/surah_80
data/quran/english/surah_81
data/quran/english/surah_82
data/quran/english/surah_83
data/quran/english/surah_84
data/quran/english/surah_85
data/quran/english/surah_86
data/quran/english/surah_87
data/quran/english/surah_88
data/quran/english/surah_89
data/quran/english/surah_90
data/quran/english/surah_91
data/quran/english/surah_92
data/quran/english/surah_93
data/quran/english/surah_94
data/quran/english/surah_95
data/quran/english/surah_96
data/quran/english/surah_97
data/quran/english/surah_98
data/quran/english/surah_99
data/quran/english/surah_100
data/quran/english/surah_101
data/quran/english/surah_102
data/quran/english/surah_103
data/quran/english/surah_104
data/quran/english/surah_105
data/quran/english/surah_106
data/quran/english/surah_107
data/quran/english/surah_108
data/quran/english/surah_109
data/quran/english/surah_110
data/quran/english/surah_111
data/quran/english/surah_112
data/quran/english/surah_113
data/quran/english/surah_114
data/rub/rub_boundaries
data/rub/rub_index_map
data/tafsir/arabic/tafsir_1
data/tafsir/arabic/tafsir_2
data/tafsir/arabic/tafsir_3
data/tafsir/arabic/tafsir_4
data/tafsir/arabic/tafsir_5
data/tafsir/arabic/tafsir_6
data/tafsir/arabic/tafsir_7
data/tafsir/arabic/tafsir_8
data/tafsir/arabic/tafsir_9
data/tafsir/arabic/tafsir_10
data/tafsir/arabic/tafsir_11
data/tafsir/arabic/tafsir_12
data/tafsir/arabic/tafsir_13
data/tafsir/arabic/tafsir_14
data/tafsir/arabic/tafsir_15
data/tafsir/arabic/tafsir_16
data/tafsir/arabic/tafsir_17
data/tafsir/arabic/tafsir_18
data/tafsir/arabic/tafsir_19
data/tafsir/arabic/tafsir_20
data/tafsir/arabic/tafsir_21
data/tafsir/arabic/tafsir_22
data/tafsir/arabic/tafsir_23
data/tafsir/arabic/tafsir_24
data/tafsir/arabic/tafsir_25
data/tafsir/arabic/tafsir_26
data/tafsir/arabic/tafsir_27
data/tafsir/arabic/tafsir_28
data/tafsir/arabic/tafsir_29
data/tafsir/arabic/tafsir_30
data/tafsir/arabic/tafsir_31
data/tafsir/arabic/tafsir_32
data/tafsir/arabic/tafsir_33
data/tafsir/arabic/tafsir_34
data/tafsir/arabic/tafsir_35
data/tafsir/arabic/tafsir_36
data/tafsir/arabic/tafsir_37
data/tafsir/arabic/tafsir_38
data/tafsir/arabic/tafsir_39
data/tafsir/arabic/tafsir_40
data/tafsir/arabic/tafsir_41
data/tafsir/arabic/tafsir_42
data/tafsir/arabic/tafsir_43
data/tafsir/arabic/tafsir_44
data/tafsir/arabic/tafsir_45
data/tafsir/arabic/tafsir_46
data/tafsir/arabic/tafsir_47
data/tafsir/arabic/tafsir_48
data/tafsir/arabic/tafsir_49
data/tafsir/arabic/tafsir_50
data/tafsir/arabic/tafsir_51
data/tafsir/arabic/tafsir_52
data/tafsir/arabic/tafsir_53
data/tafsir/arabic/tafsir_54
data/tafsir/arabic/tafsir_55
data/tafsir/arabic/tafsir_56
data/tafsir/arabic/tafsir_57
data/tafsir/arabic/tafsir_58
data/tafsir/arabic/tafsir_59
data/tafsir/arabic/tafsir_60
data/tafsir/arabic/tafsir_61
data/tafsir/arabic/tafsir_62
data/tafsir/arabic/tafsir_63
data/tafsir/arabic/tafsir_64
data/tafsir/arabic/tafsir_65
data/tafsir/arabic/tafsir_66
data/tafsir/arabic/tafsir_67
data/tafsir/arabic/tafsir_68
data/tafsir/arabic/tafsir_69
data/tafsir/arabic/tafsir_70
data/tafsir/arabic/tafsir_71
data/tafsir/arabic/tafsir_72
data/tafsir/arabic/tafsir_73
data/tafsir/arabic/tafsir_74
data/tafsir/arabic/tafsir_75
data/tafsir/arabic/tafsir_76
data/tafsir/arabic/tafsir_77
data/tafsir/arabic/tafsir_78
data/tafsir/arabic/tafsir_79
data/tafsir/arabic/tafsir_80
data/tafsir/arabic/tafsir_81
data/tafsir/arabic/tafsir_82
data/tafsir/arabic/tafsir_83
data/tafsir/arabic/tafsir_84
data/tafsir/arabic/tafsir_85
data/tafsir/arabic/tafsir_86
data/tafsir/arabic/tafsir_87
data/tafsir/arabic/tafsir_88
data/tafsir/arabic/tafsir_89
data/tafsir/arabic/tafsir_90
data/tafsir/arabic/tafsir_91
data/tafsir/arabic/tafsir_92
data/tafsir/arabic/tafsir_93
data/tafsir/arabic/tafsir_94
data/tafsir/arabic/tafsir_95
data/tafsir/arabic/tafsir_96
data/tafsir/arabic/tafsir_97
data/tafsir/arabic/tafsir_98
data/tafsir/arabic/tafsir_99
data/tafsir/arabic/tafsir_100
data/tafsir/arabic/tafsir_101
data/tafsir/arabic/tafsir_102
data/tafsir/arabic/tafsir_103
data/tafsir/arabic/tafsir_104
data/tafsir/arabic/tafsir_105
data/tafsir/arabic/tafsir_106
data/tafsir/arabic/tafsir_107
data/tafsir/arabic/tafsir_108
data/tafsir/arabic/tafsir_109
data/tafsir/arabic/tafsir_110
data/tafsir/arabic/tafsir_111
data/tafsir/arabic/tafsir_112
data/tafsir/arabic/tafsir_113
data/tafsir/arabic/tafsir_114
data/tafsir/arabic/tafsir_data_index
models/language
models/meta
models/reciters
models/surah
quran_with_tafsir
services/quran_service