Posted on Leave a comment

Developers: Learn what’s new in TypeScript 4.0

Avatar

Daniel

Today we are thrilled to announce the availability of TypeScript 4.0! This version of the language represents our next generation of TypeScript releases, as we dive deeper into expressivity, productivity, and scalability.

If you’re not familiar with TypeScript, it’s a language that builds on top of JavaScript by adding syntax for static types. The idea is that by writing down the types of your values and where they’re used, you can use TypeScript to type-check your code and tell you about mistakes before you run your code (and even before saving your file). You can then use the TypeScript compiler to then strip away types from your code, and leaving you with clean, readable JavaScript that runs anywhere. Beyond checking, TypeScript also uses static types to power great editor tooling like auto-completion, code navigation, refactorings, and more. In fact, if you’ve used JavaScript in an editor like Visual Studio Code or Visual Studio, you’ve already been using an experience powered by types and TypeScript. You can learn more about all of this on our website.

With TypeScript 4.0, there are no major breaking changes. In fact, if you’re new to the language, now is the best time to start using it. The community is already here and growing, with working code and great new resources to learn. And one thing to keep in mind: despite all the good stuff we’re bringing in 4.0, you really only need to know the basics of TypeScript to be productive!

If you’re already using TypeScript in your project, you can either get it through NuGet or use npm with the following command:

npm install -D typescript

You can also get editor support by

TypeScript is a core part of many people’s JavaScript stack today. On npm, TypeScript saw over 50 million monthly downloads for the first time in July! And while we recognize there’s always room for growth and improvement, it’s clear that most people coding in TypeScript really do enjoy it. StackOverflow’s most recent developer survey pins TypeScript as the 2nd most-loved language. In the most recent State of JS Survey, around 89% of developers who used TypeScript said that they would use it again.

It’s worth digging a bit into how we got here. In our past two major versions, we looked back at some highlights that shined over the years. For TypeScript 4.0, we’re going to keep up that tradition.

Looking back from 3.0 onward, there’s a dizzying number of changes, but TypeScript 3.0 itself came out with a punch. Unifying tuple types and parameter lists was a big highlight, enabling tons of existing JavaScript patterns on functions. The release also featured project references to help scale up, organize, and share across codebases. One small change that had a big impact was that 3.0 introduced a type-safe alternative to any called unknown.

TypeScript 3.1 extended the capabilities of mapped types to work on tuple and array types, and made it dramatically easier to attach properties to functions without resorting to TypeScript-specific runtime features that have fallen out of use.

TypeScript 3.2 allowed object spreads on generic types, and leveraged 3.0’s capabilities to better model meta-programming with functions by strictly typing bind, call, and apply. TypeScript 3.3 focused a bit on stability following 3.2, but also brought quality-of-life improvements when using union type methods, and added file-incremental builds under --build mode.

In the 3.4 release, we leaned farther into supporting functional patterns, with better support for immutable data structures, and improved inference on higher-order generic functions. As a big plus, this release introduced the --incremental flag, a way to get faster compiles and type-checks by avoiding a full rebuild on every run of TypeScript, without project references.

With TypeScript 3.5 and 3.6, we saw some tightening up of the type system rules, along with smarter compatibility checking rules.

TypeScript 3.7 was a very noteworthy release because it featured a rich combination of new type system features with ECMAScript features. From the type-system side, we saw recursive type alias references and support for assertion-style functions, both which are unique type-system features. From the JavaScript side, the release brought optional chaining and coalescing, two of the most highly demanded features for TypeScript and JavaScript users alike, championed in TC39 in part by our team.

Much more recently, 3.8 and 3.9 have brought type-only imports/exports, along with ECMAScript features like private fields, top-level await in modules, and new export * syntaxes. These releases also delivered performance and scalability optimizations.

We haven’t even touched on all the work in our language service, our infrastructure, our website, and other core projects which are incredibly valuable to the TypeScript experience. Beyond the core team’s projects is the incredible community of contributors in the ecosystem, pushing the experience forward, and helping out with DefinitelyTyped and even TypeScript itself. DefinitelyTyped had just 80 pull requests in 2012 when it first started, picking up on the tail end of the year. In 2019, it had over 8300 pull requests, which still astounds us. These contributions are fundamental to the TypeScript experience, so we’re grateful for such a bustling and eager community that’s been improving the ecosystem and pushed us to constantly improve.

What’s New?

All this brings us to 4.0! So, without further ado, let’s dive into what’s new!

Variadic Tuple Types

Consider a function in JavaScript called concat that takes two array or tuple types and concatenates them together to make a new array.

function concat(arr1, arr2) { return [...arr1, ...arr2];
}

Also consider tail, that takes an array or tuple, and returns all elements but the first.

function tail(arg) { const [_, ...result] = arg; return result
}

How would we type either of these in TypeScript?

For concat, the only valid thing we could do in older versions of the language was to try and write some overloads.

function concat(arr1: [], arr2: []): [];
function concat<A>(arr1: [A], arr2: []): [A];
function concat<A, B>(arr1: [A, B], arr2: []): [A, B];
function concat<A, B, C>(arr1: [A, B, C], arr2: []): [A, B, C];
function concat<A, B, C, D>(arr1: [A, B, C, D], arr2: []): [A, B, C, D];
function concat<A, B, C, D, E>(arr1: [A, B, C, D, E], arr2: []): [A, B, C, D, E];
function concat<A, B, C, D, E, F>(arr1: [A, B, C, D, E, F], arr2: []): [A, B, C, D, E, F];)

Uh…okay, that’s…seven overloads for when the second array is always empty. Let’s add some for when arr2 has one argument.

function concat<A2>(arr1: [], arr2: [A2]): [A2];
function concat<A1, A2>(arr1: [A1], arr2: [A2]): [A1, A2];
function concat<A1, B1, A2>(arr1: [A1, B1], arr2: [A2]): [A1, B1, A2];
function concat<A1, B1, C1, A2>(arr1: [A1, B1, C1], arr2: [A2]): [A1, B1, C1, A2];
function concat<A1, B1, C1, D1, A2>(arr1: [A1, B1, C1, D1], arr2: [A2]): [A1, B1, C1, D1, A2];
function concat<A1, B1, C1, D1, E1, A2>(arr1: [A1, B1, C1, D1, E1], arr2: [A2]): [A1, B1, C1, D1, E1, A2];
function concat<A1, B1, C1, D1, E1, F1, A2>(arr1: [A1, B1, C1, D1, E1, F1], arr2: [A2]): [A1, B1, C1, D1, E1, F1, A2];

We hope it’s clear that this is getting unreasonable. Unfortunately, you’d also end up with the same sorts of issues typing a function like tail.

This is another case of what we like to call “death by a thousand overloads”, and it doesn’t even solve the problem generally. It only gives correct types for as many overloads as we care to write. If we wanted to make a catch-all case, we’d need an overload like the following:

function concat<T, U>(arr1: T[], arr2: U[]): Array<T | U>;

But that signature doesn’t encode anything about the lengths of the input, or the order of the elements, when using tuples.

TypeScript 4.0 brings two fundamental changes, along with inference improvements, to make typing these possible.

The first change is that spreads in tuple type syntax can now be generic. This means that we can represent higher-order operations on tuples and arrays even when we don’t know the actual types we’re operating over. When generic spreads are instantiated (or, replaced with a real type) in these tuple types, they can produce other sets of array and tuple types.

For example, that means we can type function like tail, without our “death by a thousand overloads” issue.

function tail<T extends any[]>(arr: readonly [any, ...T]) { const [_ignored, ...rest] = arr; return rest;
} const myTuple = [1, 2, 3, 4] as const;
const myArray = ["hello", "world"]; // type [2, 3, 4]
const r1 = tail(myTuple); // type [2, 3, 4, ...string[]]
const r2 = tail([...myTuple, ...myArray] as const);

The second change is that rest elements can occur anywhere in a tuple – not just at the end!

type Strings = [string, string];
type Numbers = [number, number]; // [string, string, number, number, boolean]
type StrStrNumNumBool = [...Strings, ...Numbers, boolean];

Previously, TypeScript would issue an error like the following:

A rest element must be last in a tuple type.

