Skip to main content

Overview

Aradia Audiobooks provides instant access to over 20,000 free public domain audiobooks through LibriVox and Archive.org. The library includes classics in multiple languages, organized by genre, author, and popularity.

Library Sources

LibriVox Integration

Thousands of volunteer-narrated audiobooks from the LibriVox collection

Archive.org API

Direct integration with Archive.org’s extensive audiobook catalog

Features

Multi-Language Support

The app supports audiobooks in 20+ languages including:
const Map<String, List<String>> _langAliases = {
  'en': ['en', 'eng', 'english'],
  'de': ['de', 'deu', 'ger', 'german'],
  'es': ['es', 'spa', 'spanish'],
  'fr': ['fr', 'fra', 'fre', 'french'],
  'nl': ['nl', 'nld', 'dut', 'dutch'],
  'pt': ['pt', 'por', 'portuguese'],
  'it': ['it', 'ita', 'italian'],
  'ru': ['ru', 'rus', 'russian'],
  'ja': ['ja', 'jpn', 'japanese'],
  'zh': ['zh', 'zho', 'chi', 'chinese'],
  // ... and more
};
Language filters are automatically applied to search and browse results based on your preferences.

Advanced Search & Filtering

The Archive.org API integration uses advanced query building to fetch audiobooks:
String _buildAdvancedSearchUrl({
  required String collection,
  String extraQuery = '',
  String sortBy = '',
  required int page,
  required int rows,
}) {
  final lang = _languageQueryClause();
  final sort = sortBy.isNotEmpty ? '&sort[]=$sortBy+desc' : '';

  // Build query with collection, language, and extra filters
  final qParts = <String>[
    'collection:($collection)',
  ];
  if (lang.isNotEmpty) {
    qParts[0] = '${qParts[0]}$lang';
  }
  if (extraQuery.isNotEmpty) {
    final enc = Uri.encodeComponent(extraQuery);
    qParts.add('($enc)');
  }
  final q = 'q=${qParts.join('+AND+')}';

  return 'https://archive.org/advancedsearch.php?$q&fl=$_fields$sort&output=json&page=$page&rows=$rows';
}

Genre-Based Browsing

Browse audiobooks by genre with intelligent subject mapping:
  • Adventure
  • Biography
  • Children’s Literature
  • Comedy & Humor
  • Crime & Mystery
  • Fantasy
  • Horror
  • Philosophy
  • Poetry
  • Religion
  • Romance
  • Science Fiction
  • War & History
The app uses sophisticated regex patterns to detect genres across languages:
Category Filters (archive_api.dart:369-523)
final Map<String, List<RegExp>> _categoryFilters = {
  'war': [
    // English patterns
    RegExp(r'\bwar(s)?\b', caseSensitive: false),
    RegExp(r'\bworld\s*war(s)?\b', caseSensitive: false),
    // German patterns
    RegExp(r'\bkrieg(e|en)?\b', caseSensitive: false),
    // French patterns
    RegExp(r'\bguerre(s)?\b', caseSensitive: false),
    // And many more languages...
  ],
  // ... other genres
};

Smart Caching & Performance

The library uses HTTP caching with ETags and Last-Modified headers to minimize bandwidth and improve performance.
class _CacheEntry {
  final String body;
  final String? etag;
  final String? lastModified;
  final DateTime storedAt;
  
  _CacheEntry({
    required this.body,
    this.etag,
    this.lastModified,
    required this.storedAt,
  });
}

Library Metadata

Each audiobook includes comprehensive metadata:
title
string
required
The audiobook title
author
string
Author or narrator name
description
string
Full description of the audiobook content
runtime
number
Total runtime in seconds
rating
number
Average user rating
subject
array
Genre tags and subject categories
language
string
Primary language of the audiobook
downloads
number
Number of times downloaded from Archive.org

API Fields

The following fields are fetched from Archive.org:
const _fields = "runtime,avg_rating,num_reviews,title,description,identifier,creator,date,downloads,subject,item_size,language";
20,000+ audiobooks available instantly with no account required!

Next Steps

Learn how to search and filter the audiobook library

Build docs developers (and LLMs) love