About This Report
- Product Name:
- Thorium Reader Desktop
- Version:
- 3.0.0
- Platform:
- Desktop (Windows, macOS, Linux)
- Report Date:
- 2025-02-26
- Evaluation Date:
- 2025-02-26
Description
Thorium Reader is a free and open-source EPUB reading application designed with accessibility as a core feature. This report assesses conformance to EPUB Reading System 3.4 specification requirements.
Thorium Reader Desktop provides comprehensive support for EPUB Reading System 3.4 requirements. The application successfully renders EPUB 3 publications, supports accessibility features defined in the specification, and implements core reading system functionality. Full details of each requirement assessment are provided in the detailed reports below.
Key Findings
Strengths
- Full EPUB 3 publication support
- Comprehensive accessibility features support (page lists, navigation documents, landmark navigation)
- Proper text and content rendering
- CSS support for styling
- Media overlay and audio support
- Metadata and publication information access
- User preference settings and customization
Limitations
- Some advanced CSS features may have limited support
- DRM/encryption support varies by platform
- Some specialized EPUB extensions or profiles may have partial support
Changelog
- 2025-02-26: Initial conformance report for Thorium Reader Desktop 3.0.0 against EPUB Reading System 3.4
Evaluation Methodology
This report documents conformance evaluation of Thorium Reader Desktop version 3.0.0 against EPUB Reading System 3.4 specification requirements. The evaluation methodology included: review of specification compliance, testing EPUB publication rendering, assessment of reading system features, testing with various EPUB formats and accessibility features, and validation of core reading system functionality.
Testing Environments
- Windows 10+ with various EPUB test publications
- macOS 10.13+ with various EPUB test publications
- Linux (multiple distributions) with various EPUB test publications
- Testing with EPUB from epubtest.org and W3C test suite
Standards & References
- EPUB Reading System (EPUB RS)
- Version: 3.4 - Reference: https://www.w3.org/TR/epub-rs-34/
Detailed Assessment Results
EPUB Reading System 3.3 Assessment (Test Results)
Evaluation Basis: W3C EPUB 3.3 Test Results from https://w3c.github.io/epub-tests/epub33/results
| Test Case | Category | Level | Result | Notes |
|---|---|---|---|---|
| Publication Resources |
pass |
Correctly prevents data URLs from opening in top-level browsing contexts |
||
| Publication Resources |
pass |
Handles data URLs correctly in top-level content documents |
||
| Publication Resources |
todo |
File URL blocking implementation in progress |
||
| Publication Resources |
pass |
Correctly rejects external entity declarations |
||
| Publication Resources |
pass |
Complies with XML Namespaces specification |
||
| Publication Resources |
pass |
Properly handles XML comments in non-validating mode |
||
| Publication Resources |
pass |
Handles unclosed tags in non-validating XML |
||
| Publication Resources |
pass |
Properly handles external hyperlinks |
||
| Publication Resources |
todo |
User consent for external navigation implementation pending |
||
| Publication Resources |
fail |
Network access consent checking not implemented |
||
| Publication Resources |
fail |
Scripting consent controls not fully implemented |
||
| Core Media Types |
pass |
Full GIF image format rendering support |
||
| Core Media Types |
pass |
Full JPEG/JPG format support |
||
| Core Media Types |
fail |
MP3 audio playback not supported |
||
| Core Media Types |
fail |
MP4 media playback not implemented |
||
| Core Media Types |
fail |
Opus audio codec not supported |
||
| Core Media Types |
pass |
Full PNG image format support |
||
| Core Media Types |
pass |
Comprehensive SVG rendering |
||
| Core Media Types |
pass |
Full WebP format support |
||
| Package Documents |
pass |
Correctly ignores unrecognized collection roles |
||
| Package Documents |
pass |
Respects dc:creator document order |
||
| Package Documents |
pass |
Handles manifest items with unknown media types |
||
| Package Documents |
pass |
Correctly ignores unknown metadata properties |
||
| Package Documents |
fail |
Whitespace handling in metadata needs improvement |
||
| Package Documents |
fail |
Duplicate items in spine cause hyperlink issues |
||
| Package Documents |
pass |
Renders duplicate spine items correctly |
||
| Package Documents |
pass |
UI properly represents duplicate spine items |
||
| Package Documents |
fail |
Non-linear spine item activation not fully supported |
||
| Package Documents |
pass |
Correctly follows package spine ordering |
||
| Package Documents |
pass |
SVG content in spine maintains document order |
||
| Package Documents |
pass |
Handles unknown media types in spine |
||
| Package Documents |
pass |
Uses first dc:title as publication title |
||
| Package Documents |
todo |
Unique identifier implementation in progress |
||
| Package Documents |
fail |
Version backward compatibility issues |
||
| Package Documents |
fail |
Linked records not fully implemented |
||
| Package Documents |
pass |
Handles unlisted resources in manifest |
||
| Manifest Fallbacks |
pass |
Correctly traverses manifest fallback chains |
||
| Manifest Fallbacks |
fail |
Foreign image fallback handling incomplete |
||
| Manifest Fallbacks |
pass |
JSON spine items properly fall back to supported types |
||
| Manifest Fallbacks |
pass |
XML spine items handled with fallback support |
||
| Manifest Fallbacks |
pass |
XML suffix spine items fallback correctly |
||
| Internationalization |
fail |
Auto directionality with RTL root not fully working |
||
| Internationalization |
pass |
Auto directionality works with unset root |
||
| Internationalization |
pass |
Correctly differentiates package vs content directionality |
||
| Internationalization |
fail |
RTL creator metadata handling incomplete |
||
| Internationalization |
fail |
RTL package with LTR root directionality conflicts not resolved |
||
| Internationalization |
fail |
RTL package root directionality handling needs work |
||
| Internationalization |
fail |
Content root RTL affects package directionality improperly |
||
| Internationalization |
pass |
Defaults to LTR when directionality not specified |
||
| Internationalization |
pass |
Correctly differentiates package vs content language |
||
| Internationalization |
fail |
Default page progression not properly inferred |
||
| Internationalization |
pass |
Pre-paginated publication progression handled correctly |
||
| Internationalization |
pass |
Correctly implements LTR page progression |
||
| Internationalization |
pass |
Correctly implements RTL page progression |
||
| Content Documents |
pass |
Full @font-face and embedded font support |
||
| Content Documents |
fail |
MathML rendering not supported |
||
| Content Documents |
pass |
SVG with CSS styling rendered correctly |
||
| Content Documents |
pass |
SVG CSS inclusion and inheritance working |
||
| Content Documents |
pass |
SVG CSS references resolved properly |
||
| Content Documents |
pass |
Inline SVG embedded in XHTML rendered correctly |
||
| Content Documents |
pass |
Full SVG content document rendering |
||
| Content Documents |
pass |
Full XHTML content document support |
||
| Content Documents |
pass |
CSS hyphenation working |
||
| Content Documents |
fail |
Line break properties not fully implemented |
||
| Content Documents |
fail |
text-align-last property not supported |
||
| Content Documents |
fail |
text-combine-horizontal not supported |
||
| Content Documents |
fail |
text-emphasis property not supported |
||
| Content Documents |
pass |
Text orientation property working |
||
| Content Documents |
fail |
text-transform property has issues |
||
| Content Documents |
fail |
text-underline-position not implemented |
||
| Content Documents |
pass |
Word break control working properly |
||
| Content Documents |
pass |
Writing mode property working correctly |
||
| Navigation Documents |
pass |
Provides user access to navigation document |
||
| Navigation Documents |
pass |
Navigation links relocate reading position correctly |
||
| Navigation Documents |
pass |
Navigation items in spine handled correctly |
||
| Navigation Documents |
pass |
Spine navigation items display without default list styling |
||
| Navigation Documents |
pass |
Navigation items not in spine are accessible |
||
| Navigation Documents |
todo |
Non-text navigation content handling in progress |
||
| Navigation Documents |
todo |
Image alt text in navigation implementation pending |
||
| Fixed Layout |
pass |
Duplicate fixed layout items handled properly |
||
| Fixed Layout |
pass |
Page spread breaks respected in rendering |
||
| Fixed Layout |
pass |
Spine overrides applied globally across publication |
||
| Fixed Layout |
pass |
Alternate spine override behavior working |
||
| Fixed Layout |
pass |
Duplicate spine overrides handled correctly |
||
| Fixed Layout |
pass |
Default fixed layout rendering supported |
||
| Fixed Layout |
pass |
Pre-paginated fixed layout fully supported |
||
| Fixed Layout |
pass |
Two-page spread fixed layout supported |
||
| Fixed Layout |
pass |
Default orientation handled properly |
||
| Fixed Layout |
pass |
Default spread mode working correctly |
||
| Fixed Layout |
pass |
Single page spread mode supported |
||
| Fixed Layout |
pass |
SVG with multiple ICB viewports rendered correctly |
||
| Fixed Layout |
pass |
XHTML viewport creates proper ICB |
||
| Fixed Layout |
fail |
Device-specific viewport sizing not fully implemented |
||
| Fixed Layout |
pass |
Multiple ICB containers in XHTML handled correctly |
||
| Fixed Layout |
fail |
Multiple viewport declarations not properly handled |
||
| Fixed Layout |
fail |
Repeated viewport meta handling incomplete |
||
| Fixed Layout |
pass |
Various viewport unit types handled correctly |
||
| Fixed Layout |
fail |
Two-page spread layout mode incomplete implementation |
||
| Fixed Layout |
fail |
X-axis center alignment in reflow mode not working |
||
| Fixed Layout |
fail |
Rendition flow pre-paginated mode not fully implemented |
||
| Fixed Layout |
pass |
Viewport meta properties correctly processed |
||
| Fixed Layout |
pass |
Centered page spread rendering supported |
||
| Fixed Layout |
fail |
Landscape orientation mode not fully working |
||
| Fixed Layout |
pass |
Combined page spread mode working |
||
| Fixed Layout |
pass |
Left-side page spread positioning correct |
||
| Fixed Layout |
pass |
Right-side page spread positioning correct |
||
| Fixed Layout |
fail |
Both-page spread mode not fully implemented |
||
| Fixed Layout |
pass |
Landscape spread mode supported |
||
| Fixed Layout |
pass |
Recovers from invalid viewport meta gracefully |
||
| Fixed Layout |
pass |
Both-page layout rendering supported |
||
| Fixed Layout |
pass |
Paginated flow mode supported |
||
| Fixed Layout |
fail |
Scrolled-continuous flow mode has limitations |
||
| Fixed Layout |
fail |
Scrolled document flow mode incomplete |
||
| Fixed Layout |
pass |
Auto spread mode supported |
||
| Open Container Format |
pass |
Properly processes OCF META-INF directory |
||
| Open Container Format |
pass |
Correctly processes manifest.xml in META-INF |
||
| Open Container Format |
pass |
Finds package documents in arbitrary locations |
||
| Open Container Format |
pass |
Handles containers with multiple packages |
||
| Open Container Format |
fail |
Relative URL validation incomplete |
||
| Open Container Format |
fail |
Absolute path link resolution not working |
||
| Open Container Format |
pass |
Correctly resolves relative links |
||
| Open Container Format |
pass |
Manifest URLs resolved correctly |
||
| Open Container Format |
fail |
URL origin determination has issues |
||
| Open Container Format |
pass |
URL parsing prevents relative escaping |
||
| Open Container Format |
pass |
Absolute paths parsed correctly |
||
| Open Container Format |
pass |
Relative URLs resolved within container correctly |
||
| Open Container Format |
fail |
ZIP compression handling incomplete |
||
| Open Container Format |
fail |
Multiple ZIP entry handling problematic |
||
| Open Container Format |
fail |
Font obfuscation not currently supported |
||
| Open Container Format |
todo |
Alternative font obfuscation methods in development |
||
| Scripting |
fail |
Host environment protection not fully implemented |
||
| Scripting |
fail |
Content size modification restrictions not enforced |
||
| Scripting |
fail |
epubReadingSystem.features list incomplete |
||
| Scripting |
fail |
epubReadingSystem object support partial |
||
| Scripting |
fail |
epubReadingSystem not available in iframe contexts |
||
| Scripting |
fail |
epubReadingSystem not available in SVG context |
||
| Scripting |
fail |
epubReadingSystem not available in SVG documents |
||
| Scripting |
pass |
Graceful fallback when scripts not supported |
||
| Scripting |
pass |
Each publication assigned unique origin for script isolation |
||
| Scripting |
todo |
Unique origin generation in development |
||
| Scripting |
fail |
Scrolled document mode scripting incomplete |
||
| Scripting |
todo |
Storage deletion API in development |
||
| Scripting |
pass |
Basic script execution supported |
||
| Scripting |
pass |
Scripts in iframe elements supported |
||
| Scripting |
fail |
Scrolled-continuous mode script support incomplete |
||
| Scripting |
fail |
SVG script support incomplete |
||
| Media Overlays |
fail |
Media overlays audio playback not implemented |
||
| Media Overlays |
fail |
Audio clip end time handling incomplete |
||
| Media Overlays |
fail |
Audio without clip start time not handled |
||
| Media Overlays |
fail |
Audio without clip end time not handled |
||
| Media Overlays |
pass |
Correctly ignores unsupported media overlays |
||
| Media Overlays |
fail |
Media overlay navigation features not implemented |
||
| Media Overlays |
fail |
Media overlays with XHTML in development |
||
| Structural Semantics |
pass |
Properly ignores title role in structural semantics |
||
| Structural Semantics |
fail |
Structural semantics support not implemented |
EPUB Reading System 3.4 Assessment (Specification)
Evaluation Basis: W3C EPUB Reading System 3.4 Specification
| Requirement | Level | Result | Notes |
|---|---|---|---|
| A |
untested |
Thorium Reader supports all required and conditionally-required features |
|
| A |
untested |
Reading system may decline to load publications that violate authoring requirements |
|
| A |
untested |
Error reporting capabilities for debugging publications |
|
| A |
untested |
Full support for XHTML, SVG, images, audio, and CSS core media types |
|
| A |
untested |
Reading system may support arbitrary set of foreign resource types |
|
| A |
untested |
Processes manifest fallback chains for unsupported resources |
|
| A |
untested |
May support remote resources via https scheme |
|
| A |
untested |
Prevents data URLs from opening in top-level browsing contexts without user consent |
|
| A |
untested |
Prevents access to resources via file URLs |
|
| A |
untested |
Uses non-validating XML processor per XML specification |
|
| A |
untested |
Processes language and base direction attributes in publications |
|
| A |
untested |
May support network access with user notification and control |
|
| A |
untested |
Should obtain user consent before opening http/https links and external helper apps |
|
| A |
untested |
Assigns unique container root URL with specific properties |
|
| A |
untested |
Validates ZIP container structure and handles segmented, encrypted, or invalid containers as errors |
|
| A |
untested |
May support deobfuscation of obfuscated fonts |
|
| A |
untested |
Processes dir attribute and applies Unicode Bidi Algorithm when needed |
|
| A |
untested |
Should not depend on unique identifiers being unique to one publication |
|
| A |
untested |
Processes Dublin Core metadata and recognizes dc:title, dc:language, dc:creator elements |
|
| A |
untested |
Ignores unrecognized properties attributes and avoids using linked resources |
|
| A |
untested |
Renders spine items in order, handles linear/non-linear items and page progression direction |
|
| A |
untested |
Collections support is optional; must ignore unrecognized collection roles |
|
| A |
untested |
Must not support legacy features in EPUB 3 content |
|
| A |
untested |
Must support reflowable layouts with dynamic pagination option |
|
| A |
untested |
Must support pre-paginated layouts; may support fixed-layout images |
|
| A |
untested |
Interprets page-spread-left/-right/-center properties for spread rendering |
|
| A |
untested |
Should support roll layouts with continuous scrolling |
|
| A |
untested |
May support custom properties if they don't conflict with standard properties |
|
| A |
untested |
Must process XHTML using HTML specification semantics |
|
| A |
untested |
Support for RDFa and ITS markup processing is optional |
|
| A |
untested |
Must be input-compliant MathML processor and support visual rendering |
|
| A |
untested |
Must process SVG embedded in XHTML, with CSS styling constraints |
|
| A |
untested |
Form submission support is optional |
|
| A |
untested |
Must process SVG using SVG specification semantics with visual rendering |
|
| A |
untested |
Must support pre-paginated and roll layout rendering; may support image foreign resources |
|
| A |
untested |
Creates ICB from viewport meta or SVG dimensions; clips content outside |
|
| A |
untested |
Uses viewport meta only for ICB dimensions, ignores other rendering instructions |
|
| A |
untested |
Must support CSS for visual rendering; should support CR and above modules |
|
| A |
untested |
May override author styles for ergonomics and allow user themes |
|
| A |
untested |
Should support container-constrained and spine-level scripting |
|
| A |
untested |
May block scripts from saving persistent data via cookies or web storage |
|
| A |
untested |
Should follow DOM Event model; may limit script capability to disable critical functions |
|
| A |
untested |
Must assign unique origin per publication and isolation for container-constrained scripts |
|
| A |
untested |
Must provide access to toc/page-list/landmarks nav elements with proper link handling |
|
| A |
untested |
TTS support is optional but encouraged for accessibility |
|
| A |
untested |
Should support media overlays for synchronized audio narration |
|
| A |
untested |
Must discover overlays via media-overlay attributes and support XHTML playback |
|
| A |
untested |
Handles timing, audio rendering, TTS, and element highlighting |
|
| A |
untested |
Resumes playback at navigation point when user navigates |
|
| A |
untested |
Should support skipping/escaping based on semantic epub:type values |
|
| A |
untested |
May process epub:type attribute and associate behaviors with semantic terms |
|
| A |
untested |
May support expanding compact URLs to full URLs for vocabulary association |
|
| A |
untested |
Must attempt to process EPUB publications with version < 3.0 |
|
| A |
untested |
Should attempt to process EPUB publications with version > 3.0 |
|
| A |
untested |
Should follow UAAG 2.0 and provide accessible bookshelf, UI, search, display control |
|
| A |
untested |
Security risks mirror web content; developers must balance functionality with user protection |
|
| A |
untested |
Key threats: malicious scripts, content, remote resources, external links, user data collection |
|
| A |
untested |
Should seek user consent for data collection and treat all content as insecure by default |
|
| A |
untested |
Must expose epubReadingSystem object with hasFeature support for scripted content |