Declare
Define your types in the GraphQL schema, then write the model, repository, service, and controller in Kotlin that back them.
Bosca for Developers
Bosca is a full platform — content, work, identity, Git, and more — and you extend it the same way it's built: repositories, services, GraphQL types, REST routes, and jobs, written in Kotlin and wired together at compile time.
How it works
Define your types in the GraphQL schema, then write the model, repository, service, and controller in Kotlin that back them.
At build time, the compiler reads your annotations and connects it all — generating the JDBC from your SQL, and wiring your services, controllers, and routes into the server.
Your feature is live in the same server, on the same schema — and can call content, work, Git, and every other subsystem through their services, the way they call each other.
The toolkit
The building blocks are the ones the platform itself is made of — repositories, services, controllers, routes, and jobs, written in Kotlin and wired together at compile time.
@Repository with @Query turns raw SQL and named parameters into a typed, suspending JDBC repository.
@ServiceImplementation registers a service with the container — resolved and constructor-injected at startup.
@TypeController and @Field bind a controller to your schema types, right beside every other subsystem's.
@RouteController maps a handler to a path and method, with its authentication declared inline.
@JobDefinition and @JobEvent generate typed enqueue helpers and a dispatch() that runs work and publishes events.
Every binding is generated at build time. What ships is the code you would have written by hand.
Bosca is a set of independently-versioned modules, published as artifacts — depend on the contracts you build against.
The composed schema carries GraphQL subscriptions over a WebSocket, for pushing live updates to clients.
Compile-time wiring
You write the intent; the build writes the wiring. Each annotation has a generator that emits real Kotlin into your build output — the JDBC calls, the controller dispatch, the route handlers — and it's never checked in.
One platform, one schema
Every subsystem contributes to a single GraphQL schema, and your feature joins it. A query can walk from your type into content, work, identity, or commerce in one round trip, and subscriptions push live updates over a WebSocket — the same way the rest of the platform does.
type Query {
content(id: ID!): Content
task(id: ID!): Task
widget(id: ID!): Widget # yours
}Yours to run
Run the whole platform yourself with the official Helm charts. Caching, messaging, the job queue, and storage all sit behind interfaces — pick the backend that fits your stack through configuration, and the code never changes.
Go deeper
Content, work, identity, Git, commerce — everything Bosca already does is there for your feature to build on. It runs in the same server, on the same graph, and reaches all of it through the same service interfaces, on infrastructure you host yourself.