---
title: Publishing Mode
slug: publishing-mode
docTags: 
createdAt: 2025-03-11T06:55:06.569Z
---

One of the most important settings in a Setup File is the **Publishing Mode** which sets the method by which content will be delivered to the player. The Publishing Mode is tightly coupled with the player's CMS (Content Management System).

# Selector

Use the tool below to quickly determine the best Publishing Mode for your player(s).

:::Iframe{iframeHeight="0" code="<!DOCTYPE html>&#xA;<html lang=&#x22;en&#x22;>&#xA;<head>&#xA;<meta charset=&#x22;UTF-8&#x22;>&#xA;<meta name=&#x22;viewport&#x22; content=&#x22;width=device-width, initial-scale=1.0&#x22;>&#xA;<title>Publishing Mode Wizard (Internet)</title>&#xA;<style>&#xA;  :root {&#xA;    --accent: #4B2E83;&#xA;    --accent-hover: #3A2266;&#xA;    --accent-tint: #f1ecf8;&#xA;    --text-main: #1a1d29;&#xA;    --text-muted: #5b6274;&#xA;    --border: #e3e5ea;&#xA;    --bg-card: #ffffff;&#xA;    --bg-page: transparent;&#xA;    --radius: 14px;&#xA;  }&#xA;&#xA;  * { box-sizing: border-box; }&#xA;&#xA;  html, body {&#xA;    margin: 0;&#xA;    padding: 0;&#xA;    background: var(--bg-page);&#xA;    font-family: -apple-system, BlinkMacSystemFont, &#x22;Segoe UI&#x22;, Roboto, Helvetica, Arial, sans-serif;&#xA;    color: var(--text-main);&#xA;  }&#xA;&#xA;  .wizard-wrap {&#xA;    display: flex;&#xA;    justify-content: center;&#xA;    align-items: flex-start;&#xA;    padding: 24px 16px;&#xA;  }&#xA;&#xA;  .wizard-card {&#xA;    position: relative;&#xA;    width: 100%;&#xA;    max-width: 560px;&#xA;    background: var(--bg-card);&#xA;    border: 1px solid var(--border);&#xA;    border-radius: var(--radius);&#xA;    box-shadow: 0 4px 20px rgba(20, 24, 40, 0.06);&#xA;    padding: 28px 32px 32px;&#xA;  }&#xA;&#xA;  /* Progress dots */&#xA;  .progress {&#xA;    display: flex;&#xA;    gap: 6px;&#xA;    margin-bottom: 20px;&#xA;  }&#xA;  .progress span {&#xA;    flex: 1;&#xA;    height: 4px;&#xA;    border-radius: 2px;&#xA;    background: var(--border);&#xA;    transition: background 0.25s ease;&#xA;  }&#xA;  .progress span.active {&#xA;    background: var(--accent);&#xA;  }&#xA;&#xA;  /* Reset button */&#xA;  .reset-btn {&#xA;    display: none;&#xA;    align-items: center;&#xA;    gap: 6px;&#xA;    background: none;&#xA;    border: none;&#xA;    color: var(--text-muted);&#xA;    font-size: 13px;&#xA;    font-weight: 500;&#xA;    cursor: pointer;&#xA;    padding: 6px 8px;&#xA;    margin: -6px -8px 14px;&#xA;    border-radius: 8px;&#xA;    transition: background 0.15s ease, color 0.15s ease;&#xA;  }&#xA;  .reset-btn:hover {&#xA;    background: #f2f3f6;&#xA;    color: var(--text-main);&#xA;  }&#xA;  .reset-btn svg {&#xA;    width: 14px;&#xA;    height: 14px;&#xA;    flex-shrink: 0;&#xA;  }&#xA;  .reset-btn.visible { display: inline-flex; }&#xA;&#xA;  #screen {&#xA;    animation: fadeIn 0.2s ease;&#xA;  }&#xA;  @keyframes fadeIn {&#xA;    from { opacity: 0; transform: translateY(4px); }&#xA;    to { opacity: 1; transform: translateY(0); }&#xA;  }&#xA;&#xA;  h2.question {&#xA;    font-size: 18px;&#xA;    line-height: 1.5;&#xA;    margin: 0 0 22px;&#xA;    font-weight: 600;&#xA;  }&#xA;&#xA;  p.result-heading {&#xA;    font-size: 16px;&#xA;    line-height: 1.6;&#xA;    margin: 0 0 18px;&#xA;    color: var(--text-main);&#xA;  }&#xA;&#xA;  p.suggestion {&#xA;    font-size: 16px;&#xA;    line-height: 1.6;&#xA;    margin: 0;&#xA;  }&#xA;  p.suggestion a {&#xA;    font-weight: 600;&#xA;  }&#xA;&#xA;  .options {&#xA;    display: flex;&#xA;    flex-direction: column;&#xA;    gap: 10px;&#xA;  }&#xA;&#xA;  .option-btn {&#xA;    display: block;&#xA;    width: 100%;&#xA;    text-align: left;&#xA;    background: #f8f9fb;&#xA;    border: 1px solid var(--border);&#xA;    border-radius: 10px;&#xA;    padding: 14px 16px;&#xA;    font-size: 15px;&#xA;    font-weight: 500;&#xA;    color: var(--text-main);&#xA;    cursor: pointer;&#xA;    transition: border-color 0.15s ease, background 0.15s ease, transform 0.1s ease;&#xA;  }&#xA;  .option-btn:hover {&#xA;    border-color: var(--accent);&#xA;    background: var(--accent-tint);&#xA;  }&#xA;  .option-btn:active {&#xA;    transform: scale(0.99);&#xA;  }&#xA;&#xA;  .link-list {&#xA;    display: flex;&#xA;    flex-direction: column;&#xA;    gap: 10px;&#xA;  }&#xA;&#xA;  .link-item {&#xA;    display: block;&#xA;    border: 1px solid var(--border);&#xA;    border-radius: 10px;&#xA;    padding: 14px 16px;&#xA;    text-decoration: none;&#xA;    color: inherit;&#xA;    transition: border-color 0.15s ease, background 0.15s ease;&#xA;  }&#xA;  .link-item:hover {&#xA;    border-color: var(--accent);&#xA;    background: var(--accent-tint);&#xA;  }&#xA;  .link-item .link-title {&#xA;    font-size: 15px;&#xA;    font-weight: 600;&#xA;    color: var(--accent);&#xA;    margin-bottom: 3px;&#xA;  }&#xA;  .link-item .link-desc {&#xA;    font-size: 13.5px;&#xA;    color: var(--text-muted);&#xA;    line-height: 1.4;&#xA;  }&#xA;&#xA;  a.inline-link {&#xA;    color: var(--accent);&#xA;    font-weight: 600;&#xA;    text-decoration: none;&#xA;  }&#xA;  a.inline-link:hover {&#xA;    text-decoration: underline;&#xA;  }&#xA;</style>&#xA;</head>&#xA;<body>&#xA;&#xA;<div class=&#x22;wizard-wrap&#x22;>&#xA;  <div class=&#x22;wizard-card&#x22;>&#xA;    <button id=&#x22;resetBtn&#x22; class=&#x22;reset-btn&#x22; onclick=&#x22;goTo('q1')&#x22;>&#xA;      <svg viewBox=&#x22;0 0 24 24&#x22; fill=&#x22;none&#x22; stroke=&#x22;currentColor&#x22; stroke-width=&#x22;2&#x22; stroke-linecap=&#x22;round&#x22; stroke-linejoin=&#x22;round&#x22;>&#xA;        <polyline points=&#x22;1 4 1 10 7 10&#x22;></polyline>&#xA;        <path d=&#x22;M3.51 15a9 9 0 1 0 2.13-9.36L1 10&#x22;></path>&#xA;      </svg>&#xA;      Reset&#xA;    </button>&#xA;    <div class=&#x22;progress&#x22; id=&#x22;progress&#x22;>&#xA;      <span></span><span></span><span></span>&#xA;    </div>&#xA;    <div id=&#x22;screen&#x22;></div>&#xA;  </div>&#xA;</div>&#xA;&#xA;<script>&#xA;  // ---- Wizard data model ----&#xA;  var screens = {&#xA;    q1: {&#xA;      step: 1,&#xA;      question: &#x22;Will the player have internet access?&#x22;,&#xA;      options: [&#xA;        { label: &#x22;Yes&#x22;, next: &#x22;q2&#x22; },&#xA;        { label: &#x22;No&#x22;, next: &#x22;q3&#x22; }&#xA;      ]&#xA;    },&#xA;    q2: {&#xA;      step: 2,&#xA;      question: &#x22;A CMS (Content Management System) manages the content that players display. Select your preferred CMS.&#x22;,&#xA;      options: [&#xA;        { label: &#x22;BrightSign CMS (Author or Author Plus)&#x22;, next: &#x22;resultBrightSignCms&#x22; },&#xA;        { label: &#x22;Non-BrightSign CMS&#x22;, next: &#x22;resultNonBrightSignCms&#x22; }&#xA;      ]&#xA;    },&#xA;    q3: {&#xA;      step: 2,&#xA;      question: &#x22;Will the player be accessible over the local network?&#x22;,&#xA;      options: [&#xA;        { label: &#x22;Yes&#x22;, next: &#x22;resultLocalNetwork&#x22; },&#xA;        { label: &#x22;No&#x22;, next: &#x22;resultStandalone&#x22; }&#xA;      ]&#xA;    },&#xA;    resultBrightSignCms: {&#xA;      step: 3,&#xA;      type: &#x22;links&#x22;,&#xA;      heading: &#x22;This player's Publishing Mode should be one of the following:&#x22;,&#xA;      links: [&#xA;        { text: &#x22;Author Plus&#x22;, href: &#x22;https://docs.brightsign.biz/publishing-mode#author-plus&#x22;, desc: &#x22;Subscription required — publish using BrightSign’s cloud&#x22; },&#xA;        { text: &#x22;Local Network&#x22;, href: &#x22;https://docs.brightsign.biz/publishing-mode#local-network&#x22;, desc: &#x22;Free — publish over the local network&#x22; },&#xA;        { text: &#x22;Web Folder&#x22;, href: &#x22;https://docs.brightsign.biz/publishing-mode#web-folder&#x22;, desc: &#x22;Free — publish to a player-accessible URL&#x22; }&#xA;      ]&#xA;    },&#xA;    resultNonBrightSignCms: {&#xA;      step: 3,&#xA;      type: &#x22;links&#x22;,&#xA;      heading: &#x22;This player's Publishing Mode should be one of the following:&#x22;,&#xA;      links: [&#xA;        { text: &#x22;Partner CMS&#x22;, href: &#x22;https://docs.brightsign.biz/publishing-mode#partner-cms&#x22;, desc: &#x22;Select from a list of BrightSign’s CMS partners&#x22; },&#xA;        { text: &#x22;CMS URL&#x22;, href: &#x22;https://docs.brightsign.biz/publishing-mode#cms-url&#x22;, desc: &#x22;Install a CMS package from a URL&#x22; }&#xA;      ]&#xA;    },&#xA;    resultLocalNetwork: {&#xA;      step: 3,&#xA;      type: &#x22;links&#x22;,&#xA;      heading: &#x22;This player's Publishing Mode should be:&#x22;,&#xA;      links: [&#xA;        { text: &#x22;Local Network&#x22;, href: &#x22;https://docs.brightsign.biz/publishing-mode#local-network&#x22;, desc: &#x22;Free — publish over the local network&#x22; }&#xA;      ]&#xA;    },&#xA;    resultStandalone: {&#xA;      step: 3,&#xA;      type: &#x22;links&#x22;,&#xA;      heading: &#x22;This player's Publishing Mode should be:&#x22;,&#xA;      links: [&#xA;        { text: &#x22;Standalone&#x22;, href: &#x22;https://docs.brightsign.biz/publishing-mode#standalone&#x22;, desc: &#x22;Free — publish manually to the player’s storage device&#x22; }&#xA;      ]&#xA;    }&#xA;  };&#xA;&#xA;  var screenEl = document.getElementById(&#x22;screen&#x22;);&#xA;  var resetBtn = document.getElementById(&#x22;resetBtn&#x22;);&#xA;  var progressEl = document.getElementById(&#x22;progress&#x22;);&#xA;&#xA;  function escapeHtml(str) {&#xA;    var div = document.createElement(&#x22;div&#x22;);&#xA;    div.textContent = str;&#xA;    return div.innerHTML;&#xA;  }&#xA;&#xA;  function renderProgress(step) {&#xA;    var dots = progressEl.children;&#xA;    for (var i = 0; i < dots.length; i++) {&#xA;      dots[i].classList.toggle(&#x22;active&#x22;, i < step);&#xA;    }&#xA;  }&#xA;&#xA;  function goTo(id) {&#xA;    var screen = screens[id];&#xA;    if (!screen) return;&#xA;&#xA;    resetBtn.classList.toggle(&#x22;visible&#x22;, id !== &#x22;q1&#x22;);&#xA;    renderProgress(screen.step);&#xA;&#xA;    var html = &#x22;&#x22;;&#xA;&#xA;    if (screen.question) {&#xA;      html += '<h2 class=&#x22;question&#x22;>' + escapeHtml(screen.question) + '</h2>';&#xA;      html += '<div class=&#x22;options&#x22;>';&#xA;      screen.options.forEach(function (opt) {&#xA;        html += '<button class=&#x22;option-btn&#x22; data-next=&#x22;' + opt.next + '&#x22;>' + escapeHtml(opt.label) + '</button>';&#xA;      });&#xA;      html += '</div>';&#xA;    } else if (screen.type === &#x22;links&#x22;) {&#xA;      html += '<p class=&#x22;result-heading&#x22;>' + escapeHtml(screen.heading) + '</p>';&#xA;      html += '<div class=&#x22;link-list&#x22;>';&#xA;      screen.links.forEach(function (link) {&#xA;        html += '<a class=&#x22;link-item&#x22; href=&#x22;' + link.href + '&#x22;>' +&#xA;          '<div class=&#x22;link-title&#x22;>' + escapeHtml(link.text) + '</div>' +&#xA;          '<div class=&#x22;link-desc&#x22;>' + escapeHtml(link.desc) + '</div>' +&#xA;          '</a>';&#xA;      });&#xA;      html += '</div>';&#xA;    } else if (screen.type === &#x22;suggestion&#x22;) {&#xA;      html += '<p class=&#x22;suggestion&#x22;>' + escapeHtml(screen.before) +&#xA;        '<a class=&#x22;inline-link&#x22; href=&#x22;' + screen.link.href + '&#x22;>' + escapeHtml(screen.link.text) + '</a>' +&#xA;        '</p>';&#xA;    }&#xA;&#xA;    screenEl.innerHTML = html;&#xA;&#xA;    var buttons = screenEl.querySelectorAll(&#x22;.option-btn&#x22;);&#xA;    buttons.forEach(function (btn) {&#xA;      btn.addEventListener(&#x22;click&#x22;, function () {&#xA;        goTo(btn.getAttribute(&#x22;data-next&#x22;));&#xA;      });&#xA;    });&#xA;  }&#xA;&#xA;  goTo(&#x22;q1&#x22;);&#xA;</script>&#xA;&#xA;</body>&#xA;</html>"}

