Release the SharePoint Kraken and write Office 365, SharePoint Online, and CSOM projects faster, better, cheaper, more bulletproof!Kraken SharePoint Code Has Been Downloaded
Over 30,000 Times Between Its April 2016 Release and
Two Year Anniversary in 2018

Kraken is a set of open source libraries for SharePoint development. Kraken code is battle tested. It's been around since long ago; we started calling it Kraken in 2010; older versions were known as Behemoth (SP2007 to 2009) and SPARK (2003 to 2006). The library includes code for full trust, sandbox solutions, client applications (CSOM), and most recently provider hosted apps.

Kraken is used as the underlying core library for most code written by Liquid Mercury Solutions. Specifically, we use it in  Beowulf, CloudPower, Chimera, ReSPondev - but it's also used in our custom development projects. Kraken contains only about 10% of nearly 1 million lines of SharePoint code written by Liquid Mercury over the past decade.

If you like what Kraken does, but you aren't a prgrammer, please check our CloudPower our PowerShell management tools for SharePoint and SharePoint Online.

Things You Can Do To Encourage Us Continue Making Kraken Awesome

Kraken is a labor of love, and releasing this much code into the wild wasn't an easy decision for us to make. You can reassure us we did the right thing by doing one or more from the list below. Some are free, some won't take much of your time, and every action is sincerely appreciated.

Hire us or send some work our way!

We love doing work to benefit the community, but we all have bills to day. Any referrals are very much appreciated!

Here are just a few ideas how we could assist you:

  • Providing premier support for Kraken libraries
  • Helping to develop your custom application
  • Teaching you SharePoint programming
  • Speaking at your public event

You might also consider buying one of our books on Office 365 and SharePoint.

Contribute to making Kraken even better!

Find Kraken on GitHub and ask us to contribute to the project. Contact Tom Carpe to let us know you want to join the team. You can connect with us here.

Tell us we did something good!

Lots of people have benefited from Kraken, but we hardly ever get to hear the stories about how it's being used. Just a few words from you can help to encourage our team to keep innovating and improving our open source code. Use the links on the top navigation to leave a positive comment on one of our social media profiles.

Liquid Mercury Solutions continues to be one of the best kept SharePoint secrets in the Washington DC region. Please help us get the word out. Please +1/like some updates on our Facebook or Google+ Profile, or visit us on LinkedIn.

Writing blogs is also hard work, with little reward. All our articles come from real Liquid Mercury staff members, so please tell our writers if you found their posts helpful.

Check out our blog at http://blog.liquid-hg.com a.k.a. http://office365sharepoint.ninja

Give Liquid Mercury Solutions a 5 star review on Google!

You can use the link below to give us a good review. Write a Review is shown on our company profile in the right-hand column.

Our Google Profile for the DC Office

Providing a review for our DC location helps us the most, because DC is the biggest market for SharePoint work in our area and also the biggest user base (so far) for Kraken.

If you have a negative criticism, please reach out to us and give us the opportunity to make it right before you post a bad review. These things can really hurt and we all have our jobs
depending on this. Not being able to eat or pay our mortgages would be really out of proportion with our code having a few bugs. Please play fair.

Buy us a pizza or some beer!

Did you find Kraken to be really valuable to a SharePoint project you were working on? We're not against taking a donation if you want to show your support.

Funds will be used directly to support the developers who help make Kraken a reality. We don't expect to make tons of money this way, so whatever you contribute will buy nice things to feed our programmers, have a nice party, or that kind of stuff. If you donate, we promise to send you a thank you letter and tell you exactly what we did with the money - probably with pictures. We may even put the results of your contribution up on our blog. ^_^

We're currently looking into Patrion and whether code qualifies as a work of art.

Latest Version of Kraken.SharePoint.Client is 0.2.0

5/15/2018 - OK the list below is seriously out of date. After posting alpha updates through 0.2.88, we are now on v0.3! According to the latest read-me, "All changes from previous version 0.2.88 are now stable; some minor fixes to LocalToRemoteFileMapping dictionary in support of CloudPower document sync commands have been made." We'll update the info on this page as soon as we have the time, so thanks for being patient.

