Blog & Release Notes

indicates a breaking change
2020.3.31
0.6.160

NamePath renamed to Path

Added support auxiliary data.

2020.3.30
0.6.159

Added Numbering support

Added numbering support so that array indices can be shown in a display format when generating labels.

2020.3.28
0.6.158

Added group support to NamePath

Added support auxiliary data.

2020.2.20
0.6.136

Auxiliary Data

Added support auxiliary data.

2020.1.16
0.6.123

Whitelabels

Added support for white label systems. See Tyr.config().

2019.9.30
0.6.62

Services

Added support for Services.

2019.9.5
0.6.48

removeReferences()

2019.6.3
0.6.37

$minimal Projection Support

2019.3.13
0.6.5

fromClient() changed to be asynchronous

2019.2.23
0.6.4

Comparator support added to types

2019.2.23
0.6.0

$options functionality and Media Type (MIME Type) Metadata

2019.1.22
0.5.59

Add support for shorthand link definitions

See link shorthand syntax.

2018.12.28
0.5.48

Upsert Option added to Document Updates

2018.12.11
0.5.42

Additional client-side API support

2018.11.20
0.5.39

Upgrade to MongoDB 3.x API drivers, initially 3.1.10.

2018.11.20
0.5.38

Add support for projection security

2018.8.10
0.5.26

Migration utility from Patch to Document format added

Added support for Collection.migratePatchToDocument().

2018.7.15
0.5.25

Conditional Fields

Added support for conditional fields.

2018.7.15
0.5.24

Collection Destructuring

Added support for capitalized names in Tyr.collections permitting use of destructuring assignment.

For example, you can now write

const { Depot, Train } = Tyr.collections;

instead of

const Depot = Tyr.byName.depot;
const Train = Tyr.byName.train;

This works on both the client and the server. The existing syntax is also still supported.

2018.7.11
0.5.22

Add support for document vs. patch history storage

2018.5.22
0.5.13

Add support sleep utility functions

2018.5.6
0.5.12

Add support for Currency Conversion

See the Units Guide for more information.

2018.3.29
0.4.64

Added support for preserveInitialValues

2018.3.25
0.4.63

Field Groups

2018.1.31
0.4.42

Generated and Internal Collections

2017.12.23
0.4.32

isSameId()

2017.10.8
0.4.0

Migration Support

Added support for database migrations.

2017.10.7
0.3.0

Plain 'ole Javascript Object (POJO) Document Support

Added additional support to convert Tyranid Documents to POJO objects that is also available in the client API.

2017.9.28
0.2.55

Node 8 Support

Tyranid has been updated to Node 8. This includes generating native ES2017 code (including native async functions).

Unfortunately we had to remove the plugin system since it was based on a library which was incompatible with Node 8's native async functions. However, the Event system provides the same hooks for plugging into Tyranid.

2017.9.26
0.2.52

Support for Optional Links

Links can now be optional. See optional links for discussion and an example.

2017.9.24
0.2.50

Collection.exists(), Field custom validations, support for insert and update events

2017.9.21
0.2.47

Find Events

Added support for find events that can mutate documents coming out of reads (see example).

2017.9.20
0.2.46

Counts

Adding counting methods and options. All of the counting functionality is also supported in the client.

2017.9.16
0.2.42

Timer class

Documented previously-undocumented Timer class.

2017.9.8
0.2.35

More Field Type Metadata

Added additional metadata to field types.

2017.9.4
0.2.26

Subscriptions

Added support for clients to subscribe to updates in data to support live updating of data on clients. See Subscriptions.

2017.9.3
0.2.24

datetime and time types added

Added datetime and time built-in data types to complement the existing date type.

2017.9.3
0.2.22

Collection fromClient() hook

Added a "fromClient" hook that can be defined for collections

2017.7.8
0.1.64

Events and Tyranid Instances

Tyranid instances will now auto-join a local Tyranid cluster and Tyranid events can now be sent cluster-wide.

2017.6.9
0.1.58

isCompliant()

2017.4.4
0.1.44

Deprecated Fields

You can now mark fields as being deprecated.

2017.4.2
0.1.43

Events

2017.3.6
0.1.38

Additional ObjectID support

2017.2.8
0.1.35

Deep cloning on documents

2017.2.4
0.1.34

Historical support in Population

Added historical asOf option to most query methods that support population, allowing you to query a tree of documents that are all $asOf()'d the same date.

2017.1.30
0.1.31

Collection.references() method

Added Collection.references() method which can be used to find all references to an id or a list of ids.

2017.1.28
0.1.30

Expanded client options in field definitions

See client options for more information.

2017.1.26
0.1.26

