* feat(transport/http): add read/write deadline control to ServerStream Add SetReadDeadline and SetWriteDeadline to the ServerStream interface so streaming handlers can bound how long a Recv or Send may block (idle timeout, slow-client protection) without the framework exposing its websocket implementation. For WebSocket streams the deadline is applied to the underlying connection; the write deadline is serialized against in-flight writes via the stream's write mutex. For SSE streams the deadline is applied via http.ResponseController. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * test(transport/http): fix err shadow in read deadline test Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(transport/http): detach server timeout from server streams The per-request server timeout (default 1s) was injected into every request context by the server filter and propagated into streaming handlers, so a long-lived WebSocket or SSE stream had its Context() canceled shortly after it started. Detach the deadline and cancellation when storing the stream context (at construction and in SetContext) via context.WithoutCancel, preserving the middleware-injected values (tracing, auth, metadata). The stream lifecycle is now driven by Send/Recv errors and the read/write deadlines, mirroring how the gRPC transport keeps streams on the connection-scoped context instead of the per-request timeout context. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Kratos
Kratos is a lightweight Go framework for building cloud-native microservices. It provides small, explicit APIs for transport, middleware, registry, configuration, logging, encoding, and code generation so applications can focus on business logic.
Features
- API-first development with Protobuf and generated HTTP/gRPC code.
- Unified transport layer for HTTP and gRPC.
- Composable middleware for recovery, logging, validation, tracing, metrics, auth, and more.
- Pluggable registry, configuration, and encoding components.
- Standard-library
log/slogbased logging with OpenTelemetry extensions in contrib packages. - Consistent metadata, errors, validation, OpenAPI, and code-generation workflows.
- A contrib ecosystem for optional integrations such as registries, config stores, middleware, encodings, and observability.
Installation
Requirements
- Go 1.25 or later
- protoc
- protoc-gen-go
Install the CLI
go install github.com/go-kratos/kratos/cmd/kratos/v3@latest
kratos upgrade
Create a Service
kratos new helloworld
cd helloworld
go mod tidy
kratos run
Visit http://localhost:8000/helloworld/kratos after the service starts.
For a fuller generated service flow:
kratos proto add api/helloworld/helloworld.proto
kratos proto client api/helloworld/helloworld.proto
kratos proto server api/helloworld/helloworld.proto -t internal/service
go generate ./...
kratos run
Usage Example
package main
import (
"github.com/go-kratos/kratos/v3"
"github.com/go-kratos/kratos/v3/transport/grpc"
"github.com/go-kratos/kratos/v3/transport/http"
)
func main() {
httpSrv := http.NewServer(http.Address(":8000"))
grpcSrv := grpc.NewServer(grpc.Address(":9000"))
app := kratos.New(
kratos.Name("helloworld"),
kratos.Version("v1.0.0"),
kratos.Server(httpSrv, grpcSrv),
)
if err := app.Run(); err != nil {
panic(err)
}
}
v3 Migration
Kratos v3 reduces core dependencies and makes previously implicit behavior explicit. Review the v2 to v3 migration guide before upgrading production services.
Further Reading
Development
make test
make lint
Community
Security
If you discover a security vulnerability in Kratos, please contact go-kratos@googlegroups.com. Security reports are handled privately before disclosure.
Contributors
Thank you for contributing to Kratos. The contribution guide is available in the Kratos documentation.
Acknowledgments
The following projects influenced Kratos design:
License
Kratos is open-sourced software licensed under the MIT license.
