Profile
Back to NewsBack
GitHub Trending 1 min
Reader Mode
ajitpratap0/GoSQLX: High-performance SQL parser, formatter, linter & security scanner for Go - 1.5M+ ops/sec, multi-dialect, zero-copy, race-free

ajitpratap0/GoSQLX: High-performance SQL parser, formatter, linter & security scanner for Go - 1.5M+ ops/sec, multi-dialect, zero-copy, race-free

16 hours ago

GoSQLX

GoSQLX Logo

Parse SQL at the speed of Go

Go Version</a> Release</a> License</a> PRs Welcome</a>

Website</a> VS Code</a> MCP</a> Glama MCP Server</a> Lint Action</a>

Tests</a> Go Report</a> GoDoc</a> Stars</a> OpenSSF Scorecard</a>


🌐 Try the Playground  ·  📖 Read the Docs  ·  🚀 Get Started  ·  📊 Benchmarks


| 1.38M+ ops/sec | <1μs latency | 85% SQL-99 | 8 dialects | 0 race conditions | |:---:|:---:|:---:|:---:|:---:|


What is GoSQLX?

GoSQLX is a production-ready SQL parsing SDK for Go. It tokenizes, parses, and generates ASTs from SQL with zero-copy optimizations and intelligent object pooling - handling 1.38M+ operations per second with sub-microsecond latency.

// v1.15+ recommended entry point: ParseTree returns an opaque Tree,
// so you don't need to import pkg/sql/ast just to get started.
tree, _ := gosqlx.ParseTree(ctx, "SELECT u.name, COUNT(*) FROM users u JOIN orders o ON u.id = o.user_id GROUP BY u.name",
    gosqlx.WithDialect("postgresql"))
fmt.Println("Tables:", tree.Tables())
fmt.Println(tree.Format(gosqlx.WithIndent(2), gosqlx.WithUppercaseKeywords(true)))

Why GoSQLX?

  • Not an ORM - a parser. You get the AST, you decide what to do with it.
  • Not slow - zero-copy tokenization, sync.Pool recycling, no allocations on hot paths.
  • Not limited - PostgreSQL, MySQL, MariaDB, SQL Server, Oracle, SQLite, Snowflake, ClickHouse. CTEs, window functions, MERGE, set operations.
  • Not just a library - CLI, VS Code extension, GitHub Action, MCP server, WASM playground, Python bindings.

Get Started in 60 Seconds

go get github.com/ajitpratap0/GoSQLX
package main

import ( "fmt" "github.com/ajitpratap0/GoSQLX/pkg/gosqlx" )

func main() { ctx := context.Background()

// ParseTree (v1.15+) is the recommended entry point. It returns an // opaque handle with built-in helpers — no need to import pkg/sql/ast. tree, err := gosqlx.ParseTree(ctx, "SELECT id, name FROM users WHERE active = true", gosqlx.WithDialect("postgresql")) if err != nil { // Sentinel errors work with errors.Is if errors.Is(err, gosqlx.ErrSyntax) { log.Fatalf("syntax error: %v", err) } log.Fatal(err) } fmt.Println("Tables:", tree.Tables()) fmt.Println(tree.Format(gosqlx.WithIndent(2), gosqlx.WithUppercaseKeywords(true)))

// Walk the AST — typed walkers avoid the type-assertion dance: tree.WalkSelects(func(s *ast.SelectStatement) bool { fmt.Printf(" SELECT with %d columns\n", len(s.Columns)) return true })

// The legacy Parse/Format/Validate API still works for v1.x code. // See docs/MIGRATION.md for the Tree migration guide. }


Install Everywhere

📦 Go Library

go get github.com/ajitpratap0/GoSQLX

🖥️ CLI Tool

go install github.com/ajitpratap0/GoSQLX/cmd/gosqlx@latest
gosqlx validate "SELECT * FROM users"
gosqlx format query.sql
gosqlx lint query.sql

💻 VS Code Extension

code --install-extension ajitpratap0.gosqlx
Bundles the binary - zero setup. Learn more →

🤖 MCP Server (AI Integration)

claude mcp add --transport http gosqlx \
  https://mcp.gosqlx.dev/mcp
7 SQL tools in Claude, Cursor, or any MCP client. Guide →


Features at a Glance

⚡ Parser

Zero-copy tokenizer
Recursive descent parser
Full AST generation
Multi-dialect engine

🛡️ Analysis

SQL injection scanner
30 lint rules (L001–L030)
20 optimizer rules
Metadata extraction

🔧 Tooling

AST-based formatter
Query transforms API
VS Code extension
GitHub Action

🌐 Multi-Dialect

PostgreSQL · MySQL · MariaDB
SQL Server · Oracle
SQLite · Snowflake · ClickHouse

🤖 AI-Ready

MCP server (7 tools)
Public remote endpoint
Streamable HTTP

🧪 Battle-Tested

20K+ concurrent ops
Zero race conditions
~85% SQL-99 compliance


Documentation

| | Resource | Description | |---|---|---| | 🌐 | gosqlx.dev | Website with interactive playground | | 🚀 | Getting Started | Parse your first SQL in 5 minutes | | 📖 | Usage Guide | Comprehensive patterns and examples | | 📄 | API Reference | Complete API documentation | | 🖥️ | CLI Guide | Command-line tool reference | | 🌍 | SQL Compatibility | Dialect support matrix | | 🤖 | MCP Guide | AI assistant integration | | 🏗️ | Architecture | System design deep-dive | | 📊 | Benchmarks | Performance data and methodology | | 📝 | Release Notes | What's new in each version |


Contributing

GoSQLX is built by contributors like you. Whether it's a bug fix, new feature, documentation improvement, or just a typo - every contribution matters.

git clone https://github.com/ajitpratap0/GoSQLX.git && cd GoSQLX
task check    # fmt → vet → lint → test (with race detection)
  1. Fork & branch from main
  2. Write tests - we use TDD and require race-free code
  3. Run task check - must pass before PR
  4. Open a PR - we review within 24 hours
📋 Contributing Guide · 📜 Code of Conduct · 🏛️ Governance


Who's Using GoSQLX?

GoSQLX is downloaded and cloned by developers worldwide -- 595 unique cloners in just 14 days. If you're using GoSQLX in your project or organization, we'd love to hear about it!

| Project / Company | Use Case | |---|---| | Your project here | Add yourself via PR or tell us in Discussions |

Using GoSQLX at work? Building something cool with it? Share your story in GitHub Discussions -- it helps the community grow and motivates continued development.


Community

Got questions? Ideas? Found a bug?

Discussions Issues Blog


License

Apache License 2.0 - see LICENSE for details.


Built with ❤️ by the GoSQLX community

gosqlx.dev · Playground · Docs · MCP Server · VS Code


If GoSQLX helps your project, consider giving it a ⭐

Chat with me