Skip to content

[2/x] (alternative to 1/x) feat: add proto plugin for typed serialization and UC Volume I/O#215

Closed
keugenek wants to merge 2 commits intomainfrom
feat/proto-lite
Closed

[2/x] (alternative to 1/x) feat: add proto plugin for typed serialization and UC Volume I/O#215
keugenek wants to merge 2 commits intomainfrom
feat/proto-lite

Conversation

@keugenek
Copy link
Copy Markdown
Contributor

Lean alternative to the full gRPC stack. Provides protobuf message definitions as cross-language data contracts with build-integrated codegen and typed Volume I/O via FilesConnector.

What's included:

  • Proto definitions (proto/appkit/v1/): common.proto, pipeline.proto
  • Build-integrated codegen: buf generate → shared/src/proto/ (Turbo-cached)
  • ProtoSerializer: binary/JSON ser/de + UC Volume read/write
  • Uses FilesConnector (not raw SDK) for upload bug fix + telemetry
  • ProtoPlugin: thin wrapper with interceptor chain (retry/timeout)
  • 1 runtime dep: @bufbuild/protobuf (~15KB)

What's NOT included (add later if needed):

  • No gRPC server/client (no @connectrpc/connect)
  • No HTTP/2, no Connect protocol, no service definitions
  • No standalone server mode

Usage:
const app = await createApp({ plugins: [proto()] }); app.proto.writeToVolume(JobResultSchema, result, "/Volumes/.../r.pb"); const r = await app.proto.readFromVolume(JobResultSchema, "/Volumes/.../r.pb");

Lean alternative to the full gRPC stack. Provides protobuf message
definitions as cross-language data contracts with build-integrated
codegen and typed Volume I/O via FilesConnector.

What's included:
- Proto definitions (proto/appkit/v1/): common.proto, pipeline.proto
- Build-integrated codegen: buf generate → shared/src/proto/ (Turbo-cached)
- ProtoSerializer: binary/JSON ser/de + UC Volume read/write
- Uses FilesConnector (not raw SDK) for upload bug fix + telemetry
- ProtoPlugin: thin wrapper with interceptor chain (retry/timeout)
- 1 runtime dep: @bufbuild/protobuf (~15KB)

What's NOT included (add later if needed):
- No gRPC server/client (no @connectrpc/connect)
- No HTTP/2, no Connect protocol, no service definitions
- No standalone server mode

Usage:
  const app = await createApp({ plugins: [proto()] });
  app.proto.writeToVolume(JobResultSchema, result, "/Volumes/.../r.pb");
  const r = await app.proto.readFromVolume(JobResultSchema, "/Volumes/.../r.pb");
Signed-off-by: Evgenii Kniazev <evgenii.kniazev@databricks.com>
Remove Volume I/O from proto plugin — file operations belong in the
Files plugin. Proto plugin now provides only typed data contracts:
create, serialize, deserialize, toJSON, fromJSON.

Changes:
- Remove writeToVolume, readFromVolume, exists from plugin and serializer
- Remove FilesConnector dependency from serializer
- Remove defaultVolume/timeout config (no longer relevant)
- Add create() method for typed message construction
- Update tests to verify serialization-only API surface
- Add docs/docs/plugins/proto.md with usage examples
- Add proto() to plugin index example

Co-authored-by: Isaac
Signed-off-by: Evgenii Kniazev <evgenii.kniazev@databricks.com>
@keugenek
Copy link
Copy Markdown
Contributor Author

Superseded by #220 — clean single-commit PR with simplified proto plugin (pure serialization, no Volume I/O).

@keugenek keugenek closed this Mar 30, 2026
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.

1 participant