Web app ✎ Edit
Plan in the browser — no installation.
The new Angular web app runs next to the Swing desktop client against the same server. Both see the same data and the same permissions.
Views
- Day, week and month grid
- List and table views
- Print-friendly week layout (landscape)
Editing
- Create events from templates with the New picker
- Move and resize appointments by drag & drop — moves can be undone; moving one occurrence of a series detaches it
- Recents and favourites follow you across devices
GraphQL API ✎ Edit
One typed API for everything the clients can do.
Every resource type you configure in Rapla becomes a typed GraphQL object, so a room’s attributes are real fields, not strings in a map.
query {
resources(filter: { isPersonEq: false, limit: 10 }) {
name
isLocation
classification { typeKey }
}
}
Filter by type with typeIn and read the typed attributes with a fragment such as ... on <TypeKey>Classification — both are generated from your own resource types.
Stored views
Save a query with @window and @param as a named view — the web app renders it as a table or calendar without writing code.
Login & API keys ✎ Edit
Single sign-on, OAuth 2.0 and scoped API keys.
- OAuth 2.0 with PKCE for the web app and the desktop client
- Sign in with Microsoft, Google or Keycloak — Keycloak can connect your organisation’s own identity provider
- Scoped API keys for scripts and integrations, rotatable by the user
Permissions are additive: a user gets the highest right any of their groups grants — the same model in the web app, the desktop client and the API.
Calendar sync ✎ Edit
Exchange and iCal — keep other calendars in step.
- Exchange sync mirrors bookings into the Outlook calendars of the booked persons, through one sync account per location that has their calendars shared to it
- iCal export of appointments for other calendar apps
Planned: iCal subscription per resource and iCal import.
Documents & templates ✎ Edit
Loan slips, schedules and notices as HTML or PDF.
Documents pair a stored view with a Mustache template. The server renders HTML; PDF comes straight from the browser’s print dialog.
<h1>Loan slip {{number}}</h1>
{{#items}}<li>{{name}} — due {{due}}</li>{{/items}}
Planned: a loan lifecycle (lend, return, overdue) and a free-slot search across resources.
Deployment ✎ Edit
One JAR, a Docker image, and several pods if you need them.
Rapla 3 ships as a single Spring Boot JAR and as the container image ghcr.io/rapla/rapla.
Several instances can share one database and coordinate through the change history.
docker run -d --name rapla -p 127.0.0.1:8051:8051 \
-v rapla-data:/opt/rapla/data -v rapla-logs:/opt/rapla/logs \
ghcr.io/rapla/rapla:nightly
The volumes keep your data across restarts, and the port is only reachable from this machine. Set an admin password right after the first start.






