 In February of 2022, Microsoft released the 1.14 version of the SharePoint framework. Now, in this episode, I'm going to summarize what you can find and share some additional details that I found after spending some time picking apart this latest release of the SharePoint framework. Now, heads up, there's a ton to cover in this episode. That includes things like new APIs for adaptive card extensions or ACES, new APIs for web parts, new APIs for SharePoint framework extensions, new APIs for really all the component types that we can do with the SharePoint framework. We've also got updated and new project templates. We've got automatic theme support for web parts. We've got a new API to render web-friendly images. There's over 20 bugs that are fixed, some of them dating back three years, removal of two API sets and deprecation of two API sets. Everything in this release. See, I told you there was a lot, but don't worry, I'm going to cover it all in this episode. This episode is also available as a blog post on voitanos.io and as a podcast on voitanos.show. Check out the description below the video for links to these other resources. All right, we've got a lot to cover in this episode, but before I get started, I do want to give somebody a shout out. Last August, in August of 2021, Microsoft hired someone named Alex Tarantiev and Alex, if you don't know who this is, Alex is straight out of the community and he joined the SharePoint framework team. Alex is one of the leading thinkers when it comes to the SharePoint framework and he's probably the best one who's found issues and edge cases related to SharePoint framework extensions. You may not know Alex, but trust me, you're going to feel his impact. Now, when I saw Microsoft hire Alex, I was cautiously optimistic. Actually, it was a little fearful. I was like, oh my God, we just lost a really good person, but I was cautiously optimistic when I saw that he joined because my hope was that they would just turn him loose to let Alex be Alex and that means that things were going to be done right. So far, that sure is what it looks like from my cheap seats, you know, way up in the rafters looking, looking in at what's going on at Microsoft and the outside. Now, I may be reading way too much into this and I may be giving, unfairly giving way too much credit to one person, but there's a couple of things I want you to kind of like that I've seen that really stuck out to me. Since joining, Alex has been involved in over 300 issues in the SP DevDocs issue list. So we've got like, you know, at the time of recording this, we had 16 issues that are still open, 269 issues that have been closed, but that's a total number of the issues that Alex has been involved in really just in the history of, just in the history of working on the SharePoint framework and his involvement in the SP DevDocs issue list, which is the main issue list for filing bugs and issues related to the documentation. But while that doesn't, you know, really say all that much, you can see that since he's joined, I've got a little, a little query that I've run where I said, since August the first of 2021, which is he joined in August of 2021 joined Microsoft, he's closed over 200 and he's been involved in over 220 issues that have been closed. That's over 70% of all those different issues that he's closed. So that's huge. And we're going to, we're going to talk a little bit about that in a few minutes. But another thing too is that the SharePoint framework version 1.14 release that I'm covering in this episode, it features a bunch of investments and improvements to the SharePoint framework, specifically the list view command set extensions in 1.14. Now, a lot of these improvements, they sure smell like a lot of the things that Alex has been taken exception to in issues that he's posted and complaints that I've seen or at least constructive feedback that he's provided Microsoft, both in a public scenario and a private scenario, over the years. So I just want to give one shout out to him and just say, hey, tip my hat to Alex, well done, keep it up. And hey, Microsoft, good hire. This is like, this was a really good one. Alright, everyone loves to just jump in and find out what's new in a release. So let's focus on the new stuff. Now, the first thing that I want to talk about is something called the image helper API. Now, if you're one that watches the release notes pretty closely, and you go back to the 1.13 release notes, you may have noticed that there was a mention of a image rendering API for optimized performance. And if you went searching for it, you wouldn't have found anything. When I dug in, I think that this was a mistake, and I think we may see this actually disappear from the 1.13 release notes because technically it was in there, but it was in there in the preview, only as a preview feature. And you had to install a package to be able to use it. And then you had to understand how to modify the package that was installed in order to be able to even play with it because nothing was going to build when you actually played with it. So I found it, I thought it was near impossible for anybody to figure this out. But don't worry about it. I figured this whole thing out with a little bit of help from the engineer who wrote the feature. And I submitted a pull request to the docs where we're going to have a dedicated document in the release notes or in on the SharePoint framework docs that are going to, that's going to cover this image helper API. So you'll find that in the docs. So let me kind of explain what this thing does. So the idea is that you can pass a URL to an existing image that lives in SharePoint. And what the SharePoint framework will do is it will request back to the server, request that URL. You also have to specify the width. So in pixels. So you specify the URL of the image, either absolute or relative in SharePoint. And then you also pass up specify the relative of the width of the desired image that you want. What the SharePoint framework server side API will do is it will create a version of that image, a thumbnail version or smaller version of it that is most closely oriented with the image that you the requested width that you specified. There's a bunch of different breakpoints and it's going to find the nearest one. So like, I think off the top of my head, I think we have like 200, 400 pixels. And then it kind of scales up. It doesn't go on 200 increments. It just that's just two I came up with. So if you request the image to say I want a 375 pixel image, you're going to get the breakpoint that's the closest to 375. There's a little nuance about going over or under that you definitely want to read the docs about. But the idea here is that it's going to resize the image and it's going to return the URL to that image of the thumbnail image that you can then use in your component. So it kind of, you know, here's a little example of what it looks like. I've got an example here that I have an image that was originally started out as 1.2 megs and it was 1920 by 1080. What I did was I passed in the URL to this image and I said I wanted a version of it that's 400 pixels by 400 pixels. So I've got the URL to my image. I then I'm going to call the image helper dot convert to image URL. It's a static method on a static class. And I'm going to pass in an object and then object has two required properties, the URL of the image and the desired width. Now I can also pass in the desired height. And if I do that, then it will also it'll resize the image, but it'll make sure it maintains the correct aspect ratio that I specify. What is then going to do is give me back the URL to that image. And then I can use that in my rendering. So in my example, when I said, here's this 1.2 meg image that's 1920 by 1080. When I passed in the requesting the thumbnail, and it gave me a thumbnail back, the return to the image that I got back is actually 400 pixels by 225. And I can I prove that to by just playing with this in the browser and actually selecting it using the developer tools, selecting the image and it confirmed that it was 400 by 225. But furthermore, the other thing that was really nice about it is that I noticed that the image was also scaled down to being only 30k. So that's from 1.2 to 30k. That's a big improvement. So the way you do this is you have to install a new package into your into your project. It's the at microsoft slash slash sp dash image dash helper, you import an inner a static class called image helper, and then you just call the convert to HTML convert to image URL method on that class, and you get your new image URL. It's pretty cool. It's pretty simple to use. And it is part of the generally available released API in one dot 14. Now another big change that we had in this release another big introduction that we had inside of this release are some new project templates. So I want to show you kind of two things here what happens. So first, when I go to create a brand new project, if I run yo at microsoft slash SharePoint, what I want you to notice here in the in the prompt that you get, you remember that when we did stuff with like prior to one dot 14, we got lots of different prompts that would come back to us things like what's the name of your solution? What's the what's the do you want to what environment are you targeting? It used to ask for like 2016 2019 or SharePoint online and then with the one dot 13 release, it just said, hey, we're going to use SharePoint online. And then it would ask you things like if you're creating a web part, what's the description of the web part, it asks you things like do you want to be tenant scope deployment? Do you want isolated? There's a whole bunch of different questions that you got. Well, what you're going to notice here is that they've actually cut out a lot of the questions and they've gone with some default options because that's what most of us end up doing. So for example, we do have a what is your solution name, but then it jumps straight to what do you want to create? You want to create a web part extension, a library and an ace. If you pick web part, you'll notice that it just asks what is the name of the web part, but then it doesn't ask you what the description is. So isolated web part, that question's gone. The question about skipping feature deployment for tenant scope deployment, that question's gone. The description of your solution that was introduced in a beta in 1.14. That question's gone. The description web part's gone. Same thing with extensions. The descriptions are all gone. Really simplified stuff quite a bit. To make sure that people don't get too confused by this, we've created a page in the SharePoint framework docs that you can get to. If you just go to aka.ms slash spfx-yoman-info and if I launch that page, this explains what these new, I'm going to talk about in a minute, but what these new template options are all about, but it also has a section for retired generator prompts. And what this does is this is going to explain to you, hey, if you used to see a prompt and now you're like, where did this go? I need this. It explains that it's been retired. It also explains what the default option is and what it's set to. And if you don't like that default option, here's where you go change it. It's nothing that's destructive. So for example, it explains why is the question that we had of which baseline packages do you want to target for your components? It explains why is that gone, right? It's gone because, well, we dropped it in 1.13. The question about, and this is a long one, I'm going to read this out. Do you want to allow the tenant admin the choice of being able to deploy the solution to all the sites immediately without running any feature deployment or adding apps in those sites? I don't know about you, but that always confused me. I always had to stare at that and be like, what is this asking me? But the default option was always no, which is weird because what it does is it's actually setting a property called the skip feature deployment property inside of your package-solution.json file that you'll find in the config folder. It's setting that to true. So even though I said no, it would set it to true because the property was skipping it. It was like a Yoda style property of like, you know, is it enabled or disabled? But it was like a disabled true, like, so it's not enabled. Okay, got it. It always confused me. Thankfully, they got rid of that. They went with the default option where the default option is skip feature deployment defaults to true. You don't want to do that. That's fine. You go in there and you modify it in your project, but at least we don't have to sit there and have that, you know, mental comprehension and mental gymnastics every time we read that question. Same thing is true about the isolated web parts when asked if components in the solution will require permissions to access web APIs that are unique and not shared with other components. Same thing we got here about, you know, so that was the property about the is domain isolated by default that set to false. You want to change it up, go for it, you can do that. Also about all the different component descriptions like web part descriptions, app customizer, field customizer, list view command set, libraries and aces. If you really want those and you really want to set those, which I don't think I ever saw people set those on a consistent basis, the docs explain where that stuff is set and how you can go set it yourself. So really this is just meant to be to make life a little bit easier for us. Now, another thing that they did though is they've also added in, we've also, as part of this new process of creating these projects, Microsoft has changed up our template options. So you did see when, you know, when you, when you choose, you got three options, you got minimal, you got react and you got no, no framework. When you ask what kind of a template you wanted to choose. So remember when you used to create a web part, it would say, what web framework do you want to use? Do you want react or do you want no web front, no JavaScript framework? Well, first of all, they've renamed things. These aren't frameworks. These are templates. So we got rid of the word framework from the question and now it's just template. Second of all, the no JavaScript framework. Yeah. Reacts not a JavaScript framework. React is a web framework. So there is no such thing as a JavaScript framework. I mean, that would be like Next.js or Express or something else. That's not, we're not going to, we're not doing that. So we've, we've gotten the right terms correct now, which is good with, with, just to make sure we know what shows that we know we're talking about in the SharePoint framework space. But the other thing that we've done here is that Microsoft has created, they've created a couple of different options here. So if I start and I look at the no web framework option, what you're going to see is the code is going to look a little bit different from when you first create your project. So if you remember before, we really just had this, you know, inner HTML and it had some divs in there and stuff like that. In fact, if you consider what the no framework option used to have is we really just had this, these divs. And it would say things like welcome to SharePoint, customize SharePoint experiences for web parts. And we had all those styles that were listed in the nested divs for a container in a row and a column, etc. Well, what Microsoft has done is they've removed that or they've replaced that markup code. And instead, we're given something that is a little bit more verbose here. So you, when you take a look at it, you'll see that we have a section element. We've got a div with this random image that we're going to be using for a new welcome image. But it just, there's a lot more stuff here. So the idea here with these templates, they've done, they were really trying to do two things. First of all, they were trying to modernize it. And but the thing that they were really trying to do is they were trying to make the default web part a little more friendly to be used either in SharePoint or in Microsoft Teams, because we can use a web part to create a custom tab in Microsoft Teams, if that's what we want to do. Well, in Teams, they have themes, you have default, which is light, and you have dark and high contrast. And SharePoint, we also have themes. We wanted to make sure, or at least Microsoft wanted to make sure that by default, you had something in your web part that understood when themes change and how to respect them. So when the, when you look at the code, you'll see that there's a way to detect is it in dark mode or not. And then furthermore, you also are going to have a way to detect when the theme actually changes. So if a user in Teams changes from light mode to dark mode, well, our web part would like to know that so we can change the way it's rendered. So we all of a sudden don't have like this light mode in our web part and have to like refresh the page and go figure it out later. So it's a client side event that'll get fired. And I'll show you, we'll talk about that in a minute. Of course, I guess, in my opinion, I wish we didn't have all this extra garbage that was right here, all these like sales pitchy links. I had like 99.9% of us are just going to delete this the second that we see it, because we're never going to use all that stuff that talks about, you know, let's learn how to use graph or Microsoft Teams or Viva or use, put stuff in the store or work with different APIs. I don't care. I mean, I know what I'm doing. I want to create this stuff. Even the new user, I mean, it's like, we don't need the sales pitch for SharePoint framework. I've already installed the generator. Let me just start building stuff. I'll go to the docs if I need the docs. At any rate, we do have two methods that were added. One is this get environment message. This is just checking to see am I in teams or not. And then if I am, and we'll talk about this property in a minute too, there's a new property that will a Boolean property called is served from local host. And that'll return true if our component is being served up from the local web server, as is the case when we're like testing and debugging and doing development. When I package up and deploy it, that won't be the case. It'll actually be deployed. So it's just this method here is just kind of, it's like demo code to show you like, hey, here's how you can detect if you're in teams or SharePoint. And then if you're running locally or if you're running in, up in the, in a deployed environment. Furthermore, we have this new, this method here called is on theme changed. And they've already stubbed out the code here. This is a method that is going to be on the base web part class. This is new and 1.14. And the idea here is that it's just giving us the ability to set the colors and stuff based on the theme or at least modify things when the, when the colors actually, when the theme actually changes. This is what the default no JavaScript framework one uses. You can, you'll see too that the react one is very similar. It has that same get environment message and on theme changed. And furthermore, when you look at the actual default react component, you'll see that it's got the same kind of a HTML template that we had in the no JavaScript framework option. The other option that we have, we have a third option. And if you're like, I don't like any of these new, all this new code you gave me, I just want to start with basic stuff. You have a third option now. This is new. It's called minimal. And when it's minimal, I mean, it's minimal. There's like nothing in there. The render, there's no get environment message and no on theme change. You still have access to it because it's still part of the base web part class, specifically the on theme changed. But the render method, all it does is just render out a single div with some text to it. That's it. It doesn't, it doesn't include anything else. So that's all the stuff that they, that we've added for the new, the new APIs or the new, the new project templates. Now, I've already covered a couple of the new APIs that we got inside of all component types and for web parts. So I talked about the is serve from local host property that's going to tell us if the, if the, if the components being served up from local host or local web server during development and testing. And then the web parts also got the web part base class or web parts also got two API, new APIs. One we've already covered that was the on theme changed. Again, that can be used by you to detect when the theme in the hosting environment changes so that you can do something. If you got to change colors up or something like that, you can actually handle that in your web part. But there's also a property on the property pane group called is group name hidden. We have the ability to now hide group names in our property pane if we don't want to, if we don't want them to be rendered out and displayed kind of a little fit and finish thing that's nice. We do also have a couple of updated APIs for web parts. Now, what these are is that the idea here is that when we have two methods, one for displaying a loading indicator and one for doing a rendering an error. So what these are, what these new properties are going to be, but go ahead and just drop in some code in a render web part. We have this status renderer. All right. So on the context object on the web part, we have a status renderer. One is for display a loading indicator and one is for the render error. We now have a new option available to us and that's this clear DOM element callback that's at the very end. And what this is going to do is this callback is going to allow us to clear the DOM node before rendering the indicator or before we render an error. And so this is an optional property. You have a timeout that you can set. So if I did like say, I'll leave the default timeout to 1,500 milliseconds and then I can specify a callback that I want to run before, if I want to clear out the DOM. So I could say like this DOM element dot inner HTML is set to nothing before I do the error indicator or the display loading indicator. So that way I can clean things up before it actually happens, before the indicator actually pops up. So that's nice to be up. Those are some nice little fit and finish things that have been added for us. Some of the improvements that we've gotten here, I alluded to this in my introduction here about Alex's influence and you won't believe how much stuff that we've gotten that's related to extensions inside of the 1.14 release here. So the first thing that we got here is we have this new method called raise on change. Now we can call that from our list view command set extension. And what that does is that's going to tell the SharePoint frame, it's going to tell SharePoint, but the SharePoint framework, hey, the current list view that we're on, I've modified an item in the view that's being displayed, you need to re-render that list view because I go modify the item, the view is now going to be stale. It's not going to show the current item has been updated. So I can tell it when that stuff happens, I can do that. Let's say in one of my command handlers, I could say something to the effect of this dot raise on change like that. And what raise on change will do, again, just tells the list view, hey, you need to go refresh yourself. Another thing that we can do is that if you recall, we could set the visibility property on commands. So like in the case of the default code that we get for in the on list view updated method, we're going to come back to that guy in a minute. And that in that method, we are the default code says if only one item is selected, then I want to set the visibility of our command to true. Otherwise, it's going to be set to false. Well, another option that you can do now is not just be use visible, which means it's going to be it's going to show up or it's going to disappear. But you actually have a new option here called disabled. So you can have it where it's actually shown as being active, or it's there, but you can't click on it, right? So that's going to be that's a nice little like fit and finish kind of thing that Microsoft has added to this. Now, another really big thing that they've done is and we're going to cover this to in the deprecated section is they've actually gotten rid of this method here, the on list view updated. In fact, if I hover over this method, you can see in the intelligence that it even says that this method has now been deprecated, you should use something else instead. Now, why did they do that? Well, the old way of doing this, the only thing we got off of the event whenever the list view was actually updated, the event arguments that were passed in only had a collection of the selected rows that were currently selected. I couldn't do anything else when the list view changed, right? I mean, to me that there's so much, so many other things that we could do with that we can change the sort order, we can change the filtering, maybe the number of rows in the list view changed, maybe the columns changed. There's so many things that could change in the list view that we didn't have access to that wouldn't raise any events. So what Microsoft did is they went back to the drawing board and they really changed things up from how things were being done. So now what we have is we have we can create a new handler here. So let's say for example, like in my on a knit, I could say this dot context and on the context object for the base list view command set, I have a property here called the list view. And this is the list, this is the list view accessor to giving us access to the actual list view. This has a property on it. First, it's got a whole lot of properties on the things that we can do. We have like the the columns that are that are visible in the list. We have the information about the list itself. We have information about the view, we have information about the field that's currently sorting, as well as if it's being sorted in ascending order or descending order, that the sort ascending is the only property available to us. But if it's false, then we can know that it's in descending order. We have the existing select row rows option that we had before. We have the rows property. So here's a list of all the rows that are shown in our list view tons of stuff. And then we also have our list view state changed. Now, if you compare that to what we had previously, you'll see we only had the columns that were available to us. And we had the selected rows that were changed event. And we could also try and get a column by name. But in the SharePoint framework 1.14, there's so much other stuff that we have access to. So one of the things that we have access to here on this list access or 1.14 is the list view state changed event. So what we can do is we can then take that, we're going to add in a new event handler, we pass in the observer, which is this, the current component. And then I'm going to create a new method here called on list view update updated. So that would be our new one. I'll just call it new. So let's go create this method. So if I say this is a protected, it's a public method, public method on list view new. And the argument I'm going to pass in for this. So for args, I'm going to say list view state changed event arts, right? And this is going to return avoid. Now, what's neat about this, so this is going to completely replace the implementation of the on list view updated event. And what I can do in this one is I not only have access to all the arguments on the, for the, for the current context, so I could go this dot context dot list view access, or I could see what columns are currently visible, what information about the current list, what rows are visible, all that was sort of the selected rows. What was really cool about this is that for the arguments that are passed in, I now have access to the previous state before things changed. So I can see what columns were there, and I can compare them to what's there now, or what rows were there before, and what rows are there now, what, what rows were selected and what, what are currently selected, going between the previous state and the current context. That's huge. I don't know this for a fact, but that looks like Alex, that looks exact, that looks just like a lot of the stuff that he had complained about in the past. So that covers a lot of the stuff that we see around all the list view command set changes, specifically around eventing. Again, just remember that the on list view updated event that is now deprecated, we'll cover that in a little bit, but then we also have the way that you can create and handle new events, and you're going to do that by creating your own event handler and then adding that to the list of events that are there to be observed. Now, once that's done, Microsoft has already gone through, and actually let me back up one second. One thing that's a little weird from this is that I don't really understand why when we create a new command set in 1.14, why we're being, why it's giving us the on list view updated event still, if it's deprecated, if it's deprecated, then why don't we, why doesn't the code for the new command set, why doesn't it use the new way of doing things by creating a new handler, and it uses the same sample code that demonstrates how to do this? Why are we adding old code that's now deprecated? So that means at some point it's probably going to get removed from the SharePoint framework. I bet we see that fixed in a future update of the SharePoint framework. I bet they're going to switch over from that. I think that just missed the release. Okay, now the next thing we want to cover, a lot of stuff around adaptive cards. So if you've worked with adaptive card extensions for Viva Connections, they have added in a few things. We've got card caching, so the ability to cache a card and the card's state so that the card won't be re-rendered when the next page loads. There's a doc that will be in the SharePoint framework documentation that explains how that works. That's on the Advanced CardView functionality page. They've also given us a few new action types. So before we had three action types, you had a submit action, an open URL action, and a show card action. We now have three new actions. We've got the select media action, the get location action, and the show location action. The show location, I passed in a latitude and a longitude. The get location is going to prompt you for a location to pick on a map. And then the selected media action is going to will fire like a media picker for you to pick a file or an image that you want to show. And then furthermore, when it comes to actions, there is now an on action error handler or event that you can trap and you can trap any errors that happen in your actions. And then you can do whatever conditional stuff that you want to do when the error happens on your action. So that's a lot of new stuff. Not many on the changes side, but a lot of new stuff that's been added to the SharePoint framework. Now let's talk about what's fixed. Now, in previous release notes of the SharePoint framework, we'd sometimes see a couple of issues that were listed that were fixed by a new release. We'd see like maybe four, maybe three, something like that. But in these release notes, if you jump over to the 1.14 release notes, you will see and jump that scroll to the very bottom, you will see a whole slew of issues that have been fixed. We've got 25-ish some issues that are listed here, but there's so many more that are probably not listed here that were also addressed by this. Some of these go way, way back. Like for example, I know that there's an issue 3219. This issue was opened back in January of 2019. That's three years ago, three years ago from when I'm recording this and when 1.14 came out. Not only that, Microsoft acknowledged that it was a bug that same month, three years ago, but it just sat there. It wasn't until, again, I think Alex got involved here. In December of 2021, Alex jumped in and said, hey, it's been fixed in 1.14 beta. We're seeing Alex's impact right there. I think that's pretty darn huge. A lot of things that were fixed, but it's not just new stuff. It's not just things that were fixed and updated. We also got some stuff that we lost. The first one of these that we lost is going to be probably disappointing to a bunch of people. Back in SharePoint framework, 1.10, when that was released, I think it was about two years ago or so. It was in January of 2020. When Microsoft announced that release, they announced preview support, developer preview support for using SharePoint framework web parts as the UI layer for your office add-ins. Specifically, they only made it work for the Outlook web client. Now, the idea was to do the same thing we can do with tabs with Microsoft Teams. You build a web part. You say, hey, it can run inside of Teams as a tab. Ta-da. It renders in a Microsoft Teams tab, but we didn't hear anything about this for two years. When I was involved in a lot of the release modes and helping Microsoft with the docs for a while and when the 1.13 release came out, I was tapping around. I'm like, are you guys going to do anything about this? A lot of people are asking about this. They're really like, where's the future for this? The response was basically, hey, in the docs, we need to drop back. We need to go back to the docs and we need to deprecate the support for SharePoint framework office add-ins. Sorry, for using SharePoint framework as an option for doing office add-ins. In fact, we really deprecated it. We marked it as experimental. That doesn't bode well for the feature. I don't know what happened here, but it sure feels like Microsoft said, we don't know when this is going to happen. We might as well just stop it. We might as well just not do this. What we're going to see that's been removed in the 1.14 is they're removing the interface iOffice and they're also removing the object Office off of the SDK. You can go to this.context.sdks and you can get to Teams, or you used to be able to get to Office as well. In 1.14, it's gone. It was never fully supported. It was always a developer preview feature, so I don't know. For those of you who are asking, hey, what are the plans for being able to do that? There's nothing to share. This is basically just a confirmation that you shouldn't be using the SharePoint framework for this, because now they're blocking you from doing it. You want to build Office add-ins? Go get the Yeoman generator for Office add-ins and go create a web project to do that. The other thing they did is they've removed the Legacy Graph APIs. Back in 1.4.1, they introduced an object called the Microsoft Graph Client API. They introduced it as a developer preview and it never made it out of developer preview. In fact, it was effectively replaced in the 1.6 release of the SharePoint framework a few months later. So what Microsoft had done back in the day is that they had created their own, Microsoft being the SharePoint framework team, they created their own version of a JavaScript API for the Microsoft Graph REST API. But after they did that during the developer preview, the Microsoft Graph team said, we now have a JavaScript SDK for the Microsoft Graph. And the SharePoint framework team took a step back and they're like, wait a minute, if you guys have one, we don't need to have one that we have to maintain. So instead, why don't we as the SharePoint framework team, why don't we just take yours and you've got one little initialization method that you need to go through and to set the access token on how you're going to connect to it. We can do that for developers. So that's what it does. It actually takes that piece and it automatically initializes it for us. That was done in a new object called the MS Graph Client. And that's what we've been supposed to been using for the longest time. And Microsoft has told us, use the MS Graph Client API into SharePoint framework. Don't use the Microsoft Graph Client. So two different things, right? They said that the Microsoft Graph Client, it was deprecated, it was going to go away eventually. That has now been removed in 1.14, as have all of its related interfaces and arguments and stuff like that that were related to it. So there's a handful of things that got deleted there. So check the release notes to find all of those different things that were removed. Related to Graph. And there we have things like the Graph HTTP client, the client configuration, the client response, and then the associated interfaces that went with it as well. So those are the two things that were removed. Support for Office add-ins and the legacy Graph client. There are two deprecations. I've already gone over one of them. And that is the list view command set event handling. That method, the on list view updated, that got retired, or that's now been marked as deprecated. So what that means is it's going away. It's going to go away at some point in the future. You might as well stop using it. Instead, you should be using the new option, which is the list view state event that we covered, that I covered previously. The other thing that was removed, if you remember back in the 1.13 release, Microsoft officially removed the local workbench from our development environments that we could locally play with our SharePoint framework web parts. They officially removed that after giving us a warning a couple versions ahead of time. Well, when that happened, after the 1.13 release came out, I was looking at the SDK and I was like, why do we still have an option for local on the environment type enumeration? If that's no longer an option, shouldn't that be removed? And so they were like, oops, you know what? We can't just remove it out of the blue. So we're going to mark it as deprecated for now. So the local option is now marked as deprecated, which means it's going to go away soon. But like right now it's irrelevant because if you try to use it in 1.14, it's not even going to, it's not going to, it's useless because you can't run the local workbench in 1.14. It doesn't exist. It doesn't exist since 1.13. All right. How's that for a lot of stuff in 1.13? That took a long time to get through. Hey, look, if you've made it this far, you've probably got a little bit of perspective on what I meant when I said 1.14 is filled with a ton of news, a lot of new stuff, a lot of new APIs, a couple updated APIs, a lot of stuff around list view extensions for SharePoint framework command set extensions. And my goal of this whole episode was just to give you a solid overview on everything that you're going to find and also share a bunch of links and resources on where you'll find some stuff. Thanks for tuning in. I hope you learned something. You got a question or comment? Let me know what you think by dropping a comment in the video below or tweeting me at Andrew Connell or at Voitamos. And if you liked this episode, man, I'd really appreciate it if you'd share it with the rest of your friends. This episode, as I said earlier, is also available as a blog post on Voitamos.io and on the Voitamos podcast at Voitamos.show. I've included links in the description below to these other resources. And hey, don't forget to subscribe to this channel and click that little bell in the corner to be notified of future episodes.