[{"data":1,"prerenderedAt":405},["ShallowReactive",2],{"content-en-\u002Fsdk\u002Fquick-start":3},{"id":4,"title":5,"author":6,"body":7,"date":6,"description":17,"extension":399,"meta":400,"navigation":107,"path":401,"seo":402,"stem":403,"tags":6,"__hash__":404},"content_en\u002Fsdk\u002Fquick-start.md","SDK Quick Start",null,{"type":8,"value":9,"toc":384},"minimark",[10,14,18,23,36,40,48,55,59,153,157,168,187,202,206,212,215,239,243,261,264,268,271,301,310,314,319,330,334,341,345,353,357,380],[11,12,5],"h1",{"id":13},"sdk-quick-start",[15,16,17],"p",{},"Get the PWA player running in 5 minutes.",[19,20,22],"h2",{"id":21},"prerequisites","Prerequisites",[24,25,26,30,33],"ul",{},[27,28,29],"li",{},"Node.js 22+ and pnpm",[27,31,32],{},"Access to a Xibo CMS instance",[27,34,35],{},"CMS secret key (from CMS Settings → Display Settings)",[19,37,39],{"id":38},"same-origin-requirement","Same-Origin Requirement",[15,41,42,43,47],{},"The PWA player ",[44,45,46],"strong",{},"must"," be served from the same domain as the Xibo CMS. All API calls go to the CMS origin, and browsers block cross-origin requests.",[15,49,50,51,54],{},"For local\u002Fkiosk use, use the ",[44,52,53],{},"Electron wrapper"," which handles CORS at the Chromium session level.",[19,56,58],{"id":57},"build","Build",[60,61,66],"pre",{"className":62,"code":63,"language":64,"meta":65,"style":65},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark","# Clone the SDK monorepo\ngit clone https:\u002F\u002Fgithub.com\u002Fxibo-players\u002Fxiboplayer.git\ncd xiboplayer\n\n# Install dependencies\npnpm install\n\n# Build PWA for production\npnpm --filter @xiboplayer\u002Fpwa build    # Output → packages\u002Fpwa\u002Fdist\u002F\n","bash","",[67,68,69,78,92,102,109,115,124,129,135],"code",{"__ignoreMap":65},[70,71,74],"span",{"class":72,"line":73},"line",1,[70,75,77],{"class":76},"sutJx","# Clone the SDK monorepo\n",[70,79,81,85,89],{"class":72,"line":80},2,[70,82,84],{"class":83},"sbgvK","git",[70,86,88],{"class":87},"s_sjI"," clone",[70,90,91],{"class":87}," https:\u002F\u002Fgithub.com\u002Fxibo-players\u002Fxiboplayer.git\n",[70,93,95,99],{"class":72,"line":94},3,[70,96,98],{"class":97},"sptTA","cd",[70,100,101],{"class":87}," xiboplayer\n",[70,103,105],{"class":72,"line":104},4,[70,106,108],{"emptyLinePlaceholder":107},true,"\n",[70,110,112],{"class":72,"line":111},5,[70,113,114],{"class":76},"# Install dependencies\n",[70,116,118,121],{"class":72,"line":117},6,[70,119,120],{"class":83},"pnpm",[70,122,123],{"class":87}," install\n",[70,125,127],{"class":72,"line":126},7,[70,128,108],{"emptyLinePlaceholder":107},[70,130,132],{"class":72,"line":131},8,[70,133,134],{"class":76},"# Build PWA for production\n",[70,136,138,140,144,147,150],{"class":72,"line":137},9,[70,139,120],{"class":83},[70,141,143],{"class":142},"stzsN"," --filter",[70,145,146],{"class":87}," @xiboplayer\u002Fpwa",[70,148,149],{"class":87}," build",[70,151,152],{"class":76},"    # Output → packages\u002Fpwa\u002Fdist\u002F\n",[19,154,156],{"id":155},"deploy-to-cms","Deploy to CMS",[15,158,159,160,163,164,167],{},"Copy ",[67,161,162],{},"dist\u002F*"," to the CMS ",[67,165,166],{},"web\u002Fchromeos\u002F"," directory:",[60,169,171],{"className":62,"code":170,"language":64,"meta":65,"style":65},"podman cp dist\u002F. xibo-cms-web:\u002Fvar\u002Fwww\u002Fcms\u002Fweb\u002Fchromeos\u002F\n",[67,172,173],{"__ignoreMap":65},[70,174,175,178,181,184],{"class":72,"line":73},[70,176,177],{"class":83},"podman",[70,179,180],{"class":87}," cp",[70,182,183],{"class":87}," dist\u002F.",[70,185,186],{"class":87}," xibo-cms-web:\u002Fvar\u002Fwww\u002Fcms\u002Fweb\u002Fchromeos\u002F\n",[15,188,189,190,193,194,197,198,201],{},"The CMS ",[67,191,192],{},".htaccess"," rewrites ",[67,195,196],{},"\u002Fplayer\u002Fpwa\u002F*"," → ",[67,199,200],{},"web\u002Fchromeos\u002F*",".",[19,203,205],{"id":204},"access-player","Access Player",[15,207,208,209],{},"Open: ",[67,210,211],{},"https:\u002F\u002Fyour-cms.example.com\u002Fplayer\u002Fpwa\u002F",[15,213,214],{},"Configure with:",[24,216,217,227,233],{},[27,218,219,222,223,226],{},[44,220,221],{},"CMS Address:"," ",[67,224,225],{},"https:\u002F\u002Fyour-cms.example.com"," (same domain)",[27,228,229,232],{},[44,230,231],{},"CMS Key:"," Your CMS secret key",[27,234,235,238],{},[44,236,237],{},"Display Name:"," Your display name",[19,240,242],{"id":241},"authorize-in-cms","Authorize in CMS",[244,245,246,249,252,255,258],"ol",{},[27,247,248],{},"Open your CMS admin UI",[27,250,251],{},"Go to Displays",[27,253,254],{},"Find your display (status: Waiting)",[27,256,257],{},"Authorize it",[27,259,260],{},"Refresh the player page",[15,262,263],{},"The player starts downloading files and displaying layouts.",[19,265,267],{"id":266},"alternative-electron-for-kioskdesktop","Alternative: Electron (for kiosk\u002Fdesktop)",[15,269,270],{},"For deployments where same-origin hosting isn't available:",[60,272,274],{"className":62,"code":273,"language":64,"meta":65,"style":65},"sudo dnf install xiboplayer-electron\nxiboplayer-electron --cms-url=https:\u002F\u002Fyour-cms.example.com --cms-key=KEY\n",[67,275,276,290],{"__ignoreMap":65},[70,277,278,281,284,287],{"class":72,"line":73},[70,279,280],{"class":83},"sudo",[70,282,283],{"class":87}," dnf",[70,285,286],{"class":87}," install",[70,288,289],{"class":87}," xiboplayer-electron\n",[70,291,292,295,298],{"class":72,"line":80},[70,293,294],{"class":83},"xiboplayer-electron",[70,296,297],{"class":142}," --cms-url=https:\u002F\u002Fyour-cms.example.com",[70,299,300],{"class":142}," --cms-key=KEY\n",[15,302,303,304,309],{},"See ",[305,306,308],"a",{"href":307},"\u002Fplayers\u002Felectron","Electron Player"," for details.",[19,311,313],{"id":312},"troubleshooting","Troubleshooting",[315,316,318],"h3",{"id":317},"connection-failed-networkerror","\"Connection failed: NetworkError\"",[24,320,321,324,327],{},[27,322,323],{},"Verify the CMS address matches the domain the player is served from",[27,325,326],{},"Check browser console for CORS errors (means player is not same-origin)",[27,328,329],{},"Use Electron for cross-origin setups",[315,331,333],{"id":332},"display-not-authorized","\"Display not authorized\"",[24,335,336,339],{},[27,337,338],{},"Go to CMS → Displays → Authorize your display",[27,340,260],{},[315,342,344],{"id":343},"layouts-dont-show","Layouts don't show",[24,346,347,350],{},[27,348,349],{},"Check browser console for download errors",[27,351,352],{},"Verify schedule has active layouts assigned to the display",[19,354,356],{"id":355},"next-steps","Next Steps",[24,358,359,366,373],{},[27,360,361,365],{},[305,362,364],{"href":363},"\u002Fsdk\u002Fdeployment","Deployment guide"," — complete deployment details",[27,367,368,372],{},[305,369,371],{"href":370},"\u002Fsdk\u002Farchitecture","Architecture"," — system design and patterns",[27,374,375,379],{},[305,376,378],{"href":377},"\u002Fsdk\u002Fpackages","Packages"," — all 13 SDK packages",[381,382,383],"style",{},"html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sptTA, html code.shiki .sptTA{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .stzsN, html code.shiki .stzsN{--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":65,"searchDepth":94,"depth":94,"links":385},[386,387,388,389,390,391,392,393,398],{"id":21,"depth":80,"text":22},{"id":38,"depth":80,"text":39},{"id":57,"depth":80,"text":58},{"id":155,"depth":80,"text":156},{"id":204,"depth":80,"text":205},{"id":241,"depth":80,"text":242},{"id":266,"depth":80,"text":267},{"id":312,"depth":80,"text":313,"children":394},[395,396,397],{"id":317,"depth":94,"text":318},{"id":332,"depth":94,"text":333},{"id":343,"depth":94,"text":344},{"id":355,"depth":80,"text":356},"md",{},"\u002Fsdk\u002Fquick-start",{"title":5,"description":17},"sdk\u002Fquick-start","L2yoa756xlYB9VjxGTzuwafhUlfRfiPdGTnoSMaMQ2g",1775148105254]