Rapla

What's coming in Rapla 3

A web app, a GraphQL API and a modern server — alpha planned for October 2026.

Rapla 3 is in development. It keeps everything Rapla 2 users rely on — resource and event types, permissions, conflict detection, the desktop client — and rebuilds the platform around it.

Try it early: nightly builds of the development branch are on the download page. They are untested and not for production.

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.

Week view in the web app: bookings for rooms, people and equipment, one being moved by drag & drop

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

Event editor: appointments and resources with their availability

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.

GraphiQL with schema docs, a query and its result

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

Sign-in options: Microsoft, Google and Keycloak

Account settings: API keys with scope and expiry

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}}

Template editor: data tree, Mustache source and live preview

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.

Server status page with version and build date