rmueller/kayak
44.1
Weak · 5 August 2026
2.2k
lines of production code
C#
primary language
5
measurements over time
What this system is
Kayak is a high-performance, event-driven networking framework for .NET that provides a robust foundation for building HTTP servers and network applications. It replaces legacy stream-based abstractions with a modern, delegate-based architecture for scheduling, server management, and socket I/O, enabling more testable and stable code. The system includes a command-line interface for launching servers, comprehensive HTTP/1.1 support including 100-continue handling, and utility tools for documentation generation.
How it got here
2010 — Architecture simplification and build reorganization
12 changes.
This period focused on streamlining the Kayak framework by removing legacy coroutine and stream abstractions in favor of a more direct socket and event-loop based architecture. The team integrated the httpmachine submodule and introduced new networking abstractions via the Oars library, while simultaneously reorganizing the project structure, build scripts, and test suites to support this shift.
2011 — Delegate-based architecture and test coverage
11 changes.
The project underwent a significant architectural shift to replace C\# events with interface-based delegates across the HTTP and networking layers, improving robustness and testability. This refactoring was accompanied by the introduction of a command-line interface and extensive new test suites to validate the new delegate patterns and transaction handling.
Features
Added KayakExamples project with HTTP server sample
Introduced a new KayakExamples project containing an App.config for diagnostics and a Program.cs that demonstrates the Kayak HTTP server. The example implements an IHttpRequestDelegate to handle GET and POST requests, including a buffered echo endpoint that supports 100-continue, and exposes request details such as URI, path, query string, and fragment.
KayakExamples · high confidence
Added Oars networking implementation
Introduced the Kayak.Oars assembly containing the core networking abstractions and implementations. This includes the OarsServer for managing TCP connections, OarsSocket for handling individual client sockets, and supporting classes like OarsBuffer and Disposable. This provides a new way to handle network I/O within the Kayak framework.
Kayak.Oars · high confidence
Added trace and stack trace utilities to Kayak/Extensions
A new Trace utility class and extension methods were added to the Kayak/Extensions namespace. This includes a DebugStackTrace method for debugging in DEBUG builds, a WriteStackTrace method for writing to a TextWriter, and a GetStackTrace method that formats exception chains. Additionally, an internal Trace class was added to write formatted messages to the console with thread and method information when the TRACE preprocessor symbol is defined.
Kayak/Extensions · high confidence
HTTP request header extensions for 100-continue and body detection
Added new extension methods to the HTTP request handling to support the 100-continue protocol and body detection. The \IsContinueExpected\ method checks for the '100-continue' header in HTTP/1.1 requests, while \IsContinueProhibited\ handles cases where the header is missing or invalid. Additionally, \HasBody\ determines if a request contains a body based on 'Content-Length' or 'Transfer-Encoding' headers.
Kayak/Http/Extensions · high confidence
Incorporates httpmachine submodule and libevent\_core library
The lib directory now includes the httpmachine submodule (commit 5747f5e) and a new libevent\_core.dylib shared library. These additions provide underlying HTTP and event-loop capabilities to the library.
lib · high confidence
Introduce Kayak CLI launcher and option parsing
The Kayak.Cli project now includes a command-line interface that parses user arguments into configuration options and launches the Kayak scheduler. This includes an option parser for handling flags like --help, -g/--gate for Gate configuration, and -b/--bind for network endpoints, alongside a launcher that loads user-defined delegates and starts the scheduler.
Kayak.Cli · high confidence
Introduced KayakDocs tool for generating HTML documentation from .NET assemblies
A new documentation generation tool named KayakDocs has been added to the tools directory. This utility processes .NET assemblies to produce HTML documentation pages, utilizing a custom reflection-based XML documentation extractor (DocsByReflection) and an embedded MarkdownSharp processor to format member descriptions. The tool iterates through assembly types, extracting constructors, properties, methods, and fields, and outputs a structured HTML document. The project's assembly metadata has been updated to reflect the new name and GUID.
tools · high confidence
Behavioural changes
Added assembly metadata for KayakExamples
The KayakExamples project now includes an AssemblyInfo.cs file that defines standard assembly metadata, including the title, copyright, version (1.0.0.0), and GUID. This ensures the assembly is properly identified and versioned in the build output.
KayakExamples/Properties · high confidence
Build and project structure reorganization
The project's build and solution structure has been reorganized. The solution file (Kayak.sln) has been updated to target Visual Studio 2010, and the solution now includes the KayakExamples and Kayak.Tests projects, while removing the Oars project. A new Rakefile.rb and build.proj have been added to automate the build process, including fetching git submodules (such as HttpMachine) and NuGet dependencies (such as NUnit). Additionally, a .gitignore file has been created to exclude build artifacts and IDE-specific files, and a LICENSE file has been added.
(repo-wide) · high confidence
Introduces a delegate-based API for scheduling, servers, and sockets
The Kayak/Net library now uses explicit interface-based delegates (ISchedulerDelegate, IServerDelegate, ISocketDelegate) instead of C\# events or native callbacks. This change introduces new interfaces (IScheduler, IServer, ISocket) and their corresponding factories, allowing users to provide custom implementations for scheduling, server lifecycle, and socket operations. The scheduler is now single-threaded by default, and the HTTP/IO handling is restructured around these delegate patterns for improved robustness.
Kayak/Net · high confidence
Refactored KayakServer to use interface-based delegates and explicit scheduler dependency
The server implementation was rewritten to replace C\# events with interface-based delegates (IServerDelegate) and accept an IScheduler dependency, making the HTTP handling more robust. The new DefaultKayakServer constructor requires both a delegate and a scheduler, and the server now enforces null checks on these arguments. Additionally, the server's internal state management was extracted into a dedicated KayakServerState class to track listening, closing, and connection counts.
Kayak/Net/Server · high confidence
Refactored socket implementation with interface-based delegates and improved state management
The socket layer has been refactored to use interface-based delegates (ISocketDelegate) instead of C\# events, providing a more robust and testable API. A new KayakSocketState class manages connection lifecycle (connecting, connected, closed) to prevent invalid state transitions. The implementation now properly sets RemoteEndPoint, handles exceptions from BeginReceive, and defers socket shutdown and close events until all data is written, improving stability. A SocketWrapper interface and class were added to wrap native Socket calls, enabling easier testing and Mono compatibility.
Kayak/Net/Socket · medium confidence
Removal of legacy coroutine and stream abstractions
The Kayak library has removed several legacy components to simplify the architecture. The custom \Coroutine\ class and its associated \AsCoroutine\ extension method have been deleted, indicating a shift away from the previous coroutine-based execution model. Additionally, the \EntityStream\, \RequestStream\, and \ResponseStream\ classes have been removed, along with the \NameValueDictionary\ and \ObserverCollection\ helper classes. The \KayakRequest.cs\ file was also renamed to \Disposable.cs\ and significantly simplified, reflecting a move towards a more direct, lower-level socket and stream handling approach.
Kayak · high confidence
Removed obsolete test suite for request and response streams
The test suite for the Kayak HTTP server's request and response handling has been removed. This includes the deletion of test files for \KayakContextRequest\, \KayakContextResponse\, \KayakServer\, \RequestStream\, and \ResponseStream\, as well as a custom \SynchronousMemoryStream\ helper and the \Moq\ library's XML documentation. These tests previously validated the parsing of HTTP headers, status lines, and body streams, as well as the construction of HTTP responses. Their removal indicates a shift away from the previous stream-based request/response model in favor of a new architecture.
KayakTests · high confidence
Rewrote HTTP transaction pipeline with interface-based delegates
The HTTP server implementation has been largely rewritten to replace C\# events with interface-based delegates (IHttpRequestDelegate, IHttpResponseDelegate, etc.), resulting in a more robust and testable transaction pipeline. This change introduces support for HTTP 100 Continue responses, exposes the client's IP address in the X-Forwarded-For header, and ensures proper socket disposal to prevent ObjectDisposedExceptions. Additionally, the API now exposes request path, query string, and fragment components.
Kayak/Http · high confidence
Updated Kayak assembly metadata and version
The Kayak assembly metadata has been updated to version 0.7.2, with a more descriptive assembly description and copyright header. The InternalsVisibleTo attribute was added to expose internal types to the Kayak.Tests assembly.
Kayak/Properties · high confidence
Test coverage
Added HTTP transaction test infrastructure; Added and re-enabled network and scheduler tests; Added comprehensive tests for HTTP transaction handling and parser transforms; Added test helper delegates for scheduler, server, and socket; Added unit tests for CLI argument parsing and launcher behavior; Updated test assembly metadata.
Dependencies
Build system and test infrastructure reorganization
The project's build configuration has been updated to use MSBuild ToolsVersion 4.0, and the solution structure has been reorganized. The 'KayakTests' project was renamed to 'KayakExamples' and its references to local DLLs were replaced with NuGet package references for NUnit 2.5.10.1092. Additionally, new test projects were introduced for the CLI and core library, and the main 'Kayak' project was updated to include the 'httpmachine' library as a submodule and generate XML documentation files.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 48 → 44 (-4.4)
- Rubric changed (rubric-2026.08.15 → rubric-2026.08.19) — scores are not directly comparable.
Lenses
- Code Health 61 → 78 (+16.7)
- Architecture 87 → 87 (+0.0)
- Maturity 55 → 25 (-30.3)
- Readiness 30 → 38 (+8.1)
- Security 100 → 100 (+0.0)
Resolved (19)
- Change coupling: HttpServer.cs ↔ ParserToTransactionTransform.cs (Kayak/Http/HttpServer.cs)
- Change coupling: HttpServerTransactionDelegate.cs ↔ ParserToTransactionTransform.cs (Kayak/Http/HttpServerTransactionDelegate.cs)
- Coverage not measured — test suite did not build
- DefaultKayakSocket.BeginRead (cognitive 24) (Kayak/Net/Socket/KayakSocket.cs)
- DefaultKayakSocket.BeginSend (cognitive 20) (Kayak/Net/Socket/KayakSocket.cs)
- No tests discovered
- TodoComment (Kayak.Tests/Net/SocketTests.cs)
- TodoComment (Kayak.Tests/Net/SocketTests.cs)
- XxxComment (Kayak.Tests/Http/Mocks.cs)
- XxxComment (Kayak.Tests/Http/Mocks.cs)
- XxxComment (Kayak.Tests/Http/Mocks.cs)
- XxxComment (Kayak/Http/DataSubject.cs)
- XxxComment (Kayak/Http/DataSubject.cs)
- XxxComment (Kayak/Http/HttpServerTransactionDelegate.cs)
- XxxComment (Kayak/Http/HttpServerTransactionDelegate.cs)
- XxxComment (Kayak/Http/HttpServerTransactionDelegate.cs)
- XxxComment (Kayak/Http/Parsing/ParserHandler.cs)
- XxxComment (Kayak/Http/Parsing/ParserHandler.cs)
- redundant comment (Kayak/Http/HttpServerSocketDelegate.cs)
New (21)
- Coverage not measured — test suite did not build
- Dormant codebase
- Largest orphaned file (Kayak.Cli/Options.cs)
- Largest orphaned file (tools/KayakDocs/Markdown.cs)
- Test reliability not measured — no test run produced results
- The build section instructs readers to clone [e-mail redacted]/kayak/kayak.git and run 'rake', but no steps follow (e.g. how to install albacore or bootstrap the source tree). (README.md)
- TodoComment (Kayak.Tests/Net/SocketTests.cs)
- TodoComment (Kayak.Tests/Net/SocketTests.cs)
- XxxComment (Kayak.Tests/Http/Mocks.cs)
- XxxComment (Kayak.Tests/Http/Mocks.cs)
- XxxComment (Kayak.Tests/Http/Mocks.cs)
- XxxComment (Kayak/Http/DataSubject.cs)
- XxxComment (Kayak/Http/DataSubject.cs)
- XxxComment (Kayak/Http/HttpServerTransactionDelegate.cs)
- XxxComment (Kayak/Http/HttpServerTransactionDelegate.cs)
- XxxComment (Kayak/Http/HttpServerTransactionDelegate.cs)
- XxxComment (Kayak/Http/Parsing/ParserHandler.cs)
- XxxComment (Kayak/Http/Parsing/ParserHandler.cs)
- complexity unreadable for .cs, .rb — churn × complexity hotspots could not be measured
- dormant codebase — no living knowledge left to concentrate
- …and 1 more
Architecture
- Unchanged — 1 containers · 0 contexts · 0 edges
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
rmueller/kayak was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 5 August 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 892843d901c6e946179f9878df7efa3c2c746b5f — the exact code this score is about.
- Scored under rubric-2026.08.19 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer latest.