# TypeSpec Documentation > TypeSpec is an open-source language for designing APIs in a clear, extensible, and reusable way. It enables developers to define APIs as a single source of truth and generate client/server code, documentation, and OpenAPI specifications using emitters. ## TypeSpec Language Basics - [Access Modifiers](https://typespec.io/docs/language-basics/access-modifiers/index.html.md): Language basics - controlling the visibility of declarations across libraries - [Aliases](https://typespec.io/docs/language-basics/alias/index.html.md): Language basics - aliases - [Built-in types](https://typespec.io/docs/language-basics/built-in-types/index.html.md): Language basics - built-in types - [Decorators](https://typespec.io/docs/language-basics/decorators/index.html.md): Language basics - using decorators - [Documentation](https://typespec.io/docs/language-basics/documentation/index.html.md): Language basics - documenting APIs - [Enums](https://typespec.io/docs/language-basics/enums/index.html.md): Language basics - enums - [Identifiers](https://typespec.io/docs/language-basics/identifiers/index.html.md): Language basics - identifiers - [Imports](https://typespec.io/docs/language-basics/imports/index.html.md): Language basics - importing files and libraries - [Interfaces](https://typespec.io/docs/language-basics/interfaces/index.html.md): Language basics - grouping operations with interfaces - [Intersections](https://typespec.io/docs/language-basics/intersections/index.html.md): Language basics - composing models with intersections - [Models](https://typespec.io/docs/language-basics/models/index.html.md): Language basics - defining schemas with models - [Namespaces](https://typespec.io/docs/language-basics/namespaces/index.html.md): Language basics - grouping declarations with namespaces - [Operations](https://typespec.io/docs/language-basics/operations/index.html.md): Language basics - defining endpoints with operations - [Overview](https://typespec.io/docs/language-basics/overview/index.html.md): Language basics - overview - [Scalars](https://typespec.io/docs/language-basics/scalars/index.html.md): Language basics - custom scalars - [Templates](https://typespec.io/docs/language-basics/templates/index.html.md): Language basics - reusability with templates - [Type Literals](https://typespec.io/docs/language-basics/type-literals/index.html.md): Language basics - literal types - [Type Relations](https://typespec.io/docs/language-basics/type-relations/index.html.md): Language basics - type relations - [Unions](https://typespec.io/docs/language-basics/unions/index.html.md): Language basics - unions - [Values](https://typespec.io/docs/language-basics/values/index.html.md): Language basics - working with values - [Visibility](https://typespec.io/docs/language-basics/visibility/index.html.md): Language basics - defining views of a model across operations with visibility ## TypeSpec Standard Library - [Discriminated Types](https://typespec.io/docs/standard-library/discriminated-types/index.html.md): Standard library reference to describing discriminated types - [Encoded names](https://typespec.io/docs/standard-library/encoded-names/index.html.md): Standard library reference to encoding names sent over the wire - [Examples](https://typespec.io/docs/standard-library/examples/index.html.md): Standard library reference to defining API examples - [Pagination](https://typespec.io/docs/standard-library/pagination/index.html.md): Standard library reference to using built-in pagination patterns ## TypeSpec Getting Started - [Getting Started with TypeSpec For REST APIs](https://typespec.io/docs/getting-started/getting-started-rest/01-setup-basic-syntax/index.html.md): Getting started with REST - 01 setup basic syntax - [Operations and Responses](https://typespec.io/docs/getting-started/getting-started-rest/02-operations-responses/index.html.md): Getting started with REST - 02 defining CRUD operations - [Handling Errors](https://typespec.io/docs/getting-started/getting-started-rest/03-handling-errors/index.html.md): Getting started with REST - 03 handling errors in your API - [Common Parameters](https://typespec.io/docs/getting-started/getting-started-rest/04-common-parameters/index.html.md): Getting started with REST - 04 reuse common parameters - [Authentication](https://typespec.io/docs/getting-started/getting-started-rest/05-authentication/index.html.md): Getting started with REST - 05 adding authentication - [Versioning](https://typespec.io/docs/getting-started/getting-started-rest/06-versioning/index.html.md): Getting started with REST - 06 versioning your REST API - [Custom Response Models](https://typespec.io/docs/getting-started/getting-started-rest/07-custom-response-models/index.html.md): Getting started with REST - 07 customize API response models - [TypeSpec for OpenAPI Developers](https://typespec.io/docs/getting-started/typespec-for-openapi-dev/index.html.md): Getting started with TypeSpec for Open API developers ## @typespec/events - [Decorators](https://typespec.io/docs/libraries/events/reference/decorators/index.html.md): Decorators exported by @typespec/events ## @typespec/http - [Authentication](https://typespec.io/docs/libraries/http/authentication/index.html.md): Configuring HTTP authentication - [Content types](https://typespec.io/docs/libraries/http/content-types/index.html.md): Working with HTTP content-types - [Encoding of types](https://typespec.io/docs/libraries/http/encoding/index.html.md): How HTTP handles encoding types - [Examples](https://typespec.io/docs/libraries/http/examples/index.html.md): Defining HTTP operation examples - [Files](https://typespec.io/docs/libraries/http/files/index.html.md): Working with Http.File - [Multipart requests](https://typespec.io/docs/libraries/http/multipart/index.html.md): Using Http multipart requests - [Operations](https://typespec.io/docs/libraries/http/operations/index.html.md): Defining HTTP endpoints - [Data types](https://typespec.io/docs/libraries/http/reference/data-types/index.html.md): Data types exported by @typespec/http - [Decorators](https://typespec.io/docs/libraries/http/reference/decorators/index.html.md): Decorators exported by @typespec/http - [Data types (streams)](https://typespec.io/docs/libraries/http/reference/streams/data-types/index.html.md): Data types exported by @typespec/http/streams ## @typespec/openapi - [Data types](https://typespec.io/docs/libraries/openapi/reference/data-types/index.html.md): Data types exported by @typespec/openapi - [Decorators](https://typespec.io/docs/libraries/openapi/reference/decorators/index.html.md): Decorators exported by @typespec/openapi ## @typespec/rest - [Data types](https://typespec.io/docs/libraries/rest/reference/data-types/index.html.md): Data types exported by @typespec/rest - [Decorators](https://typespec.io/docs/libraries/rest/reference/decorators/index.html.md): Decorators exported by @typespec/rest - [Interfaces and Operations](https://typespec.io/docs/libraries/rest/reference/interfaces/index.html.md): Interfaces and Operations exported by @typespec/rest - [Resource and routes](https://typespec.io/docs/libraries/rest/resource-routing/index.html.md): Defining REST resources and endpoints ## @typespec/streams - [Data types](https://typespec.io/docs/libraries/streams/reference/data-types/index.html.md): Data types exported by @typespec/streams - [Decorators](https://typespec.io/docs/libraries/streams/reference/decorators/index.html.md): Decorators exported by @typespec/streams ## @typespec/versioning - [Tutorial](https://typespec.io/docs/libraries/versioning/guide/index.html.md): Guide to versioning APIs authored in TypeSpec - [Decorators](https://typespec.io/docs/libraries/versioning/reference/decorators/index.html.md): Decorators exported by @typespec/versioning