Skip to content

DX4: Go, Java, and the ecosystem #170

Description

@tamnd

Milestone DX4 of the developer-experience program (Spec/2064g/dx/00-overview.md). Specs: dx/07, dx/08, dx/09 §2, dx/13 §1, §3. Runs with M4 (#5).

Go and the JVM, which between them are most of the server-side install base, plus the Arrow path that makes every other tool able to talk to us without a driver.

The JVM baseline moved as a result of the 2026 audit (AUDIT-2026-08.md §2.4). FFM was finalised in JDK 22, which is what the spec originally keyed on, but 22 has been EOL since September 2024; the current LTS is 25. More importantly, from JDK 24 a downcall from a module without granted native access warns and is on a path to becoming an error, and JNI is restricted on the same schedule, so both artifacts need the manifest attribute and the documented flag. A JVM warning printed three frames from any of our code is not a diagnosis a user can act on, so the binding detects the ungranted state at Database.open and throws a message containing the exact flag.

Go SDK v1 (dx/07):

  • github.com/tamnd/zu-go, go 1.26.6 floor
  • context.Context first on every blocking call, error last, never a panic
  • rows.All() iter.Seq[Row], zu.Collect[T], zu.Iter[T]
  • errors.Is/errors.As with *zu.Error carrying Code, Position, DocURL, Retryable
  • database/sql driver as the zusql subpackage, with its limits stated
  • vendored static libs per platform under build tags, cross-compilation recipes including the zig cc one
  • zulint analyzer: columnar view after Close, missing rows.Err(), *zu.Conn shared across goroutines

Java SDK v1 (dx/08):

  • Panama provider targeting JDK 25 LTS, JNI provider for 17-21
  • Enable-Native-Access manifest attribute, the documented --enable-native-access flag, and a clear throw when it is missing
  • sealed value types and records, Stream results, AutoCloseable everywhere
  • JPMS module, Maven Central publishing, GraalVM reachability metadata
  • CI on 17, 21, 25, 26
  • bulk loader and appender, columns handed over without a copy when they come as direct buffers

C++ wrapper (dx/09 §2):

  • header-only, RAII, ranges, an std::expected mirror of the error model

Arrow (dx/13 §3):

  • Arrow export in all five SDKs: the C Data Interface in Rust, Python, Go and the JVM, IPC bytes in Node because JavaScript has no importer for the C one
  • ADBC driver v0 over ArrowArrayStream

language server (dx/13 §1):

  • zu lsp --stdio shipped in the CLI binary: diagnostics, completion, hover, formatting, semantic tokens
  • VS Code extension bundling it

corpus:

  • complete at ~1230 cases: graph values, concurrency, Arrow

done when:

  • five tier-1 SDKs, each with a scorecard and a named maintainer
  • the differential suite is green across all five
  • the LSP gives catalog-aware completion in VS Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    cC and C++ developer kitdxDeveloper experience: SDKs, CLI, install, ergonomicsgoGo SDKintegrationsEditors, notebooks, data ecosystemjvmJava, Kotlin, Scala SDKsmilestoneMilestone tracking issue

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions