The sharpest SCIM 2.0 implementation for the modern cloud. Built with Go, Fiber, PostgreSQL, and go-dsl.
Vorpal is a high-performance, open-source SCIM 2.0 (System for Cross-domain Identity Management) server.
It is the spiritual successor to goscim, but re-engineered from the ground up with a specific philosophy: Simplicity and Database Power.
While goscim focused on being a generic framework using ANTLR for parsing, Vorpal is opinionated:
- PostgreSQL is King: We leverage
JSONBcolumns to store SCIM resources dynamically. No complex ORM mapping—just pure, indexable JSON. - No Heavy Parsers: We replaced the heavy ANTLR runtime with go-dsl, a lightweight, Go-native parser builder.
- Performance First: Built on top of Fiber, the fastest HTTP engine for Go.
- Native SCIM Filtering: Converts SCIM filters (e.g.,
emails[type eq "work"]) directly into optimized PostgreSQL SQL queries usinggo-dsl. - Embedded Database: Comes with an embedded PostgreSQL instance for zero-setup development (recommended for dev or small workloads).
- External Database: Fully configurable via
config.tomlto connect to external PostgreSQL clusters for production. - Full SCIM Support: Includes implementation for PATCH, PUT, POST, GET, and DELETE.
- Schema Driven: Fully configurable via JSON schemas (User, Group, EnterpriseUser, etc.).
- Viral Speed: Designed to handle high-throughput identity requests with minimal latency.
| Feature | Status | RFC Spec |
|---|---|---|
| Core Schema (User/Group) | ✅ Supported | RFC 7643 |
| Enterprise Extension | ✅ Supported | RFC 7643 |
| Custom Extensions | ✅ Supported | Dynamic |
Sorting (sortBy) |
✅ Supported | Full |
Filtering (filter) |
✅ Supported | Advanced (Nested) |
Patching (PATCH) |
✅ Supported | Add/Remove/Replace |
| Pagination | ✅ Supported | startIndex/count |
| Bulk Operations | 🚧 Roadmap | - |
Parsing SCIM filters is notoriously hard. Most implementations use regex (fragile) or ANTLR (heavy/complex).
Vorpal uses go-dsl to define the SCIM grammar in pure Go. This allows us to:
- Compile filters directly to SQL
WHEREclauses safely. - Handle complex nesting and logical operators without the overhead of a generated parser.
- Keep the binary small and fast.
graph LR
Client[SCIM Client] -- HTTP/JSON --> Fiber[Fiber Web Server]
Fiber -- SCIM Query --> Parser[go-dsl Parser]
Parser -- SQL Fragment --> Builder[SQL Builder]
Builder -- Optimized Query --> DB[(PostgreSQL JSONB)]
DB -- Result --> Fiber
-
Clone the repo
git clone https://github.com/arturoeanton/go-vorpal-scim.git cd vorpal -
Run it (Embedded DB mode)
go run main.go
Vorpal will automatically spin up a local Postgres instance in
./data/db. -
Test it
curl http://localhost:3000/ServiceProviderConfig
# config.toml example
[server]
port = ":3000"
app_name = "Vorpal Identity"
[database]
use_embedded = true # Set false for production
host = "localhost"
user = "vorpal"
password = "secure_password"Vorpal includes a docker-compose.yml file to run the entire stack (App + PostgreSQL + PGAdmin) easily.
-
Start the stack
docker-compose up --build -d
-
Access the services
- Vorpal API:
http://localhost:3000 - PGAdmin:
http://localhost:5050(Login:[email protected]/admin) - PostgreSQL:
localhost:5432(Usuario:vorpal, Pass:secret_password, DB:vorpal_db)
- Vorpal API:
-
Stop the stack
docker-compose down
We want Vorpal to be the de facto standard for SCIM in Go. We need help with:
- Adding OAuth2/OIDC middleware.
- Improving test coverage.
- Writing documentation.
Found a bug? Have an idea? Open an issue or submit a PR! Let's build the future of Identity together.
Vorpal es un servidor SCIM 2.0 de alto rendimiento y código abierto.
Es el sucesor espiritual de goscim, pero rediseñado desde cero con una filosofía clara: Simplicidad y Potencia de Base de Datos.
Mientras que goscim se enfocaba en ser un framework genérico usando ANTLR, Vorpal se enfoca en:
- PostgreSQL es el Rey: Aprovechamos las columnas
JSONBpara almacenar recursos SCIM dinámicamente. Sin mapeos ORM complejos, solo JSON puro e indexable. - Adiós Parsers Pesados: Reemplazamos el runtime de ANTLR con go-dsl, un constructor de parsers ligero y nativo de Go.
- Rendimiento Primero: Construido sobre Fiber, el motor HTTP más rápido para Go.
- Filtrado SCIM Nativo: Convierte filtros SCIM (ej:
emails[type eq "work"]) directamente en consultas SQL optimizadas para PostgreSQL usandogo-dsl. - Base de Datos Embebida: Incluye una instancia de PostgreSQL embebida (recomendada para desarrollo o proyectos pequeños).
- Base de Datos Externa: Configurable vía
config.tomlpara conectar a clusters PostgreSQL externos en producción. - Soporte SCIM Completo: Incluye implementación de PATCH, PUT, POST, GET y DELETE.
- Basado en Esquemas: Totalmente configurable vía esquemas JSON (User, Group, EnterpriseUser, etc.).
- Velocidad Viral: Diseñado para manejar altas cargas de peticiones de identidad con latencia mínima.
| Funcionalidad | Estado | Especificación RFC |
|---|---|---|
| Core Schema (User/Group) | ✅ Soportado | RFC 7643 |
| Enterprise Extension | ✅ Soportado | RFC 7643 |
| Extensiones Personalizadas | ✅ Soportado | Dinámico |
Ordenamiento (sortBy) |
✅ Soportado | Completo |
Filtrado (filter) |
✅ Soportado | Avanzado (Anidado) |
Patching (PATCH) |
✅ Soportado | Add/Remove/Replace |
| Paginación | ✅ Soportado | startIndex/count |
| Operaciones Masivas | 🚧 Roadmap | - |
Parsear filtros SCIM es difícil. La mayoría de implementaciones usan regex (frágil) o ANTLR (pesado/complejo).
Vorpal usa go-dsl para definir la gramática SCIM en Go puro. Esto nos permite:
- Compilar filtros directamente a cláusulas SQL
WHEREde forma segura. - Manejar anidamiento complejo y operadores lógicos sin la sobrecarga de un parser generado.
- Mantener el binario pequeño y rápido.
graph LR
Client[Cliente SCIM] -- HTTP/JSON --> Fiber[Servidor Web Fiber]
Fiber -- Consulta SCIM --> Parser[Parser go-dsl]
Parser -- Fragmento SQL --> Builder[Constructor SQL]
Builder -- Consulta Optimizada --> DB[(PostgreSQL JSONB)]
DB -- Resultado --> Fiber
-
Clona el repo
git clone https://github.com/arturoeanton/go-vorpal-scim.git cd vorpal -
Ejecútalo (Modo DB Embebida)
go run main.go
Vorpal levantará automáticamente una instancia local de Postgres en
./data/db.
# config.toml example
[server]
port = ":3000"
app_name = "Vorpal Identity"
[database]
use_embedded = true # Set false for production
host = "localhost"
user = "vorpal"
password = "secure_password"Vorpal incluye un archivo docker-compose.yml para ejecutar todo el stack (App PostgreSQL PGAdmin) fácilmente.
-
Iniciar el stack
docker-compose up --build -d
-
Acceder a los servicios
- Vorpal API:
http://localhost:3000 - PGAdmin:
http://localhost:5050(Login:[email protected]/admin) - PostgreSQL:
localhost:5432(Usuario:vorpal, Pass:secret_password, DB:vorpal_db)
- Vorpal API:
-
Detener el stack
docker-compose down
Queremos que Vorpal sea el estándar de facto para SCIM en Go. Necesitamos ayuda con:
- Añadir middleware OAuth2/OIDC.
- Mejorar la cobertura de tests.
- Escribir documentación.
¿Encontraste un bug? ¿Tienes una idea? ¡Abre un issue o envía un PR! Construyamos juntos el futuro de la Identidad.