Starting with v3.x the Vectorizer server bundle ships with the VectorizerRPC binary transport enabled by default and treats it as the recommended path for first-party clients. REST and MCP stay available and fully functional — the change is to defaults and documentation, not to the transport surface itself.
| Surface | Before (≤ v2.x) | After (v3.x) |
|---|---|---|
RpcConfig::default() |
enabled: false |
enabled: true |
config.example.yml |
RPC section absent | rpc: block first, with enabled: true and a "recommended default" comment |
Dockerfile |
EXPOSE 15002 |
EXPOSE 15503 15002 (RPC first) |
docker-compose.yml |
publishes 15002 and 15003 |
publishes 15503, 15002, 15003 |
| Helm chart | service.port: 15002 only |
service.rpcPort: 15503 + service.port: 15002 (both exposed) |
k8s manifests (deploy/k8s/service.yaml, statefulset.yaml, statefulset-ha.yaml) |
port 15002 only |
named ports rpc (15503), http (15002), and existing replication / grpc |
- REST stays available on the same port (default 15002). The dashboard, every existing browser/curl/HTTP-SDK consumer, and ops tooling continue to work unchanged.
- MCP stays available on the same port (15002 by default; the MCP
endpoint is
/mcpover WebSocket). - gRPC stays available when configured.
- Wire format of every existing transport is byte-identical to v2.x.
- The capability registry (
src/server/capabilities.rs) drives all transports — adding an operation lands it on every surface at once.
If you run with config.example.yml defaults, the upgrade is
transparent. The server now also listens on port 15503 for binary
RPC. If your environment doesn't expose 15503, the listener simply
isn't reachable from outside; nothing else changes.
If your firewall or security policy can't expose an additional port,
flip RPC off in config.yml:
rpc:
enabled: falseThe server boot will skip the listener entirely (debug! "VectorizerRPC listener disabled in config" in the boot log).
The Dockerfile now EXPOSEs both 15503 and 15002. Update your
deployment to publish both:
- docker-compose:
docker-compose.ymlalready maps both ports. If you maintain a custom compose file, add"15503:15503"to theports:list. - Helm: the chart sets
service.rpcPort: 15503by default. To disable the RPC port for a chart deployment, override--set service.rpcPort=""(or drop the port from a values file copy). Templates skip the port if rpcPort is unset. - k8s raw manifests: the bundled
deploy/k8s/service.yamland the StatefulSet specs include therpcnamed port. Apply the new manifests or merge the additional port into your existing copies.
# Health: REST endpoint still works, dashboard is up.
curl -fs http://localhost:15002/health
# RPC liveness: HELLO + PING round-trip from any MessagePack-aware
# language. The Python snippet below uses only the stdlib + msgpack.
python3 - <<'PY'
import socket, struct, msgpack
def call(sock, request_id, command, args):
body = msgpack.packb([request_id, command, args])
sock.sendall(struct.pack("<I", len(body)) + body)
length = struct.unpack("<I", sock.recv(4))[0]
return msgpack.unpackb(sock.recv(length), raw=False)
with socket.create_connection(("localhost", 15503)) as s:
print(call(s, 1, "HELLO", [{"version": 1}]))
print(call(s, 2, "PING", []))
PYA healthy server replies with the protocol version (1),
authenticated/admin flags, capability list, and PONG. Full operator
guide: docs/deployment/rpc.md. Byte-level
contract: docs/specs/VECTORIZER_RPC.md.
This cutover ships the server defaults. First-party SDK constructors
(Rust, Python, TypeScript, Go, C#) flip to RPC as their default
transport in the matching phase6_sdk-{lang}-rpc task slots, which
have not been merged at the time of this cutover. Until the SDKs ship:
- The
vectorizer://host:15503URL scheme is the canonical default (see each SDK proposal under.rulebook/tasks/phase6_sdk-*-rpc/). - Existing HTTP-SDK code keeps working — REST is the v2.x default and remains available.
When a given SDK ships its RPC client, the corresponding README's quickstart will show RPC first (per each task's "Default URL scheme" section). The legacy framework integrations (langchain, langflow, n8n, tensorflow, pytorch) were dropped in v3.0.0 — they were thin adapters over the language-native SDKs and are no longer maintained.
Set rpc.enabled: false in config.yml, restart the server, and
optionally close port 15503 at the firewall. No data is touched and
no other transport changes behaviour. The boot log line
VectorizerRPC listener disabled in config confirms the rollback took
effect.