Release information for libcct


0.18.0-rc1 (Dec 19, 2016)

This version introduces breaking changes to the handling of IDs. Previously IDs used the <token><localId>:<serverName> format, now they just use <localId>. This greatly simplifies the use of IDs, and especially aliases.

Base API

  • [API CHANGE] User IDs, room IDs, event IDs and aliases are no longer prefixed with the type tag ('@', '!', '$', '#'). They are also no longer suffixed with the server name, meaning that IDs are now plain strings and identical to the input in the case of users and aliases. Before this change a user registered with the username 'tester' would get the '@tester:example-server', but now will simply be 'tester'. Because of this change, user.localId is redundant and has been deprecated with a warning.
  • PowerLevelsReader and PowerLevelsEdit have been affected by the above change, but they now transparently translate local user IDs when used in room.setPowerLevels or client.createRoom, meaning that existing code should still work.
  • Added room.creator, which exposes the user that created the room.
  • Client.auth now parses serverName from the credentials and is rejected if one that does not match is included in the authInfo.


  • [[API CHANGE]] RtcComponents have been changed in the same way as, meaning that peer IDs and own ID are now the raw user IDs.
  • FileRef.peer has been renamed to FileRef.peerId. The original is deprecated with a warning.
  • FileTransfer.peer has been deprecated with a warning. FileTransfer.peerId has been added and should be used instead.
  • Fixed a bug in the AttachData that caused deleted values to no synchronize properly when reconnecting calls.


0.18.0-rc2 (Dec 30, 2016)

This version adds common error handling to everything related to authentication, clients, rooms, and users. Earlier most methods just throw an Error with some kind of message, or forwarded the error response from the server. This has been replaced with well-defined errors that all have a name propertly that identifies the error, and a message that may assist in development. e.g. 'ConflictError' when trying to create a room with an existing alias, or 'GuestAccessError' when trying to join a room as a guest that doesn’t have guest access enabled.

Base API

  • [minor api change] All Client, Auth, Room and related methods now fail with well-defined errors.
  • All Auth methods are now supported in the NodeJS version.
  • [minor api change] Requests now either fail with RequestError, indicating that the request did not reach a server or was aborted, or with ResponseError, indicating that a response was received but failed to parse properly.
  • Fix registration with shared secret, which was broken towards the newest server versions.
  • Fix documentation for client.accountData.
  • [minor api change] room.isLoading is now always a boolean, instead of sometimes being undefined when it should be false.
  • room.allEventsLoaded is now true after creating a new room.
  • Properly clear client account data when logging out.
  • Properly reset room type and own power level when leaving room.
  • Client authorization errors that happen due to not being logged in are now always asynchronous if the method returns a promise.
  • Throw descriptive error when trying to upload media in NodeJS.
  • The creationContent option to client.createRoom can now by any JSON-serializable type.
  • Added room.creationContent, which returns the creationContent passed to client.createRoom.
  • Properly default room guest access rule to closed.
  • Fix for room.editPowerLevels returning a PowerLevelsEdit that couldn’t directly edit user power levels.
  • room.setTyping now properly resolves to the room itself.
  • Asynchronous client methods now return an error if logging out before the request has completed.


  • Fixed DummySource audio, which would previously just hang.
  • Added docs for DummySource


  • Added integration tests for NodeJS version.


0.18.0-rc3 (Jan 05, 2017)

Base API

  • All error types that are specific to the base api methods have been documented.
  • Make sure some previously unhandled error responses are handled properly.
  • The arguments to Auth.guest are now checked properly.
  • InvalidSessionError was removed.
  • Updated documentation related to user IDs, room IDs, event IDs, and room aliases.
  • Added room.passiveCall.
  • Removed documentation for deprecated user.localId.
  • AccountData now supports all JSON serializable types as value, not just objects.
  • Fix for powerLevelsEdit.userDefault not updating power levels properly.


  • All WebRTC related errors are now using the CctError base class and have been documented.
  • Added call.ownId which is your own id that peers will see as the call.peerId. It is also the same id as attached RtcComponents will see.
  • Fix for StreamPublisher and StreamSubscriber failing to communicate with the server.


0.18.0 (Jan 08, 2017)

This version introduces changes to ID and error handling, be sure you to read through the changes for 0.18.0-rc1 through 0.18.0-rc3.


  • The NodeJS version of the library now uses a separate http implementation based on the request module.
  • NodeJS checking is now done at build-time, avoiding some useless polyfills.