But with TypeScript 4.0, this restriction is relaxed.

Note that in cases when we spread in a type without a known length, the resulting type becomes unbounded as well, and all the following elements factor into the resulting rest element type.

type Strings = [string, string];
type Numbers = number[] // [string, string, ...Array<number | boolean>]
type Unbounded = [...Strings, ...Numbers, boolean];

By combining both of these behaviors together, we can write a single well-typed signature for concat:

type Arr = readonly any[]; function concat<T extends Arr, U extends Arr>(arr1: T, arr2: U): [...T, ...U] { return [...arr1, ...arr2];
}

While that one signature is still a bit lengthy, it’s just one signature that doesn’t have to be repeated, and it gives predictable behavior on all arrays and tuples.

This functionality on its own is great, but it shines in more sophisticated scenarios too. For example, consider a function to partially apply arguments called partialCall. partialCall takes a function – let’s call it f – along with the initial few arguments that f expects. It then returns a new function that takes any other arguments that f still needs, and calls f when it receives them.

function partialCall(f, ...headArgs) { return (...tailArgs) => f(...headArgs, ...tailArgs)
}

TypeScript 4.0 improves the inference process for rest parameters and rest tuple elements so that we can type this and have it “just work”.

type Arr = readonly unknown[]; function partialCall<T extends Arr, U extends Arr, R>( f: (...args: [...T, ...U]) => R, ...headArgs: T
) { return (...tailArgs: U) => f(...headArgs, ...tailArgs)
}

In this case, partialCall understands which parameters it can and can’t initially take, and returns functions that appropriately accept and reject anything left over.

const foo = (x: string, y: number, z: boolean) => {} // This doesn't work because we're feeding in the wrong type for 'x'.
const f1 = partialCall(foo, 100);
// ~~~
// error! Argument of type 'number' is not assignable to parameter of type 'string'. // This doesn't work because we're passing in too many arguments.
const f2 = partialCall(foo, "hello", 100, true, "oops")
// ~~~~~~
// error! Expected 4 arguments, but got 5. // This works! It has the type '(y: number, z: boolean) => void'
const f3 = partialCall(foo, "hello"); // What can we do with f3 now? f3(123, true); // works! f3();
// error! Expected 2 arguments, but got 0. f3(123, "hello");
// ~~~~~~~
// error! Argument of type 'string' is not assignable to parameter of type 'boolean'.

Variadic tuple types enable a lot of new exciting patterns, especially around function composition. We expect we may be able to leverage it to do a better job type-checking JavaScript’s built-in bind method. A handful of other inference improvements and patterns also went into this, and if you’re interested in learning more, you can take a look at the pull request for variadic tuples.

Labeled Tuple Elements

Improving the experience around tuple types and parameter lists is important because it allows us to get strongly typed validation around common JavaScript idioms – really just slicing and dicing argument lists and passing them to other functions. The idea that we can use tuple types for rest parameters is one place where this is crucial.

For example, the following function that uses a tuple type as a rest parameter…

function foo(...args: [string, number]): void { // ...
}

…should appear no different from the following function…

function foo(arg0: string, arg1: number): void { // ...
}

…for any caller of foo.

foo("hello", 42); // works foo("hello", 42, true); // error
foo("hello"); // error

There is one place where the differences begin to become observable though: readability. In the first example, we have no parameter names for the first and second elements. While these have no impact on type-checking, the lack of labels on tuple positions can make them harder to use – harder to communicate our intent.

That’s why in TypeScript 4.0, tuples types can now provide labels.

type Range = [start: number, end: number];

To deepen the connection between parameter lists and tuple types, the syntax for rest elements and optional elements mirrors the syntax for parameter lists.

type Foo = [first: number, second?: string, ...rest: any[]];

There are a few rules when using labeled tuples. For one, when labeling a tuple element, all other elements in the tuple must also be labeled.

type Bar = [first: string, number];
// ~~~~~~
// error! Tuple members must all have names or all not have names.

It’s worth noting – labels don’t require us to name our variables differently when destructuring. They’re purely there for documentation and tooling.

function foo(x: [first: string, second: number]) { // ... // note: we didn't need to name these 'first' and 'second' let [a, b] = x; // ...
}

Overall, labeled tuples are handy when taking advantage of patterns around tuples and argument lists, along with implementing overloads in a type-safe way. In fact, TypeScript’s editor support will try to display them as overloads when possible.

Signature help displaying a union of labeled tuples as in a parameter list as two signatures

To learn more, check out the pull request for labeled tuple elements.

Class Property Inference from Constructors

TypeScript 4.0 can now use control flow analysis to determine the types of properties in classes when noImplicitAny is enabled.

class Square { // Previously: implicit any! // Now: inferred to `number`! area; sideLength; constructor(sideLength: number) { this.sideLength = sideLength; this.area = sideLength ** 2; }
}

In cases where not all paths of a constructor assign to an instance member, the property is considered to potentially be undefined.

class Square { sideLength; constructor(sideLength: number) { if (Math.random()) { this.sideLength = sideLength; } } get area() { return this.sideLength ** 2; // ~~~~~~~~~~~~~~~ // error! Object is possibly 'undefined'. }
}

In cases where you know better (e.g. you have an initialize method of some sort), you’ll still need an explicit type annotation along with a definite assignment assertion (!) if you’re in strictPropertyInitialization.

class Square { // definite assignment assertion // v sideLength!: number; // ^^^^^^^^ // type annotation constructor(sideLength: number) { this.initialize(sideLength) } initialize(sideLength: number) { this.sideLength = sideLength; } get area() { return this.sideLength ** 2; }
}

For more details, see the implementing pull request.

Short-Circuiting Assignment Operators

JavaScript, and a lot of other languages, support a set of operators called compound assignment operators. Compound assignment operators apply an operator to two arguments, and then assign the result to the left side. You may have seen these before:

// Addition
// a = a + b
a += b; // Subtraction
// a = a - b
a -= b; // Multiplication
// a = a * b
a *= b; // Division
// a = a / b
a /= b; // Exponentiation
// a = a ** b
a **= b; // Left Bit Shift
// a = a << b
a <<= b;

So many operators in JavaScript have a corresponding assignment operator! Up until recently, however, there were three notable exceptions: logical and (&&), logical or (||), and nullish coalescing (??).

That’s why TypeScript 4.0 supports a new ECMAScript feature to add three new assignment operators: &&=, ||=, and ??=.

These operators are great for substituting any example where a user might write code like the following:

a = a && b;
a = a || b;
a = a ?? b;

Or a similar if block like

// could be 'a ||= b'
if (!a) { a = b;
}

There are even some patterns we’ve seen (or, uh, written ourselves) to lazily initialize values, only if they’ll be needed.

let values: string[]; // Before
(values ?? (values = [])).push("hello"); // After
(values ??= []).push("hello");

(look, we’re not proud of all the code we write…)

On the rare case that you use getters or setters with side-effects, it’s worth noting that these operators only perform assignments if necessary. In that sense, not only is the right side of the operator “short-circuited” – the assignment itself is too.

obj.prop ||= foo(); // roughly equivalent to either of the following obj.prop || (obj.prop = foo()); if (!obj.prop) { obj.prop = foo();
}

Try running the following example to see how that differs from always performing the assignment.

