Recently I have encountered a strange error using HTML 5 video player and SharePoint 2013. Customers wanted to embed a few video files with subtitles to their portal. They used mp4 videos and WebVVT subtitles. The problem was that they didn't see subtitles in IE.

Html5 Video element is used to embed video content in a document. The video element contains one or more video sources. To specify a video source, use either the src attribute or the <source> element; the browser will choose the most suitable one.

WebVTT is a format for displaying timed text tracks (e.g. subtitles or captions) with the <track> element. The primary purpose of WebVTT files is to add text overlays to a <video>. WebVTT is a text based format, which must be encoded in UTF-8 format. Where you can use spaces you can also use tabs. More information about WebVTT can be found here.


In this article we will use our bundle on an actual page. We will add more JavaScript and styles to the bundle. We will also use a very usefull windows command line utility called robocopy, it is much more advanced than xcopy and can simplify lots of your every-day development&deployment tasks. The good thing about Office 365 sites, is that they can be mapped as network drives, so we can use robocopy or any other console utility to interact with files and folder on a site in an old way, just like we did with SharePoint on-prem. Unfortunately some of the system lists are not availiable when using WebDav, for example Web Part Gallery. In this case you will have to fallback to powershell or CSOM. Also, it is possible to use SharePont Online REST interface to interact with different server-side objects. It is a more advanced topic, that I won't cover in this article.


In this article we will create a bundle with a signle line of JavaScript. In these days anyone who works with JavaScript have to familiar with Node.js. Node.js is an open-source, cross-platform runtime environment for developing server-side Web applications. Although Node.js is not a JavaScript framework, many of its basic modules are written in JavaScript, and developers can write new modules in JavaScript. The runtime environment interprets JavaScript using Google's V8 JavaScript engine. We won't use Node.js as a web-server, webpack needs node to do its job.


In this article we will modify XSLT Style Sheets to get a list of available item-properties.

XSLT stands for Extensible Stylesheet Language Transformations, it is a language for transforming XML documents into other XML documents, or other formats such as HTML for web pages, plain text or XSL Formatting Objects, which may subsequently be converted to other formats, such as PDF, PostScript and PNG. The original document is not changed; rather, a new document is created based on the content of an existing one.[3] Typically, input documents are XML files, but anything from which the processor can build an XQuery and XPath Data Model can be used, such as relational database tables or geographical information systems.

If you are not familiar with XSLT, please refer to this tutorial XSLT Tutorial


Office 365 is the brand name Microsoft uses for a group of software and services subscriptions, which together provide productivity software and related services to subscribers. Office 365 offers plans providing e-mail and social networking services through hosted versions of Exchange Server, Skype for Business Server, SharePoint and Office Online, integration with Yammer, as well as access to the Microsoft Office software. There most customizable part of Office 365 is SharePoint. Many of you probably worked with SharePoint in one or another way.

SharePoint is an awesome platform, it has a lot of useful OOB features, it is usually a good idea to use Content Query Web Part or Content Search Web Part to aggregate content for end users. Both of these webparts have it is own limitations

We will use Content Query Web Part because we only need to display articles with given content type from a single site collection. Also, it provides a better user experience, because users don't need to wait until next search crawl finish.

Content Query Web Part is a part of the Enterprise Content Management (ECM) functionality in Microsoft Office SharePoint Server. It aggregates and displays list items within a site hierarchy. In addition to hierarchical query capabilities, the Content Query Web Part provides caching and query optimization for the SPSiteDataQuery object that it contains. These optimizations have better performance than if you directly call methods of the SPSiteDataQuery object. Also, this webpart is highly customizable, but you have to know how it works and how to work with XSLT. So we will use this web part to generate a required HTML and them we will make it awesome with JavaScript and CSS.

Webpack is a bundler for javascript and friends. Packs many modules into a few bundled assets. Through "loaders," modules can be CommonJs, AMD, ES6 modules, CSS, Images, JSON, Coffeescript, LESS, etc. We will use webpack to isolate our code from other customizations from other vendors that can be present on a target site collection. Previously, I used RequireJS for several different project, but now I use webpack. In my opinion, it is a better option than RequireJS. Anyways, RequireJS is still a very good solution for more complex web applications, but sometimes it is very hard to do everything right with AMD.

I don't plan to use Visual Studio or write any C# code, everything will be done using Visual Studio Code, NodeJs, JavaScript


Recently I have been discussing my usual webpack-centric workflow with a colleague. He pointed that I use both webpack and powershell, he suggested that I should try to get rid of powershell and work on Mac or Linux (sick bastard!). In theory I can use VS Code on any platform, but I will stay on Windows for now. In any case, I decided that it is a good idea to replace some of my powershell code with nodejs scripts. I have tried to find an auth lib for SharePoint Online with no luck.

There are lots of good libs for the app-authentication, and ADAL.js is awesome. But I wanted to use login/password approach to use it from console. I tried to find a nodejs script that can upload some files to SharePoint 'Style Library' or any other document library. After searching for awhile I didn't find anything that can cover my needs. I found a few old abandoned implementations of client API interfaces to SharePoint REST services, but most of them were broken. Microsoft is constantly changing an authentication piece of Office365, so most of those libs are obsolete now. Unfortunately they are still listed on NPM. That's why I decided to roll out a new NPM module.

I found an awesome article about SharePoint Online remote authentication (and Doc upload) from Paul Ryan. It has everything you need to build an auth module for SPO in any language.

Also, I used this tutorial about publishing an NPM module, .gitignore for Node.

I like to play with console, but unfortunately it's not possible to create a github repository from console, so I created it manually.


Recently I have worked on a small branding project, we decided to automatically enable some of standard SharePoint features from code during provisioning. We wanted to automatically enable Publishing on a target site and deploy some custom content. As it turned out it is not as easy as it sounds.


Recently I have found a nice library that made my life easier. According to authors it is the most comprehensive, enterprise-ready framework for provisioning SharePoint artifacts on SharePoint 2010, 2013 and O365. SPMeta2 is a code-first provision library supporting the provision of more than 120 artifacts in robust, highly repeatable and testable way while leveraging either one of the CSOM or SSOM SharePoint runtimes.

The library has the github repo with a documentation and lots of examples. The library is distributed via NuGet

Authors claim that SPMeta2 fully replaces XML allowing you to focus on writing clean, unified, reliable and reusable code.

I have tried to deploy a few lists and almost everything have been handled by SPMeta2.


Nintex Workflows is an awesome highly customizable product, that makes life of many people easier. But sometimes you need to write a few lines of code to integrate your forms with nintext workflows. There are few articles regarding this topic, but most of them use web service or some of the nintex dlls.


Recently I have worked on a small SharePoint onprem project and a customer wanted a custom List View/Edit forms for one of the lists. Long story short - they wanted a custom control to manage attachments.