Base API

  • AuthorizationError has been renamed to NotAllowedError, both to be easier to distinguish from AuthenticationError and to be able to reuse it for WebRTC errors.
  • Fix client.uploadMedia which was broken in the previous version. It now throws authentication errors synchronously.
  • Handle error when trying to upload a too large file using client.uploadMedia.
  • client.uploadMedia can now be used in the NodeJS version.


  • DeviceSource and ScreenSource now use CctError as base for all errors, which have also been documented properly.
  • The actual cause of screen sharing errors in Firefox is now determined by looking at external factors.


0.18.1 (Jan 16, 2017)


  • Fixed an issue that would cause the JS thread to hang when using WebRTC plugin for IE and Safari.
  • Use Temasys’ AdapterJS with screensharing support.


0.18.2 (Jan 17, 2017)


  • Reverted the Temasys AdapterJS change.


0.18.3 (Jan 17, 2017)


  • Updated ChromeScreenSource to work better and throw meaningful errors when used with the latest version of the extension. It is backwards compatible with the old extension version. The new extension fixes the cancelling of the screen sharing dialog, and also allows the screen sharing type to be set. The ChromeScreenSource is used internally by the ScreenSource in Chrome.
  • The ScreenSource type option has now been properly documented and fixed, it’s now always a selection between default (falsy), 'screen', and 'window'.
  • CctError no longer throws an error if trying to set an empty string as the message, it does however still require the message to be a string.


0.18.4 (Jan 27, 2017)


  • Avoided an incompatability that would cause call creation to freeze the JavaScript thread in Internet Explorer.


  • Use relative link to cct.js when rewriting example urls, allowing locally hosted examples to be accessed via IP.


0.18.5 (Feb 05, 2017)


  • Fix fallback for peerConnection.removeStream being unavailable, fixing breakage in FireFox 51.
  • Fix for internal error when trying to emit ConnectionSignalingError from a call.

Base API

  • Use new server API version for authentication requests. Auth API is mostly unchanged, but adds InvalidPasswordError.


0.18.6 (Mar 21, 2017)

This version contains a workaround for a bug introduced in Chrome 57 that breaks all call media.

Base API

  • room.invitedBy should now always be set before emitting the room 'invite' event from the client.


  • Workaround for Chrome 57 bug that causes renegotiation to fail.
  • Calls can now the closed in call error handlers without triggering more errors.


0.18.7 (Mar 21, 2017)


  • Improved the workaround for Chrome 57 by reducing the renegotiation spam happening in some call setup flows.


0.18.8 (Mar 23, 2017)


  • Fix error in DummySource cleanup
  • Added workaround for Temasys plugin, which now also has the Chrome 57 bug.


  • Fix temporary link directory creation when serving on Windows.


0.18.9 (Mar 23, 2017)


  • Fix calls between Temasys and Firefox when Firefox is initiating.


0.18.10 (Mar 29, 2017)


  • Fix race condition when hanging up call, which could cause a hangup to look like a disconnect on the remote side.
  • Fix for disconnecting and reconnecting implicit HTML media sinks (connect(htmlElement)) when using Temasys plugin.
  • Updated docs for Firefox and Chrome screen sources to explain the sharing types.
  • Fix for ScreenSource video constraints being ignored when using Temasys plugin.


0.19.0-rc1 (Mar 23, 2017)

This version introduces a complete overhaul to the way conferences manage themselves internally. As the version stabilizes there should be significant improvements to most aspects of conferences. The most noticable changes should be the consistency of the members across the conference, and the speed at which disconnected conference members disappear.


  • ICE candidate handling now uses the log category ‘candidates’.

Base API

  • Added InvalidPasswordError as possible error when trying to set a password, and updated the logic for InvalidUsernameError.
  • Fall back to using console.log if console.debug isn’t available.
  • New default log handler for browsers other than Chrome and Firefox.
  • Documented custom log handler functions.


  • Moved unit and integration tests to common tests/ folder.
  • Updated README documentation for how to build, install, and test.
  • Argument checking functions now return the value being checked.
  • Added argument checking shorthand where a class instance can be used when checking arguments to the constructor.


0.19.0-rc2 (Apr 02, 2017)


  • Added device enumeration API at DeviceSource.enumerateDevices.
  • [minor api change] Removed screenSharingType from ScreenSource options. The screen sharing implementation is now selected with ScreenSource.implementation.
  • Added screen source enumeration API at ScreenSource.enumerateSource, which is only available in IE and Safari.
  • Added ScreenSource.isAvailable to check if screen sharing is supported.
  • Fix webRtcReady.
  • All concrete media sources are now stopped if the backing stream is inactivated.
  • Passive calls now ignore connection attempts from peers that have recently been disconnected, fixing a race condition that could result in no call being set up.
  • Better logging with more information and logging of relevant objects.
  • Fix an error where the conference topology tracking was not properly reset by the leader when a peer rejoined.
  • Fixed an internal conference error where a null state was being accessed.
  • All conference members now keep better track of users that want to join, in case they need to invite them in the future. This makes joining conferences more reliable.
  • Fix an bug that caused conference connections to be considered connected even though they weren’t.


  • Added separate devtools library that provides utilities that are typically not meant for production applications.


  • Added experimental RelayTreeVisualization for visualizing the relay tree in a conference.


