ReleaseMicrosoftMicrosoftpublished Jun 9, 2026seen 1d

microsoft/typespec typespec-stable@1.13.0

microsoft/typespec

Open original ↗

Captured source

source ↗
published Jun 9, 2026seen 1dcaptured 1dhttp 200method plain

typespec-stable@1.13.0

Repository: microsoft/typespec

Tag: typespec-stable@1.13.0

Published: 2026-06-09T21:00:30Z

Prerelease: no

Release notes:

@typespec/compiler

Deprecations

  • #10876 Deprecated deepClone utility in favor of structuredClone. All internal usages have been replaced with the native structuredClone API.

Features

  • #10897 ApplyCodeFixExpect.toEqual now accepts Record to assert on multiple files after a code fix is applied. This enables testing code fixes that write to a different file (e.g., adding augment decorators to a client.tsp).
await ruleTester
.expect({
"main.tsp": `import "./client.tsp";\nmodel Foo { name: string; }`,
"client.tsp": ``,
})
.applyCodeFix("add-client-override")
.toEqual({
"client.tsp": `@@override(Foo.name, "clientName");\n`,
});
  • #10548 Add kind: project and entrypoint support to tspconfig.yaml for defining project boundaries and entrypoint resolution. See Project Configuration for more details.
kind: project
entrypoint: src/service.tsp
emit:
- "@typespec/openapi3"
  • #10694 Added support for accessing late-bound members on models that use template spreads or is bases.

Previously, accessing a member that was introduced via a template instantiation would fail with an invalid-ref error:

model Template {
...T;
}
model User is Template;

alias UserName = User.name; // ❌ previously: "Model doesn't have member name"

Now, the compiler will force-evaluate the container type when a member lookup fails on a model with unknown members (from template spreads or is), making late-bound members accessible:

model Template {
...T;
}
model User is Template;

alias UserName = User.name; // ✅ now resolves correctly

This also works with:

  • Forward references to the template definition
  • Spread-based patterns (model A { ...Template })
  • Members added by augment decorators
  • Circular references between models with late-bound members
  • #10855 The internal modifier is no longer experimental. Using internal will no longer emit an experimental-feature warning, and #suppress "experimental-feature" directives are no longer needed.
  • #10826 Add project-scoped compiler feature flags to tspconfig.yaml. Compiler feature definitions

are tracked internally with descriptions and can be listed with tsp info features.

kind: project
features:
- function-declarations
  • #9868 Enabled resolution of member properties and metaproperties through template parameters based on constraints.
model Resource {
id: string;
}

model Read {
id: R.id;
}

Bug Fixes

  • #10692 Fix spurious circular-base-type diagnostics after invalid 'model is' declarations.
  • #10684 Fixed the compiler to correctly detect circular model spread chains while preserving support for recursive model-expression aliases.
  • #10687 Fix wrongly detected circular reference with alias and model properties
  • #10643 Completion in the middle of an identifier now replaces the full token instead of inserting and leaving trailing characters
  • #10827 Language server fatal errors now write pending logs and the fatal stack trace directly to stderr so crash details remain visible.
  • #10773 Report an error when a function is declared in the $functions map in a JS file but has no corresponding extern fn declaration in TypeSpec. Previously this would silently have no effect.
  • #10847 [Language Server] Wrapped LSP server handlers with wrapUnhandledError to preserve server-side stack traces in error messages forwarded to the client. Previously, the JSON-RPC layer discarded the original stack trace, making unhandled errors in telemetry opaque.
  • #10880 Validate function rest arguments and report function call argument count diagnostics at call sites.

@typespec/http

No changes, version bump only.

@typespec/openapi

Features

  • #10769 Add summary and kind fields to @tagMetadata decorator.

For OpenAPI 3.2, these fields are emitted as native tag object fields. For OpenAPI 3.0/3.1, they are emitted as x-oai-summary and x-oai-kind extensions. The OpenAPI converter also supports importing x-oai-summary, x-oai-kind (from 3.0/3.1) and native summary, kind (from 3.2) back to TypeSpec.

@tagMetadata("foo", #{ summary: "all operations that allow doing Foo", kind: "FooGroup" })
  • #10770 Add array form for @tagMetadata decorator to allow explicit control of tag declaration order.
@service
@tagMetadata(#[
#{ name: "First Tag", description: "First tag description" },
#{ name: "Second Tag", description: "Second tag description" },
])
namespace PetStore {}

Using @tagMetadata(#[...]) and @tagMetadata("name", #{...}) on the same namespace is a diagnostic error.

  • #10555 Added a warning diagnostic when @defaultResponse is used on a model that already has a @statusCode property or is marked with @error.

Bug Fixes

  • #10919 Reject duplicate tag names in @tagMetadata array form.
  • #10776 Fix tagMetadata extension diagnostic targets

@typespec/openapi3

Features

  • #10769 Add summary and kind fields to @tagMetadata decorator.

For OpenAPI 3.2, these fields are emitted as native tag object fields. For OpenAPI 3.0/3.1, they…

Excerpt shown — open the source for the full document.

Notability

notability 3.0/10

Routine point release of TypeSpec API language.