[{"data":1,"prerenderedAt":883},["ShallowReactive",2],{"docs-ca-\u002Fdocs\u002Fsdk\u002Fcomparison":3},{"id":4,"title":5,"author":6,"body":7,"date":6,"description":875,"extension":876,"meta":877,"navigation":878,"path":879,"seo":880,"stem":881,"tags":6,"__hash__":882},"content_en\u002Fdocs\u002Fsdk\u002Fcomparison.md","Feature Comparison",null,{"type":8,"value":9,"toc":865},"minimark",[10,15,27,32,69,72,77,262,267,269,273,472,474,478,481,598,603,626,628,632,820,822,826,829,863],[11,12,14],"h1",{"id":13},"feature-comparison-xiboplayer-v079-vs-upstream-players","Feature Comparison: XiboPlayer v0.7.9 vs Upstream Players",[16,17,18,22,23,26],"p",{},[19,20,21],"strong",{},"Last Updated:"," 2026-03-30\n",[19,24,25],{},"Our Version:"," v0.7.9 (SDK v0.7.9, PWA v0.7.9, Electron v0.7.9, Chromium v0.7.9)",[16,28,29],{},[19,30,31],{},"Compared against:",[33,34,35,43,53,61],"ul",{},[36,37,38,42],"li",{},[39,40,41],"span",{},"xibo-layout-renderer"," v1.0.24 (npm, 2026-03-30) — rendering library used in Xibo's Electron\u002FChromeOS players",[36,44,45,52],{},[46,47,51],"a",{"href":48,"rel":49},"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@xibosignage\u002Fxibo-communication-framework",[50],"nofollow","xibo-communication-framework"," v0.0.7 (npm, 2026-03-30) — upstream XMR client (replaced by our native implementation)",[36,54,55,60],{},[46,56,59],{"href":57,"rel":58},"https:\u002F\u002Fgithub.com\u002Fxibosignage\u002Fxibo-dotnetclient",[50],"Xibo for Windows"," v4 R407 (C#\u002F.NET + CEF, 2026-03-30) — the only actively maintained upstream player",[36,62,63,68],{},[46,64,67],{"href":65,"rel":66},"https:\u002F\u002Fgithub.com\u002Fxibo-players\u002Farexibo",[50],"Arexibo"," v0.3.2 (Rust + Qt, 2026-03-30) — PDF rendering, RPM\u002FDEB packaging, duration fixes",[70,71],"hr",{},[73,74,76],"h2",{"id":75},"executive-summary","Executive Summary",[78,79,80,96],"table",{},[81,82,83],"thead",{},[84,85,86,90,93],"tr",{},[87,88,89],"th",{},"Area",[87,91,92],{},"Parity",[87,94,95],{},"Notes",[97,98,99,113,129,141,153,165,177,189,201,213,237,250],"tbody",{},[84,100,101,107,110],{},[102,103,104],"td",{},[19,105,106],{},"Schedule Management",[102,108,109],{},"100%",[102,111,112],{},"Full dayparting, interrupts, conflict detection, interleaved defaults, weather criteria",[84,114,115,120,122],{},[102,116,117],{},[19,118,119],{},"XMDS Communication",[102,121,109],{},[102,123,124,125,128],{},"SOAP + REST dual transport with auto-detection and ",[19,126,127],{},"idempotent cache-through"," — both transports converge on the same proxy mirror paths. XMDS signed URLs routed through cache-through proxy (no CORS). CRC32 + ETag caching. Display status codes fully reported",[84,130,131,136,138],{},[102,132,133],{},[19,134,135],{},"File Management",[102,137,109],{},[102,139,140],{},"Parallel 4-chunk downloads, download resume, Service Worker progressive streaming, transport-agnostic ContentStore",[84,142,143,148,150],{},[102,144,145],{},[19,146,147],{},"Renderer",[102,149,109],{},[102,151,152],{},"Canvas regions, audio overlay, image scale\u002Falign, exit transitions, drawers, sub-playlists, XIC handlers, shell commands, ticker duration via NUMITEMS\u002FDURATION parsing",[84,154,155,160,162],{},[102,156,157],{},[19,158,159],{},"XMR Push Messaging",[102,161,109],{},[102,163,164],{},"Native XmrClient with generic action dispatch — all 14 CMS actions. Zero deps, 97% smaller bundle. Exponential backoff reconnect",[84,166,167,172,174],{},[102,168,169],{},[19,170,171],{},"Stats\u002FLogging",[102,173,109],{},[102,175,176],{},"Proof-of-play + event stats + hour-boundary splitting + log batching. Stats delegation via SyncManager for multi-display setups",[84,178,179,184,186],{},[102,180,181],{},[19,182,183],{},"Config\u002FSettings",[102,185,109],{},[102,187,188],{},"Centralized state + DisplaySettings class + Wake Lock + offline fallback + persistent durations. Display status codes fully implemented",[84,190,191,196,198],{},[102,192,193],{},[19,194,195],{},"Interactive Control",[102,197,109],{},[102,199,200],{},"Full IC server + XIC event handlers + touch\u002Fkeyboard actions + playback control",[84,202,203,208,210],{},[102,204,205],{},[19,206,207],{},"Screenshot Capture",[102,209,109],{},[102,211,212],{},"Native getDisplayMedia + html2canvas fallback",[84,214,215,220,223],{},[102,216,217],{},[19,218,219],{},"Multi-display",[102,221,222],{},"100%+",[102,224,225,226,229,230,233,234],{},"BroadcastChannel (same-machine) + WebSocket relay (cross-device LAN). Mirror mode + wall mode. ",[19,227,228],{},"12 choreography effects",", ",[19,231,232],{},"\u003C8ms sync precision",", token auth, syncGroupId isolation, offline LAN sync, stats delegation. Works on Electron + Chromium. ",[19,235,236],{},"Most capable sync implementation in any Xibo player.",[84,238,239,244,247],{},[102,240,241],{},[19,242,243],{},"Packaging",[102,245,246],{},"New",[102,248,249],{},"RPM\u002FDEB via GitHub Actions, Electron wrapper, Chromium kiosk",[84,251,252,257,259],{},[102,253,254],{},[19,255,256],{},"Kiosk Environment",[102,258,246],{},[102,260,261],{},"GNOME Kiosk session, health monitoring, first-boot wizard, bootable images",[16,263,264],{},[19,265,266],{},"Overall: 100% feature parity across all areas. Unique capabilities: REST transport, protocol auto-detect, persistent durations, canvas regions, download resume, multi-display sync (mirror + wall mode), playback control, complete kiosk OS",[70,268],{},[73,270,272],{"id":271},"performance-comparison","Performance Comparison",[78,274,275,294],{},[81,276,277],{},[84,278,279,282,285,288,291],{},[87,280,281],{},"Metric",[87,283,284],{},"XLR v1.0.24",[87,286,287],{},"Windows v4 R407",[87,289,290],{},"Arexibo v0.3.2",[87,292,293],{},"XiboPlayer v0.7.9",[97,295,296,315,334,352,371,391,410,429,447],{},[84,297,298,301,304,307,310],{},[102,299,300],{},"Initial load (cold)",[102,302,303],{},"17-20s",[102,305,306],{},"5-10s",[102,308,309],{},"12-15s",[102,311,312],{},[19,313,314],{},"3-5s",[84,316,317,320,323,326,329],{},[102,318,319],{},"Layout replay",[102,321,322],{},"2-3s",[102,324,325],{},"1-2s",[102,327,328],{},"\u003C1s",[102,330,331],{},[19,332,333],{},"\u003C0.5s",[84,335,336,339,342,344,346],{},[102,337,338],{},"1GB file download",[102,340,341],{},"~5 min",[102,343,341],{},[102,345,341],{},[102,347,348,351],{},[19,349,350],{},"1-2 min"," (4 parallel chunks)",[84,353,354,357,360,363,365],{},[102,355,356],{},"Memory after 10 cycles",[102,358,359],{},"+500MB (growing)",[102,361,362],{},"Stable",[102,364,362],{},[102,366,367,370],{},[19,368,369],{},"Stable (0% growth)"," (PSS-tracked, blob lifecycle + renderer recycling)",[84,372,373,376,379,382,385],{},[102,374,375],{},"Bundle size",[102,377,378],{},"~2MB (with video.js)",[102,380,381],{},"~50MB (CEF)",[102,383,384],{},"~10MB (Rust binary)",[102,386,387,390],{},[19,388,389],{},"~500KB"," (minified)",[84,392,393,396,399,402,404],{},[102,394,395],{},"Widget switch time",[102,397,398],{},"~200ms (recreate)",[102,400,401],{},"~100ms",[102,403,401],{},[102,405,406,409],{},[19,407,408],{},"\u003C50ms"," (visibility toggle)",[84,411,412,415,418,421,423],{},[102,413,414],{},"Multi-display sync precision",[102,416,417],{},"N\u002FA",[102,419,420],{},"N\u002FA (zero sync code)",[102,422,417],{},[102,424,425,428],{},[19,426,427],{},"\u003C8ms"," (WebSocket relay)",[84,430,431,434,436,439,441],{},[102,432,433],{},"Choreography effects",[102,435,417],{},[102,437,438],{},"None (zero sync code)",[102,440,417],{},[102,442,443,446],{},[19,444,445],{},"12 effects"," (diagonal, wave, center-out, etc.)",[84,448,449,452,457,461,466],{},[102,450,451],{},"Automated tests",[102,453,454],{},[19,455,456],{},"0",[102,458,459],{},[19,460,456],{},[102,462,463],{},[19,464,465],{},"2",[102,467,468,471],{},[19,469,470],{},"1629"," (49 test files)",[70,473],{},[73,475,477],{"id":476},"electron-vs-chromium-v079-production-profiling","Electron vs Chromium (v0.7.9 production profiling)",[16,479,480],{},"Both players run the same PWA. Profiled in production kiosk fullscreen mode playing identical content on the same machine (Fedora 43, Wayland, Intel UHD 630 GPU).",[78,482,483,495],{},[81,484,485],{},[84,486,487,489,492],{},[87,488,281],{},[87,490,491],{},"Electron 41 (Chrome 146)",[87,493,494],{},"Chromium 146",[97,496,497,508,519,530,541,552,563,577,588],{},[84,498,499,502,505],{},[102,500,501],{},"Total CPU",[102,503,504],{},"5-8%",[102,506,507],{},"4-7%",[84,509,510,513,516],{},[102,511,512],{},"Total PSS",[102,514,515],{},"330 MB (stable)",[102,517,518],{},"360 MB (stable)",[84,520,521,524,527],{},[102,522,523],{},"GPU PSS",[102,525,526],{},"270 MB (stable)",[102,528,529],{},"55 MB (stable)",[84,531,532,535,538],{},[102,533,534],{},"Renderer PSS",[102,536,537],{},"40 MB (stable)",[102,539,540],{},"280 MB (stable)",[84,542,543,546,549],{},[102,544,545],{},"GPU DRM render time",[102,547,548],{},"18s",[102,550,551],{},"52s",[84,553,554,557,560],{},[102,555,556],{},"Process count",[102,558,559],{},"8",[102,561,562],{},"12",[84,564,565,568,573],{},[102,566,567],{},"Memory growth",[102,569,570],{},[19,571,572],{},"0%",[102,574,575],{},[19,576,572],{},[84,578,579,582,585],{},[102,580,581],{},"Wayland GPU accel",[102,583,584],{},"Yes (GPU auto-detect)",[102,586,587],{},"Yes (GPU rasterization)",[84,589,590,593,596],{},[102,591,592],{},"Offline playback",[102,594,595],{},"Yes (content store)",[102,597,595],{},[16,599,600],{},[19,601,602],{},"Key findings:",[33,604,605,611,617,623],{},[36,606,607,610],{},[19,608,609],{},"CPU parity"," — both players at 4-8% in production fullscreen mode with GPU-accelerated rasterization and compositing.",[36,612,613,616],{},[19,614,615],{},"Continuous automated monitoring"," — CPU per process type (main, GPU, renderer, network), PSS memory, file descriptors, GPU DRM render time and iGPU utilization are tracked every 60 seconds. Zero memory growth confirmed over extended production runs.",[36,618,619,622],{},[19,620,621],{},"GPU auto-detection"," — on hybrid GPU systems (Optimus), the player selects the display GPU automatically. Render-only GPUs are skipped when they can't share framebuffers on Wayland.",[36,624,625],{},"Both players survive CMS outages — cached layouts keep playing offline.",[70,627],{},[73,629,631],{"id":630},"where-xiboplayer-is-better","Where XiboPlayer is Better",[633,634,635,641,647,653,659,665,671,677,683,689,695,701,707,713,719,747,757,763,769,775,781,791,797,808,814],"ol",{},[36,636,637,640],{},[19,638,639],{},"Dual transport (SOAP + REST) with idempotent cache"," — only player with native JSON\u002FREST communication and transport-agnostic caching (files cached via XMDS or REST are served identically)",[36,642,643,646],{},[19,644,645],{},"ETag caching"," — HTTP 304 for unchanged responses",[36,648,649,652],{},[19,650,651],{},"4x faster downloads"," — parallel 4-chunk downloads with dynamic sizing",[36,654,655,658],{},[19,656,657],{},"Progressive streaming"," — Service Worker Range request support",[36,660,661,664],{},[19,662,663],{},"Instant layout replay"," — element reuse (\u003C0.5s)",[36,666,667,670],{},[19,668,669],{},"Better memory management"," — per-layout blob URL lifecycle tracking",[36,672,673,676],{},[19,674,675],{},"PDF multi-page cycling"," — PDF.js with timed page transitions (XLR and Windows lack this)",[36,678,679,682],{},[19,680,681],{},"Better dayparting"," — daily\u002Fweekly\u002Fmonthly recurrence with ISO day-of-week",[36,684,685,688],{},[19,686,687],{},"Cross-platform"," — any device with a modern browser",[36,690,691,694],{},[19,692,693],{},"Zero installation"," — PWA: just open a URL",[36,696,697,700],{},[19,698,699],{},"Offline resilience"," — IndexedDB auto-fallback + queue barriers",[36,702,703,706],{},[19,704,705],{},"RPM\u002FDEB packaging"," — native Linux packages with auto-update repos",[36,708,709,712],{},[19,710,711],{},"Bootable images"," — ISO, raw, QCOW2 for x86_64 and aarch64",[36,714,715,718],{},[19,716,717],{},"Player-agnostic kiosk"," — alternatives system for swapping players",[36,720,721,724,725,729,730,729,732,734,735,738,739,742,743],{},[19,722,723],{},"Multi-display sync with choreography"," — BroadcastChannel (same-machine) + WebSocket relay (LAN). Mirror mode or wall mode with ",[726,727,728],"code",{},"layoutMap",". ",[19,731,232],{},[19,733,228],{}," for dramatic cascading transitions (diagonal, wave, center-out). Token-authenticated relay, syncGroupId isolation, offline LAN sync, stats delegation. Standalone ",[726,736,737],{},"xiboplayer-relay"," CLI. Works on both Electron and Chromium. ",[19,740,741],{},"Windows player has zero multi-display sync code"," (confirmed by source audit); XLR and Arexibo have none either. ",[46,744,746],{"href":745},"\u002Ffeatures\u002Fmulti-display","Full guide",[36,748,749,752,753,756],{},[19,750,751],{},"Playback control"," — keyboard shortcuts and timeline click-to-skip (disabled by default, enabled via ",[726,754,755],{},"controls"," config)",[36,758,759,762],{},[19,760,761],{},"CMS Management API"," — 77-method REST client for full CMS v4 API",[36,764,765,768],{},[19,766,767],{},"SSL cert relaxation"," — opt-in relaxSslCerts for media streams with self-signed certificates",[36,770,771,774],{},[19,772,773],{},"Configurable log levels"," — config.json logLevel for runtime log control",[36,776,777,780],{},[19,778,779],{},"Complete XMR implementation"," — native XmrClient with generic action dispatch handles all 14 CMS actions; upstream framework only dispatches 5 (the rest are silently dropped). Zero dependencies vs 68KB luxon",[36,782,783,786,787,790],{},[19,784,785],{},"XMDS download caching"," — XMDS signed URLs rewritten to local proxy mirror paths, eliminating CORS failures and enabling ContentStore caching for all XMDS content (layouts, media, fonts, bundles). ",[726,788,789],{},"X-Cms-Download-Url"," header enables XMDS-only CMSes to use the full cache-through pipeline",[36,792,793,796],{},[19,794,795],{},"1629 automated tests"," — 49 test files covering all SDK packages. Windows player has zero tests, XLR has zero tests, Arexibo has only 2 tests. XiboPlayer is the only Xibo player with a meaningful test suite",[36,798,799,802,803],{},[19,800,801],{},"Wayland hardware GPU acceleration"," — GPU auto-detection selects the display GPU on hybrid systems. GPU rasterization flags reduce Chromium CPU from 91% to 5%. Filed upstream as ",[46,804,807],{"href":805,"rel":806},"https:\u002F\u002Fgithub.com\u002Felectron\u002Felectron\u002Fissues\u002F50455",[50],"electron#50455",[36,809,810,813],{},[19,811,812],{},"Offline-first playback"," — Content store serves cached layouts and media during CMS outages. Download manager race conditions fixed (commit-before-response, key format unification)",[36,815,816,819],{},[19,817,818],{},"PSS-based memory monitoring"," — Proportional Set Size tracking distinguishes real memory cost from shared page inflation. Per-process type detection (gpu\u002Frenderer\u002Fbrowser\u002Fserver) with 48h overnight profiling",[70,821],{},[73,823,825],{"id":824},"upstream-audit-results-2026-03-18","Upstream Audit Results (2026-03-18)",[16,827,828],{},"Code analysis of upstream repositories confirmed:",[33,830,831,841,846,852,857],{},[36,832,833,836,837,840],{},[19,834,835],{},"Windows player",": zero multi-display sync code in the entire codebase. No sync manager, no relay, no choreography. The ",[726,838,839],{},"~50-100ms"," figure previously cited was theoretical — there is no implementation at all",[36,842,843,845],{},[19,844,835],{},": zero automated tests. No test project, no test runner, no CI test step",[36,847,848,851],{},[19,849,850],{},"XLR (xibo-layout-renderer)",": zero automated tests. The npm package ships with no test suite",[36,853,854,856],{},[19,855,67],{},": 2 automated tests only (basic XMDS parsing)",[36,858,859,862],{},[19,860,861],{},"XiboPlayer",": 1625 tests across 49 test files, covering core, renderer, cache, schedule, xmds, xmr, stats, settings, sync, and crypto packages",[70,864],{},{"title":866,"searchDepth":867,"depth":867,"links":868},"",3,[869,871,872,873,874],{"id":75,"depth":870,"text":76},2,{"id":271,"depth":870,"text":272},{"id":476,"depth":870,"text":477},{"id":630,"depth":870,"text":631},{"id":824,"depth":870,"text":825},"Detailed feature comparison: XiboPlayer v0.7.9 vs upstream Xibo players.","md",{},true,"\u002Fdocs\u002Fsdk\u002Fcomparison",{"title":5,"description":875},"docs\u002Fsdk\u002Fcomparison","9kWGCTxaGvtBJU8F0g3mPLv-Xchpozp0y1jLxTjofyo",1775148112890]