Awesome
Awesome Smithy
<img src="smithy.svg" align="right" width="300">
Awesome Smithy is a curated list of awesome build-tools, code-generators, examples, and other resources related to the Smithy IDL.
If you want your component to appear here, send a pull request to this repository to add it (see the contribution guidelines for more information).
The Smithy team cannot vouch for the stability or production-worthiness an item on this list unless it has the icon <img src="smithy-favicon.png" alt="(official)" title="Smithy Official" height="16px"> next to it. This icon means the component is an official project supported by the Smithy team. Official Smithy team projects with the 🚧 icon next to them are still a work-in-progress and are not production-ready.
Contents
- Contents
- Build tools
- Code Generators
- Learning resources
- IDE Support
- Implementations
- Model Converters
- CICD Support
- Videos
- Blog Posts
- Others
- Contribute
Build tools
- Smithy CLI <img src="smithy-favicon.png" alt="(official)" title="Smithy Official" height="16px"> - Smithy CLI is used to build, validate, diff, and transform Smithy models.
- Gradle Plugin <img src="smithy-favicon.png" alt="(official)" title="Smithy Official" height="16px"> - Integrates Smithy with the Gradle build system.
- Mill Plugin - Community supported plugin that integrates smithy with the Mill build tool.
- SBT Plugin - Community supported plugin that integrates smithy with the SBT build system for Scala.
Code Generators
Client Code Generators
- TypeScript <img src="smithy-favicon.png" alt="(official)" title="Smithy Official" height="16px"> 🚧 - Client code generation for Typescript.
- Golang <img src="smithy-favicon.png" alt="(official)" title="Smithy Official" height="16px"> 🚧 - Client code generation for Golang.
- Rust <img src="smithy-favicon.png" alt="(official)" title="Smithy Official" height="16px"> 🚧 - Client code generation for Rust.
- Ruby <img src="smithy-favicon.png" alt="(official)" title="Smithy Official" height="16px"> 🚧 - Client code generation for Ruby.
- Kotlin <img src="smithy-favicon.png" alt="(official)" title="Smithy Official" height="16px"> 🚧 - Client code generation for Kotlin.
- Swift <img src="smithy-favicon.png" alt="(official)" title="Smithy Official" height="16px"> 🚧 - Client code generation for Swift.
- Scala - Community plugin for generation of clients/servers in Scala.
- Dafny <img src="smithy-favicon.png" alt="(official)" title="Smithy Official" height="16px"> 🚧 - Code generation tools for the Dafny verification-aware programming language.
- Python <img src="smithy-favicon.png" alt="(official)" title="Smithy Official" height="16px"> 🚧 - Client code generation for Python.
Server Code Generators
- TypeScript <img src="smithy-favicon.png" alt="(official)" title="Smithy Official" height="16px"> 🚧 - Server generator for TypeScript.
- Rust <img src="smithy-favicon.png" alt="(official)" title="Smithy Official" height="16px"> 🚧 - Server generator for Rust.
- Scala - Community plugin for generation of clients/servers in Scala.
Learning resources
- Smithy Examples <img src="smithy-favicon.png" alt="(official)" title="Smithy Official" height="16px"> - A collection of examples to help you get up and running with Smithy.
- aws-samples: Typescript Example service <img src="smithy-favicon.png" alt="(official)" title="Smithy Official" height="16px"> - Shows how to write a Typescript lambda service using Smithy and call the service using a generated client (see: blog post).
- Rust server SDK examples <img src="smithy-favicon.png" alt="(official)" title="Smithy Official" height="16px"> - a collection of examples using Smithy to generate a Rust server SDK.
- kubukoz/smithy4s-course - Smithy/Smithy4s course.
IDE Support
- Smithy LSP <img src="smithy-favicon.png" alt="(official)" title="Smithy Official" height="16px"> 🚧 - A Language Server Protocol implementation for the Smithy IDL.
- Visual Studio Code Plugin <img src="smithy-favicon.png" alt="(official)" title="Smithy Official" height="16px"> 🚧 - Visual Studio Code extension providing a Language Server Protocol implementation for the Smithy IDL.
- Intellij plugin <img src="smithy-favicon.png" alt="(official)" title="Smithy Official" height="16px"> 🚧 - Provides IDE integration for the Smithy IDL within IntelliJ IDEA.
- iancaffey/smithy-intellij-plugin - Community plugin for IDE integration for the Smithy IDL in Intellij IDEA.
- Tree Sitter Grammar for Smithy - Tree-sitter grammar for Smithy. Included in Neovim and Helix by default.
- Zed extension - Zed extension using Tree-sitter grammar for Smithy.
Implementations
- Smithy Reference Implementation <img src="smithy-favicon.png" alt="(official)" title="Smithy Official" height="16px"> - Smithy reference implementation in Java
- Atelier 🚧 - Community implementation of Smithy in Rust
Model Converters
- Smithy to OpenAPI <img src="smithy-favicon.png" alt="(official)" title="Smithy Official" height="16px"> - Converts Smithy models to OpenAPI.
- Smithy to JSONSchema <img src="smithy-favicon.png" alt="(official)" title="Smithy Official" height="16px"> - Converts Smithy models to JSONSchema.
- Cloud Formation Resource Schemas <img src="smithy-favicon.png" alt="(official)" title="Smithy Official" height="16px"> - Generating Cloudformation resource schemas from Smithy models.
- Openapi/JSONSchema to Smithy - smithy-translate : a community-provided CLI tool for best-effort Openapi/JSONSchema to Smithy conversions
- Smithy to Protobuf - smithy-translate (see above)
CICD Support
GitHub Actions
- setup-smithy - Install Smithy CLI to your GitHub Workflow.
- format-smithy - Checks if Smithy Models are formatted.
Videos
- Scaling APIs with Smithy <img src="smithy-favicon.png" alt="(official)" title="Smithy Official" height="16px"> - Overview of Smithy's background and features.
- Abstraction: Creating the Best developer experience / Model-First Design <img src="smithy-favicon.png" alt="(official)" title="Smithy Official" height="16px"> - An introduction to model first design with Smithy.
- Building with the new AWS SDKs for Rust, Kotlin, and Swift <img src="smithy-favicon.png" alt="(official)" title="Smithy Official" height="16px"> - Explores how these SDKs were built in parallel with Smithy, the commonalities they share, and how to build an app with each one.
- Simplify building applications with AWS SDKs <img src="smithy-favicon.png" alt="(official)" title="Smithy Official" height="16px"> - Discusses how Smithy and model-first API design are used at AWS, how the AWS SDKs model client-side primitives such as paginators in Smithy, and how the AWS SDKs are evolving to use a standardized architecture.
- Introduction to Smithy/Smithy4s - Scala Conference talk introducing the Smithy IDL and the Smithy4s library
- Generating Kotlin SDKs with Smithy - KotlinConf talk that provides an overview of Smithy and discusses how
smithy-kotlin
can be used to generate Kotlin SDKs - Elevating API Design With Smithy - Functional Scala talk - Intro to Smithy IDL with JVM Tooling and Smithy4s
Blog Posts
- Introducing Smithy IDL 2.0 <img src="smithy-favicon.png" alt="(official)" title="Smithy Official" height="16px"> - Launch announcement for the Smithy IDL 2.0.
- Introducing the Smithy CLI <img src="smithy-favicon.png" alt="(official)" title="Smithy Official" height="16px"> - Launch announcement for the Smithy CLI along with examples of how to use the CLI.
- Developer Preview: Ruby SDK code generation using Smithy <img src="smithy-favicon.png" alt="(official)" title="Smithy Official" height="16px"> - Launch announcement for and overview of the AWS Ruby SDK built with Smithy.
- Smithy4s-full stack - A series of posts describing an application built with Smithy4s in both front-end and back-end.
Others
- Smithy Playground 🚧 - A language server and VS Code client for interactive experimentation with Smithy services.
- Build Server Protocol - an extension to the Language Server Protocol using Smithy as a definition language.
- Alloy - a library of Smithy traits providing additional semantics and constraints, used in particular by smithy-translate and smithy4s.
Contribute
Contributions welcome! Read the contribution guidelines first.