:::

Clicking the Publishing Mode from the Selector above will bring you to the corresponding description for that Publishing Mode below.

# Standalone

<font color="#2166AE">`NO NETWORK ACCESS REQUIRED`</font> <font color="#6B21A8">`CMS: BRIGHTSIGN AUTHOR (FREE)`</font>

::Image[]{src="https://api.archbee.com/api/optimize/0prk6SO2dy9LdU77jB8D1/fsRUShWisWSGlXSryQZCa_image.png" size="70" width="837" height="242" isUploading="false" darkWidth="837" darkHeight="242" showCaption="false"}

- Content is manually published / copied to a storage device (typically a microSD card).
- The storage device is manually inserted into the player.

# Local Network

<font color="#2166AE">`LOCAL NETWORK ACCESS REQUIRED`</font> <font color="#6B21A8">`CMS: BRIGHTSIGN AUTHOR (FREE)`</font>

::Image[]{src="https://api.archbee.com/api/optimize/0prk6SO2dy9LdU77jB8D1/x8OFpiqBvurL9qShusslk_image.png" size="70" width="872" height="310" isUploading="false" darkWidth="872" darkHeight="310" showCaption="false"}

- Content is published to the player over the local network.

# Author Plus

<font color="#2166AE">`INTERNET ACCESS REQUIRED`</font> <font color="#6B21A8">`CMS: BRIGHTSIGN AUTHOR PLUS (PAID)`</font>

