Skip to content

Replaced protoc-gen-ts with protoc-gen-kaja#249

Merged
wham merged 542 commits intomainfrom
claude/add-protoc-gen-kaja-sQ6oN
Feb 21, 2026
Merged

Replaced protoc-gen-ts with protoc-gen-kaja#249
wham merged 542 commits intomainfrom
claude/add-protoc-gen-kaja-sQ6oN

Conversation

@wham
Copy link
Owner

@wham wham commented Feb 18, 2026

No need to bundle Node.js runtime with the app now.

🎬 Demo

Video

Demo

Home

Home

Call

Call

Compiler

Compiler

New Project

New Project

tom-newotny and others added 30 commits February 18, 2026 07:58
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ropped

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ptions

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…aScript

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…om options

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ject

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Map fields (e.g., map<string, string>) in custom message-typed options
are now serialized as plain objects ({ key1: value1, key2: value2 })
instead of arrays of entry messages ([{ key: ..., value: ... }]),
matching protobuf-ts's toJson() behavior.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…oted

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Map keys starting with a digit (e.g., '123abc') must be quoted in JS
object literals since they aren't valid JS identifiers. Extended the
key quoting check to also trigger on digit-leading keys, not just
dot-containing keys.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…options crash

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Packed repeated encoding uses BytesType wire type for scalar fields.
Added handling in parseMessageValue to detect packed encoding (BytesType
wire + repeated label + scalar type), read the packed bytes, and decode
all contained values individually for varint, fixed32, and fixed64
wire formats.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…methods array

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…trailing-underscore enum names

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…in name

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Matched protobuf-ts algorithm: prepend '_' before ALL uppercase letters,
strip leading '_', uppercase, append '_'. Previous code skipped prepending
at i=0, producing '__FOO_' instead of '_FOO_' for enum name '_Foo'.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…th multiple server-streaming methods

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…e same streaming type

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…e in Group branch

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…s with shared types

Unified streaming and non-streaming import collection into a single ordered list.
Used forward-pass firstMethodForType map to place type imports at the correct
position (where they're first needed in protobuf-ts's forward/prepend model),
preventing streaming methods from claiming types that belong to lower-indexed
non-streaming methods.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
tom-newotny and others added 26 commits February 21, 2026 06:30
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Added jsonWriteOptionsTypeRef field for the 'import type { JsonWriteOptions }' collision
(separate from existing lowercase jsonWriteOptionsRef for the value import).
Updated 6 import emission sites and 8 method signature usage sites.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
… WKT

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Renamed the multi-file e-commerce integration test and expanded it from 6 to 8 proto files covering all 15 scalar types, all WKTs, all streaming RPC types, custom options, import public, proto3 optional, allow_alias, reserved fields, deprecated, jstype, json_name, TS keyword fields, __proto__, oneof_kind, constructor, 4-level nesting, self-referential messages, nested collision, runtime import collision (WireType/MessageType), cross-package name collision, empty service, idempotency levels, and special-char comments.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Moved RALPH.md, NELSON.md, and ralph.sh (now scripts/loop) into
protoc-gen-kaja/. Removed completed plan/notes, keeping only instructions.
status.txt now lives at protoc-gen-kaja/status.txt.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…dency

Test script now resolves protoc-gen-ts from ui/node_modules/.bin/ instead of
server/build/ and self-installs protoc. Moved @protobuf-ts/plugin to
devDependencies since it's only used as a reference for test comparison.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Removed the test-only dependency from ui/package.json and created
protoc-gen-kaja/package.json with just @protobuf-ts/plugin. Test script
auto-installs it and resolves from protoc-gen-kaja/node_modules/.bin/.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…rew check

The TS plugin is needed in ui/ for development protoc codegen (npm run protoc).
protoc-gen-kaja is used in scripts/server for production builds. Both produce
identical output. Added Node.js Homebrew installation prompt to scripts/server.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Kaja's own Twirp API uses protoc-gen-ts in all environments. protoc-gen-kaja
is for compiling user workspace protos at runtime without Node.js. The Go
plugin will eventually diverge from the TS implementation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Removed @protobuf-ts/plugin from ui/ — now only used in protoc-gen-kaja/ for test comparison. scripts/server uses protoc-gen-kaja for both Kaja's own API and user workspace protos.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
… invocation

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@wham wham changed the title Claude/add protoc gen kaja s q6o n Replaced protoc-gen-ts with protoc-gen-kaja Feb 21, 2026
@wham wham marked this pull request as ready for review February 21, 2026 20:13
@wham wham merged commit 6436d12 into main Feb 21, 2026
2 checks passed
@wham wham deleted the claude/add-protoc-gen-kaja-sQ6oN branch February 21, 2026 20:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants