34

Disclaimer: I'm not looking for an opinion on which is better. My assumption is that the comparison is not apples to apples but there are obvious similarities.

I've not found consolidated information on what each product provides OOTB or through custom extensions. The topic usually comes up because someone either on the team or the customer has a preference of one over the other and a justification is needed to make the switch.

Some questions that come to mind

  • What type of support is available for each?
  • What developer features are included and what problems does it solve?
  • Are there considerations that must be made when automating the build and deployment?
39

The two tools have different feature sets, and implementations. I've tried to represent both out-of-the-box feature sets here briefly, but as fairly as possible.

SIMILAR FUNCTIONALITY

The similar functionality between the two is the ability to serialize Sitecore items to disk. Unicorn's README summarizes the need for this really well, by stating it writes:-

serialized copies of Sitecore items to disk along with the code - this way, a copy of the necessary database items for a given codebase accompanies it in source control

TDS Classic does this but installing a web service into your local site, and pushing/pulling content through it, using a Visual Studio extension UI, and through MSBuild. Unicorn changes Sitecore's default Data Provider to use the serialized file on disk (.yml files) as the master copy. It then has it's own admin panel for pushing/pulling the item content between disk and Sitecore.

The control over this serialization is also available in both tools.

Overall, both tools are much better than the old way Sitecore assumed development would work (which was using Sitecore zip packages). That was very error prone... and both tools offer a much better process and item management that should be used in development.

OTHER FEATURES

Unicorn is a serialization tool, that states in it's README that it:-

is free and open source, and does one thing well

In addition to the above features, Unicorn has these features:-

TDS Classic is commercial product that began as a serialization tool, but became a much larger productivity tool, with many other opt-in features for efficient Sitecore development. New features are continually being added to every release, but here is a (non-exhaustive) list of those built-in features (as up to date with TDS Classic version 5.7). (It's probably best to reach out to Hedgehog directly or check the website/docs for a proper, up-to-date feature list and tool comparison, as I always forget some!)

EXTENSIBILITY

TDS Classic is largely extensible with it's features via MSBuild, while Unicorn is largely configurable through Sitecore Include configs. Overall, build/deployment scenarios for both products can be customized... both with the ability to utilize custom code and/or third party modules to be able to do even more than what's offered out of the box.

PERFORMANCE

This is largely subjective, and will differ from project to project, and test to test. For example, on the Habitat demo site, Unicorn Dilithium has been found to be quicker when just syncing item content with no changes, but TDS Classic will out-perform it when syncing from scratch. TDS Classic also halves the Habitat full solution build/deploy (which arguably has more to do with gulp/MSBuild than Unicorn/TDS Classic, but factors into how developers work with Sitecore). Performance should probably be a separate discussion, because it can vary so much between each individual machine, each project, each process, and for each available performance 'boost' used by each tool.

COST

Unicorn is free, TDS Classic is a paid product.

Hedgehog offer a free 30-day trial of TDS Classic on the website. Also, licensing costs for TDS Classic vary (from first time purchase, license renewals, bulk purchases, MVP purchases etc.), so for better info, it's best to email sales@hhog.com for that.

SUPPORT

Both tools have community support, usually through Slack and Stack Exchange.

The TDS Classic license offers dedicated enterprise support through Hedgehog.

I hope I've covered most of the high level stuff, but am always happy to learn of other things that should be added to the comparison.

  • It might be good to also mention that TDS uses Sitecore's UpdateInstallationWizard which comes with some limitations (in particular around CI) – Chris Berg Dec 13 '17 at 18:59
  • 2
    TDS Classic doesn't (really) use that page. That's a default admin page within Sitecore itself, which developers can use for update packages (Sitecore created, TDS Classic created or whatever). TDS Classic can just create the update packages, but you can use many other ways to deploy it for CI (like Sitecore.Ship, SitecorePackageDeployer etc.). Or you can just use the TDS connector to avoid packages altogether. So it's not really a CI limitation. – Sean Holmesby Dec 13 '17 at 19:14
  • 2
    Have to agree with Sean. The Update Installation Wizard is useful if you want to install the TDS generated update package for testing purposes, but in a CI setup you would definitely be using Ship or PackageDeployer or similar. If you set this up correctly then no manual intervention is required. – jammykam Dec 13 '17 at 20:46
  • If using Ship, please use the MyGet version of 0.4.1 or clone the source code. The version on NuGet still does not include a security patch that was merged 18 months ago. – Richard Szalay Dec 14 '17 at 3:46
  • 2
    One of the biggest differences I've seen with TDS vs Unicorn, is that TDS works extremely well with TFS, whereas I didn't know this when I started using Unicorn, but it does not. Since Git will automatically pick up added files, but TFS doesn't. Because of that, when Unicorn adds .yml files to the file system, Git will see them and add them automatically. TFS on the other hand will not, and we've had a lot of problems with that with Uncorn and TFS. – Dylan Young Dec 21 '17 at 15:07
25

Sean's answer is a good general overview of the differences between Unicorn and TDS Classic. This answer is here mostly to expand on a few of the serialization-based items not entirely covered.

The real best way to decide what you want to use is to actually try using both. Each has its own distinct advantages for different types of projects and different dev team cultures. Hedgehog will give you a trial version of TDS Classic, and I'll give you a free version of Unicorn forever. Go play!

Your Preferred Environment

TDS Classic is highly geared towards developers who spend their day in Visual Studio, as that's where all of its UI lives. With TDS, you'll manage your items, configuration, item syncing, and all that from within Visual Studio. If that's your thing, TDS is your product.

Unicorn is designed to have, and require, as little UI as possible. It does not require the use of any specific IDE tool, and though it has a sync UI it's mostly designed to be run from a script as part of some automated process (e.g. a build/deploy script). It gets away with this because of how it syncs.

What 'Sync' Means in Each

[Updated]
In TDS Classic, 'Sync' means the process which starts with a comparison window, displaying the differences of items on disk and in Sitecore. That window is then be used to push or pull each item's content to/from Sitecore. TDS offers this 'Sync Window' comparison in various granularity levels with the following features:-

  • Sync this item - comparing just the chosen item only
  • Sync with Sitecore - to compare all of the items in a TDS project, or sub-project hierarchy.
  • Sitecore using History - comparing the items within a TDS project by displaying the most recently modified/added/deleted items only
  • Sitecore all TDS Projects using History - as above, but for all TDS Projects in the solution.
  • Sync all projects in Sitecore - a full comparison of every item in every TDS project across the entire solution.

In Unicorn a 'Sync' is the process by which Sitecore is updated to match what is on disk. Unicorn treats the disk as the master copy, so a 'sync' will make Sitecore match everything on disk. Unicorn offers granular syncs with:-

  • configuration-level sync (which might typically be a per-project configuration)
  • all-configurations sync (to do a solution-wide sync with one operation)

A 'sync' in Unicorn is a pure push mechanism, where Sitecore items will update, but the process won't update any serialized items on disk. Whereas for TDS, a 'sync' may result in both Sitecore items, and serialized files being updated. The end result for both will be that the disk items and the Sitecore items will match (i.e they'll be in sync).

