Implementations#
This document provides an overview of known Smithy implementations and projects.
Each project provides a Status with the following meanings:
- 1.x / 2.x / etc: The major version of a stable implementation.
- 0.x: The implementation is not yet stable and likely will change. These pre-release projects may lack polish and may not be easy to use.
- WIP: Work in progress; the implementation is not yet stable and may not be usable.
Smithy meta model#
Project | Language | Status | Description |
---|---|---|---|
Smithy specification | N/A | 2.0 | The Smithy specification defines Smithy and its capabilities. |
Reference implementation | Java | 1.x | The reference implementation of Smithy's metamodel, transformation tooling, and code generators is implemented in Java. |
Smithy Diff | Java | 1.x | Smithy Diff is a tool used to compare two Smithy models to check for backward compatibility issues. Smithy Diff can be run via a Java library or via the Smithy CLI. |
Atelier | Rust | WIP | A Rust implementation of the Smithy IDL. |
IDE Support#
Project | Language | Status | Description |
---|---|---|---|
Visual Studio Code plugin | Java | WIP | A Visual Studio Code extension to recognize and highlight the Smithy IDL. It can also be used as a TextMate bundle in TextMate and IntelliJ using a third-party plugin. |
IntelliJ plugin | Java | WIP | Smithy IntelliJ provides IDE integration for the Smithy IDL within IntelliJ IDEA. It utilizes smithy-language-server for its Language Server Protocol implementation. |
Smithy LSP | Java | WIP | A Language Server Protocol implementation for the Smithy IDL. |
Tree Sitter grammar for Smithy | JavaScript, C | GA | Included in nvim-treesitter to provide syntax highlighting in Neovim. |
Build tooling#
Project | Language | Status | Description |
---|---|---|---|
Gradle Plugin | Java | 0.x | The Smithy Gradle plugin is currently the only supported way to build Smithy models. Various example projects that show how to setup and build Smithy models can be found in the project's repository. |
Smithy CLI | Java | 1.x* | The Smithy CLI is used to load, validate, diff, and transform Smithy models. The CLI is used to power Smithy's Gradle plugin, and used for other build tooling within Amazon. However, the CLI is still incubating and not yet distributed as a standalone tool. The CLI can be built from within the Smithy git repository using Gradle via: ./gradlew :smithy-cli:runtime
And then used via: smithy-cli/build/image/smithy-cli-osx-x86_64/bin/smithy --help
smithy-cli/build/image/smithy-cli-win64/bin/smithy --help
smithy-cli/build/image/smithy-cli-linux-x86_64/bin/smithy --help
smithy-cli/build/image/smithy-cli-linux-aarch_64/bin/smithy --help
|
SBT Plugin | Scala | 0.x | The Smithy SBT plugin transforms Smithy specifications into protocol-agnostic Scala clients and servers. |
Client code generators#
The following code generators are in early development. There's no guarantee of polish or that they work for all use cases.
Project | Generator Language | Status | Description |
---|---|---|---|
TypeScript | Java | 0.x | TypeScript client and server code generation for Smithy. |
Go | Java | 0.x | Go client code generation for Smithy. |
Rust | Kotlin | 0.x | Rust client code generation for Smithy. |
Kotlin | Kotlin | 0.x | Kotlin client code generation for Smithy. |
Swift | Kotlin | 0.x | Swift client code generation for Smithy. |
Scala code generation for Smithy | Scala | 0.x | Scala client and server code generation for Smithy. |
Server code generators#
Project | Language | Status | Additional links |
---|---|---|---|
Smithy Server Generator for TypeScript | Java | 0.x (Developer Preview) | Documentation |
Smithy Rust | Kotlin | 0.x (Developer Preview) | Documentation |
Model converters#
Project | Language | Status | Description |
---|---|---|---|
Converting Smithy to OpenAPI | Java | 1.x | Converts Smithy models to OpenAPI. Currently the only supported protocol is aws.protocols#restJson1. Amazon API Gateway extensions can be used with Smithy's OpenAPI converter using the smithy-aws-apigateway-traits Maven package. |
Smithy to JSON Schema | Java | 1.x | Converts Smithy shapes to JSON Schema using a Java library. Because the use cases we've seen so far converting Smithy to JSON Schema have been to facilitate converting Smithy to some other format that uses JSON Schema or some variant of it (like OpenAPI, or CloudFormation resource schemas), no standalone smithy-build plugin to convert Smithy models to JSON Schema is currently provided. |
AWS specific#
Project | Generator Language | Status | Description |
---|---|---|---|
AWS integrations | N/A | 1.x | Smithy supports various AWS plugins, traits, and specifications, though these are generally only useful to developers within Amazon and AWS. |
AWS SDK for JavaScript v3 | Java | 1.x | The AWS SDK for JavaScript v3 is built with Smithy. |
AWS SDK for Go v2 | Java | 1.x | The AWS SDK for Go v2 is built with Smithy. |
AWS SDK for Rust | Kotlin | 0.x | The AWS SDK for Rust is built with Smithy. The generator implementation, including the AWS components, can be found in smithy-rs. |
Generating CloudFormation Resource Schemas from Smithy | Java | 1.x | Converts Smithy models to CloudFormation Resource Schemas. |