Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

nodecg

nodecg1.7kMIT2.6.4TypeScript support: included

Dynamic broadcast graphics rendered in a browser

graphics, nodecg, node, dynamic, broadcast

readme

NodeCG

NodeCG

Discord Build Status Coverage Status Docker Build Status

NodeCG is a broadcast graphics framework and application. It enables you to write complex, dynamic broadcast graphics using the web platform. NodeCG has no graphics or drawing primitives of its own. Instead, NodeCG provides a structure for your code and an API to facilitate moving data between the dashboard, the server, and your graphics. It makes few assumptions about how to best code a graphic, and gives you freedom to use whatever libraries, frameworks, tools, and methodologies you want. As such, NodeCG graphics can be rendered in any environment that can render HTML, including:

Don't see your preferred streaming software on this list? NodeCG graphics require a modern browser engine. If your streaming software's implementation of browser source uses a recent-ish browser engine, chances are that NodeCG graphics will work in it. You can check what version your streaming software uses for its browser sources by opening whatversion.net/chrome as a browser source.

Have questions about NodeCG, or just want to say 'hi'? Join our Discord server!

Documentation & API Reference

Full docs and API reference are available at https://nodecg.dev

Development

To contribute to NodeCG development:

# Clone the repository
git clone https://github.com/nodecg/nodecg.git
cd nodecg

# Install dependencies
npm install

# Run auto-rebuild + type-check on file changes
npm run dev

# Build all workspace packages
npm run build

# Run tests
npx vitest run

# Start NodeCG
npm start

For more details on contributing to NodeCG core, see the contributor guide on the official docs site

Goals

The NodeCG project exists to accomplish the following goals:

  • Make broadcast graphics (also known as "character generation" or "CG") more accessible.
  • Remain as close to the web platform as possible.
  • Support broadcasts of any size and ambition.

Let's unpack what these statements mean:

> Make broadcast graphics (also known as "character generation" or "CG") more accessible

Historically, broadcast graphics have been expensive. They either required expensive hardware, expensive software, or both. NodeCG was originally created to provide real-time broadcast graphics for Tip of the Hats, which is an all-volunteer charity fundraiser that had a budget of $0 for its first several years.

Now, it is possible to create an ambitious broadcast using entirely free software and consumer hardware. The NodeCG project embraces this democratization of broadcast technology.

> Remain as close to the web platform as possible

NodeCG graphics are just webpages. There is absolutely nothing special or unique about them. This is their greatest strength.

By building on the web platform, and not building too many abstractions on top of it, people developing broadcast graphics with NodeCG have access to the raw potential of the web. New APIs and capabilities are continually being added to the web platform, and NodeCG developers should have access to the entirety of what the web can offer.

> Support broadcasts of any size and ambition

NodeCG's roots are in small broadcasts with no budget. More recently, NodeCG has begun seeing use in increasingly elaborate productions. We believe that one set of tools can and should be able to scale up from the smallest show all the way to the biggest fathomable show. Whether you're using OBS for everything, or a hardware switcher with a traditional key/fill workflow, NodeCG can be a part of any broadcast graphics system.

Maintainers

Designers

Acknowledgements

changelog

Changelog

All notable changes to this project will be documented in this file. See standard-version for commit guidelines.

2.6.1 (2025-06-24)

Bug Fixes

Dependencies

  • The following workspace dependencies were updated
    • dependencies
      • @nodecg/cli bumped from 2.6.0 to 2.6.1
      • @nodecg/database-adapter-sqlite-legacy bumped from 2.6.0 to 2.6.1
      • @nodecg/database-adapter-types bumped from 2.6.0 to 2.6.1
      • @nodecg/internal-util bumped from 2.6.0 to 2.6.1

2.6.0 (2025-06-20)