How Items and Pushed/Pulled between Sitecore and Disk

[Updated from the comments]
TDS Classic With TDS Classic the serialized items and Sitecore items can both be updated with features from within the IDE through the TDS Classic Visual Studio Extension. Then the 'Sync' features mentioned above will allow you to do both pushing and pulling of items. There are also other features in TDS that allow you to perform these operations.
Pushing Items - The 'Deploy' and 'Quick Push' features will push the items from disk to Sitecore.
Pulling Items - The 'GetSitecoreItems' features will pull items from Sitecore to disk, while the AutoSync feature will pull the updates automatically when turned on.

Unicorn
Pushing Items - a 'Sync' operation in Unicorn, as mentioned above, will update Sitecore to match what is on disk. Transparent Sync, when turned on, also updates Sitecore items to match the serialized items, but does so automatically, instead of requiring syncing to be triggered from the control panel.
Pulling Items - As Unicorn utilizes the Data Provider, updates made within Sitecore are also updated on disk, so the 'pull' aspect is done automatically. Unicorn also features a 'Re-Serialize' operation, where items are also pulled from Sitecore onto disk. This operation is typically only used for initial project setup, and for configuration changes where different sets of items are being pulled into the project.

Unlike TDS, there is no comparison UI because the serialized file is always treated as the master. The disk is kept up to date as items are changed in Sitecore, and a 'sync' operation always pushes the item wholesale into the Sitecore database.

Conflict Resolution

Inevitably when working with a team, two developers will change the same item which might then cause a conflict in a serialized item file.
TDS Classic uses Sitecore's built in serialization format, which itself is a custom, inflexible, line-oriented format that is quite picky (requiring specific line endings, as well as calculated content-lengths for field values). When a conflict occurs on disk, dealing with this format can be painful when using regular file merge tools (like WinMerge, KDiff, TortoiseMerge etc.) because it doesn't know how to deal with them.
To combat this, Hedgehog developed a custom Sitecore Item Merge tool to handle this format for you, taking away that pain. It is automatically configured for TFS when TDS is installed, but can easily be configured for any source control provider like Git or SVN.

Unicorn uses its own custom developed format (based on YAML) that was designed from the ground up to be extremely mergeable. Entire classes of conflict can be auto-resolved by source control without it even becoming a conflict in the first place. However when there is still a conflict requiring human intervention, the line-by-line format allows for a very easy side-by-side comparison and resolution.

Deployment Methodology

[Updated from the comments]
With TDS Classic, deployments can be done in a number of ways.

  • Sitecore Connector Deployments - a web service is installed into your site, and MSBuild can connect directly to it to deploy your items. This might be typical for a DEV and QA environment deployment, and closely mimics how TDS deploys to your local as well.
  • Update Package Deployments - TDS allows you to generate an update package (Sitecore standard) during the build, which can act as a deployment artifact that you manage. You can then deploy that package in whichever way you want (through Sitecore.Ship, SitecorePackageDeployer, Sitecore PowerShell Extensions, UpdateInstallationWizard etc.).

The package contents can be configured for however flexible you want your deployments to be. You can have items and code together, items only (if you deploy your code some other way), or delta packages with only recently modified items (if you're looking to reduce deployment times). For production deployments typically an Update Package is what most teams use, customizing their own deployment strategy to suit their needs.

Unicorn also doesn't really dictate how you choose to deploy your items either. Personally I tend to deploy all the serialized items and use the remote PowerShell API to script a sync operation immediately after the code is deployed. But others are using any number of techniques, including deploying the serialized items and manually triggering the Sync from the control panel, or using Sitecore Courier to generate update packages like TDS.

  • 4
    Great write up. Couple of minor points to clarify: "You must choose the actions to be performed during a sync" - you can also use the Quick Push or Deploy functionality in TDS, which means you don't need to choose the actions, it will make Sitecore match what is in the TDS project. – jammykam Dec 15 '17 at 0:22
  • 4
    "does not necessarily guarantee final database state is identical to serialized item state as it's just a delta" - well that depends, you can choose to create a delta package or create a full package so judgement needs to be used which works best for the needs. I believe Courier also used to create delta packages. – jammykam Dec 15 '17 at 0:23

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.