Skip to main content
Version: 0.2.0 (Private Preview)

Version Compatibility

Normalize selected MongoDB wire-protocol and metadata behavior between approved client and server versions.

This page belongs to the immutable 0.2.0 Private Preview documentation.

At a glance

PropertyValue
Pipeline phaseRequest + response
CategoryTransform
Canonical minimum tierFree
Legacy dashboard tier labelPro
Legacy rendered nameVersion Compatibility
Legacy rendered summaryBridge wire protocol gaps between old MongoDB clients and new servers.
Canonical entitlementYes
Supported deployment contractYes
Release statusReconciled and executable. After edits, reconcile the owning NexoProxy and verify the active graph revision.

Release accuracy

  • 0.2.0 Private Preview: Reconciled and executable. After edits, reconcile the owning NexoProxy and verify the active graph revision.

The detailed material below preserves every section rendered by the legacy dashboard. Where it conflicts with the release status above, the release status is authoritative. Legacy field names and examples are not a substitute for the selected bundle's CRD and runtime contract. Unsafe legacy wording is retained in metadata for traceability but is corrected in the rendered guidance.

Version Compatibility 0.2.0 Private Preview feature flow. Reconciled and executable. After edits, reconcile the owning NexoProxy and verify the active graph revision.

Release-aware feature flow. The diagram is explanatory; the release status on this page is authoritative.

Diagram resources: Open the SVG full screen · Download the editable Excalidraw source

Performance impact

:::warning Legacy, unverified performance claims

These numbers are preserved for documentation parity with the legacy dashboard. They are not current benchmarks or service guarantees and have not been verified by the current test suite.

:::

PercentileLegacy claim
P500.15ms
P950.35ms
P990.60ms

Legacy note: Only triggers on handshake commands (hello/isMaster). For regular queries the step is a no-op pass-through (<0.01ms).

Overview

The Version Compatibility step solves one of the most painful MongoDB upgrade scenarios: your server is on 7.0/8.0 but some applications still use legacy drivers (3.6, 4.0, 4.2) that cannot be immediately upgraded.

The step intercepts hello, isMaster, and buildInfo responses from the server and patches the advertised wire protocol version to match what the connecting client expects. This allows legacy clients to successfully handshake with newer servers.

How it handles different language drivers:

The step operates at the MongoDB wire protocol level — not at the driver/language level. Every MongoDB driver (Python, Java, Node.js, Go, C#, etc.) communicates with the server using the same binary protocol (OP_MSG). What matters is which wire protocol version the driver produces:

DriverWire Protocol Version
PyMongo 3.xMongoDB 3.6–4.4
PyMongo 4.xMongoDB 5.0–7.0
Java Driver 4.xMongoDB 4.0–5.0
Java Driver 5.xMongoDB 6.0–7.0
Node.js Driver 5.xMongoDB 5.0–6.0
Node.js Driver 6.xMongoDB 7.0+
Go Driver 1.xMongoDB 4.0–6.0
Go Driver 2.xMongoDB 7.0+
C# Driver 2.xMongoDB 4.4–6.0
C# Driver 3.xMongoDB 7.0+

So if you have PyMongo 3.12 (speaks 4.4 protocol) and Java Driver 4.11 (speaks 5.0 protocol) both connecting to a MongoDB 7.0 server, configure client versions as ["4.4", "5.0"] and server version as ["7.0"]. Nexo handles both transparently regardless of language.

Key translations performed:

  • OP_QUERY (legacy, pre-5.0) → OP_MSG (modern)
  • Deprecated command fields (e.g., $orderbysort)
  • isMasterhello handshake translation
  • Wire compression negotiation differences
  • buildInfo version string patching

This is a singleton step — only one instance per pipeline. Configure all your client/server versions in one place.

When to use

  • Upgrading MongoDB servers while legacy applications still use old drivers
  • Running mixed-version client environments (some apps on 4.0, others on 6.0)
  • Zero-downtime migration strategy: upgrade server first, then drivers incrementally
  • Testing new server versions with production traffic from old clients

How it works

  1. Request phase: Detects isMaster, hello, and buildInfo commands and marks them for response patching.
  2. Response phase: For marked commands, patches maxWireVersion and minWireVersion in the response BSON to match the lowest configured client version.
  3. If patch_build_info is enabled, also overrides the version string in buildInfo responses.
  4. If strict_mode is enabled, rejects connections from clients whose driver version isn't in the configured list.
  5. Wire version mapping is precomputed at step construction time for zero-overhead at runtime.

Configuration

The table preserves the legacy dashboard field reference. “Not specified” means the legacy source did not declare required semantics.

FieldLegacy UI typeLegacy defaultRequiredDescription
client_versionsmultiselectYesMongoDB client/driver versions connecting through this proxy
server_versionsmultiselectYesMongoDB server versions behind this proxy
patch_build_infoboolfalseNoOverride version string in buildInfo responses
strict_modeboolfalseNoReject connections from unlisted client versions

Settings reference

The legacy page did not render an additional anchored settings reference.

Examples

Bridge 3.6/4.0 clients to 7.0 server

steps:
- name: builtin:version-compat
config:
client_versions: ["3.6", "4.0"]
server_versions: ["7.0"]
patch_build_info: true
strict_mode: false

Mixed environment with strict enforcement

steps:
- name: builtin:version-compat
config:
client_versions: ["4.4", "5.0", "6.0"]
server_versions: ["7.0", "8.0"]
patch_build_info: false
strict_mode: true

Multi-language stack (PyMongo 3.x + Java 4.x + Node 6.x → MongoDB 7.0)

# PyMongo 3.12 speaks 4.4 protocol
# Java Driver 4.11 speaks 5.0 protocol
# Node.js Driver 6.x speaks 7.0 protocol (no translation needed)
steps:
- name: builtin:version-compat
config:
client_versions: ["4.4", "5.0", "7.0"]
server_versions: ["7.0"]
patch_build_info: true
strict_mode: true

Best practices

  • Only include client versions that actually exist in your environment
  • Enable strict_mode in production to prevent unknown drivers from connecting
  • Enable patch_build_info if clients check server version strings (some ORMs do)
  • Plan to remove this step once all clients are upgraded — it's a migration bridge, not permanent

Limitations

  • Cannot translate actual protocol behavior differences (e.g., new aggregation stages)
  • Only patches handshake responses — doesn't modify query/response payloads
  • Wire version patching may not work for clients that validate cryptographic signatures in hello
  • Singleton: only one instance per pipeline

Security and operational guidance

  • Cannot create capabilities absent from MongoDB
  • Test authentication, sessions, transactions, topology, and failover
  • The pinned Proxy controller does not watch NexoVersionCompat directly

Release availability

  • 0.2.0 Private Preview: Reconciled and executable. After edits, reconcile the owning NexoProxy and verify the active graph revision.

See the component catalog for the complete comparison matrix.

Search Nexo documentation

Type to search titles, headings, and page content.