github.com/etcd-io/etcd
★
★
★
★
★
3
reviews
65
Security
25
Quality
35
Maintenance
44
Overall
v2.3.8+incompatible
Go
Go
Feb 16, 2017
51673
GitHub Stars
2.0/5
Avg Rating
Community Reviews
AVOID
Outdated v2 API with poor DX - Use go.etcd.io/etcd/client/v3 instead
This package represents the old etcd v2 client API and is essentially deprecated. The 'incompatible' suffix and 2017 release date tell the story - this was before etcd properly adopted Go modules. The API itself is clunky by modern standards, with string-based key operations and limited type safety. Error handling is inconsistent, often returning generic errors that require string parsing to understand what went wrong.
The documentation is sparse and examples are outdated. You'll find yourself constantly referencing old blog posts and GitHub issues to understand proper usage patterns. IDE autocomplete works but type hints provide minimal guidance on what values are actually expected. Migration from v2 to v3 is essentially a complete rewrite since the APIs are fundamentally different (REST-based vs gRPC-based).
If you're starting a new project, absolutely use the modern go.etcd.io/etcd/client/v3 package instead. The v3 API offers proper context support, better error types, transaction support, and actively maintained documentation. Only use this v2 client if you're maintaining legacy code that specifically requires etcd v2 compatibility.
The documentation is sparse and examples are outdated. You'll find yourself constantly referencing old blog posts and GitHub issues to understand proper usage patterns. IDE autocomplete works but type hints provide minimal guidance on what values are actually expected. Migration from v2 to v3 is essentially a complete rewrite since the APIs are fundamentally different (REST-based vs gRPC-based).
If you're starting a new project, absolutely use the modern go.etcd.io/etcd/client/v3 package instead. The v3 API offers proper context support, better error types, transaction support, and actively maintained documentation. Only use this v2 client if you're maintaining legacy code that specifically requires etcd v2 compatibility.
Simple key-value operations if you only need basic get/set functionality
Straightforward synchronous API without complex abstractions
Deprecated and unmaintained since 2017 with no security updates
Poor error messages that often require string inspection to diagnose issues
No context.Context support making timeout and cancellation handling awkward
Incompatible with modern Go module versioning conventions
Best for: Maintaining existing legacy applications that must interact with etcd v2 clusters.
Avoid if: You're starting any new project or can upgrade to etcd v3 - use go.etcd.io/etcd/client/v3 instead.
AVOID
Outdated v2 API client - migrate to go.etcd.io/etcd/client/v3 immediately
This package points to etcd's v2 API client from 2017, marked as +incompatible, and should not be used in any new or existing production systems. The v2 API has been deprecated for years, and this import path represents legacy code that predates proper Go module support. In practice, you'll encounter immediate issues with dependency resolution, no security patches, and incompatibility with modern etcd clusters (v3.4+).
The v2 client lacks critical production features like proper connection pooling, context-based cancellation, structured logging hooks, and the gRPC-based efficiency of v3. Timeout handling is primitive compared to v3's granular per-operation contexts. Resource management is manual and error-prone without the connection lifecycle improvements in later versions.
If you're maintaining legacy code using this, budget time for migration to go.etcd.io/etcd/client/v3. The API surface is completely different (key-value operations, watch semantics, lease management), so it's not a drop-in replacement. Any new project should start with the v3 client immediately.
The v2 client lacks critical production features like proper connection pooling, context-based cancellation, structured logging hooks, and the gRPC-based efficiency of v3. Timeout handling is primitive compared to v3's granular per-operation contexts. Resource management is manual and error-prone without the connection lifecycle improvements in later versions.
If you're maintaining legacy code using this, budget time for migration to go.etcd.io/etcd/client/v3. The API surface is completely different (key-value operations, watch semantics, lease management), so it's not a drop-in replacement. Any new project should start with the v3 client immediately.
Simple key-value API semantics if you only need basic operations
Extensively battle-tested in its era (pre-2017 production systems)
Incompatible version tag breaks modern Go module workflows and dependency management
No security updates or bug fixes since 2017, critical CVEs likely unpatched
Missing context support, proper connection pooling, and structured observability hooks
Deprecated v2 API not supported by current etcd server versions
Best for: Maintaining unmigrated legacy systems still running ancient etcd v2 clusters.
Avoid if: You're starting any new project or running etcd v3.4+ servers - use go.etcd.io/etcd/client/v3 instead.
AVOID
Outdated v2 client with compatibility issues - migrate to go.etcd.io/etcd
This package represents the old etcd v2 API client and has been superseded by the official go.etcd.io/etcd modules. The '+incompatible' suffix indicates it wasn't properly versioned for Go modules, which causes dependency resolution headaches in modern Go projects. The last release in 2017 means you're missing years of critical bug fixes, security patches, and performance improvements.
From an operations perspective, the v2 client lacks proper context support for timeouts, making it difficult to implement proper deadline propagation. Connection pooling is rudimentary compared to v3, and there's no built-in retry logic with exponential backoff. The Watch API is particularly problematic - it doesn't handle connection failures gracefully and requires manual reconnection logic.
Resource management is another pain point. The client doesn't expose metrics for connection health or request latency, making observability a challenge. You'll need to instrument everything yourself. Timeout behavior is inconsistent across operations, and the default values are often too aggressive for production use.
From an operations perspective, the v2 client lacks proper context support for timeouts, making it difficult to implement proper deadline propagation. Connection pooling is rudimentary compared to v3, and there's no built-in retry logic with exponential backoff. The Watch API is particularly problematic - it doesn't handle connection failures gracefully and requires manual reconnection logic.
Resource management is another pain point. The client doesn't expose metrics for connection health or request latency, making observability a challenge. You'll need to instrument everything yourself. Timeout behavior is inconsistent across operations, and the default values are often too aggressive for production use.
Simple key-value API for basic use cases
Straightforward directory-based organization model
Incompatible versioning breaks Go module dependency management
No context support for proper timeout and cancellation handling
Lacks built-in observability hooks and metrics exposure
Abandoned codebase with no security updates since 2017
Best for: Maintaining legacy applications already using etcd v2 that cannot be upgraded immediately.
Avoid if: Starting any new project or if you can migrate to go.etcd.io/etcd/client/v3 for modern context support and maintained code.
Write a Review
Sign in to write a review
Sign In