Ecosystem

GlobsFramework ships a growing collection of modules. Each one shares the same GlobType / Glob vocabulary, so data flows naturally between layers without mapping code.

Each module is an independent repository with its own version and release cycle, and for a few of them the repository name and the Maven artifactId differ — the artifact is given on every card below. All artifacts are published under the org.globsframework group.

Core library

globsframework globs

The data model: GlobType, Field, Glob, MutableGlob, GlobRepository, annotations, indexes and the visitor API — plus a fast, non-versioned binary serializer. Everything else depends on this.

Dependencies: slf4j-api only  ·  Java 21

→ GitHub

Serialization

globs-gson globs-gson

JSON in and out, with no introspection — every field is handled by walking the metamodel with a field visitor. Nested Globs, arrays and unions are supported, an unset field is simply not written, and the metamodel itself is serializable (GlobType ⇄ JSON), so a type can travel over the wire and be rebuilt at runtime.

Dependencies: gson

→ GitHub

globs-xml globs-xml

XML in and out, built on saxstack, a lightweight SAX helper — nothing but the branch being read or written is held in memory. Annotations move a field between attribute, child node, text value and CDATA, or attach a namespace.

Dependencies: saxstack

→ GitHub

globs-bin-serialisation globs-bin-serialisation

A compact, backward-compatible binary encoder in TLV (Type–Length–Value) form, in the spirit of Protocol Buffers but without a code generator. Each field carries a stable number, so a reader built from an older version of the type skips what it does not know and keeps working.

Dependencies: none

→ GitHub

globs-grpc globs-protobuf

Read and write Globs directly in the protobuf wire format — no protobuf-java messages, no descriptors, no generated classes. The mapping is a ProtobufField annotation on the type, so a Glob is on the wire exactly what a .proto message would be, byte for byte.

Dependencies: none (protobuf-java is test scope only)

→ GitHub

globs-csv globs-csv

The flat-file formats: delimited files through Apache Commons CSV, Excel sheets through Apache POI, and fixed-width text — all driven by a GlobType rather than by a per-file parser. Includes a reformatter that maps one type onto another while the data flows.

Dependencies: commons-csv poi-ooxml

→ GitHub

Database

globs-db globs-sql

Relational access driven by a GlobType instead of an ORM mapping: fields are columns, key fields are the primary key. It works both ways — create tables and run typed insert / update / delete / select from a type, or build a type at runtime from JDBC metadata. Transaction templates, a failure hierarchy you can retry on, and connection pooling when HikariCP is present.

Dependencies: globs-gson a JDBC driver of your choice

→ GitHub

Network, APIs & protocols

globs-http globs-http

An HTTP API whose routes, path and query parameters, headers, bodies and responses are all described by GlobTypes, on top of Apache HttpCore 5 async. The same declarations produce the OpenAPI 3.0.1 document — itself a Glob — so the documentation cannot drift from the server.

Dependencies: httpcore5 globs-gson

→ GitHub

globs-graphql globs-graphql

A GraphQL engine where every value is a Glob and every type a GlobType — no code generation, no graphql-java for execution. Resolvers are called once per level, not once per node, so the N+1 problem is designed out rather than patched with a data loader.

Dependencies: antlr4-runtime globs-gson

→ GitHub

globs-mcp globs-mcp prototype

GlobType → JSON Schema, and Model Context Protocol tools over stdio or streamable HTTP. A tool definition is a type: the schema the model sees is derived from it, and what the model sends back arrives decoded, typed and validated. Bridges turn an existing globs-http API or a globs-sql database into an MCP server with no extra declaration.

Dependencies: globs-gson globs-http / globs-sql for the bridges

Not published yet — build it locally.

→ GitHub

globs-network globs-rpc-direct

Point-to-point exchange of Globs over plain blocking sockets, one thread per connection — no HTTP, no broker, no IDL. The contract between the two ends is the GlobType itself; the wire carries a TLV-serialized Glob. Two shapes: request/response, and streaming with optional acknowledgement.

Dependencies: globs-bin-serialisation

→ GitHub

globs-fix globs-fix

A FIX 4.4 engine whose messages are Globs instead of generated classes. The dictionary is a QuickFIX-style XML file; the binding between a type and the wire format is annotation-driven and resolved once at startup into flat lookup tables, so the per-message path does no reflection and no allocation. Includes a full session layer — logon/logout, sequence numbers, gap fill, resend, heartbeat.

Dependencies: globs-xml globs-gson  ·  Java 22+

→ GitHub

globs-etcd globs-etcd

Publish Globs into etcd and subscribe to their changes — meant for propagating configuration and slowly-changing state between microservices. A GlobType describes both the value and the key: the fields annotated PathIndex form the etcd key.

Dependencies: jetcd-core

→ GitHub

globs-nats spike

The starting point for a future NATS transport. Today it holds a round-trip latency measurement against a NATS server — there is no Glob ⇄ NATS binding in it yet.

Dependencies: jnats  ·  Java 24

→ GitHub

Tooling & utilities

globs-commandline globs-commandline

Turn command-line arguments — or environment variables — into a Glob. The GlobType is the whole declaration of the options: one field per option, its Java type gives the conversion, and a few annotations cover defaults, mandatory options, array separators and positional arguments.

Dependencies: none

→ GitHub

globs-generate globs-generate

Runtime bytecode generation with ASM, plugged into core through its service points and selected by a system property — no API change on your side. Two independent things: a dedicated Glob implementation per type, with values in real Java fields; and, the part that actually pays, the generated traversal a codec does over a Glob, emitted unrolled so each per-field call site is monomorphic and inlines where a hand-written loop stays megamorphic.

Dependencies: asm

→ GitHub

globs-view globs-view

Query a collection of Globs by breakdown and output — the pivot-table shape. The dimensions are not written in code: they are discovered from the GlobType, published as a dictionary and picked by name in the request, which is what makes it an endpoint an interactive UI can drive.

Dependencies: globs-gson globs-http for the ready-made server

→ GitHub

globs-shared globs-off-heap

Store Globs in memory-mapped files outside the Java heap, and read them back through indexed lookups. The record layout is derived once from the GlobType with the Foreign Memory API and every access goes through a pre-resolved VarHandle. Two engines: a write-once tree store with sorted indexes, and a hash store supporting in-place update. The storage format is the file format.

Dependencies: none  ·  Java 22+

→ GitHub

Quickstart: all-in-one example

The easiest way to see the ecosystem in action is to clone the all-in-one repository, which wires several modules together in runnable examples:

git clone --recursive https://github.com/globsframework/globs-allInOne.git

Then run: simplest/src/main/java/org/globsframework/sample/graphql/Example2.java to see JSON, GraphQL, and database layers working together from a single type definition.