Addons
Addons are separate Go modules that implement the core interfaces. Install only what you need.
Databases
Section titled “Databases”| Package | Description | Interface |
|---|---|---|
ss-keel-gorm | PostgreSQL, MySQL, SQLite via GORM | Repository[T, ID] |
ss-keel-mongo | MongoDB via mongo-driver | Repository[T, ID] |
Cache & Sessions
Section titled “Cache & Sessions”| Package | Description | Interface |
|---|---|---|
ss-keel-redis | Redis via go-redis — cache and sessions | Cache |
Authentication
Section titled “Authentication”| Package | Description | Interface |
|---|---|---|
ss-keel-jwt | JWT generation, validation, ready-to-use guards | Guard |
ss-keel-oauth | OAuth2 — Google, GitHub, and more | Guard |
Messaging
Section titled “Messaging”| Package | Description | Interface |
|---|---|---|
ss-keel-amqp | RabbitMQ via amqp091-go | Publisher / Subscriber |
ss-keel-kafka | Kafka via franz-go | Publisher / Subscriber |
Communication
Section titled “Communication”| Package | Description | Interface |
|---|---|---|
ss-keel-mail | Email via SMTP, Resend, or SendGrid | Mailer |
ss-keel-ws | WebSockets via Fiber | — |
Storage
Section titled “Storage”| Package | Description | Interface |
|---|---|---|
ss-keel-storage | S3, GCS, and local disk — unified API | Storage |
Observability
Section titled “Observability”| Package | Description | Interface |
|---|---|---|
ss-keel-metrics | Prometheus metrics + /metrics endpoint | MetricsCollector |
ss-keel-tracing | OpenTelemetry distributed tracing | Tracer |
| Package | Description | Interface |
|---|---|---|
ss-keel-cron | Scheduled jobs with cron expressions | Scheduler |
| Package | Description | Interface |
|---|---|---|
ss-keel-i18n | Internationalization and translations | Translator |
Building Your Own Adapter
Section titled “Building Your Own Adapter”Every addon is just a struct that implements a core interface. You can build your own today:
// Implement Cache with in-memory storagetype InMemoryCache struct { mu sync.RWMutex store map[string][]byte}
func (c *InMemoryCache) Get(ctx context.Context, key string) ([]byte, error) { c.mu.RLock() defer c.mu.RUnlock() v, ok := c.store[key] if !ok { return nil, errors.New("key not found") } return v, nil}
// ... implement Set, Delete, ExistsSee the Interfaces reference for all contracts.