v2.4.0
pREST v2.4.0 β opt-in OpenTelemetry instrumentation with a local SigNoz dev stack, pgvector nearest-neighbor ordering and distance filtering, and a pREST Studio dependency upgrade.
Released: July 26, 2026
GitHub tag Β· Compare v2.3.0...v2.4.0
v2.4.0 is an observability and vector search release. It adds opt-in OpenTelemetry instrumentation with a local SigNoz dev stack (#1003), pgvector nearest-neighbor ordering (_korder) and distance-threshold filtering (:vecdist) (#1011), and a routine pREST Studio dependency upgrade (#1004).
Docker:
prest/prest:v2.4.0Go install:
go install github.com/prest/prest/v2/cmd/prestd@v2.4.0
No breaking changes and no config migrations. Everything new in this release is opt-in: telemetry defaults to off, and _korder / :vecdist only apply where a client sends them against a vector column.
See Changes since v2.3.0 for the commit list.
Highlights
OpenTelemetry instrumentation + SigNoz dev stack (#1003)
Opt-in OTLP/gRPC push telemetry: HTTP, Postgres, and MCP traces; http.server.* / db.client.operation.duration / db.sql.connection.* metrics; and a slog β OTel logs bridge that still writes to stdout. No new HTTP route is added β there is no /metrics scrape endpoint, so the attack surface is unchanged.
New [otel] config section (PREST_OTEL_* env overrides):
enabled
false
Master switch β zero overhead and no outbound connections when off
service_name
prestd
Resource service.name
endpoint
(unset)
OTLP gRPC collector host:port
protocol
grpc
Only grpc for now
sample_ratio
1.0
Trace head sampling, clamped 0.0β1.0
metrics_interval
15s
Metric export period
insecure
false
Disable TLS to collector (local/dev)
db_statement
false
Record SQL text on DB spans (trusted envs only)
Setup fails closed: if the exporter can't be built at startup, pREST logs a warning and keeps serving with telemetry disabled. Graceful shutdown (SIGINT/SIGTERM draining via signal.NotifyContext) ships alongside it so telemetry flushes on exit. A self-contained SigNoz stack lives under dev/signoz/ (make signoz-up / make signoz-down) for local viewing. See Configuring pREST β Observability.
pgvector KNN ordering and distance filtering (#1011)
Two new query-parameter forms for vector-typed columns (requires the pgvector extension), both restricted to a fixed metric whitelist (l2/euclidean, cosine/cos, ip/inner/dot, l1/manhattan) and validated end-to-end:
_korder
<column>:<metric>:<vector>
_korder=embedding:l2:[1,0,0]
Orders by nearest-neighbor distance (KNN); composes with _order as an additional sort term
<column>:vecdist
<metric>:<comparison>:<vector>:<threshold>
embedding:vecdist=l2:lt:[1,0,0]:0.5
Filters rows by distance threshold; comparison is restricted to =, !=, <, <=, >, >=
Malformed metrics, non-numeric vector elements, oversized vectors (>16000 dims, pgvector's own limit), non-scalar comparisons (e.g. like), and dimension mismatches all return 400 rather than reaching the database unsafely. See Parameters β pgvector KNN ordering and distance filtering.
pREST Studio dependency upgrade (#1004)
Routine dependency bump for the embedded Studio UI. Fixes the auth dialog not reflecting saved credentials / "remember me" state on reopen, and avoids building incomplete MCP tool-call requests when argument construction fails. No config or API changes.
Changes since v2.3.0
Full detail: compare v2.3.0...v2.4.0.
Upgrading from v2.3.0
No configuration changes are required; this is a drop-in update.
Deploy
prest/prest:v2.4.0, the matching binary, orgo install β¦@v2.4.0.Telemetry stays off by default. Set
otel.enabled = true(orPREST_OTEL_ENABLED=true) andotel.endpointonly when you have an OTLP/gRPC collector to send to β see Configuring pREST β Observability.pgvector columns gain
_korderand:vecdistautomatically; both require thepgvectorextension on the target column and are no-ops otherwise.MCP at
/_mcp, Studio at/_studio/, and the multi-adapter registry are unchanged from v2.3.0.
Related
Last updated