const obj = { get prop() { console.log("getter has run"); // Replace me! return Math.random() < 0.5; }, set prop(_val: boolean) { console.log("setter has run"); }
}; function foo() { console.log("right side evaluated"); return true;
} console.log("This one always runs the setter");
obj.prop = obj.prop || foo(); console.log("This one *sometimes* runs the setter");
obj.prop ||= foo();

We’d like to extend a big thanks to community member Wenlu Wang for this contribution!

For more details, you can take a look at the pull request here. You can also check out TC39’s proposal repository for this feature.

unknown on catch Clause Bindings

Since the beginning days of TypeScript, catch clause variables have always been typed as any. This meant that TypeScript allowed you to do anything you wanted with them.

try { // ...
}
catch (x) { // x has type 'any' - have fun! console.log(x.message); console.log(x.toUpperCase()); x++; x.yadda.yadda.yadda();
}

The above has some undesirable behavior if we’re trying to prevent more errors from happening in our error-handling code! Because these variables have the type any by default, they lack any type-safety which could have errored on invalid operations.

That’s why TypeScript 4.0 now lets you specify the type of catch clause variables as unknown instead. unknown is safer than any because it reminds us that we need to perform some sorts of type-checks before operating on our values.

try { // ...
}
catch (e: unknown) { // error! // Property 'toUpperCase' does not exist on type 'unknown'. console.log(e.toUpperCase()); if (typeof e === "string") { // works! // We've narrowed 'e' down to the type 'string'. console.log(e.toUpperCase()); }
}

While the types of catch variables won’t change by default, we might consider a new --strict mode flag in the future so that users can opt in to this behavior. In the meantime, it should be possible to write a lint rule to force catch variables to have an explicit annotation of either : any or : unknown.

For more details you can peek at the changes for this feature.

Custom JSX Factories

When using JSX, a fragment is a type of JSX element that allows us to return multiple child elements. When we first implemented fragments in TypeScript, we didn’t have a great idea about how other libraries would utilize them. Nowadays most other libraries that encourage using JSX and support fragments have a similar API shape.

In TypeScript 4.0, users can customize the fragment factory through the new jsxFragmentFactory option.

As an example, the following tsconfig.json file tells TypeScript to transform JSX in a way compatible with React, but switches each factory invocation to h instead of React.createElement, and uses Fragment instead of React.Fragment.

{ "compilerOptions": { "target": "esnext", "module": "commonjs", "jsx": "react", "jsxFactory": "h", "jsxFragmentFactory": "Fragment" }
}

In cases where you need to have a different JSX factory on a per-file basis, you can take advantage of the new /** @jsxFrag */ pragma comment. For example, the following…

// Note: these pragma comments need to be written
// with a JSDoc-style multiline syntax to take effect.
/** @jsx h */
/** @jsxFrag Fragment */ import { h, Fragment } from "preact"; let stuff = <> <div>Hello</div>
</>;

…will get transformed to this output JavaScript…

// Note: these pragma comments need to be written
// with a JSDoc-style multiline syntax to take effect.
/** @jsx h */
/** @jsxFrag Fragment */
import { h, Fragment } from "preact";
let stuff = h(Fragment, null, h("div", null, "Hello"));

We’d like to extend a big thanks to community member Noj Vek for sending this pull request and patiently working with our team on it.

You can see that the pull request for more details!

Speed Improvements in build mode with --noEmitOnError

Previously, compiling a program after a previous compile with errors under --incremental would be extremely slow when using the --noEmitOnError flag. This is because none of the information from the last compilation would be cached in a .tsbuildinfo file based on the --noEmitOnError flag.

TypeScript 4.0 changes this which gives a great speed boost in these scenarios, and in turn improves --build mode scenarios (which imply both --incremental and --noEmitOnError).

For details, read up more on the pull request.

--incremental with --noEmit

TypeScript 4.0 allows us to use the --noEmit flag when while still leveraging --incremental compiles. This was previously not allowed, as --incremental needs to emit a .tsbuildinfo files; however, the use-case to enable faster incremental builds is important enough to enable for all users.

For more details, you can see the implementing pull request.

Editor Improvements

The TypeScript compiler doesn’t only power the editing experience for TypeScript itself in most major editors – it also powers the JavaScript experience in the Visual Studio family of editors and more. For that reason, much of our work focuses on improving editor scenarios – the place you spend most of your time as a developer.

Using new TypeScript/JavaScript functionality in your editor will differ depending on your editor, but

You can check out a partial list of editors that have support for TypeScript to learn more about whether your favorite editor has support to use new versions.

Convert to Optional Chaining

Optional chaining is a recent feature that’s received a lot of love. That’s why TypeScript 4.0 brings a new refactoring to convert common patterns to take advantage of optional chaining and nullish coalescing!

Converting a && a.b.c && a.b.c.d.e.f() to a?.b.c?.d.e.f.()

Keep in mind that while this refactoring doesn’t perfectly capture the same behavior due to subtleties with truthiness/falsiness in JavaScript, we believe it should capture the intent for most use-cases, especially when TypeScript has more precise knowledge of your types.

For more details, check out the pull request for this feature.

/** @deprecated */ Support

TypeScript’s editing support now recognizes when a declaration has been marked with a /** @deprecated * JSDoc comment. That information is surfaced in completion lists and as a suggestion diagnostic that editors can handle specially. In an editor like VS Code, deprecated values are typically displayed a strike-though style like this.

Some examples of deprecated declarations with strikethrough text in the editor

This new functionality is available thanks to Wenlu Wang. See the pull request for more details.

Partial Semantic Mode at Startup

We’ve heard a lot from users suffering from long startup times, especially on bigger projects. The culprit is usually a process called program construction. This is the process of starting with an initial set of root files, parsing them, finding their dependencies, parsing those dependencies, finding those dependencies’ dependencies, and so on. The bigger your project is, the longer you’ll have to wait before you can get basic editor operations like go-to-definition or quick info.

That’s why we’ve been working on a new mode for editors to provide a partial experience until the full language service experience has loaded up. The core idea is that editors can run a lightweight partial server that only looks at the current files that the editor has open.

It’s hard to say precisely what sorts of improvements you’ll see, but anecdotally, it used to take anywhere between 20 seconds to a minute before TypeScript would become fully responsive on the Visual Studio Code codebase. In contrast, our new partial semantic mode seems to bring that delay down to just a few seconds. As an example, in the following video, you can see two side-by-side editors with TypeScript 3.9 running on the left and TypeScript 4.0 running on the right.

When restarting both editors on a particularly large codebase, the one with TypeScript 3.9 can’t provide completions or quick info at all. On the other hand, the editor with TypeScript 4.0 can immediately give us a rich experience in the current file we’re editing, despite loading the full project in the background.

Currently the only editor that supports this mode is Visual Studio Code which has some UX improvements coming up in Visual Studio Code Insiders. We recognize that this experience may still have room for polish in UX and functionality, and we have a list of improvements in mind. We’re looking for more feedback on what you think might be useful.

For more information, you can see the original proposal, the implementing pull request, along with the follow-up meta issue.

Smarter Auto-Imports

Auto-import is a fantastic feature that makes coding a lot easier; however, every time auto-import doesn’t seem to work, it can throw users off a lot. One specific issue that we heard from users was that auto-imports didn’t work on dependencies that were written in TypeScript – that is, until they wrote at least one explicit import somewhere else in their project.

Why would auto-imports work for @types packages, but not for packages that ship their own types? It turns out that auto-imports only work on packages your project already includes. Because TypeScript has some quirky defaults that automatically add packages in node_modules/@types to your project, those packages would be auto-imported. On the other hand, other packages were excluded because crawling through all your node_modules packages can be really expensive.

All of this leads to a pretty lousy getting started experience for when you’re trying to auto-import something that you’ve just installed but haven’t used yet.

TypeScript 4.0 now does a little extra work in editor scenarios to include the packages you’ve listed in your package.json‘s dependencies (and peerDependencies) fields. The information from these packages is only used to improve auto-imports, and doesn’t change anything else like type-checking. This allows us to provide auto-imports for all of your dependencies that have types, without incurring the cost of a complete node_modules search.

In the rare cases when your package.json lists more than ten typed dependencies that haven’t been imported yet, this feature automatically disables itself to prevent slow project loading. To force the feature to work, or to disable it entirely, you should be able to configure your editor. For Visual Studio Code, this is the “Include Package JSON Auto Imports” (or typescript.preferences.includePackageJsonAutoImports) setting.

Configuring 'include package JSON auto imports' For more details, you can see the proposal issue along with the implementing pull request.

Our New Website!

The TypeScript website has recently been rewritten from the ground up and rolled out!

A screenshot of the new TypeScript website

We already wrote a bit about our new site, so you can read up more there; but it’s worth mentioning that we’re still looking to hear what you think! If you have questions, comments, or suggestions, you can file them over on the website’s issue tracker.

Breaking Changes

lib.d.ts Changes

Our lib.d.ts declarations have changed – most specifically, types for the DOM have changed. The most notable change may be the removal of document.origin which only worked in old versions of IE and Safari MDN recommends moving to self.origin.

Properties Overriding Accessors (and vice versa) is an Error

Previously, it was only an error for properties to override accessors, or accessors to override properties, when using useDefineForClassFields; however, TypeScript now always issues an error when declaring a property in a derived class that would override a getter or setter in the base class.

class Base { get foo() { return 100; } set foo() { // ... }
} class Derived extends Base { foo = 10;
// ~~~
// error!
// 'foo' is defined as an accessor in class 'Base',
// but is overridden here in 'Derived' as an instance property.
}
class Base { prop = 10;
} class Derived extends Base { get prop() { // ~~~~ // error! // 'prop' is defined as a property in class 'Base', but is overridden here in 'Derived' as an accessor. return 100; }
}

See more details on the implementing pull request.

Operands for delete must be optional.

When using the delete operator in strictNullChecks, the operand must now be any, unknown, never, or be optional (in that it contains undefined in the type). Otherwise, use of the delete operator is an error.

interface Thing { prop: string;
} function f(x: Thing) { delete x.prop; // ~~~~~~ // error! The operand of a 'delete' operator must be optional.
}

See more details on the implementing pull request.

Usage of TypeScript’s Node Factory is Deprecated

Today TypeScript provides a set of “factory” functions for producing AST Nodes; however, TypeScript 4.0 provides a new node factory API. As a result, for TypeScript 4.0 we’ve made the decision to deprecate these older functions in favor of the new ones.

For more details, read up on the relevant pull request for this change.

What’s Next?

You’ve reached the end of this release post, but luckily there’s more coming. TypeScript 4.1’s iteration plan is already up so you can get a sense of what’s on the horizon. In the meantime, you can give new features in 4.1 a shot by using nightly builds in your workspace, or maybe just in your editor. Whether you’re on TypeScript 4.0, or the next version, we’re interested in hearing feedback! Feel free to leave a comment below, reach out over Twitter, or file an issue on GitHub.

We said it once, and we’ll say it again: we owe so much to our community for all their work and dedication. In turn, we want to making coding in TypeScript and JavaScript the pure joy you deserve. This involves not just focusing on one thing, but a combination of improving the language and editing experience, keeping an eye on speed, iterating on our UX, smoothing the onboarding and learning experience as a whole, and more.

Thank you so much, and enjoy 4.0!

Happy Hacking!

– Daniel Rosenwasser and the TypeScript Team

Posted on Leave a comment

Battletoads return for new gaming adventures

Summary

  • Battletoads launches today with Xbox Game Pass and on Xbox One, Windows 10 and Steam.
  • Celebrate with crossover goodies, new merchandise, free comics and more!
  • Hear from the ’Toads themselves in an exclusive new interview with a familiar face.

26 years after their last game hit the arcades, the wait is finally over: Zitz, Rash and Pimple are leaping back into action today, August 20, with Xbox Game Pass and on Xbox One, Windows 10 PC and Steam worldwide! Just like in the original Battletoads games, they’re embarking on an outer-space adventure packed full of gameplay that takes in everything from brawling action to precision platforming, space battles and more.

There’s no need to take on these challenges alone – not when up to three players can team up for some drop-in couch co-op. That’s exactly what some of the Battletoads team did in our Gameplay Showcase earlier this week, and if you missed it, you can watch them in action here:

[embedded content]

In the weeks leading up to our launch extravaganza we’ve been providing players with plenty of ways to get more Battletoads in their lives. Our art contest to win a hand-drawn animation cel used in the game is already underway, and we also added a Battletoads EP to streaming and download services so you can rock out to the game’s soundtrack whenever you please.

Keen to support the amphibians’ arrival, the Sea of Thieves team recently unveiled the in-game Fightin’ Frogs Ship Set – it’s due to go on sale in the Sea of Thieves Pirate Emporium later this year, but you can plunder it for yourself right now, free of charge, by completing the first act of Battletoads! Check out the video for more specifics on how to snag the set.

[embedded content]

Now that the game’s available to play, it doesn’t mean we’re out of surprises. Not only is there an official Battletoads Xbox One controller design incoming from Xbox Design Lab, we’re happy to unveil a whole new range of Battletoads merchandise over at the official Rare store, with new product types featuring the redesigned logo, the cast of wild new characters that the ’Toads will be butting heads with during the game’s cartoon-style story, and much more.


Speaking of stories, we know Battletoads fans will have been wondering what the iconic trio have been up to between games. To answer that, we’ve teamed up with our friends at Titan Comics to create a three-part comic series that chronicles a ‘lost adventure’, helping to bridge the gap between our heroes’ last starring role in Battletoads Arcade and the present day. All three issues will be made available to read for free over at comiXology – so make sure you’re following Rare on Twitter, Facebook or Instagram so you don’t miss out when the first instalment lands!

We teased another upcoming collaboration with iam8bit last week, and today’s the day we pull back the curtain on two new premium Battletoads items. Firstly, there’s the Smash Hits vinyl soundtrack, comprising two LPs featuring music from the 8-bit original as well as the latest instalment in the series. Secondly, there’s the Legacy Cartridge Collection – physical editions of the original game, newly amped up with deluxe packaging and two ’Toad-themed color variants. Both items are limited runs and are live for pre-order now on iam8bit’s website!

We’re incredibly excited to launch this brand new Battletoads for a new generation of gamers, but what about Zitz, Rash and Pimple themselves? To find out, we sent Larry Hryb, Xbox Live’s Major Nelson, halfway across the galaxy to an intergalactic premiere where he got the chance to meet the ’Toads in person. Check out that lively interview here:

[embedded content]

Whether you’re a Battletoads veteran from the ’90s or this is your first time experiencing the multi-genre mayhem of the series, we hope you enjoy the new game as much as Dlala Studios and Rare have enjoyed bringing Zitz, Rash and Pimple brawling, leaping and quipping headlong into 2020. We couldn’t be happier to say it: yes, we have Battletoads, and so do you. Get it with Xbox Game Pass now or buy it from the Microsoft Store page or through Steam. The Battletoads are back!

Posted on Leave a comment

Educators: Get ready for the school year with free event support, tech training

As we head toward a new school year that will be largely remote or hybrid, educators are faced with new challenges: creating safe and healthy learning environments and designing welcoming, engaging experiences that are accessible for all students. Like graduations at the end of the year, new student orientation is an especially important experience that connects students, faculty, and administrators and sets the tone for the year.

Institutions from K-12 schools through universities plan events that often take place over the course of several days to help new students feel comfortable, show them what makes their school unique, and connect them to others. And beyond the fun and camaraderie they create, orientation events are often some of the best times for faculty and administrators to share important information.

Starting today, the Microsoft Store team is offering free support to help institutions drive engaging online orientations and help staff and students make the most of their tech for online learning. Sign up here to get started!

With the current need to limit in-person interaction, schools are recognizing that orientation shouldn’t be one single event, but an ongoing program that keeps students engaged. So, how will institutions present all their welcome and informational sessions when classes may be online or hybrid, and when many students may not physically travel to campus?

Online events will be their best bet. Starting today, the Microsoft Store team is offering free support to help institutions drive engaging online orientations and help staff and students make the most of their tech for online learning. Just tell us what you need to help your students thrive in an online or hybrid learning environment, and our team of nearly 3,000 talented Store associates will help you get the tech training you need to start the new school year with confidence. From smaller-scale sessions to large-scale orientations and trainings, including free Teams Live Events for up to 20,000 participants (until September 30, 2020), Microsoft can help you make the most of remote learning software—we’re here to help, so contact us today!

When you reach out to the Microsoft Store, you can be confident that you’ll get the support you need to make the most of your event. After working with Store associates to plan a virtual graduation, Sandra Ware, Community Partner, STEM Education Advocate, and state education consultant over Virtual Learning for the State of Michigan shared, “I’ve witnessed first-hand the impact that Microsoft’s virtual programs have made and continue to make. Through their video conference platform Teams, thousands of students across the country were able to hear their names called during the virtual graduation initiative. This may seem like a small thing in the midst of global pandemic, but it’s huge when you’re a student who’s worked extremely hard for the one moment when you, your family, and your friends celebrate the completion of a chapter and the beginning of a new one. It’s not just our students’ win; but it’s everyone’s win.”

For extra guidance as you plan for the new year, we’ve also put together an e-book with a handful of resources that provide strategies and ideas for preparing for the transition back to school and planning engaging events with Microsoft Teams that connect students, faculty, and administrators with a more personalized experience.

Preparing and presenting creative, engaging online events sounds like a daunting task—but many organizations are already designing and delivering unique experiences.

SUNY Empire State College in New York was founded specifically to provide individualized and distance learning, first with correspondence courses before launching their first online programs in 1995. So when the pandemic hit, their faculty, administrators, and students were already set up and familiar with Microsoft Teams for all of their remote classes and events.

“SUNY Empire State College is no stranger to online and distance learning, so we were able to make the transition smoothly to protect our students, faculty, and staff at the start of the pandemic,” said Kyle Adams, the college’s Vice President for Strategic Communications. “Communication was key to that transition, not only to deliver information but to hear concerns, answer questions, and establish a calm and deliberative tone in a time of uncertainty. Teams Meetings and Live Events helped us stay connected at every level, from class sessions to staff meetings and town halls for students and employees.”

Adams said that being able to meet, collaborate, and engage with each other and students in a rich virtual environment will be critical as SUNY Empire heads into the new school year and beyond, and continues to adapt to the times.

Though everything is new and different this year, thanks to Teams, Teams Live, and other tools like Flipgrid, organizations can welcome new students with energizing and interactive events of all sizes. To get started developing your plan for creative and engaging back-to-school events, complete the Microsoft Stores contact form and download the Orientation Kit e-book.

Posted on Leave a comment

New data shows how pandemic is accelerating transformation of cybersecurity

An image showing the pandemic's effect on budgets.

The importance of cybersecurity in facilitating productive remote work was a significant catalyst for the two years-worth of digital transformation we observed in the first two months of the COVID-19 pandemic. In this era of ubiquitous computing, security solutions don’t just sniff out threats, they serve as control planes for improving productivity and collaboration by giving end-users easier access to more corporate resources. Microsoft recently concluded a survey of nearly 800 business leaders of companies of more than 500 employees in India (IN), Germany (DE), the United Kingdom (UK) and the United States (US) to better understand their views of the pandemic threat landscape, implications for budgets and staffing, and how they feel the pandemic could reshape the cyber-security long-term.

Among the key insights are data showing that an alarming number of businesses are still impacted by phishing scams, security budgets, and hiring increased in response to COVID-19, and cloud-based technologies and architectures like Zero Trust are significant areas of investment moving forward.

Improving Productivity & Mitigating Threats

Security and IT teams have been working overtime to meet business goals while simultaneously staying ahead of new threats and scams. “Providing secure remote access to resources, apps, and data” is the #1 challenge reported by security leaders. For many businesses, the limits of the trust model they had been using, which leaned heavily on company-managed devices, physical access to buildings, and limited remote access to select line-of-business apps, got exposed early on in the pandemic. This paradigm shift has been most acute in the limitations of basic username/password authentication. As a result, when asked to identify the top security investment made during the pandemic the top response was Multi-factor authentication (MFA).

An graph of the Top 5 Cybersecurity Investments Since Beginning of Pandemic.

In other ways, pandemic security risks feel all too familiar. Asked to identify their best pre-pandemic security investment, most identified anti-phishing technology.  Microsoft Threat Intelligence teams reported a spike in COVID-19 attacks in early March as cybercriminals applied pandemic themed lures to known scams and malware. Business leaders reported phishing threats as the biggest risk to security in that same timeframe, with 90% of indicating that phishing attacks have impacted their organization. More than half said clicking on phishing emails was the highest risk behavior they observed and a full 28% admitted that attackers had successfully phished their users.  Notably, successful phishing attacks were reported in significantly higher numbers from organizations that described their resources as mostly on-premises (36%) as opposed to being more cloud-based.

A graphic of the prevalence of successful phishing attacks.

An image of prevalence of successful phishing attacks

Security Impacting Budgets and Staffing

The role of security in remote work is having a direct impact on security budgets and staffing in 2020 as businesses scale existing solutions, enabling critical new capabilities like MFA, and implement a Zero Trust strategy. In order to adapt to the many business implications of the pandemic, a majority of business leaders reported budget increases for security (58%) and compliance (65%). At the same time, 81% also report feeling pressure to lower overall security costs.  Business leaders from organizations with resources mostly on-premises are especially likely to feel budget pressure, with roughly 1/3rd feeling ‘very pressured.’

To rein in expenses in the short-term, leaders say they are working to improve integrated threat protection to reduce the risk of costly breaches and acquire security solutions with self-help options for users to drive efficiency. In the longer-term, nearly 40% of businesses say they are prioritizing investments in Cloud Security (Cloud Access Security Broker, Cloud Workload Protection Platform, Cloud Security Posture Management), followed by Data & Information Security (28%) and anti-phishing tools (26%).

A graph of cybersecurity budget changes in response to the pandemic.

Technology alone cannot keep pace with the threats and demands facing businesses and their largely remote workforces. Human security expertise is at a premium with more than 80% of companies adding security professionals in response to COVID-19.

A graph of changes to cybersecurity staffing due to pandemic.

5 Ways the Pandemic is Changing Cybersecurity long-term

The pandemic has accelerated digital transformation is several ways that are likely to change the security paradigm for the foreseeable future.

1. Security has proven to be the foundation for digital empathy in a remote workforce during the pandemic. When billions of people formed the largest remote workforce in history, overnight, teams learned much more than how to scale Virtual Private Networks. Companies were reminded that security technology is fundamentally about improving productivity and collaboration through inclusive end-user experiences. Improving end-user experience and productivity while working remotely is the top priority of security business leaders (41%), with “extend security to more apps for remote work” identified as the most positively received action by users. Not surprisingly, then, “providing secure remote access to resources, apps, and data” is the biggest challenge. For many businesses, the journey begins with MFA adoption.

2. Everyone is on a Zero Trust journey. Zero Trust shifted from an option to a business priority in the early days of the pandemic. In light of the growth in remote work, 51% of business leaders are speeding up the deployment of Zero Trust capabilities. The Zero Trust architecture will eventually become the industry standard, which means everyone is on a Zero Trust journey. That reality is reflected in the numbers like 94% of companies report that they are in the process of deploying new Zero Trust capabilities to some extent.

An graph of the impact of pandemic on organizational view of Zero Trust.

3. Diverse data sets mean better Threat Intelligence. The pandemic illustrated the power and scale of the cloud as Microsoft tracked more than 8 trillion daily threat signals from a diverse set of products, services, and feeds around the globe. A blend of automated tools and human insights helped to identify new COVID-19 themed threats before they reached customers – sometimes in a fraction of a second. In other cases, cloud-based filters and detections alert security teams to suspicious behavior. Not surprisingly, 54% of security leaders reported an increase in phishing attacks since the beginning of the pandemic.

4. Cyber resilience is fundamental to business operations. Cybersecurity provides the underpinning to operationally resiliency as more organizations enable secure remote work options. To maintain cyber resilience, businesses need to regularly evaluate their risk threshold and ability to execute cyber resilience processes through a combination of human efforts and technology products and services. The cloud makes developing a comprehensive Cyber Resilience strategy and preparing for a wide range of contingencies simpler.

More than half of cloud forward and hybrid companies report having cyber-resilience strategy for most risk scenarios compared to 40% of primarily on-premises organization. 19% of companies relying primarily upon on-premises technology do not expect to maintain a documented cyber-resilience plan.

5. The cloud is a security imperative. Where people often thought about security as a solution to deploy on top of existing infrastructure, events like Covid-19 showcase the need for truly integrated security for companies of all sizes. As a result, integrated security solutions are now seen as imperative.

A graph of the top 5 cybersecurity investments through the end of 2020.

These insights from security leaders echo many of the best practices that Microsoft has been sharing with customers and working around the clock to help them implement. The bottom line is that the pandemic is clearly accelerating the digital transformation of cyber-security. Microsoft is here to help.  If any of the insights we’ve shared today resonate with you and your teams, here are a few things you should consider

  • Listen to employees and take steps to build digital empathy. Enabling self-help options is a win-win for end-users and IT.
  • Hire diverse security talent and empower them with great threat intelligence and tools.
  • Embrace the reality that remote work is having a lasting impact on the security paradigm. Lean into the power of the cloud for built-in security spanning endpoints to the cloud.

To learn more about Microsoft Security solutions visit our website.  Bookmark the Security blog to keep up with our expert coverage on security matters. Also, follow us at @MSFTSecurity for the latest news and updates on cybersecurity.

Posted on Leave a comment

Find out more about the new Xbox experience

At team Xbox, we’re building a unique set of experiences for the next generation of gaming – an ecosystem of hardware and software working to meet gamers wherever they choose to engage. From Xbox Series X, which will set a new bar for power, speed and compatibility; to the carefully curated game library included with Xbox Game Pass; to immersive and interactive games for gamers and their friends to play across Xbox, PC and mobile devices.

We Believe in Gamer Choice

A critical part of growing any ecosystem is ensuring that it works as players expect in every situation; on Xbox, that means the way you manage your hardware and games, the way you find what you want to play next, and the way you communicate and share with friends. Whichever device you use, we aspire to deliver an amazing Xbox experience – one that keeps you connected to games and friends throughout your day. Your feedback has been invaluable in pursuit of this vision, and today we’re sharing a glimpse of how everything will fit together this holiday. In addition to this blog, check out the video we created, which goes more in-depth on what’s to come.  

Feel Instantly Welcome, However You Choose to Play

All the ways you experience Xbox should feel inviting and familiar, whether you’re on the couch playing on your console, rallying a group of friends together from your PC, or sneaking in a quick session on your Android device via cloud gaming. The new Xbox look and feel is designed to be faster to use, more approachable and visually appealing. This holiday it will be shared across all Xbox mobile apps, Xbox Game Pass on PC, and of course Xbox One and Xbox Series X consoles. Text is more readable, elements on screen are easier to understand at a glance, and accomplishing your tasks is faster than ever. This includes tile shape, fonts, an updated illustration style, and more. The overall layout of most of the console pages remains familiar, just faster and more focused.

We’re also there to support your gaming questions, no matter the place or time.From Xbox Assist on your console, to Xbox Support on the web, to Xbox Game Pass on your phone or PC, you can get any help you need and be back to gaming as quickly as possible.

Xbox is Ready to Go When You Are

Xbox Series X will set a new bar for speed when it launches this November, and we’re taking the same approach to accelerate experiences across Xbox. The Xbox Velocity Architecture and Quick Resume technology make games quicker to launch, and we knew we also wanted to make them faster to discover, talk about, and download – even while you’re away from your console. Your phone, PC, or console – all working together. Any time you have available to spend gaming is valuable, and we wanted to ensure it was time spent playing, not waiting. The Home screen will load more than 50 percent faster when you boot your Xbox, and is almost 30 percent faster to load when you’re returning from a game. Furthermore, these improvements use 40 percent less memory than what was previously required.  

Earlier this month we unveiled the new Microsoft Store on the console, rebuilt with your feedback in mind – and it’s fast! We’ve cut the app launch time to about two seconds, and updated navigation makes it quicker and easier to find what you’re looking for. It’s easy to understand at a glance what’s included or discounted with any memberships you have, like Xbox Game Pass.

A United Platform for Communities to Gather

We’ve got a new Xbox mobile app in the works, and we’re better integrating your phone into the social experiences on Xbox, letting you share and connect with your existing network of friends more easily.For example, when you choose to share an update or game clip from your console, it will also automatically be sent to your Xbox mobile app, so you can share it on the social networks of your choice.  

Using the new mobile app, Xbox friends can quickly send messages or launch parties to keep conversations going even when they’re on the go. We’ve also consolidated notifications, which will reflect activity across mobile, PC, and console. We combined related activities like Parties and Chats into a single tab in the Xbox console Guide, so it’s easier to know what’s going on with your friends and communities.

If some of these updates look familiar, it’s because you helped us build them over the past year through our Xbox Insider program, or when you noticed them hidden in plain sight (like when the new illustration style found its way into the Game Bar welcome screen, or a light theme was tested in the Family Settings App preview). We’ll begin to roll them out in the coming weeks, and come November we’ll celebrate a milestone in our user experience journey alongside the launch of Xbox Series X.

The work won’t stop there, though. We’ll continue to listen to your feedback and build together with you. Our vision is that, even though you’ll have more choice than ever in where to play, when to play and who to play with – you’ll know you’re on Xbox.

Posted on Leave a comment

Jurassic World roars into Minecraft

The Jurassic World DLC for Minecraft introduces a special kind of luxury resort: one that features some of your favorite dinosaurs from the films. And you’re the Park manager! 

Not only can you craft and train dinosaurs, build exhibits, and solve problems, but you can also go on expeditions to discover dinosaur DNA! Use vehicles and your team of NPCs to solve disasters and earn a high score! And if you think that sounds awesome, just wait until you see it in action:

Posted on Leave a comment

Sky show: Microsoft Flight Simulator now available

Today pilots, aviation enthusiasts, simmers, and explorers can take to the skies in Microsoft Flight Simulator, now available on Xbox Game Pass for PC (Beta), Windows 10 PC, and Steam. In celebration of the return of the beloved franchise, all players will be able to claim a free “Aviators Club” livery set as a special thank you for being one of the first to take flight from now through September 30, 2020. The livery set will be available starting on Wednesday, August 19 for this limited time in the in-sim marketplace and includes Microsoft Flight Simulator-inspired liveries for all aircraft available in the Standard, Deluxe, and Premium Deluxe Editions.

It’s an exciting day for everyone at Asobo Studio and Microsoft. This all began as a demo of Machu Picchu in augmented reality for the Microsoft HoloLens and now we’re here, re-launching the franchise after 38 years. The dream to make another Microsoft Flight Simulator has always been alive, but what we really needed was the right combination of elements – a convergence of our collaboration with Azure AI’s cloud technology and Bing Maps to stream more than 2PB of data and – to be able to reach a new level of realism, accuracy and authenticity (as mentioned in Protocol).  

Sharing on behalf of the entire crew at Microsoft and Asobo Studio, it has been an amazing and humbling experience to add to the legacy of Microsoft’s longest running product franchise with Microsoft Flight Simulator. Almost everyone on the team has a personal story or connection to flight simulation, but hearing from numerous pilots, engineers and simulation fans about the impact the Microsoft Flight Simulator franchise made in their lives has been incredibly inspiring. 

It was immediately apparent that while we all share the same love for aviation and aircraft, the vast wealth of knowledge and experience from the community was going to be critical to success. We made it our mission from day one to gather feedback from the various aviation and simulation communities, and to do our best to learn from the past. We read thousands of threads on the various message boards, worked directly with pilots and engineers from different aircraft manufacturers, and created an alpha program to get direct input from fans.  

What impressed us the most was how this community continued to grow and thrive in the absence of updated software. The community rallied together to continue development and support for Microsoft Flight Simulator, and created a robust ecosystem for additional aircraft, airports, sceneries, and features. From free mods, to career modes, to incredibly complex “study level” aircraft, it was clear that we needed to support the community’s passion for creating, building and modding. From the very beginning, we treated the new Microsoft Flight Simulator as a platform, and not just as a product. We worked directly with hundreds of third party developers to ensure the SDK, which is available to everyone for free at launch, has the features and tools needed to continue to deliver amazing addons, and we will continue this partnership well into the future. 

In addition to all of the insightful feedback we received, we also wanted to add our own mark on the franchise. We wanted to make a fundamental leap forward in the genre and redefine what it means to be Flight Simulator. We had access to amazing technology and vast data in Azure and Bing Maps, and it showed us that for the first time, the entire world could be flyable in VFR (visual flight rules) in a simulator. Having the entire world in 3D was only the first step, and so a fully redesigned weather and lighting system was needed to truly simulate the world. With all of this terrain and weather data, we can accurately simulate the forces that would impact an aircraft in flight, so we created an all new, fully redesigned aerodynamics model for our aircraft to take advantage of that data. 

These three key areas (world, weather and aerodynamics) created the foundation for Microsoft Flight Simulators platform. We’ve added 30 diverse aircraft (in the Premium Deluxe Edition) ranging from single engine piston aircraft, to long range turbo props, business jets and airliners. We’ve created a multiplayer system that allows friends from all over the world to fly together. We’ve made improvements to almost every system in Microsoft Flight Simulator and have plans to continue to expand and enhance the sim post launch (VR coming later this year, for example). We see this as just the first step in a larger journey, and with the community’s help, we’ll continue to grow Microsoft Flight Simulator for years to come. 

This is just the beginning.  We will continue to update our development roadmap with simulator updates including free world updates, themed DLC bundles, VR and more including all the great content that 3rd party developers have begun to announce will be coming to Microsoft Flight Simulator

We built a sim for simmers, but the invitation is here for anyone who’s ever dreamt of flying, exploring the world, or visiting your favorite destinations. We’ll see you at 30,000 feet. 

Posted on Leave a comment

Get your first look at the achievements available to unlock in Battletoads

Summary

  • Get your first look at the achievements available to unlock in the brand new Battletoads.
  • Five secret achievements remain for players to discover for themselves.
  • Look forward to the first new Battletoads game in 26 years, launching on August 20!

On August 20, players will be able to dive into an all-new Battletoads adventure when the game launches with Xbox Game Pass and on Xbox One, Windows 10 and Steam. Zitz, Rash and Pimple will be brawling, shooting and quipping their way through multi-genre gameplay that challenges them to overcome everything from street fights to space battles, all enjoyable with up to three players thanks to drop-in couch co-op.

Tying all of those varied moments together are, of course, the enemy encounters that put the battle in Battletoads. If you’re eager to get to grips with the distinct play style of each member of the trio and the morph attacks you’ll be unleashing as you smash your way to victory, we recommend checking out our recent ‘Brawling Battletoads’ video:

[embedded content]

Alongside the riotous fisticuffs and cartoon-style comedy there’ll also be plenty of fun achievements to earn, one or two of which demand skills worthy of the ’Toads themselves! We’re excited to unveil a pre-launch list today here on Xbox Wire – there are a few secret achievements we’re keeping a lid on for now, but here’s the amphibian’s share of what’s in store:

Achievement Name Achievement Description Points
Toads in a Hole Complete Feed the Fantasy. 10
Road Rash Complete To the Queen. 10
Parks & Recreational Violence Complete At the Carn-Evil. 10
Enough Toying Around Complete So That’s How That Works. 10
Should Get the Pants First Complete Time for Plan B. 30
Came, Sawed, Conquered Complete Stumped. 15
Logged Out Complete A Hard Axe to Follow. 15
A Test of Medal Complete The Trials of Pummel Horse. 15
Jeff of a Sleighsman Complete Mis-treatied. 30
We Were Provoked Complete Spacebrawls. 15
Learning the Ropes Complete We Go High. 15
STREET JUSTICE! Complete Street Justice! 15
Hiking With Friends Complete Bigger Than It Looks. 15
Galaxy’s Most Wanted Complete Most Unwanted. 15
A Mountain Sense of Unease Complete Reaching the Peak. 15
With Friends Like These… Complete A Rock and a Hard Place. 20
Rebooting Battletoads Complete Emergency Stations. 40
Into the Third Dimension Use your tongue to reach a new plane. 5
B-B-B-BLOCK BREAKER!! Smash through 50 enemy block attempts. 15
You’re Dead, You Ding-Dongs! Surrender to your arch-enemies. 20
Season Two When? Complete the story on any difficulty. 20
Battlemaniacs Defeat 100 enemies. 20
Special Effects Use 200 ’Toad abilities. 20
Mighty Morphing Finish off 200 enemies with morph attacks. 20
Thoroughly Tested Destroy 50 enemies in space combat. 20
It Begins… Get your first collectable. 5
Scratching an Itch Get all collectables in a level. 10
Making Progress Get a total of 25 collectables. 15
I’ve Started So I’ll Finish Get a total of 75 collectables. 30
Did You Use a Walkthrough? Get every collectable in the game! 60
Three Is the Magic Number In 3P Co-Op, all three ’Toads attack the same enemy. 10
Reviving a Classic Revive another ’Toad during Co-Op play. 10
Not All Toads Are Equal Earn a participation award in Co-Op. 10
Jeffortless In 3P Co-Op, all ‘Toads grind a rail at the same time. 10
Hack-Door Shenanigans Hack a door in Co-Op. 10
Live and Let Drive In 3P Co-Op, stay alive on bikes together – for 300 seconds! 20
Can’t Touch This In Co-Op, complete Time for Plan B without taking a hit. 20
To Me, To You In Co-Op, build up a 100-Hit combo. 20
Toad Cuddle! Finish the game on ‘Battletoads’ difficulty. 30
Brawling… With Style! Earn your first ‘S’ Rank from an encounter. 15
Straight-A Student Earn 20 ‘A’ Ranks from encounters. 15
Dodgebrawl Champion Finish a fight without taking damage. 5
Hey, This Is a Rental! Score 75 near-misses while riding a rented turbo bike. 15
Photobombed Take an enemy’s photo when it’s in warning distance. 15
Be Tight Deal with your friends without any restarts. 20
Take This, Axeman! Find a way to keep a Champion’s weapon stuck. 5
Toad It Off & On Again Repair your ship without any reboots. 10
The Purge Escape from a Topian in less than 4 minutes. 20
Mementoads Prop up the Jercurian tourism industry. 5
Warped Sense of Humor Find the ‘Warp Wall’ while riding a turbo bike. 10
Dealt a Lucky Hand Get a flawless victory in Toadshambo. 5
Not Just for the Holidays Land a streak of 15 hits while destroying a totem. 15
The Dlala Code Enter the Dlala Code. What could it be…? 5
Blink and You’ll Miss It Defeat 25 pink eyeballs during Time for Plan B. 10
Hit the Drop Freefall more than 10 meters while escaping a Topian. 10
Extra Credit Watch the credits! You know you want to. 5

To get an idea of what kinds of tricks, traps and turbo bike terrors stand between you and 1000 delicious gamerscore, stay tuned to Rare on Twitter, Facebook and Instagram as we’ll have more gameplay to share ahead of the game’s launch on August 20. Until then, check out the Battletoads Microsoft Store page or wishlist the game on Steam, and get ready to take cover – the Battletoads are back!

Posted on Leave a comment

Build resilient applications with Kubernetes on Azure

Welcome to KubeCon EU 2020, the virtual edition. While we won’t be able to see each other in person at KubeCon EU this year, we’re excited that this new virtual format of KubeCon will make the conference more accessible than ever, with more people from the amazing Kubernetes community able to join and participate from around the world without leaving their homes.

With everything that has been happening, the last year has been an up and down experience, but through it all I’m incredibly proud of the focus and dedication from the Azure Kubernetes team. They have continued to iterate and improve our Kubernetes on Azure that provides enterprise-grade experience for our customers.

Kubernetes on Azure (and indeed anywhere) delivers an open and portable ecosystem for cloud-native development. In addition to this core promise, we also deliver a unique enterprise-grade experience that ensures the reliability and security your workloads demand, while also enabling the agility and efficiency that business today desires. You can securely deploy any workload to Azure Kubernetes Service (AKS) to drive cost-savings at scale across your business. Today, we’re going to tell you about even more capabilities that can help you along on your cloud-native journey to Kubernetes on Azure.

Improving latency and operational efficiency

One of the key drivers of cloud adoption is reducing latency. It used to be that it took days to get physical computers and set them up in a cluster. Today, you can deploy a Kubernetes cluster on Azure in less than five minutes. These improvements benefit the agility of our customers. For customers who want to scale and provision faster, we are announcing a preview of ephemeral OS disk support which makes responding to new compute demands on your cluster even faster.

Latency isn’t just about the length of time to create a cluster. It’s also about how fast you can detect and respond to operational problems. To help enterprises improve their operational efficiency, we’re announcing preview integration with Azure Resource Health which can alert you if your cluster is unhealthy for any reason. We’re also announcing the general availability of node image updates which allow you to upgrade the underlying operating system to respond to bugs or vulnerabilities in your cluster while staying on the same Kubernetes version for stability.

Finally, though Kubernetes has always enabled enterprises to drive cost savings through containerization, the new economic realities of the world during a pandemic mean that achieving cost efficiency for your business is more important than ever. We’ve got a great exercise that can help you learn how to optimize your costs using containers and the Azure Kubernetes Service.

Secure by design with Kubernetes on Azure

One of the key pillars of any enterprise computing platform is security. With market-leading features like policy integration and Azure Active Directory identity for Pods and cloud-native security have always been an important part of the Azure Kubernetes Service. I’m excited about some new features we’ve added recently to further enhance the security of your workloads running on Kubernetes.

Though Kubernetes has built-in support for secrets, most enterprise environments require a more secure and more compliant implementation. In the Azure Kubernetes Service, being enterprise-grade means providing integration between Azure Key Vault and the Azure Kubernetes service. Using Key Vault with Kubernetes enables you to securely store your credentials, certificates, and other secrets in state of the art, compliant secret store, and easily use them with your applications in an Azure Kubernetes cluster.

It’s even more exciting that this integration is built on the back of an open Container Storage Interface (CSI) driver that the Azure team built and open sourced for the entire Kubernetes community. Giving back to open source is an important part of what it means to be a community steward, and it was exciting to see our approach get validated as it was picked up and used by the HashiCorp Vault team for their secrets integration. Our open source team has been hard at work on improving many other parts of the security ecosystem. We’ve enhanced the CSI driver for Windows, and worked on cgroups v2 and containerd. If you want to learn more about how to secure your cloud-native workloads and make sure that your enterprise is following Microsoft’s best practices, check out our guide to Kubernetes best practices. They will teach you how to integrate firewalls, policy, and more to ensure you have both security and agility in your cloud-native development.

Next steps and KubeCon EU

I hope that you have an awesome KubeCon EU. As you go through the conference and learn more about Kubernetes, you can also learn more about Kubernetes on Azure with all of the great information online and in our virtual booth. If you’re new to KubeCon and Kubernetes and wondering how you can adopt Kubernetes for workloads from hobbyist to enterprise, we’ve got a great Kubernetes adoption guide for you.

Posted on Leave a comment

A quick history of indie games on Xbox as games shipped via ID@Xbox top 2,000

Summary

  • More than 2,000 games from independent developers have released through the ID@Xbox program.
  • ID@Xbox has paid out more than $1.5 billion in royalties to independent developers since the program’s inception.
  • There are over 2,000 titles in development from independent developers on Xbox.

We’re reaching a fascinating point in the world of indie games. We have amazing new creators coming on to the scene now for whom the start of the indie game movement is actually history, not a lived experience. So as we’re getting ready to make the leap to the next generation of consoles with Xbox Series X, it seems like a good time to take a look back at the birth of the modern indie game – especially Microsoft’s role in helping shape that scene and how the ID@Xbox Program has grown since.

With the launch of Swimsanity from our friends at Decoy Games last week, we’ve seen more than 2,000 games from independent developers launch on Xbox One and PC! Since the start of the ID@Xbox program, we’ve also paid out more than $1.5 billion in royalties to independent developers. It took independent developers only two years to reach this new milestone for the program, almost half the time it took for 1,000 games to be launched via ID@Xbox! From MMOs like Black Desertto fast action multiplayer games like Warframe to cozy slime-ranching games like Slime Rancher to amazing puzzlers like Human Fall Flat, or next-level platformers like Celeste –  sometimes it seems like the only thing these games have in common is their diversity, but there’s another hook too. They represent amazing clarity of vision and the fruits of creative freedom that only independent games can deliver.

There have always been indie games – heck, they pre-date non-indie games! The tales of lone creators making games for the Apple ][, the Commodore 64, the Sinclair and many other 8-bit micros are legendary. These games would be “packaged” in ziplock bags with mimeographed instructions (sometimes!) and sold at the local computer shops. As the shift to a digitalized world continued to come into its own, Xbox Live Arcade (XBLA) made one of the first major steps to bringing these independent games to a major publishing platform in the waning days of the OG Xbox and ultimately taking off on Xbox 360.

The original founders of XBLA really saw it as an arcade – a place to play vintage arcade games and casual games on a core gamer system. A funny thing happened though. Some of those independent developers who were still making games on PC – folks like Jonathan Blow and the team at The Behemoth – saw those downloadable games and started to get some ideas. And pretty soon, with the encouragement and excitement of the folks at Microsoft at the time, new games, original games, games from independent developers started to appear on XBLA. Digital distribution freed console developers from having to make “disc-sized” games and freed them to explore any game type imaginable. 

These were games that might never pass muster to get a disc release from a traditional publisher. They were smaller (the original maximum file size for XBLA games was 40MB!), they used genres – like 2D platformers – that hadn’t been in the mainstream for years. And yet… they were magical. Without needing to chase a full disc, or a list of bullet points on the back of a box, these pioneering developers were able to simply chase their creative visions and deliver games, like Castle Crashers, Limbo, and Super Meat Boy that we’re still talking about and that still feel fresh today, 10 and 12 years after they came out. 

Flash forward and as we moved into the Xbox One generation, we saw incredible growth in the independent scene, as devs were creating ever more ambitious and innovative projects. And soon the world was seeing them too, with indie games taking center stage at the Xbox Media Briefing – games like Inside and We Happy Few(before Compulsion Games joined Xbox Game Studios) burst onto the scene at E3, and Cuphead, conceived and created by a family with no previous game dev experience, made its debut at E3 back in 2014.  

Today, these games have become so woven into the fabric of videogames that it’s impossible to conceive of our world of play without them. Traditional publishers are still here, of course, making unbelievable epic games, but independent creators stand shoulder to shoulder with them. An Xbox show wouldn’t be an Xbox show without getting to see the latest new independent games, and our bespoke indie events like Game Fest have become destination events for players. And every day, millions of players are exposed to some of the most amazing games ever created thanks to independent developers’ robust support and participation with Xbox Game Pass.

So, what’s next? Well, first, and crucially, thousands of the games players enjoy on Xbox One today are coming with them to Xbox Series X, thanks to our day one backward compatibility features. This means we get to take our games with us to the next generation, where they will play best, and developers get to have a huge audience to reach with their games.

And of course, independent developers will be an essential part of the mix on Xbox Series X with over 2,000 games already in the process of being optimized or developed for our next generation console. Hundreds of developers have their Xbox Series X dev kits, and we send more out every day. Given the creativity we’ve seen so far, we’re sure there are things in development that we can’t even imagine. We’ve had a few glimpses, and we hope to show you some hints soon!

A few words from some of our friends:

“For Cuphead, the ID@Xbox program was quite literally a game changer. Whether it was the excitement and passion they showed us when the game was in its earliest stages, the support and guidance they offered as we grew the team, their expertise helping us navigate our first-ever launch, or the continued passion they have for Cuphead today, they’ve been there every step the way on our journey. The team at ID is filled with people that truly love video games, and care deeply about bringing memorable experiences to players everywhere. If you’re just starting out on your own development journey, I’d be hard pressed to think of a better group of people to have in your corner.” – Maja Moldenhauer, Studio MDHR

“Night School has been a part of the ID@Xbox family since our inception, when we launched Oxenfree in 2016. I think the most freeing, supportive part about working with the ID team has been the total support of our creative vision. When we were making a game about possessed teenagers, the feedback was basically just, “keep doing what you do, and let us know how we can help.” When we made Afterparty, a game about dead friends in Hell out-drinking Satan, the feedback was refreshingly the same. The ID team understands what makes a development team tick creatively, and just wants to amplify and help bring that vision to the broadest audience. It doesn’t hurt that they’re all just nice, cool peeps. Happy 2,000!” – Sean Krankel, Night School Studios

“Working with ID@Xbox has been an amazing experience. It is really refreshing to know you have a full team of individuals working together with the sole purpose of supporting indies. There have been several occasions during gaming events where members of the ID@Xbox team would come by and greet us just to check on how the team is doing, and for a start up indie that means everything. We are excited to continue the partnership!” – Khalil Abdullah, Decoy Games

It’s humbling to see so many developers making videogame history on Xbox, and we’re happy at Xbox and ID@Xbox to have been a small part of the evolution of the industry, and so many developers’ journey to success. We can’t wait to see where they take us next.