diff --git a/CHANGELOG.md b/CHANGELOG.md index 210166531..40182cb8e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,159 @@ # Change Log +## 1.0.0 (03/31/2026) +> [!IMPORTANT] +> This is the first GA release of Smithy Java. All client modules are now considered stable. +> Some modules, including server, CLI, and MCP, are still in developer-preview and may contain bugs. +> No guarantee is made about their API stability. Unstable modules are marked with a warning in their +> `README.md` and with the `@SmithyUnstableApi` annotation in their `package-info.java`. + +### Features +- Added endpoint rules engine with BDD codegen, fused opcodes, and peephole optimizations. ([#1035](https://github.com/smithy-lang/smithy-java/pull/1035)) +- Added support for AWS Query protocol in the client. +- Added support for request compression. ([#968](https://github.com/smithy-lang/smithy-java/pull/968)) +- Added checksum support in requests. ([#911](https://github.com/smithy-lang/smithy-java/pull/911)) +- Added event streams support to AWS JSON protocols. ([#1076](https://github.com/smithy-lang/smithy-java/pull/1076)) +- Added event stream implementation for RPCv2. ([#849](https://github.com/smithy-lang/smithy-java/pull/849)) +- Added support for `@eventHeader` and `@eventPayload` for RPC protocols. ([#864](https://github.com/smithy-lang/smithy-java/pull/864)) +- Added event stream signing support. ([#1054](https://github.com/smithy-lang/smithy-java/pull/1054)) +- Implemented new event streams API. ([#1035](https://github.com/smithy-lang/smithy-java/pull/1035)) +- Added an OpenTelemetry based plugin to publish operation metrics. ([#1030](https://github.com/smithy-lang/smithy-java/pull/1030)) +- Added support for native remote MCP servers. ([#943](https://github.com/smithy-lang/smithy-java/pull/943)) +- Added MCP ping request support. ([#1016](https://github.com/smithy-lang/smithy-java/pull/1016)) +- Added MCP proxy server support for prompts. +- Added MCP metrics observer support to McpServerBuilder. +- Added support for SSE + streaming with MCP notifications. +- Added structured content to MCP tool responses when possible. +- Added output schema to MCP tools/list. +- Added protocol version to MCP initialize response. +- Added workingDirectory to StdioProxy. +- Added error response parsing for restXml. ([#922](https://github.com/smithy-lang/smithy-java/pull/922)) +- Added support for BigDecimal Documents in CBOR. +- Added map input for dynamic client. +- Added `DataStream.writeTo()` and IO utilities. +- Added `isAvailable` to check if DataStream has not been consumed. +- Added close to DataStream to allow closing resources. +- Added generic types to JMESPath predicates. ([#1067](https://github.com/smithy-lang/smithy-java/pull/1067)) +- Added utility to fill shapes with random values. +- Added fuzz testing framework. +- Added document discriminator sanitizer for JSON protocols. ([#932](https://github.com/smithy-lang/smithy-java/pull/932)) +- Added plugin phases, auto-plugins, and hierarchy for codegen. +- Added ability to register default plugins in codegen. +- Added new code sections to support deserialization overrides. +- Added plugin test runner. ([#855](https://github.com/smithy-lang/smithy-java/pull/855)) +- Added compile method for EndpointRuleSet in RulesEngineBuilder. +- Added singletons for AwsCredentialsResolver implementations. ([#1059](https://github.com/smithy-lang/smithy-java/pull/1059)) +- Added strategy for writing error types to headers. +- Added ModifiableHttpHeaders method to overwrite HTTP header values. +- Generated input shape with additionalInput member for operations with Unit input. +- Added model bundle version to decide whether to wrap input or not. +- Added additionalInfo to BundleMetadata. +- Allowed event processors to compose. ([#1095](https://github.com/smithy-lang/smithy-java/pull/1095)) +- Allowed lists to be marked as httpPayload. +- Added KEYS synchronization. +- Added HttpTransportConfig for transport settings. + +### Bug Fixes +- Fixed CBOR deserializer crash on empty input for no-input operations. ([#1103](https://github.com/smithy-lang/smithy-java/pull/1103)) +- Fixed protocol initialization for AwsRestJson1Protocol. ([#1023](https://github.com/smithy-lang/smithy-java/pull/1023)) +- Fixed incorrect codegen for HttpApiKeyAuthTrait. +- Fixed encoding/decoding of errors and exception events. ([#1055](https://github.com/smithy-lang/smithy-java/pull/1055)) +- Fixed SchemaIndex collision for Unit inputs/outputs. +- Fixed handling of timestamps inside oneOf unions. +- Fixed handling of event payload members of blob and string type. ([#1064](https://github.com/smithy-lang/smithy-java/pull/1064)) +- Fixed bug of adding a null element to the list when list is empty or null. +- Fixed Sigv4 multivalued query key ordering and double path encoding. ([#984](https://github.com/smithy-lang/smithy-java/pull/984)) +- Fixed query params with more than one value per key. ([#973](https://github.com/smithy-lang/smithy-java/pull/973)) +- Fixed double encoding URIs for signing. ([#972](https://github.com/smithy-lang/smithy-java/pull/972)) +- Fixed httpQuery related protocol tests. ([#945](https://github.com/smithy-lang/smithy-java/pull/945)) +- Fixed httpHeader and httpPrefixHeaders protocol tests. ([#914](https://github.com/smithy-lang/smithy-java/pull/914)) +- Fixed QueryCustomizedError protocol test. +- Fixed type conversion issues in MCP. +- Fixed naming conflict between class name and Schema field when structure name is all capitals. +- Fixed name conflicts resolving. ([#902](https://github.com/smithy-lang/smithy-java/pull/902)) +- Fixed builder setters to use the correct boxed or primitive type. +- Fixed javadoc link. ([#987](https://github.com/smithy-lang/smithy-java/pull/987)) +- Fixed URI concat issue with HttpClientProtocol. +- Fixed bytecode loading and creation. +- Fixed O(N!) allocations for recursive union variants. +- Fixed content-type for http-payload when already in headers. +- Fixed skipping OperationGenerator in types-only codegen mode. +- Fixed gradle to generate javadoc and sources jar for publishing. ([#854](https://github.com/smithy-lang/smithy-java/pull/854)) +- Fixed delay publishing the initial event until fully wired. ([#865](https://github.com/smithy-lang/smithy-java/pull/865)) +- Fixed null protocol version handling in MCP requests. +- Fixed proxy initialization failures no longer silently swallowed. +- Correctly handled BigInteger and BigDecimal defaults. +- Correctly adapted oneOf unions nested in oneOfUnions. +- Properly supported lists of Documents. ([#869](https://github.com/smithy-lang/smithy-java/pull/869)) + +### Improvements +- Switched to faster and cheaper array-backed headers. +- Optimized Context implementation with chunked array storage. +- Optimized SchemaConverter and MCP Schema conversion. +- Optimized string validation. +- Optimized endpoints VM with fused opcodes, `ite`, negative indexing, and `SPLIT` opcode. +- Optimized timestamp handling with minor improvements. +- Avoided unnecessary UTF-8 decoding and byte[] allocations when flushing MCP structs. +- Avoided boxing for primitive Documents and fixed equals for various Documents. +- Used SmithyUri instead of URI for performance. +- Improved HttpHeaders to only allocate names when needed. +- Added upper bound on container pre-allocation during deserialization. +- Prevented allocating large arrays based on BigInteger lengths. +- Added stricter verifications while reading lists in Json Codec. +- Added better header and value validation. +- Improved client content-type deserialization handling. +- Converted Jackson exceptions to SerializationException. +- Used JmespathRuntime for JMESPath evaluation. +- Used proper classloader for loading services. ([#958](https://github.com/smithy-lang/smithy-java/pull/958)) +- Used symbols instead of hardcoded strings. ([#1072](https://github.com/smithy-lang/smithy-java/pull/1072)) +- Used sealed interfaces for enums and records for unions. +- Oriented DataStream around InputStream. +- Made Client implement Closeable. +- Made ClientTransport extend Closeable. +- Made rules engine independent of client. +- Moved to blocking client, towards virtual threads. +- Increased default MCP HTTP proxy timeout from 60s to 5 minutes. +- Upgraded to Jackson 3.0.3. + +### Documentation +- Added package info and unstable annotations. ([#1094](https://github.com/smithy-lang/smithy-java/pull/1094)) +- Reviewed and annotated public classes with unstable annotation as needed. ([#1077](https://github.com/smithy-lang/smithy-java/pull/1077)) +- Added docs and tests for FormUrlEncodedSink. +- Added message member to DocumentException toString. +- Used snippets for code comments. + +### Breaking Changes +- Removed tracing API. ([#1068](https://github.com/smithy-lang/smithy-java/pull/1068)) +- Removed ExternalSymbols. +- Removed MCP CLI functionality. +- Removed MCP bundles module. +- Removed unused ExecutorService from call context. +- Removed map* methods from Hooks and replaced with cast. +- Removed logic to deserialize using the protocol codec. ([#870](https://github.com/smithy-lang/smithy-java/pull/870)) +- Removed default from JsonArraySchema. +- Removed unused jline dependency. +- Split codegen-plugins back into codegen-core and removed client-api. ([#1091](https://github.com/smithy-lang/smithy-java/pull/1091)) +- Moved from plugin-based codegen to mode-based codegen for types, client, and server. +- Moved endpoints to upper level. +- Separated java and resources into different folders. ([#1078](https://github.com/smithy-lang/smithy-java/pull/1078)) +- Surface area review of client packages. ([#1086](https://github.com/smithy-lang/smithy-java/pull/1086)) +- Surface area review of CLI package API. ([#1085](https://github.com/smithy-lang/smithy-java/pull/1085)) +- Made errorSchemas non-default in the interface. +- Made union members implicitly type-cast in getValue. +- Made additionalProperties a Document. + +### Other +- Bumped dependencies across multiple Gradle groups. +- Bumped Gradle actions, checkout, upload-artifact, cache, and setup-java actions. +- Added integration tests to compile and check AWS endpoints. +- Added S3 model from Maven. +- Updated to latest Smithy with stricter BDD validation. +- Built examples explicitly using JDK21. +- Made mcp-schemas and smithy-ai-traits jars reproducible. +- Fixed build cache misses. +- Moved examples and mcp-schemas to new structure. +- Tests and codegen fixes to build most AWS API models. ([#1081](https://github.com/smithy-lang/smithy-java/pull/1081)) +- Removed build warnings. ([#1109](https://github.com/smithy-lang/smithy-java/pull/1109)) + ## 0.0.3 (08/21/2025) > [!WARNING] > This is a developer-preview release and may contain bugs. **No** guarantee is made about API stability. @@ -69,4 +224,4 @@ - Added JSON protocol support - restJson1, awsJson. - Added RPCV2 CBOR protocol support. - Implemented Dynamic client that can load a Smithy model to call a service. -- Added Smithy Lambda Endpoint wrapper to run generated server stubs in AWS Lambda. \ No newline at end of file +- Added Smithy Lambda Endpoint wrapper to run generated server stubs in AWS Lambda. diff --git a/VERSION b/VERSION index 2c91216aa..3eefcb9dd 100644 --- a/VERSION +++ b/VERSION @@ -1,2 +1 @@ -0.0.3 - +1.0.0 diff --git a/aws/aws-service-bundle/README.md b/aws/aws-service-bundle/README.md new file mode 100644 index 000000000..53f3f9c62 --- /dev/null +++ b/aws/aws-service-bundle/README.md @@ -0,0 +1,7 @@ +## aws-service-bundle + +> [!WARNING] +> This is a developer-preview module and may contain bugs. No guarantee is made about API stability. +> This module is not recommended for production use. + +Provides generic request parameters for interacting with AWS services described by an AWS service bundle. diff --git a/aws/aws-service-bundler/README.md b/aws/aws-service-bundler/README.md new file mode 100644 index 000000000..86700bbed --- /dev/null +++ b/aws/aws-service-bundler/README.md @@ -0,0 +1,7 @@ +## aws-service-bundler + +> [!WARNING] +> This is a developer-preview module and may contain bugs. No guarantee is made about API stability. +> This module is not recommended for production use. + +Produces service bundles for AWS services from Smithy models. diff --git a/aws/integrations/aws-lambda-endpoint/README.md b/aws/integrations/aws-lambda-endpoint/README.md new file mode 100644 index 000000000..7c0a917f6 --- /dev/null +++ b/aws/integrations/aws-lambda-endpoint/README.md @@ -0,0 +1,7 @@ +## aws-lambda-endpoint + +> [!WARNING] +> This is a developer-preview module and may contain bugs. No guarantee is made about API stability. +> This module is not recommended for production use. + +Provides an endpoint implementation for running Smithy Java server stubs as AWS Lambda request handlers. diff --git a/cli/README.md b/cli/README.md index c11eff958..d57c2bafa 100644 --- a/cli/README.md +++ b/cli/README.md @@ -1,7 +1,8 @@ ## smithy-call > [!WARNING] -> This project is still in development and is not intended for use in production. +> This is a developer-preview module and may contain bugs. No guarantee is made about API stability. +> This module is not recommended for production use. This module contains the base-version of smithy-call: a CLI that uses ahead-of-time compilation and the dynamic client to make adhoc calls to services. diff --git a/codegen/test-utils/README.md b/codegen/test-utils/README.md new file mode 100644 index 000000000..cf6b97750 --- /dev/null +++ b/codegen/test-utils/README.md @@ -0,0 +1,7 @@ +## codegen-test-utils + +> [!WARNING] +> This is a developer-preview module and may contain bugs. No guarantee is made about API stability. +> This module is not recommended for production use. + +Provides utilities for testing Smithy Java codegen plugins. diff --git a/mcp/mcp-server/README.md b/mcp/mcp-server/README.md new file mode 100644 index 000000000..f0efe0096 --- /dev/null +++ b/mcp/mcp-server/README.md @@ -0,0 +1,7 @@ +## mcp-server + +> [!WARNING] +> This is a developer-preview module and may contain bugs. No guarantee is made about API stability. +> This module is not recommended for production use. + +Provides Model Context Protocol (MCP) server support for Smithy Java, enabling MCP server generation from Smithy models. diff --git a/model-bundle/model-bundle-api/README.md b/model-bundle/model-bundle-api/README.md new file mode 100644 index 000000000..34e1ebb60 --- /dev/null +++ b/model-bundle/model-bundle-api/README.md @@ -0,0 +1,7 @@ +## model-bundle-api + +> [!WARNING] +> This is a developer-preview module and may contain bugs. No guarantee is made about API stability. +> This module is not recommended for production use. + +Implements the model-bundle utility for packaging and loading Smithy models at runtime. diff --git a/server/server-api/README.md b/server/server-api/README.md index f30a49977..6792ff220 100644 --- a/server/server-api/README.md +++ b/server/server-api/README.md @@ -1,2 +1,7 @@ ## server-api + +> [!WARNING] +> This is a developer-preview module and may contain bugs. No guarantee is made about API stability. +> This module is not recommended for production use. + Provides the base API for servers. diff --git a/server/server-core/README.md b/server/server-core/README.md index 28da3cc4c..b8610f21c 100644 --- a/server/server-core/README.md +++ b/server/server-core/README.md @@ -1,2 +1,7 @@ ## server-core + +> [!WARNING] +> This is a developer-preview module and may contain bugs. No guarantee is made about API stability. +> This module is not recommended for production use. + Provides core server functionality for the Smithy Java framework. diff --git a/server/server-netty/README.md b/server/server-netty/README.md index fc24c502c..6df3dff15 100644 --- a/server/server-netty/README.md +++ b/server/server-netty/README.md @@ -1,2 +1,7 @@ ## server-netty + +> [!WARNING] +> This is a developer-preview module and may contain bugs. No guarantee is made about API stability. +> This module is not recommended for production use. + Netty-based implementation of a Smithy Java server. diff --git a/server/server-proxy/README.md b/server/server-proxy/README.md new file mode 100644 index 000000000..9a06248ea --- /dev/null +++ b/server/server-proxy/README.md @@ -0,0 +1,7 @@ +## server-proxy + +> [!WARNING] +> This is a developer-preview module and may contain bugs. No guarantee is made about API stability. +> This module is not recommended for production use. + +Provides proxy server functionality for the Smithy Java framework, enabling request forwarding using the dynamic client. diff --git a/server/server-rpcv2-cbor/README.md b/server/server-rpcv2-cbor/README.md index 55f259a9e..6caa8f115 100644 --- a/server/server-rpcv2-cbor/README.md +++ b/server/server-rpcv2-cbor/README.md @@ -1,2 +1,7 @@ -### server-rpcv2-cbor +## server-rpcv2-cbor + +> [!WARNING] +> This is a developer-preview module and may contain bugs. No guarantee is made about API stability. +> This module is not recommended for production use. + Server implementation of the [RPCv2](https://smithy.io/2.0/additional-specs/protocols/smithy-rpc-v2.html) CBOR protocol. diff --git a/smithy-ai-traits/README.md b/smithy-ai-traits/README.md new file mode 100644 index 000000000..aa93be93b --- /dev/null +++ b/smithy-ai-traits/README.md @@ -0,0 +1,7 @@ +## smithy-ai-traits + +> [!WARNING] +> This is a developer-preview module and may contain bugs. No guarantee is made about API stability. +> This module is not recommended for production use. + +Defines Smithy AI traits for annotating models with AI-specific metadata such as prompts and tool definitions.