Here's some things we've updated since our first release in April 2016:

  • 0.2.0: Introduces additional overloads for getting all items from a list with pagination. Updated code projects to VS2015 Update 3.
  • 0.1.55: Fix: OK I did something boneheaded and included the field properties without loading the collection.
  • 0.1.54: Fix: The collection has not been initialized. in UpdateItem because now somehow we are asking for field internal name before ever getting it from CSOM. Must've rubbed something out during the refactoring that included consolidation of several executeQuery and introduction of ExceptionHandlingScope.
  • 0.1.53: Fix: NullReferenceException on updateitem because null check and operation were transposed in code; added a null check and warning to LoadProperties method just in case.
  • 0.1.52: Experimental: Combine createitem from 2 callbacks to one in order to resolve property not loaded. Still calls csom 2nd time for extended values in the property hash table.
  • 0.1.51: Experimental: rewriting some ExceptionHandlingScope so they are properly implemented, added correct method to capture error messages.
  • 0.1.50: Experimental: rolling back some exception handling scope for item creation because it was conflicting withscopes in other methods
  • 0.1.49: Fix: Corrects a bug introduced in 0.1.45 that CreateItem/UpdateItem did not properly load BaseType because of a bug where it tried to get this from item instead of list. Added more verbose trace logging to item creation.
  • 0.1.48: Fix: Obscure issue for Calculated fields and those with a (default value that is a formula) where the presence of FriendlyDisplayFormat in the SchemaXml seems to be causing "cannot complete this action" when you try to update the field or retrieve any list property related to the 'corrupted' field schema.
  • 0.1.47: Experimental: Isolated problem to loading properties of a list that aren't allowed. Modified LoadAllProperties, LoadProperties, and EnsureProperty to include a debugging mode that will execute a query after each property so we can isolate which property causes the issue.
  • 0.1.46: Experimental: Second attempt; rewrote exception handling scope fromt eh ground up for UpdateItem.
  • 0.1.45: Experimental: First attempt to add exception handling scope to item add/update functions. Still getting "cannot complete this action" on call to UpdateItem but believe it is coming from an earlier CSOM call.
  • 0.1.44: Experimental: Testing a fix for IsDocumentLibrary where sometimes trying to load list.BaseType throw "cannot complete this action"
  • 0.1.43: Fix: web extension CreateOrUpdateFriendlyUrl did not propertly call context.Load for Id from the term set. Doesn't need to call context.ExecuteQuery twice. Additional logging to indicate success on finding prent friendly url's term.
  • 0.1.42: Fix: web extension CreateOrUpdateFriendlyUrl fails to properly return new friendly Url due to Uri formatting issue.
  • 0.1.41: Minor fix: web extension CreateFriendlyUrl renamed to CreateOrUpdateFriendlyUrl; now outputs Uri instead of string; output params fixed to provide a value on both create and update.
  • 0.1.40: New commands: Added web extensions for working with global and local navigation properties as well as creating new friendly urls in navigation term set. Changes from 0.1.39 and earlier have been tested and seem to be working OK.
  • 0.1.39: Experimental: Added list extension IsDocumentLibrary(); eliminated ClientContext extension Init() in favor of ClientObject extension EnsureProperty() because it's purpose is more intuitive and will often result in fewer lines of code. Made sure that BaseType is always loaded in in List and ListItem extensions UpdateItem().
  • 0.1.38: Experimental: Identified NullReferenceException from 0.1.37 only occurs in doc libs when Title field is empty. Adding code to use FileLeafRef instead where needed.
  • 0.1.37: Experimental: Fix for NullReferenceException in List extension UpdateItem.
  • 0.1.36: Experimental: Added same error checking logic at the List extension UpdateItem level.
  • 0.1.35: Experimental: Additional logging and error checking for ListItem extension item Update().
  • 0.1.34: Minor bugfix for Content type extension AddFieldLink; some fixed to FieldTypeAlias
  • 0.1.33: Content type extension AddFieldLink now loads the FieldLinks collection in content type so properties can be used properly.
  • 0.1.32: Fixed issue in web extention GetSiteColumn where attempt to read URL safe for SharePoint 2010 causes a CSOM error.
  • 0.1.31: All FieldLink creation (add Site Column to content type) extensions now return a FieldLink object on success or null on fail, saving another call to CSOM to get this later.
  • 0.1.30: Fixed an issue in FieldProperties affecting validation of optional nullable properties. This bug was having an impact on commands for creating and setting field and site column properties.
  • 0.1.29: New commands: Added GetWebTemplates extension to quickly get OOTB or custom web templates for the site collection.
  • 0.1.28: Fixed a bug in web extensions TryGetList that caused it to fail under certain conditions where the list does not exist but SharePoint returned a ServerException that didn't meet the evaluation criteria.
  • 0.1.28: Added executeQuery param to web.GetContentTypesInGroup
  • 0.1.27: Fix for missing property load in web.GetContentTypesInGroup; added prototype class to implement workfor extension methods
  • 0.1.26: Fixing logs for list extension method EnsureRemoteEvent so they correctly report the event they are attaching.
  • 0.1.25: Added pseudo-enum class StandardNavigationProviderNames.