Pre-defined Projections, Projection Merging

Added ability to define pre-defined projections and enhanced the fields syntax to support pre-defined projections and projection merging. See Projections.

Enhanced Document.$toClient() to support an options object which provides further control on how the toClient processing is performed.

2017.1.24
0.1.25

$tyr property on documents

2016.12.30
0.1.14

Support Array Paging and Relative NamePaths

Array paging (using the new Document.$slice() method) provides a way to page large embedded arrays inside large documents down to the client without having to send down the entire document. You can sort, filter, skip, limit, and populate the embedded array just like querying top-level documents.

2016.12.23
0.1.13

Population supports Projection

Advanced population projection syntax is now supported (was silently ignored before).

2016.11.9
0.1.10

Historical Data

Adds support for historical data to Tyranid.

2016.10.7
0.1.5

Add support for indexes

2016.10.7
0.1.4

Add support for multiple servers in Tyr.config() and a server option when defining collections.

This allows you to place specific collections onto alternate servers to help distribute the load.

2016.7.6
0.0.178

Add support for globs in Tyr.validate().

See Tyr.validate() for an example.

2016.4.20
0.0.166

ES2015 and minification support for client code generation

You can now use ES2015 functionality in code that will be used on the client (it will be transformed into ES5 via babel) and the code generated by tyranid (at /api/tyranid) is now by default minified.

2016.4.12
0.0.163

async utility methods

Added various async utilities functions.

2016.4.7
0.0.160

permissions configuration

Permissions values used by Tyranid are now configurable.

2016.4.6
0.0.159

inserts secured

2016.4.6
0.0.158

remove(), updateDoc(), $update() secured

2016.4.6
0.0.157

options improvements; update secured

2016.4.6
0.0.156

UID, security, database options improvements

2016.3.29
0.0.151

Switch to Native MongoDB Library

Tyranid is switching from the promised-mongo to the native MongoDB library now that it supports promises.

2016.3.21
0.0.140

Document.$remove()

2016.3.7
0.0.129

Collection.links()

Added Collection.links() method to search for a list of links between collections.

2016.3.4
0.0.127

Link Relationships

Added relate option to Field defs. This allows you to specify the relationship between links. See Links for more information.

2016.3.4
0.0.126

Components and Security

Added a Component mixin interface for Tyranid to facilitate extensions and plugins.

Collections are also Components, so you can use component hooks when defining your collections.

Also added a Secure mixin interface that permits client to plug in security rules.

2016.3.1
0.0.124

Logging

Added an isomorphic logging system that can log to the client console, the server console, and/or the database log collection. See Log for more information.

2016.2.29
0.0.123

Mixins

Added a new Collection.mixin() method that can add additional fields to an existing collection. This is useful for adding additional metadata to builtin Tyranid collections. See Mixins for more information.

2016.2.28
0.0.122

Continuation Local Storage

Added support for continuation local storage -- an equivalent to thread local storage for async node.js.

2016.2.25
0.0.120

Tyr.byUids()

Added ability to efficiently query an array of UIDs.

2016.2.24
0.0.119

Maps

In addition to specifying a fields property on objects, you can now also specify a keys and of property for them as well to indicate that the object is a map. See Maps for more information.

2016.2.16
0.0.115

NamePath and Type enhancements

2016.2.14
0.0.114

NamePath updated to deal with arrays better; document.$id

2016.2.9
0.0.112

Access to Of, Type, and Link moved to Field

The general strategy going forward is to try to leave def untouched and to store compiled def information on the containing class (i.e. Collection, Field, Type, ...). This is easier to use (field.X instead of field.def.X) and also keeps the original unprocessed raw def value around for later inspection.

2016.2.9
0.0.111

Units

Tyranid now supports units of measure. Units of measure are an important piece of metadata to keep track of. For example, knowing that a field is a double containing kilometers has a lot more meaning than simply knowing it is a double.

See the Units Guide, Units, and Unit for more information.

2016.2.5
0.0.110

collection.boot()

Collections have a new boot() hook method can be used to bootstrap your collection.

2016.2.3
0.0.108

field.parent, field.pathLabel, namePath.pathLabel

Field objects now have

NamePath objects now have

2016.2.1
0.0.106

defaultValue

defaultValue can now take a function for dynamic defaults.

2016.1.31
0.0.105

fromClientQuery()

Collection.fromClientQuery() method added which allows MongoDB queries created on the client to be usable on the server in MongoDB queries.

2016.1.31
0.0.103

idToLabel()

Collection.idToLabel() method added, available on the client and server.

2016.1.31
0.0.100

NamePath Support

NamePath support added.

NamePath can now also parse denormalized paths.