Features

  • move CLI to own package (#827) (517e7d0)
  • move default database adapter to own package (#821) (2527f15)
  • separate database adapter types into own package (#814) (a8ebaed)

Bug Fixes

  • ci: restructure publish jobs for canary releases and standard releases (b595ac0)
  • deps: bump better-sqlite3 and typeorm (#850) (926c2cc)
  • ensure 'include-component-in-tag' is set to false in release-please config (f95e984)
  • release: combine release with "component" (#851) (305c257)
  • release: update component references for workspaces to use 'nodecg' (e927a73)
  • release: use component names (#855) (3f31d23)
  • release: use linked-versions (#854) (fdd6bd8)

Dependencies

  • The following workspace dependencies were updated
    • dependencies
      • @nodecg/cli bumped from 0.0.0 to 2.6.0
      • @nodecg/database-adapter-sqlite-legacy bumped from 0.0.0 to 2.6.0
      • @nodecg/database-adapter-types bumped from 0.0.0 to 2.6.0
      • @nodecg/internal-util bumped from 0.0.0 to 2.6.0

2.5.3 (2025-01-20)

Bug Fixes

  • cli: use npm to list available NodeCG versions (#810) (fcb6e2b)

2.5.2 (2025-01-20)

Bug Fixes

  • cli: start command import path on windows (#805) (bf6aed0)
  • server-replicant: error handling for unexpected files in bundles (#808) (34a374b)

2.5.1 (2025-01-19)

Bug Fixes

  • publish linux arm image and enable coverage (#800) (b6a5550)

2.5.0 (2025-01-18)

Features

2.4.3 (2025-01-06)

Bug Fixes

2.4.2 (2025-01-06)

Bug Fixes

  • deps: use npm-run-all2 and fix chalk reference (#789) (df0f314)
  • docker: remove bundles and cfg from VOLUME (#791) (ae71cc5)

2.4.1 (2025-01-05)

Bug Fixes

2.4.0 (2025-01-02)

Features

  • database adapter system (#763) (866aa55)
  • include CLI, deprecating nodecg-cli in favour of nodecg (#779) (7f50ba5)

2.3.2 (2024-12-22)

Bug Fixes

  • reconnect socket in standalone dashboard (#769) (d171e87)

2.3.1 (2024-12-22)

Bug Fixes

2.3.0 (2024-12-21)

Features

Bug Fixes

  • remove Node 16 from supported runtime (5838cdc)
  • update better-sqlite3 (8788701)

Reverts

2.2.5 (2024-11-30)

Bug Fixes

  • bugs preventing replicants in workers (#756) (824f9a9)

2.2.4 (2024-10-12)

Bug Fixes

  • types-release: force update package.json version (5db1c3a)

2.2.3 (2024-10-10)

Bug Fixes

  • Add '@types/ws' package to fix types package build (#751) (0c71ddd)
  • Set cheerio version to avoid getting breaking changes in 1.0 release (e069c96)

2.2.2 (2024-06-29)

Bug Fixes

  • dashboard: iframe lazy loading (#729) (a3dc36c)
  • ensure assignable sounds are set correctly (#736) (42d41a6)
  • ensure sounds work on dashboard panels (#735) (f9d346b)
  • types: target ES2015 in generated typings (#732) (fa977b3)

2.2.1 (2024-01-14)

Bug Fixes

  • login: use correct logic for redirect URL protocol (50551b2)

2.2.0 (2024-01-05)

Features

  • deps: update dependencies (eaf0d07)
  • engines: use package.json for supported Node.js versions (#723) (e27df66)

Bug Fixes

  • deps: update typeorm (#722) (3d02d00)
  • json-schema: prevent ajv to throw on invalid JSON schema (#725) (9d1af91)
  • types: use declarationDir to generate types (#716) (18b1af2)

2.1.12 (2023-11-16)

Bug Fixes

  • iframe-resizer content window injection (#679) (78f80ba)
  • config loader: handle when cfg is symlink (#670) (50f0c11)
  • replicants: remove custom schema properties (#676) (6ae4a49)

2.1.11 (2023-06-28)

Bug Fixes

2.1.10 (2023-06-26)

Bug Fixes

  • always emit full user object on login event; only emit login and logout events for allowed users (#666) (9da8b02)

2.1.9 (2023-06-24)

Bug Fixes

  • validation of URI in json schema for certain spec drafts (#663) (4076a5d)

Performance Improvements

  • replace deep-equal and clone with fast-equals and klona/json (#661) (a4cc07b)

2.1.8 (2023-06-12)

Bug Fixes

2.1.7 (2023-06-06)

Bug Fixes

  • support uploading files with non-ascii characters in their filenames (#657) (318332e)

2.1.6 (2023-06-05)

Bug Fixes

2.1.5 (2023-05-20)

Bug Fixes

  • avoid using process.env.browser to avoid real-world env conflicts (#649) (e2c80e0)

2.1.4 (2023-05-15)

Bug Fixes

  • fix error when running NodeCG after installation as a dependency via npm (#647) (3aaaae8)

2.1.3 (2023-04-24)

Bug Fixes

2.1.2 (2023-04-02)

Bug Fixes

  • server: prevent another possible (but unreproduced) directory traversal attack (#643) (ca2208c)

2.1.1 (2023-03-26)

Bug Fixes

  • server: don't crash when /instance/**/*.html route 404s (#636) (c59adc8)
  • server: prevent directory traversal attacks (#639) (0646587)

2.1.0 (2023-03-25)

Features

Bug Fixes

  • allow socket authentication with a token only (#635) (0241071)

2.0.4 (2023-03-24)

Bug Fixes

2.0.3 (2023-03-24)

Bug Fixes

  • mark more required deps as prod deps (#627) (bc2875a)

2.0.2 (2023-03-24)

Bug Fixes

  • include templates in server build outputs (#625) (cdd8bf2)
  • make node-fetch-commonjs a prod dep (#623) (72610c1)

2.0.1 (2023-03-23)

Bug Fixes

2.0.0 (2023-03-23)

⚠ BREAKING CHANGES

Features

1.9.0 (2022-03-30)

Features

Bug Fixes

  • dashboard: correct URL for obs drag when login is enabled (#585) (9046287)
  • dashboard: fix the currently selected workspace not being highlighted on first page load (#538) (3442d76)
  • socket: correct maxListeners setting to prevent memory leak (#579) (1b0611b)
  • soundcue: fix soundcue files not persisting (#584) (eeac8c4)
  • types: add/tweak types for replicant/readReplicant (#545) (f391281)
  • types: correct typing for declared replicants (#596) (dea9c15)

1.8.1 (2021-03-10)

Bug Fixes

  • better log formatting and configurable timestamps (#575) (dd323cd)
  • deps: fix some vulnerabilities of dependency (81c9ee2)

1.8.0 (2021-03-08)

Features

  • replicants: remove local storage size quota (#574) (10bfd6f)

Bug Fixes

  • types: add persistenceInterval option (#572) (84c3c46)

1.7.4 (2020-12-11)

Bug Fixes

1.7.3 (2020-12-11)

Bug Fixes

  • deps: update express-bare-module-specifiers (bd1d925)

1.7.2 (2020-11-20)

Bug Fixes

  • deps: switch json-schema-lib repo (7b7c7c1)

1.7.1 (2020-10-02)

Bug Fixes

1.7.0 (2020-09-20)

Bug Fixes

  • deps: update dependencies through npm audit (a871f4b)

Features

  • dashboard: Add graphic obs drag parameters (#561) (5c5a833)

1.6.1 (2020-04-30)

Bug Fixes

  • auth: send Client-ID header on all Twitch API requests (#550) (12d2a5e)

1.6.0 (2020-02-24)

Bug Fixes

Features

1.5.0 (2019-08-06)

Features

1.4.1 (2019-07-16)

Bug Fixes

  • instance-errors: Update help text & design (#494) (7fcf6ee)
  • types: Add sendMessageToBundle instance method to type definitions (#480) (a15fe3b)
  • zeit_pkg: fix pkg'd executables not working when compiled on a drive other than C: (#498) (3ae9b75)

Build System

  • docker: don't ignore types folder (4c0e65c)

1.4.0 (2019-04-19)

Features

1.3.2 (2019-03-06)

Bug Fixes

  • replicants: ensure opts.defaultValue always get populated (#467) (73fd909)

Features

  • typedef: Export more types in browser.d.ts (#465) (0455036)

1.3.1 (2019-02-03)

Bug Fixes

  • dashboard: ensure the default workspace is first (#458) (18fdbe6)
  • dashboard: inject default styles before user styles (#464) (5981d9e)
  • injectscripts: don't inject client_registration into busy.html or killed.html (0a63202)
  • package: fix error when running in a zeit pkg (38b01e2)
  • package: include babel-plugin-bare-import-rewrite in zeit packages (9813da3)
  • replicant-schemas: fix local refs not being resolved when appended to a file ref (0cd1673)
  • router: delay 404 resolution (#463) (23e5772)

1.3.0 (2018-11-19)

Bug Fixes

  • dashboard: Sort all dashboard workspaces alphabetically (#450) (786f23f)

Features

  • login: add password hashing support for local auth (#446) (cf6192b)
  • rewrite bare module specifiers (#454) (4500ccd)

1.2.2 (2018-10-30)

Bug Fixes

  • update Node.js version check (#438) (086621d)
  • types: remove optional parameters in callback (81b0a11)

Features

  • security: add support for passphrase for SSL key (#437) (c444d9b)
  • replace Pug by Lodash with cache (83404d1)
  • TypeScript: Add NodeCG API TypeScript Type Definition (#432) (9372ca4)

1.1.3 (2018-08-05)

Bug Fixes

  • dashboard: also target root html for theme import (0948f5f)
  • dashboard: fix text and icon colors of Asset upload dialog (d1d3a45)
  • dashboard: implement missing dark theme for bundle dialogs (d14158f)
  • package: roll node-localstorage to v1.3.1 (56d8bb7)

1.1.2 (2018-07-19)

Bug Fixes

  • dashboard: fix graphic instances not appearing when using a bundle that is not a git repo (54cfcd6)

1.1.1 (2018-07-19)

Bug Fixes

  • dashboard: fix missing background color on graphics collapse toggle button (9e6bc4d)
  • package: include schemas folder in zeit pkg builds (c38e463)

1.1.0 (2018-07-19)

Features

  • api: add nodecg.bundleGit object (#418) (dfe0b95)
  • api: add nodecg.bundleVersion to api (#459) (170142b)
  • api: introduce bundles replicant (#421) (94d0b1d)
  • dashboard: implement dark theme (#425) (0dafe4e)
  • dashboard: implement redesigned graphics tab with refresh buttons (#420) (215f489)

1.0.0 (2018-07-11)

Bug Fixes

  • remove undocumented and non-functional panelClick event (1c20d58)
  • remove undocumented dialog-confirm and dialog-dismiss attribute click handlers (cab06b6)
  • assets: fix "can't set headers..." error (#411) (518cf21)
  • dashboard: remove useless and busted-looking "info" dialog from panels (22499bd)
  • login: use the New Twitch API (#413) (6696231)
  • mounts: put mount routes behind an auth check (c99fa85)
  • sounds: remove undocumented customCues system (efe877e)

Features

  • api: add support for intra-context messaging (#410) (3a3acf7)
  • api: support multiple listenFor handlers (#403) (f19c79b), closes #298
  • bundle-manager: blacklisted bundle directory names (#357) (68e7add)

BREAKING CHANGES

  • dashboard: The undocumented [dialog-confirm] and [dialog-dismiss] attribute click handlers have been removed.
  • dashboard: The undocumented (and broken) panelClick event has been removed.
  • api: sendMessage can now trigger listenFor handlers in the same context (extension, webpage, etc).
  • login: The format of Twitch auth scopes has changed. Please see https://dev.twitch.tv/docs/authentication/#scopes for documentation on this new format.
  • login: Twitch auth now uses the "New Twitch API", instead of the deprecated "v5" API.
  • api: A given context (server, client) can now declare multiple listenFor handlers for a given message. Handlers are called in the order they were registered.

However, a server-side listenFor handler must be careful to only call an acknowledgement once. Attempting to call an acknowledgement more than once will throw an error.

Your server-side code can check if an acknowledgement has already been called/handled by checking its .handled property.

Example:

nodecg.listenFor('example', (data, ack) => {
  if (ack && !ack.handled) {
    ack();
  }
});
  • sounds: The undocumented customCues system has been removed.

0.9.12 (2018-07-05)

Bug Fixes

  • bundles: avoid throwing exception on Unicode BOM (#401) (84a4555)
  • package: use npm audit to fix a lot of vulnerability warnings (1b9dc96)

Features

  • api: add NodeCG.waitForReplicants method (b8d3ed1)
  • auth: add basic local authentication (#390) (54bbcf6)

0.9.11 (2018-05-03)

Bug Fixes

  • dashboard: always send 'dialog-dismissed' when clicking outside the dialog (#385) (da30fe1)
  • dashboard: support the nodecg-dialog attribute within shadow roots (#384) (fc62adf)
  • logger: improve formatting of errors reported to Sentry via the .error method (cb6426e)
  • package: fix Steam auth not working (59627a9)
  • package: update make-fetch-happen to version 4.0.1 (#389) (7a44ca1), closes #382
  • server: prevent 'can't set headers after they are sent' error spam (#387) (58357bf)

0.9.10 (2018-03-08)

Bug Fixes

  • package: synchronize package-lock.json (82a6e0b)
  • package: update SoundJS to v1.0.0 (ba26fc8), closes #371
  • replicants: bind methods on objects when returning them via the proxy (1987ce4)

Features

  • bundles: avoid crash when a bundle becomes invalid after a change (#374) (4d42335)

0.9.9 (2018-01-18)

Bug Fixes

  • extensions: improve logging when an extension fails to mount (e7f2a90)
  • login: Redirect to /login after destroying session (#355) (30aa4ba)
  • package: update fs-extra to version 5.0.0 (#352) (629cc45)
  • replicator: don't crash when a an error occurs while updating the persisted value of a replicant (54baa0e)
  • replicator: use mkdirp when ensuring that the db/replicants folder exists (7b952f4)

Features

  • add mounting feature (07210b0)
  • bundles: support loading assets from node_modules (#358) (74915d7)
  • config: always create cfg dir if it does not exist (49a9255)
  • package: add "bin" prop to package.json (0c8d0b6)
  • package: add nsp compliance (1b0da9b)
  • add support for zeit pkg builds (#362) (acb168c)

0.9.8 (2017-10-19)

Bug Fixes

  • bundle-manager: don't attempt watch *.lock files for changes (269f3d0)
  • package: update JSDoc (a1a81c5)
  • package: update nyc (13256a8)
  • replicants: support schemas with internal $refs (ee1c394)

0.9.7 (2017-09-12)

Bug Fixes

  • api: detect and throw when an object is assigned to multiple Replicants (2fbaee3)
  • dashboard: remove extra margins that could appear in bundle dialogs (7bb2f9f)

0.9.6 (2017-09-07)

Bug Fixes

  • remove debug print (22e957b)
  • sentry: fix git information not being updated during runtime (1d34d4b)

0.9.5 (2017-09-07)

Bug Fixes

  • dashboard: fix Sign Out button being visible when login security is disabled (aa12c54)

Features

  • sentry: include git information about all loaded bundles when reporting errors to sentry (431274b)

0.9.4 (2017-08-31)

Bug Fixes

  • config: reduce the number of cases where a bundle's config is rejected when it shouldn't be (e62de24)
  • replicants: improve parsing of schema $refs (6364396)

0.9.3 (2017-08-29)

Bug Fixes

  • config: properly load baseURL param (8c3d76b)

0.9.2 (2017-08-28)

Bug Fixes

  • package: make fs.extra a production dependency, instead of a devDependency (5ac2c88)

0.9.1 (2017-08-28)

Bug Fixes

  • bundle-manager: fix case where changes to a bundle's manifest could get ignored (882f406)
  • bundle-manager: remove debug print (91546e2)
  • replicants: improve how revision mismatch errors are logged to console on the client (e99dcbc)
  • package: fix version number in package.json (this prevented most bundles from loading - whoops!)

0.9.0 (2017-08-27)

Bug Fixes

  • api: print more useful error message when a replicant fails schema validation due to having additional properties (037709a)
  • assets: improve appearance of dialogs. refactor back and frontend code to allow for potential future features. (7025d51), closes #309
  • config: default host to 0.0.0.0 instead of localhost (7a3276d)
  • config: default baseURL to localhost when host is 0.0.0.0 (3a4496b)
  • dashboard: add raised attribute to KILL button on single-instance graphics (1e116db)
  • dashboard: close drawer when viewport increases to a wide layout (20bafef), closes #282
  • replicants: fixed a case where re-assigning a nested object could result in a broken replicant (9e72b86)
  • replicants: harden logging of validation errors (250b3fe)
  • replicants: prevent .once('change') listeners from potentially being called twice (78a11c8), closes #296
  • replicants: properly load schemas when schemaPath is absolute (4201906)
  • replicants: set status to "declared" before emitting the post-declare change event (a62d25d)
  • soundCues: fix case where valid soundCues could fail schema validation (f0c17ba)

Code Refactoring

Features

  • api: add nodecg.unlisten method (ea45b3f)
  • api: expose Logger class (5882dc4)
  • api: if an acknowledgement is called with an error as the first callback, serialize that error (#300) (1c05f81)
  • api: make client-side sendMessage return a Promise (#301) (fe93c73), closes #297
  • config: add support for whitelisted loading of bundles (31533a8)
  • config: added --bundlesEnabled and --bundlesDisabled command-line arguments to specify a comma-separated list of bundle names to either whitelist or blacklist for loading on startup. Very useful when combined with things such as Run Configurations in your IDE of choosing.
  • dashboard: add "open in standalone window" button to panel headers (ba077c0)
  • dashboard: add default body background color style to panels (3433529)
  • dashboard: add support for "fullbleed" workspaces, which have one single panel that takes up the entire dashboard
  • dashboard: add support for multiple tabs of panels, called "workspaces". See the Manifest tutorial (specifically the nodecg.dashboardPanels section) for more info.
  • dashboard: compatability with browsers other than Chrome has been greatly improved
  • dashboard: re-design dashboard with tabbed navigation (8214b43)
  • dashboard: show a much shorter and easier to read URL for each graphic on the Graphics page (5b91af1)
  • replicants: add .validationErrors property (59f3c82)
  • replicants: log a warning when attempting to access .value before the Replicant has finished declaring (#274) (293acf5), closes #265
  • replicants: support external $refs in schemas (3c34450)
  • add convenience 'shared' directory (#295) (63a1119)
  • add Sentry integration for error tracking (#305) (92cd540)
  • adopt new routing style (/bundles/:bundleName/*) (1663670)
  • log unhandled promise rejections if Sentry is not enabled (59dc75e)

  • api: add nodecg.unlisten method (ea45b3f)

  • api: expose Logger class (5882dc4)
  • api: if an acknowledgement is called with an error as the first callback, serialize that error (#300) (1c05f81)
  • api: make client-side sendMessage return a Promise (#301) (fe93c73), closes #297
  • config: add support for whitelisted loading of bundles (31533a8)
  • config: added --bundlesEnabled and --bundlesDisabled command-line arguments to specify a comma-separated list of bundle names to either whitelist or blacklist for loading on startup. Very useful when combined with things such as Run Configurations in your IDE of choosing.
  • dashboard: add "open in standalone window" button to panel headers (ba077c0)
  • dashboard: add default body background color style to panels (3433529)
  • dashboard: add support for "fullbleed" workspaces, which have one single panel that takes up the entire dashboard
  • dashboard: add support for multiple tabs of panels, called "workspaces". See the Manifest tutorial (specifically the nodecg.dashboardPanels section) for more info.
  • dashboard: compatability with browsers other than Chrome has been greatly improved
  • dashboard: re-design dashboard with tabbed navigation (8214b43)
  • dashboard: show a much shorter and easier to read URL for each graphic on the Graphics page (5b91af1)
  • replicants: add .validationErrors property (59f3c82)
  • replicants: log a warning when attempting to access .value before the Replicant has finished declaring (#274) (293acf5), closes #265
  • replicants: support external $refs in schemas (3c34450)
  • add convenience 'shared' directory (#295) (63a1119)
  • add Sentry integration for error tracking (#305) (92cd540)
  • adopt new routing style (/bundles/:bundleName/*) (1663670)
  • log unhandled promise rejections if Sentry is not enabled (59dc75e)

Performance Improvements

BREAKING CHANGES

For detailed instructions on how to migrate your v0.8 bundles to v0.9, check out the tutorial on NodeCG.dev

  • NodeCG no longer automatically installs the npm and bower dependencies of installed bundles. Users must do this manually.
  • replicants: Replicants now set their state to declared before they emit their post-declare change event. This is unlikely to break any existing code, but it is technically a breaking change.
  • The Rollbar integration for error tracking has been removed, and has been replaced with a Sentry integration.
  • api: If the first argument you provide to a message acknowledgement is an Error, it will be serialized instead of being sent as an empty object.
  • dashboard: Removed most of the helper styles and classes, such as nodecg-configure, which were being injected into panels. Most of it would not work in Polymer 2 without extra effort.
  • Old /panel and /graphics routes no longer work. You must update all routes to the new /bundles/:bundleName/* format.

0.8.9 (2017-03-08)

Bug Fixes

  • login: fix case where an invalid socketToken cookie would prevent a user from ever being able to log in (7392249)

0.8.8 (2017-03-03)

Bug Fixes

  • auth: fix case where token auth via cookies would fail when host was set to 0.0.0.0 (#255) (cb89d25)
  • sounds: persist the soundCues replicant to disk (#258) (775c158)

Features

  • add NODECG_ROOT environment variable (#257) (ec0fcb1)

0.8.7 (2017-03-02)

Bug Fixes

  • api: throw an error instead of just logging a warning when adding a duplicate listenFor handler (187b601)
  • dashboard: fix panels all being moved to top left corner when window is resized while a non-Dashboard tab is selected (89812f4), closes #217
  • ensure NodeCG binds to the host and port provided in cfg/nodecg.json (thanks @vibhavp!) (fa5b57e)

Features

  • sound: add support for user-defined sound cues (#254) (05878eb)
    • This is an advanced and currently undocumented feature. It requires much additional code within a bundle to be useful. We do not recommend trying to use it at this time.

0.8.6 (2017-01-29)

Bug Fixes

  • api: call encodeURIComponent on "namespace" and "name" when autogenerating schemaPath (0fd2a19)
  • assets: avoid thrashing asset replicants on startup (1250dd4)
  • dashboard: fix dialog-dismiss and dialog-confirm buttons sometimes not working (5f06166)
  • replicant: fix potential case where a proxied Array with custom methods wouldn't behave as expected (d772f05)
  • replicants: fix case where Replicants with a value of undefined would not emit change events after declaration (a218dbe), closes #228
  • fix favicon not being served (3dcdc83)
  • rollbar: add reporting of unhandled promise rejections (c1a33b4)
  • rollbar: fix browser-side Rollbar not receiving the correct access token from the config (2b810fd)
  • single_instance: fix "Kill" buttons always being visible, even if no instance was open (6f4bc77)

Features

  • add ability to disable bundles via config (#248) (58480bd)
  • auth: secure /graphics routes (#249) (975c17f)
  • config: add "exitOnUncaught" config param (a77bccf)
  • rollbar: automatically report errors logged with nodecg.log.error to Rollbar, if Rollbar is enabled (7b19eaa)

0.8.5 (2016-10-12)

Bug Fixes

  • dashboard: fix "copy url" button sometimes wrapping to two lines and looking bad (6047a52)
  • dashboard: hide "Settings" menu button if there are no settings to manage in the current configuration (4f304eb)
  • replicants: fix case where an unproxied object could be leaked via the change event after reconnecting to Socket.IO (9e39d45)

Features

  • replicants: add result property to operations (5f6e86f)
  • replicants: provide better error messages when a replicant fails schema validation (daddf64)
  • sounds: add optional channels param (f33a165)

0.8.4 (2016-09-29)

Bug Fixes

  • dashboard: replace usage of cn-jsurl bower lib with new URLSearchParams API (ea39f50)
  • docker: remove VOLUME statement for db folder (2b8ecfe)
  • server: catch and re-throw otherwise uncaught socket.io errors (1fc9a18)
  • server: fix debug message logging string as number (eac7f63)
  • server: improve rollbar catching of socket.io errors (e8a3443)
  • sounds: fix error when soundFiles is null during option generation for Mixer panel (19226b2)
  • sounds: fixed sounds category not showing in assets when there are no other asset categories defined. (#220) (b744fda), closes #208

Features

  • replicants: add optional validation of replicant values via schemas (26715fc)

0.8.3 (2016-06-23)

Bug Fixes

  • docker: use abs path for db volume (8480a58)
  • replicants: fixed unexpected behavior after modifying the index of an object inside an array replicant (2127dc4)

Features

  • login: add forceHttpsReturn config param (d952c95)

0.8.2 (2016-06-11)

Bug Fixes

  • pages now autodetect what URL/port to open a socket to (7eb1a3e), closes #125

0.8.1 (2016-06-10)

Bug Fixes

  • dashboard: update nodecg-replicants (c537e36)
  • replicants: ensure that already proxied objects aren't re-proxied (93f5539)
  • replicants: fix case where an unproxied object could sometimes be returned (b1dc39b)
  • replicants: fix client-side assignment being processed twice (e52b7cb)
  • replicants: fix detection of changes in late-assigned objects (053605f), closes #181
  • replicants: fix objects inserted into arrays via array insertion methods not being proxied (4e2d941)
  • server: update Node.js v6 check from 'warn and continue' to 'error and exit' on lower versions (2fdb534)
  • update nodecg-replicant to 0.5.8 (29323b0)

Features

  • dialogs: improve responsiveness of dialogs (204c8aa)
  • dialogs: only add h2 title if panel.title has length (0696088)

0.8.0 (2016-05-06)

Bug Fixes

  • api: throw error when handler is not a function (9804a84)
  • dashboard: fix "Copy Url" buttons on graphics page (3ed107f)
  • dashboard: fix invalid javascript on standalone panels (fcba09b)
  • panels: panels are now served by filename rather than panel name (9f3e54b), closes #144
  • rollbar: check for config.rollbar.enabled before activating rollbar (cffb1a3)
  • sounds: throw more informative errors when attempting to use sound api methods with no soundCues (e159749)
  • tests: fix typo in error message (a6a0f99)
  • tests: test standalone panels, ensure autodeps are enabled (366422d)

Code Refactoring

  • replicants: use Proxy instead of Object.observe (#163) (05ec891)

Features

  • rollbar: add support for automatically reporting uncaught exceptions to Rollbar (80f0ea6)
  • sounds: add sounds feature, rename uploads to assets, add categories to assets (52a9045)

BREAKING CHANGES

  • replicants: The order of Replicant change event arguments has been swapped. newVal is now the first argument, oldVal is the second argument. Be sure to update all of your change event handlers accordingly.

        To migrate, follow the example below:
    
        Before:
    
        ```
        myRep.on('change', function (oldVal, newVal) {
            // do work
        });
        ```
    
        After:
    
        ```
        myRep.on('change', function (newVal, oldVal) {
            // do work
        });
        ```
  • replicants: The third Replicant change event argument has been changed. Previously it was changes, an array of Object.observe change records. It is now operations, an array of operation records in NodeCG's internal format. This format is likely to continue changing as we figure out what works best. Any further changes to this format will be considered breaking.

  • replicants: WeakMap and Object.observe shims have been removed. This probably won't affect anyone, as any browser that supports Proxy also supports WeakMap, but be aware of it.
  • panels: the routes for panels are now /panel/:bundleName/:panelFile as opposed to /panel/:bundleName/:panelName.
  • sounds: uploads are now called assets, and their manifest format has changed

0.7.7 (2016-03-31)

Bug Fixes

  • api: fix API erroring on page load (fec7793)

0.7.6 (2016-03-31)

Bug Fixes

  • dashboard: fix "copy key" button on settings page (9182534)
  • dashboard: fix panels appearing over the top of the loading spinner (6529248)
  • deps: bump @nodecg/bundle-manager dep, forgot to in last release (4580bd2)
  • login: improve reliability of login lib (4e37a13)
  • tests: remove reference to wrench (a9ea8d9)

Features

  • all: update socket.io to 1.4.5, improves performance. (59d12c2)
  • dashboard: add loading spinner to panels (dbc0466)
  • dashboard: close the drawer panel when selecting an item (decc77f)
  • dashboard: emit dialog-opened event in a dialog's document when it opens (bb527eb)
  • dashboard: show resolution on graphics page (8ab9335)

0.7.5 (2016-03-13)

Bug Fixes

  • dashboard: don't apply background color to disabled paper-button elements when using builtin nodecg style classes (a34fc9d)

Features

  • api: deprecate nearestElementWithAttribute, replace usage with element.closest() (45b272c), closes #141
  • bundles: Add configuration values allowing to disable bundle autodeps (4a99774)
  • caching: disable caching (a70b9be)
  • npm: only install production dependencies for bundles (be0e74c)

0.7.4 (2016-03-01)

Bug Fixes

  • api: fix trace logging for client-side message reception (dc71366)
  • dashboard: assign a more unique ID to the main paper-toast element (00f5959)
  • dashboard: remove default opacity style of disabled paper-button elements (d6e5baa)
  • uploads: fix case where changes to the first file caused duplication (4e7a61f)

Features

  • bundleConfig: defaults from configschema.json are now automatically applied to nodecg.bundleConfig (a4e28fa)
  • uploads: bundles can specify allowed file types via uploads.allowedTypes (7a1a775)
  • uploads: debounce change events by 500ms (91d151c)

0.7.3 (2016-02-20)

Bug Fixes

  • uploads: prevent crash related to uninstalled bundles (9d17dc3)

Features

  • dashboard: hide panel controls until mouseover (7855a0b)

0.7.2 (2016-02-17)

Bug Fixes

  • dashboard: fix loading of builtin polymer element scripts (52cc0fc)
  • dashboard: remove unintentionally added "uploads" page (e2eb80b)
  • scripts: Remove trailing comma from package.json (6304457)
  • tests: Have Travis install grunt before running tests (d49091a)

Features

  • uploads: add file upload system (e109edf), closes #104

0.7.1 (2016-01-30)

0.7.0 (2016-01-19)

0.6.2 (2015-09-30)

0.6.1 (2015-07-30)

0.5.1 (2015-02-19)

0.4.8 (2015-02-16)

0.4.6 (2015-02-14)

0.4.3 (2015-01-20)

0.4.2 (2015-01-19)

0.4.1 (2015-01-19)

0.3.0 (2014-12-18)

0.2.1 (2014-11-16)

0.2.0 (2014-11-16)

0.1.3 (2014-11-09)

0.1.2 (2014-11-05)

0.1.1 (2014-11-05)

0.1.0 (2014-11-05)

0.0.1 (2014-10-07)