::Image[]{src="https://api.archbee.com/api/optimize/0prk6SO2dy9LdU77jB8D1/DBy9YuiVnPGKrpxSqa-_u_image.png" size="70" width="930" height="676" isUploading="false" darkWidth="930" darkHeight="676" showCaption="false"}

- Content is stored and published to players from BrightSign's cloud.
- BrightSign Author Plus is required.

# Web Folder

<font color="#2166AE">`INTERNET ACCESS REQUIRED`</font> <font color="#6B21A8">`CMS: BRIGHTSIGN AUTHOR (FREE)`</font>

::Image[]{src="https://api.archbee.com/api/optimize/0prk6SO2dy9LdU77jB8D1/YlJ_cb0UcBBYbMEB7Hwe4_image.png" size="70" width="878" height="680" isUploading="false" darkWidth="878" darkHeight="680" showCaption="false"}

- Content is published to a player-accessible URL. Content can be uploaded to the URL using WebDAV or FTP.
- The player downloads the content from the web folder.
- Players periodically check the web folder for content updates and when available, new content is automatically downloaded to the player.

# Partner CMS

<font color="#2166AE">`INTERNET ACCESS REQUIRED`</font>
`CMS: PARTNER CMS (PAID) VIA WEB BROWSER`

::Image[]{src="https://api.archbee.com/api/optimize/0prk6SO2dy9LdU77jB8D1/E2Elu3Sz11uN9VlT-1SzB_image.png" size="70" width="918" height="673" isUploading="false" darkWidth="918" darkHeight="673" showCaption="false"}

BrightSign has many partners who provide an alternative CMS for BrightSign players. You can select from a list of Partner CMSs to use for content management.

# CMS URL

<font color="#2166AE">`INTERNET ACCESS REQUIRED`</font> <font color="#0C121D">`CMS: NON-PARTNER CMS (PAID) VIA WEB BROWSER`</font>

You may also use a CMS not affiliated with BrightSign's Partner CMS program.

::Image[]{src="https://api.archbee.com/api/optimize/0prk6SO2dy9LdU77jB8D1/fht5f3ODh7EcuKREJBITg_image.png" size="70" width="880" height="660" isUploading="false" darkWidth="880" darkHeight="660" showCaption="false"}

- A .zip file containing the setup package for the CMS is placed at a player-accessible URL.
- The player downloads the package from the URL and sets itself up for use with the CMS.



:::CtaButton{label="Next: Network Settings" docId="M_K1adTgGEI43PQx60ed4" openInNewTab="false"}

:::

