|
| 1 | +# GoSQLX Roadmap — Q2 2026 |
| 2 | + |
| 3 | +**Date:** 2026-03-29 | **Current Version:** v1.13.0 | **Stars:** 73 | **Status:** Production-Ready |
| 4 | + |
| 5 | +> This spec is the output of a full-project audit using 5 parallel analytical personas: |
| 6 | +> Performance/Internals, SQL Compatibility, API/DX, Competitive/Ecosystem, Community/Growth. |
| 7 | +> Each roadmap item maps to findings from one or more personas. |
| 8 | +
|
| 9 | +--- |
| 10 | + |
| 11 | +## Executive Summary |
| 12 | + |
| 13 | +GoSQLX is the **only actively maintained, pure-Go, multi-dialect SQL parsing SDK** — technically superior to all Go alternatives but dramatically under-discovered. The codebase is production-grade with excellent architecture, 1.38M ops/sec, 8 dialects, and a full-stack SDK (parser + formatter + linter + security + LSP + MCP + CLI + WASM). The gaps are: |
| 14 | + |
| 15 | +1. **Discovery**: 73 stars; the dev.to article and MCP story have never been distributed to HN/r/golang |
| 16 | +2. **Feature breadth**: Query fingerprinting, SQL transpilation, and live DB schema introspection are market gaps no Go library fills |
| 17 | +3. **Linter depth**: 10 rules vs. 200+ in Bytebase; this is the enterprise adoption gap |
| 18 | +4. **Integration bridges**: No ORM hooks, no OpenTelemetry, no GORM/sqlc integration examples |
| 19 | +5. **Internal hardening**: C binding at 18% coverage, transform missing DML rewrites, advisor at 8 rules |
| 20 | + |
| 21 | +--- |
| 22 | + |
| 23 | +## Roadmap Priorities |
| 24 | + |
| 25 | +### P0 — Must Do (Immediate, Unblocking) |
| 26 | + |
| 27 | +| ID | Title | Source | Rationale | |
| 28 | +|----|-------|--------|-----------| |
| 29 | +| P0-1 | HN + r/golang launch — submit dev.to article | Community | 595 unique cloners but only 113 viewers → top-of-funnel problem. Article exists, never distributed. Single highest-ROI action. | |
| 30 | +| P0-2 | golangweekly.com newsletter submission | Community | ~50K Go devs, zero current GoSQLX presence. 15 minutes of effort. | |
| 31 | +| P0-3 | OpenSSF Scorecard badge + assessment | Community | Security tooling (SQL injection scanner) without security posture badge is a trust gap for enterprise evaluators. | |
| 32 | +| P0-4 | Fix Sentry issues #437 and #434 | Bugs | Two open Sentry-auto-generated bugs on the website: hydration error (replay) + pushState TypeError. These are visible to all users. | |
| 33 | + |
| 34 | +### P1 — High Impact (Next 2–4 Weeks) |
| 35 | + |
| 36 | +| ID | Title | Source | Rationale | |
| 37 | +|----|-------|--------|-----------| |
| 38 | +| P1-1 | Query Fingerprinting & Normalization API | Competitive | `pg_query_go` owns this use case today. Text-to-SQL/LLM SQL validation pipelines need `Fingerprint()` + `Normalize()` (replace literals with `?`). This is the #1 feature gap vs pg_query_go and positions GoSQLX for the exploding NL2SQL market. | |
| 39 | +| P1-2 | Expand Linter to 30 Rules (from 10) | Competitive/DX | Bytebase has 200+; SQLFluff is popular primarily because of linting. 30 rules is the threshold for CI pipeline adoption. Target: naming conventions, dangerous operations (DROP without WHERE, DELETE without WHERE), missing indexes, SELECT *, N+1 patterns. | |
| 40 | +| P1-3 | DML Transform API — UPDATE/DELETE rewrites | Internals | Transform package only handles SELECT. `UpdateSetClause`, `ReplaceSetClause`, `RemoveWhere` for DELETE, `AddWhere` for UPDATE/DELETE are needed to complete programmatic SQL generation. 30% of typical app SQL is DML mutations. | |
| 41 | +| P1-4 | Harden C Binding to 90%+ coverage | Internals | 18% coverage blocks production deployment for Python/Ruby/Node consumers. Need stress tests, error path coverage, Python ctypes concurrency tests. | |
| 42 | +| P1-5 | Live Database Schema Introspection | DX | `pkg/schema/loader/postgres.go` + `mysql.go` — introspect running DB for schema-aware validation. This is the #1 DX gap; users currently must manually maintain YAML schema. | |
| 43 | + |
| 44 | +### P2 — Medium Impact (4–8 Weeks) |
| 45 | + |
| 46 | +| ID | Title | Source | Rationale | |
| 47 | +|----|-------|--------|-----------| |
| 48 | +| P2-1 | SQL Transpilation API — `gosqlx.Transpile()` | Competitive | MySQL→PostgreSQL, PostgreSQL→Snowflake dialect conversion. Zero Go competitors. Python sqlglot (14k stars) owns this. Would be the biggest unique capability addition. Start with 2–3 high-demand pairs. | |
| 49 | +| P2-2 | Oracle CONNECT BY / Hierarchical Queries | SQL Compat | Keywords reserved since v1.9.0. Oracle and MariaDB compatibility blocks. Planned for v1.14.0. AST structure designed. | |
| 50 | +| P2-3 | OpenTelemetry Integration | DX | `pkg/integration/otel/tracer.go` — trace parse duration, statement count, dialect. Required for production observability in microservices. | |
| 51 | +| P2-4 | GORM Hooks + database/sql Integration | DX | Pre-query validation middleware for the dominant Go ORM. Tutorial + package. Captures the GORM user base (~39k stars). | |
| 52 | +| P2-5 | Advisor Rules Expansion (8 → 20 rules) | Internals | Add: implicit type conversions, N+1 detection, join order hints, unused aliases, OR-to-IN conversion, NOT IN with NULLs, missing indexes analysis. | |
| 53 | +| P2-6 | "Who's Using GoSQLX" + Discussions | Community | Social proof section in README + pinned Discussion thread. Even 5 entries change how enterprise evaluators perceive the project. | |
| 54 | +| P2-7 | ClickHouse SAMPLE Clause | SQL Compat | Marked TODO in tests. Completes ClickHouse dialect support. 3–5 days effort. | |
| 55 | +| P2-8 | Formatter: Sequence DDL + SHOW/DESCRIBE | Internals | Missing render handlers for `CreateSequenceStatement`, `AlterSequenceStatement`, `DropSequenceStatement`, `ShowStatement`, `DescribeStatement`. Blocks round-trip formatting for these constructs. | |
| 56 | +| P2-9 | SQL Server PIVOT/UNPIVOT | SQL Compat | Keywords reserved, no parsing. Needed for analytics-heavy SQL Server migration use cases. | |
| 57 | + |
| 58 | +### P3 — Nice to Have (Backlog) |
| 59 | + |
| 60 | +| ID | Title | Source | Rationale | |
| 61 | +|----|-------|--------|-----------| |
| 62 | +| P3-1 | Stored Procedures / Procedural Blocks | SQL Compat | 0% support. Very high enterprise demand but very high effort (dialect-specific PL/SQL, T-SQL, PL/pgSQL parsers). Deferred until core SQL coverage exceeds 90%. | |
| 63 | +| P3-2 | CLI Watch Mode | DX | `gosqlx watch *.sql` — file system watcher for continuous validation in development. Low effort (fsnotify already in deps), nice ergonomics. | |
| 64 | +| P3-3 | JSON Functions (SQL:2016) | SQL Compat | JSON_EXTRACT, JSON_TABLE, JSON_ARRAY_AGG. 20–50% support today. PostgreSQL JSON operators work; MySQL/SQL Server syntax varies significantly. | |
| 65 | +| P3-4 | Streaming Parser | DX | Token-by-token progressive parsing for large files (10MB+). Low ROI — mitigated by LSP incremental sync and batch processing. High effort (significant parser refactoring). | |
| 66 | +| P3-5 | SQL Server CROSS APPLY / OUTER APPLY | SQL Compat | Keywords reserved, no parsing. Needed for SQL Server lateral correlation. | |
| 67 | +| P3-6 | Go Time Podcast Pitch | Community | "Building a production SQL parser in Go" — war stories about sync.Pool discipline and CGo tradeoffs. Medium effort, high-quality audience. | |
| 68 | +| P3-7 | Pool Statistics/Monitoring API | Internals | Expose pool hit rates and memory savings metrics. Currently internal only. Nice for production observability. | |
| 69 | + |
| 70 | +--- |
| 71 | + |
| 72 | +## Version Milestones |
| 73 | + |
| 74 | +### v1.14.0 — "Hierarchical & Hardened" (2-3 weeks) |
| 75 | +- Oracle CONNECT BY / START WITH / PRIOR / NOCYCLE (P2-2) |
| 76 | +- MariaDB dialect fully integrated into playground + config (carry-forward) |
| 77 | +- C binding hardened to 90%+ coverage (P1-4) |
| 78 | +- ClickHouse SAMPLE clause (P2-7) |
| 79 | +- Formatter: Sequence DDL + SHOW/DESCRIBE (P2-8) |
| 80 | + |
| 81 | +### v1.15.0 — "Fingerprint & Lint" (3-4 weeks) |
| 82 | +- Query Fingerprinting & Normalization API (P1-1) |
| 83 | +- Linter expanded to 30 rules (P1-2) |
| 84 | +- DML Transform API (P1-3) |
| 85 | +- Advisor rules 8 → 20 (P2-5) |
| 86 | + |
| 87 | +### v1.16.0 — "Integrate & Scale" (4-6 weeks) |
| 88 | +- Live Database Schema Introspection (P1-5) |
| 89 | +- OpenTelemetry Integration (P2-3) |
| 90 | +- GORM Hooks + database/sql examples (P2-4) |
| 91 | +- SQL Server PIVOT/UNPIVOT (P2-9) |
| 92 | + |
| 93 | +### v2.0.0 — "Transpile" (6-10 weeks) |
| 94 | +- SQL Transpilation API — `gosqlx.Transpile(sql, from, to)` (P2-1) |
| 95 | +- Breaking: remove deprecated `parser.Parse()` shim, `ParseFromModelTokensWithPositions`, `ConversionResult.PositionMapping` |
| 96 | +- Semantic validation layer (column resolution, type checking against schema) |
| 97 | + |
| 98 | +--- |
| 99 | + |
| 100 | +## Competitive Moat Analysis |
| 101 | + |
| 102 | +| Dimension | GoSQLX | Best Competitor | Gap | |
| 103 | +|-----------|--------|-----------------|-----| |
| 104 | +| Pure-Go multi-dialect | 8 dialects, zero CGo | pg_query_go (1 dialect, CGo) | GoSQLX leads | |
| 105 | +| Formatter | ✅ | None | GoSQLX leads | |
| 106 | +| Linter | 10 rules | Bytebase 200+ (different product) | GoSQLX gap — must expand | |
| 107 | +| Security scanner | ✅ | None | GoSQLX leads | |
| 108 | +| LSP | ✅ | None | GoSQLX leads | |
| 109 | +| MCP server | ✅ | None | GoSQLX leads (first mover) | |
| 110 | +| WASM playground | ✅ | None | GoSQLX leads | |
| 111 | +| Query fingerprinting | ❌ | pg_query_go | Gap — P1 action | |
| 112 | +| SQL transpilation | ❌ | sqlglot (Python) | Market gap — P2 action | |
| 113 | +| ORM integration | ❌ | None | Gap — P2 action | |
| 114 | +| Stars | 73 | ~1,578 (xwb1989, abandoned) | Perception gap, not quality gap | |
| 115 | + |
| 116 | +--- |
| 117 | + |
| 118 | +## Success Metrics |
| 119 | + |
| 120 | +| Metric | Current | 30-Day Target | 90-Day Target | |
| 121 | +|--------|---------|---------------|---------------| |
| 122 | +| GitHub Stars | 73 | 200+ | 500+ | |
| 123 | +| pkg.go.dev importers | unknown | 50+ | 200+ | |
| 124 | +| Linter rules | 10 | 30 | 50 | |
| 125 | +| C binding coverage | 18% | 90% | 95%+ | |
| 126 | +| Advisor rules | 8 | 20 | 30 | |
| 127 | +| MCP tool count | 7 | 9 | 12 | |
| 128 | + |
| 129 | +--- |
| 130 | + |
| 131 | +## Non-Goals (What We Are Not Building) |
| 132 | + |
| 133 | +- **Query Builder** — Out of scope by design. sqlc, squirrel, and goqu fill this. GoSQLX is parse-first. |
| 134 | +- **Query Execution** — GoSQLX parses; it does not run queries. Use database/sql for that. |
| 135 | +- **Full ORM** — Not building a GORM competitor. Building an analysis/validation layer that integrates with ORMs. |
| 136 | +- **Stored Procedure Runtime** — P3 at best. Parsing PL/SQL/T-SQL procedural blocks is dialect-specific and very high effort with limited incremental value for a parsing SDK. |
0 commit comments