What's New in v0.0.8
What’s New in v0.0.8
Features
- Elasticsearch source connector: New
elasticsearch source supports ES 7.10+, 8.x, and 9.x clusters. Snapshot uses Point-in-Time (PIT) with sliced search_after — one slice per primary shard by default — and integrates with the partitioned snapshot coordinator via connector.Partitioner. Continuous ingestion polls a configurable monotonic watermark field (default @timestamp) with a configurable safety lag; the resume token persists through CheckpointStore so CDC resumes from the last observed watermark across restarts. Schema is inferred from /_mapping at Connect with nested objects flattened to dotted-path Arrow columns; new fields detected mid-stream emit an EventSchemaDelta event so sinks can ALTER TABLE before applying the row.
- Elasticsearch index discovery in the web UI: The pipeline wizard now renders the schema/table tree for Elasticsearch sources instead of falling through to the manual-text fallback. New
connector.Cataloger implementation surfaces every index matching index_pattern under a synthetic indices schema with _id as the primary key and per-index docs.count / store.size populated from _cat/indices.
- Index-aware wizard copy: When an Elasticsearch source is selected, the pipeline wizard renders “Index” / “Indices” everywhere the noun is user-visible (selection-mode header, filter placeholder, schema/table column header, mode-button copy). A new
tableNouns(sourceType) helper makes it easy to extend for other document stores in follow-ups.
- Elasticsearch logo and label: New
/icons/elasticsearch.png asset shipped with the web bundle; ES connectors no longer fall back to the generic SQL Server icon in the catalog and connection list views.
- stdout sink in the connector catalog: The
stdout sink now registers a manifest, so it appears in /v1/connector-types, the CLI list connectors command, and the UI “new connection” wizard. Previously it was usable via YAML but invisible to UI-driven flows.
Bug Fixes
- ES CDC polling could never see new documents: The first implementation opened a single long-lived Point-in-Time and reused it across every poll cycle. PITs are snapshot-at-open, so any documents indexed after the PIT was opened were invisible. The CDC loop now queries the index directly each poll; PITs remain in use for the bounded snapshot phase where they’re correct.
- ES rejected the Go duration format:
time.Duration.String() emits compound forms like 1m0s, but the ES REST API requires a single suffix (60s, 1m, 5000ms). PIT and search calls now format durations as <n>ms.
- ES 8.x sort on
_id returned 400: Newer ES defaults indices.id_field_data.enabled to false, which rejects sorting on _id. The CDC tiebreaker now uses _doc (internal Lucene order, stable per shard, no fielddata required).
- ES schema-drift events were silently swallowed: When a hit revealed a new field, the connector silently extended its cached schema but never produced an
EventSchemaDelta, so sinks had no signal to ALTER TABLE. The hit decoder now returns an optional delta event that callers emit ahead of the row event.
Security
- Patched five published Go vulnerabilities by bumping the Go toolchain
1.26.3 → 1.26.4 (covers net/textproto, mime, crypto/x509), golang.org/x/net v0.53.0 → v0.55.0 (GO-2026-5026), and otlploghttp v0.16.0 → v0.19.0 (GO-2026-4985). All five were pre-existing on main, not introduced by these PRs.
- Suppressed two newly-published
github.com/docker/docker CVEs (CVE-2026-41567, CVE-2026-42306) in .trivyignore. Both are daemon-side Moby vulnerabilities; nanosync uses docker/docker only as a client library via testcontainers-go in tests, with no daemon attack surface.
CI
- Release dry-run runs on the standard self-hosted runner: The matrix build jobs already use
nanosync-standard, but release-dry was the lone outlier still pinned to GitHub-hosted ubuntu-latest (2-core), causing it to time out at the 20-minute cap while cross-compiling 5 targets sequentially. Moving it to nanosync-standard brings the same hardware class to the same workload.
Installation
curl -fsSL https://nanosync.dev/install.sh | sh