0.19.0-rc3 (Apr 12, 2017)

Base API

  • Add missing return type in docs for ReadOnlyMap.get.


  • Fix a crash when using the Temasys WebRTC plugin and doing multiple implicit mediaNode.connect() calls to a stored media element reference.
  • The options object passed to DeviceSource and ScreenSource is no longer mutated, so the same object may be reused, as intended.
  • Fix false-positive error about invalid ICE server configurations.
  • Added new API for keeping track of other members of a conference, ConferencePeers, available through conference.peers.
  • Added conference.connectionState, which gives an overarching view of the state of the conference connections.
  • Conferences now emit a 'closed' event when closed.
  • Replaced experimental conference.switcher API with a new one that supports multiple different switching modes and doesn’t use room state for signaling.
  • Fix cleanup when conferences are closed by clearing some internal structures but also removing all event listeners.
  • Deprecated call.error member and event, and replaced with call.errorState. The original was removed because the event call.on('error', ...) would be emitted when the error was changed to null, which was pretty confusing. errorState is a more accurate name, as it is really a transient state that the call will try to recover from.
  • Major improvements to the reliability of the conference signaling, both when joining and while participating in conferences.
  • StreamPublisher.error and StreamSubscriber.error have also been replaced with errorState for the same reason.
  • Fix for not being able to parse media stream IDs from some versions of the Cordova WebRTC plugin.
  • Fix for data channel file transfers not working in Safari.


0.19.0-rc4 (Apr 13, 2017)


  • Updated ScreenSource to be compatible with new media source selection Temasys plugin.


0.19.0-rc5 (May 04, 2017)


  • Added voice activity based switching to conference switcher, through the 'manual/automatic' and 'automatic' modes.
  • Added workaround for freeze in ScreenSource when stopping a screen sharing stream where IE 11 was sharing itself.
  • Fix for options not being forwarded from room.startConference to the conference.
  • Added onSetupFilter and onTeardownFilter to WebAudioSource.
  • Fix for AudioContext not being passed on to WebAudioSource.onAudioSource.
  • Better handling of Firefox errors that forbid any form of access to properties.
  • Fix order in which MediaBroadcster remote source events are emitted


  • Added tools for sending test media streams and identifying received streams. New classes are MediaIdSource, MediaIdDetector, AudioIdSource, AudioIdDetector, VideoIdSource, and VideoIdDetector.


0.19.0-rc6 (May 16, 2017)

This versions adds a new DataChannel abstraction, as well as completely rewritten internal data channel abstraction layer. Data channels have earlier been possible to use through rtcPeer.createChannel, but they had a lot of shortcomings. The internal handlings of data channels was also pretty poor in places, e.g. transmitting files would frequently lock up if trying to send too many at the same time.

In general we found that working with cross browser WebRTC data channels is hard. There are a lot of hidden issues, and the API:s are a bit too low level for typical application development.

This new implementation hides a lot of complexity and differences in browser behaviour. It adds support for more types and larger messages, while mainting low latency for small messages. It also namespaces channels, making it possible for multiple RtcComponents to use negotiated channels without risk of collision. It also makes the connection more robust, by keeping channels alive, and detecting when they stop sending or receiving messages.


  • [API CHANGE] Added DataChannel, accessed through rtcPeer.createChannel and rtcComponent.rtcComponentReceivedChannel. This replaces the old API.
  • [API CHANGE] Removed rtcPeer.getLocalChannels and rtcPeer.getRemoteChannels.
  • [API CHANGE] Removed rtcPeer.sendMessage and rtcComponent.rtcComponentReceivedMessage, since the component messaging is no longer enough of an improvement on top of plain channels.
  • Removed workaround for old Chrome SDP creation bug that was fixed in a patch version.
  • Fixed a bug where conference members would not get information that they were removed from a conference due to inactivity, which would cause them to hang.
  • Slight tweak that in some cases speeds up the speed at which conference members receive updates about the conference state.
  • Simplified the mechanism for adding and removing clients in a conference, making the overall signaling more robust.
  • Improved the filtering of volume levels for conference participants, which makes the automatic switcher modes a lot smoother.


  • Build has been upgraded to Webpack 2, which reduces the library size by about 30kb before gzip.
  • Moved some dependencies back to devDependencies in package.json. Since we ship a compiled library they should not be downloaded when using the library as a dependency.