Development Status

While Kraken has been around a while, it is still actively being developed and improved, since it is used in our products and other work we do.

Currently Published Nuget Projects / Visual Studio Solutions:

If you like, you can scroll down a bit where we go into detail about each package and what it includes.

How to Start Using Kraken

Literally. Install the package in your project, then add a "using" statement for one of the following namespaces, and go to town! (Update: Tom recently changed some of the namespaces in Kraken client project so that extensions will start showing up the minute to reference "Microsoft.SharePoint.Client".) The libraries were designed to use extension methods as the primary entry points for most of the useful functionality, so you'll start to see those functions attached to SharePoint objects that you already use.

  • Kraken.SharePoint - sandbox and full trust server-side code
  • Kraken.SharePoint.Client - CSOM code
  • Kraken.SharePoint.Apps and Kraken.Apps - for provider hosted apps

If you want to know more, download the source. It's full of comments. We'll try and get some documentation published soon.

Source Code

Full source code is now hosted on GitHub at https://github.com/LiquidHg/kraken and is publicly available. Thanks to everyone who downloaded and supported us. We hope you will consider contributing to our project.

At the present time the source itself is not embedded in the src folder for the packages. That's not by design; we just lack enough manpower to get it done. We're looking to change that very soon.

Help Wanted

We could REALLY use your help. Visit our page about areas of improvement to see what we know we can do better.

Summary of Kraken Projects

Kraken.Core.FullTrust - anything that isn't specifically SharePoint but might be useful in development of SharePoint projects. This project is reserved for code that might require elevated privileges or "full trust" to run on a SharePoint server.

Kraken.Core.SandboxTrust - again anything not specifically SharePoint. We use this project for code that can run in limited trust environments, such as Sandbox Solutions or SharePoint hosted apps.

Kraken.Security - a certain class of reusable security functions which are useful in both limited trust applications as well as client-side code. They were seperated into their own project so that they can be consumed in both server-side and client-side models without having to pull the entire server-side code base.

Kraken.SPFarmLibrary - Core WSP package for building farm trust solutions for SharePoint. Has everything we've got in one package.

Kraken.SPLoggingCategories - WSP package for ULS logging categories. This was seperated into its own solution because of dependencies that force it to be installed to the farm using unusual methods. This project is included in Kraken.SPFarmLibrary.

Kraken.SPSandboxLibrary - Proejct that can be uploaded as a sandbox solution. In general, this assembly is referenced directly in other Sandbox packages, rather than being uploaded as its own WSP.

Kraken.SharePoint.Client - Code library extending the functionality of Microsoft.SharePoint.Client (CSOM). Most methods in this library are implemented as extension methods of existing CSOM objects, which makes it easy to start using it in your own projects quickly.

Kraken.SharePoint.Cloud - Older code library that leverages the SharePoint web services and other legacy methods for accessing SharePoint over a network. It doesn't come up very often, but we occassionally find places where things still need to be done this way. This project is included in Kraken.SharePoint.Client.

Kraken.SharePoint.Apps - This is our library of useful code for writing provider hosted apps for SharePoint. Right now it includes a compiled version of TokenHelper and other classes commonly included in provider apps. We've also added useful classes for writing remote events with behavior similar to suspended events, and an EF project for pushing trace logs to SQL Azure. Other functionality is in the works and will be added as we pull more reusable utility classes out of our individual app projects.