| Modulo | Badge | GroupId | ArtifactId | Desplegado |
|---|---|---|---|---|
| ether-parent | dev.rafex.ether.parent | ether-parent | si | |
| ether-config | dev.rafex.ether.config | ether-config | si | |
| ether-crypto | dev.rafex.ether.crypto | ether-crypto | si | |
| ether-database-core | dev.rafex.ether.database | ether-database-core | si | |
| ether-jdbc | dev.rafex.ether.jdbc | ether-jdbc | si | |
| ether-database-postgres | dev.rafex.ether.database | ether-database-postgres | si | |
| ether-database-sqlite | dev.rafex.ether.database | ether-database-sqlite | si | |
| ether-json | dev.rafex.ether.json | ether-json | si | |
| ether-cron | dev.rafex.ether.cron | ether-cron | si | |
| ether-jwt | dev.rafex.ether.jwt | ether-jwt | si | |
| ether-observability-core | dev.rafex.ether.observability | ether-observability-core | si | |
| ether-http-core | dev.rafex.ether.http | ether-http-core | si | |
| ether-http-security | dev.rafex.ether.http | ether-http-security | si | |
| ether-http-problem | dev.rafex.ether.http | ether-http-problem | si | |
| ether-http-openapi | dev.rafex.ether.http | ether-http-openapi | si | |
| ether-http-client | dev.rafex.ether.http | ether-http-client | si | |
| ether-logging-core | dev.rafex.ether.logging | ether-logging-core | si | |
| ether-ai-core | dev.rafex.ether.ai | ether-ai-core | si | |
| ether-ai-openai | dev.rafex.ether.ai | ether-ai-openai | si | |
| ether-ai-deepseek | dev.rafex.ether.ai | ether-ai-deepseek | si | |
| ether-websocket-core | dev.rafex.ether.websocket | ether-websocket-core | si | |
| ether-http-jetty12 | dev.rafex.ether.http | ether-http-jetty12 | si | |
| ether-websocket-jetty12 | dev.rafex.ether.websocket | ether-websocket-jetty12 | si | |
| ether-websocket-proxy-jetty12 | dev.rafex.ether.websocket | ether-websocket-proxy-jetty12 | si | |
| ether-webhook | dev.rafex.ether.webhook | ether-webhook | si | |
| ether-glowroot-jetty12 | dev.rafex.ether.glowroot | ether-glowroot-jetty12 | si | |
| ether-archetype | dev.rafex.ether | ether-hexagonal-archetype | si | |
| ether-brain | dev.rafex.ether.brain | ether-brain-parent | si | |
| ether-di | dev.rafex.ether.di | ether-di | si |
Consulta el archivo docs/maven-central-status.json.
Ether es un ecosistema de bibliotecas Java modulares para construir microservicios y APIs sin frameworks pesados. Cada módulo es independiente, tiene cero magia, y puede adoptarse de forma incremental.
graph TD
subgraph Fundación
P[ether-parent<br/>BOM + POM padre]
DI[ether-di<br/>Lazy, Closer, Bootstrap]
end
subgraph Contratos["Contratos — APIs puras sin implementación"]
CFG[ether-config<br/>Configuración tipada]
DBC[ether-database-core<br/>DatabaseClient, RowMapper]
JSON[ether-json<br/>JsonCodec]
OBS[ether-observability-core<br/>TimingRecorder, RequestIdGenerator, ProbeCheck]
HC[ether-http-core<br/>HttpExchange, HttpHandler, Middleware]
SEC[ether-http-security<br/>CorsPolicy, SecurityHeadersPolicy]
WSC[ether-websocket-core<br/>WebSocketEndpoint, WebSocketSession]
end
subgraph Implementaciones["Implementaciones concretas"]
JWT[ether-jwt<br/>TokenIssuer, TokenVerifier]
JDBC[ether-jdbc<br/>JdbcDatabaseClient]
PG[ether-database-postgres<br/>PostgreSQL helpers]
PROB[ether-http-problem<br/>RFC 7807 ProblemDetails]
OAI[ether-http-openapi<br/>OpenAPI 3.1 spec builder]
CLI[ether-http-client<br/>EtherHttpClient sobre JDK HttpClient]
HJ[ether-http-jetty12<br/>Servidor HTTP completo con Jetty 12]
WSJ[ether-websocket-jetty12<br/>WebSocket sobre Jetty 12]
end
subgraph Integraciones["Integraciones y utilidades"]
WH[ether-webhook<br/>Entrega y verificación HMAC]
GLW[ether-glowroot-jetty12<br/>Instrumentación Glowroot APM]
end
P --> CFG & DBC & JSON & OBS & HC & SEC & WSC
DBC --> JDBC & PG
JSON --> JWT & PROB & OAI & CLI
HC --> PROB & HJ
SEC --> HJ
OBS --> HJ
CFG --> HJ
CLI --> WH
WSC --> WSJ
HJ --> GLW
WSJ --> GLW
El orden importa — cada módulo necesita que sus dependencias estén en Maven Central primero:
graph LR
P[ether-parent] --> CFG[ether-config]
P --> DBC[ether-database-core]
P --> JSON[ether-json]
P --> OBS[ether-observability-core]
P --> HC[ether-http-core]
P --> SEC[ether-http-security]
P --> WSC[ether-websocket-core]
DBC --> JDBC[ether-jdbc]
DBC --> PG[ether-database-postgres]
JSON --> JWT[ether-jwt]
JSON --> PROB[ether-http-problem]
HC --> PROB
JSON --> OAI[ether-http-openapi]
JSON --> CLI[ether-http-client]
CFG --> HJ[ether-http-jetty12]
JSON --> HJ
OBS --> HJ
HC --> HJ
SEC --> HJ
PROB --> HJ
WSC --> WSJ[ether-websocket-jetty12]
CLI --> WH[ether-webhook]
JSON --> WH
HC --> GLW[ether-glowroot-jetty12]
HJ --> GLW
WSC --> GLW
WSJ --> GLW
Bloques de construcción para DI explícita en Java 21+: Lazy<T> (inicialización perezosa thread-safe), Closer (cierre LIFO de recursos) y Bootstrap (arranque con warmup y shutdown hook). Sin reflexión, sin anotaciones, compatible con GraalVM native-image.
POM padre y BOM del ecosistema. Gestiona versiones de todas las dependencias externas (Jackson, Jetty, Glowroot). Todos los módulos de ether lo usan como padre.
Configuración tipada con fuentes apilables (YAML, JSON, TOML, properties, env vars, system properties) y binding directo a records de Java con validación.
Contratos JDBC-first: DatabaseClient, RowMapper, TransactionRunner. Sin implementación — define el contrato que usas en tu código.
Implementación JDBC de ether-database-core. Sin Spring, sin Hibernate, sin pool externo obligatorio.
Clasificador de errores PostgreSQL y constantes de SQL states para manejar unique_violation, foreign_key_violation, etc. de forma limpia.
Interfaz JsonCodec sobre Jackson. Intercambia la implementación sin tocar tu código.
Scheduler embebido y ligero basado en ScheduledExecutorService. Cubre intervalos simples y ejecuciones diarias sin Spring, Quartz ni plataforma de jobs externa.
Emisión y verificación de JWT. Soporta HS256, RS256, ES256.
Interfaces puras: RequestIdGenerator, TimingRecorder, ProbeCheck. Tu código depende solo de estas interfaces — el APM concreto se inyecta como implementación.
Contratos del pipeline HTTP: HttpExchange, HttpHandler, Middleware. Sin Jetty, sin Servlet — puro Java.
graph LR
R[Request] --> M1[Middleware 1\nLogging]
M1 --> M2[Middleware 2\nAuth]
M2 --> H[HttpHandler\ntu lógica]
H --> M2
M2 --> M1
M1 --> Res[Response]
Records inmutables para configurar CORS, security headers, allowlist de IPs y rate limiting.
Respuestas de error RFC 7807 (application/problem+json).
Construye especificaciones OpenAPI 3.1 programáticamente y expónlas en /openapi.json.
Cliente HTTP saliente sobre java.net.http. GET, POST, PUT, DELETE con serialización JSON automática.
El módulo principal para construir servidores HTTP. Integra todos los módulos anteriores en un servidor Jetty 12 listo para producción.
graph TD
REQ[HTTP Request] --> IP[JettyIpPolicyHandler]
IP --> RL[JettyRateLimitHandler]
RL --> CORS[JettyCorsHandler]
CORS --> SH[JettySecurityHeadersHandler]
SH --> OBS[JettyObservabilityHandler\nRequest ID + Timing]
OBS --> AUTH[JettyAuthHandler\nJWT Verification]
AUTH --> MW[Custom JettyMiddlewares]
MW --> RES[NonBlockingResourceHandler\ntu HttpHandler]
RES --> RESP[HTTP Response]
Contratos agnósticos al transporte: WebSocketEndpoint, WebSocketSession.
sequenceDiagram
participant C as Cliente
participant S as Servidor
C->>S: HTTP Upgrade
S->>S: onOpen(session)
C->>S: Text Message
S->>S: onText(session, text)
S->>C: send(response)
C->>S: Close
S->>S: onClose(session, status, reason)
Implementación WebSocket sobre Jetty 12. Se integra en el mismo servidor que ether-http-jetty12.
Envío y verificación de webhooks con firma HMAC-SHA256.
sequenceDiagram
participant S as Sender
participant R as Receiver
S->>S: sign(payload, secret)
S->>R: POST /webhook<br/>X-Webhook-Signature: sha256=...
R->>R: verify(payload, signature, secret)
R-->>S: 200 OK
Instrumentación Glowroot APM para Jetty 12. Registra transacciones, tiempos de respuesta, usuarios autenticados y request IDs sin modificar tu código de negocio.
Runtime hexagonal para agentes de IA en Java 21. Define puertos (ether-brain-ports), lógica de agente (ether-brain-core), memoria in-process, herramientas locales (filesystem, shell) y transporte CLI. Se monta sobre ether-ai-core para llamadas a LLMs.
Este repositorio actúa como un hub orquestador para la publicación y despliegue automáticos de los módulos de Ether en Maven Central.
flowchart LR
DEV[Developer\npush a main] --> CI[GitHub Actions\nValidate Build]
CI --> RP[Generate\nRelease Plan]
RP --> VAL[Validate\nversiones vs Central]
VAL --> DEPLOY[Deploy módulos\nen orden de dependencia]
DEPLOY --> MC[Maven Central]
MC --> MAN[Actualizar\nmanifest.json]
Incluye:
Publica a Maven Central directamente desde tu máquina, sin CI:
Los pasos intermedios son make release-build, just publish-central y just verify-published. Ver spec-native/COMMANDS.md para el detalle.