Starcounter 2.2.1: Over 50 enhacements + better UX, Polymer 1.6.1

September 28, 2016 1:31 pm Published by Leave your thoughts

September has never been so good! Today we are glad to announce a new version of our in-memory application platform: Starcounter 2.2.1 (Stable, September 19 2016). In addition to numerous new features, enhacements and optimisations, this release introduces a long-waited support for reconnecting with PuppetJs (aka Gmail-style reconnection message for your web apps on connection lost; implemented via a heartbeat patch). We have also improved stability of sessions and patches.

We appreciate support from our partners and users who helped with staging and testing the current release. There are upcoming articles to our blog regarding the fresh functionality in Starcounter 2.2.1. To better understand the cutting edge in blending (visual composition of apps), kindly check out our fresh post-release articles from Tomek Wytrębowicz:

Below is the list of improvements and changes for the release.


  • Better error message when a synonym target an illegal element
  • Made staradmin list apps support filtering on a specific database by giving -d|--database
  • Support for reconnecting with PuppetJs. puppetjs/puppetjs#71
  • Added versionnumber to generated files for TypedJSON to force regeneration when codegenerator is changed
  • Improved binding in TypedJSON from property in Json-by-example to property in code-behind with allowing using the same name (and type) to automatically bind
  • Added a new itemtemplate for Starcounter projects, HTML template with dom-bind
  • Added support for enums when a template for TypedJSON is created based on the type for a dataobject
  • Added possibility to configure how missing members (i.e. members that exists in the source, but not in the template) should be handled in TypedJSON when populating an instance. Options are to either throw an error or ignore and skip the member
  • ShadowDOM layout capabilities to <starcounter-include> shipped in /sys/ folder. Layout can now be served as DocumentFragment full of rich HTML & CSS features to be served with juicy-composition. It’s now the resposibility of Starcounter and particular app, not the Launcher. Launcher may only provide additional visual editing features to it.
  • Added HTTP header with disk location for static files


  • Fixed problems with dirtycheck in TypedJson after previous fix for databindings
  • Checking value after input is received and handled from client before skipping sending patch back to make sure that value is actually set
  • Setting transaction to none when a TypedJson object is removed from a stateful viewmodel to avoid usage of disposed transactions.
  • Changed handling of obtaining exclusive access to a session to try a few times and log a warning instead of failing directly.
  • Fixed a bug where parts of the viewmodel was not properly checkpointed after generating changes.
  • Fixed a nullreference when databinding was (incorrectly) used for an untyped array
  • Fixed a bug that caused the wrong appname being used in some cases when a TypedJson inputhandler was called
  • Removing existing items in an array when a new dataobject is set in TypedJSON
  • Viewmodel versioning (if enabled) is no longer reset when the public viewmodel on a session is changed
  • Removed temporary solution for htmlmerger from Json serializer and marked IResource.GetHtmlPartialUrl as obsolete
  • Decoding partial urls:s before calling Self.GET to allow url:s with parameters
  • Fixed a bug in the F# parser that parses JSON-by-example for TypedJSON to allow arrays in arrays
  • Added a check for responses so they doesn’t exceed a fixed maximum size to avoid buffer overruns and corrupting managed memory
  • Fixed problem with WebSocket disconnect procedure
  • Fixed bug in jsonmerger, that in some specific cases returned a response belonging to another app
  • Fixed buffer overrun when serializing really large double values in TypedJSON
  • Fixed so that Typed JSON code-behind classes can derive generic classes
  • Enabled Typed JSON code-behind classes with naked IBound-declaration
  • Fixed a bug where patches in a databound array were not properly generated, after an item was removed
  • Fixed a bug relating to reference failures sometimes showing with new Roslyn-based code-behind parser
  • Fixed a bug where a part of the jsontree was prematurely checkpointed when gathering changes for creating patches.
  • Allowing empty string as value in patches for properties with type long, decimal or double when applying jsonpatches. This value will be converted to the default value for the specified type and also correct value will be sent back to client
  • When accepting patch to be enqueued, return normal patch response (previously returning empty response)
  • Fixed URI aliasing problem in gateway
  • Fixed a bug in Response-serialization (Response.ConstructFromFields()), which could cause estimated size to be smaller then actual needed size in some cases
  • Fixed a bug where using an empty jsonobject as response for a mapped uri, did not get properly serialized to client or changes collected correctly when sending patches
  • Fixed detecting if a jsonobject is already merged or not when attaching it to a parent
  • Fixed bug in schemaupgrade, where all records were not included when moving existing records to new table
  • Fixed a bug in TypedJSON where versionlog of changes in arrays were not properly updated, which in some cases led to a NullReferenceException being thrown
  • Fixed the network gateway startup issues
  • Fixed a case when HTTP handler does not respond if mapped in UriMapping.Map but called from the outside
  • Fixed too small time given to release IPC chunks to shared chunk pool


  • Obsoleted Session.ToAsciiString() and added Session.SessionId
  • Rewrote the Typed JSON code-behind parser, now driven by Roslyn
  • Cache value of bound properties in TypedJSON when gathering changes and generating patches to avoid excessive access to bound data
  • CLI command staradmin delete db will no longer fail when, but instead stop, database is running
  • PartialToStandaloneHtmlProvider middleware no longer forces Shadow DOM in Polymer
  • PartialToStandaloneHtmlProvider middleware no longer overwrites default Bootstrap font size
  • Upgraded Polymer to 1.6.1
  • Upgraded fast-json-patch to 1.1.0. JSON Patch => Puppet observes also keydown and mousedown events and generate patches in more accurate order.
  • Upgraded PuppetJs to 2.2.1. This makes changes made in reaction to server patches (in onRemoteChange callback or in Polymer observer callback) properly propagated to server.
  • For request to invalid (non-existent) session, return 404 instead of 400
  • Upgraded starcounter-debug-aid from 2.0.5 to 2.0.7
  • Upgraded Juicy/juicy-jsoneditor from 1.0.5 to 1.1.0 (
  • Upgraded Josdejong/jsoneditor from 4.2.1 to 5.5.6 (
  • Upgraded Juicy/imported-template from 1.4.0 to 1.4.3 (
  • Upgraded puppetjs/puppetjs from 1.3.8 to 2.2.1 (
  • Upgraded puppetjs/puppet-polymer-client from 2.0.0 to 3.2.0 (
  • Changed how Starcounter VS Extension handles JSON files to allow adding existing files without code-behind so that they are not treated as TypedJSON per default
  • Changed invocation order of middleware, to execute in order of registration rather than the other way around.
  • Changed behaviour of default patchhandler to treat empty incoming patches as ping/heartbeats and send no patches back to client (i.e. not collecting the latest changes) PuppetJs/#94

Categorised in:

This post was written by Dan Skatov

Leave a Reply

Your email address will not be published. Required fields are marked *