A self-guided, hands-on workshop for building, packaging, deploying, and iterating on BrightSign OS extensions. By the end you will have deployed a working extension to a live player and walked the full development cycle end-to-end.
Total time: ~3.5 hours
A Java extension ("Hello BrightSign") that runs an HTTP server on port 8080 and returns a JSON uptime response. The extension is intentionally trivial — the workflow is the point. You will also build a BrightScript HTML app that polls the extension and renders its output on the player display.
- Docker Desktop, Docker Engine, or Podman installed on your workstation
- A GitHub account (personal or work)
- A BrightSign player prepared by your workshop facilitator (insecured, SSH enabled)
| Module | Topic | Duration |
|---|---|---|
| 0 — Introduction | What extensions are, system architecture, what you will build | 15 min |
| 1 — Environment Setup | Network setup, player connectivity, clone template, start container | 30 min |
| 2 — Understand the Template | Template structure, bsext_init, packaging scripts | 20 min |
| 3 — Access the Player | SSH, scp, install, verify — facilitator-led demo | 15 min |
| 4 — Build | Write and compile the extension binary | 45 min |
| 5 — Package | Produce the deployable squashfs ZIP | 15 min |
| 6 — Deploy | Transfer, install, and start on a live player | 20 min |
| 7 — Verify | Confirm the extension is running and serving HTTP | 15 min |
| 8 — Iterate | Change, rebuild, redeploy — the daily dev loop | 20 min |
| 9 — HTML App | Build a BrightScript app that displays extension data on screen | 30 min |
| 10 — Production | Signing, production checklist, next steps | 15 min |
| Cleanup | Uninstall extension, factory reset player | 5 min |
All build tools (JDK 11, Maven, Go, Node.js, squashfs-tools) are pre-installed in the workshop container. Pull or update it with:
make pull-container
Or directly:
docker pull ghcr.io/brightdevelopers/bs-extension-workshop-devenv:latest
Start the container from inside your cloned extension repo:
macOS / Linux — Docker:
docker run -it --rm \
-v "$(pwd):/workspace" \
-e HOST_UID=$(id -u) \
-e HOST_GID=$(id -g) \
ghcr.io/brightdevelopers/bs-extension-workshop-devenv:latest
macOS / Linux — Podman (rootless):
podman run -it --rm \
-v "$(pwd):/workspace" \
--userns=keep-id \
ghcr.io/brightdevelopers/bs-extension-workshop-devenv:latest
Windows (PowerShell) — Docker:
docker run -it --rm `
-v "${PWD}:/workspace" `
ghcr.io/brightdevelopers/bs-extension-workshop-devenv:latestSee facilitator-guide/README.md for pre-workshop setup, timing, and common failure fixes.
- extension-template — the starter repo used throughout this workshop
- brightsign-npu-gaze-extension — production extension built on the same template
Apache 2.0 — see LICENSE.