← Back to Work

Case study

Röle

An offline-first API client, with an optional backend for teams that outgrow working solo.

FlutterDartNode.jsTypeScriptExpress 5PostgreSQLZod
Explore the Röle product page

The problem

Most API testing tools assume you want an account, a cloud sync layer, and a subscription — even if you’re just testing a REST endpoint on your own machine. That’s a lot of surface area (and trust) to hand over for something that should just work locally.

We wanted a client that respects that: no forced sign-in, no telemetry, and no dependency on someone else’s server to open the app.

The client

Röle is a local-only API testing client built with Flutter, running natively on Windows, macOS, Linux, Android, and iOS from one codebase.

Everything — collections, requests, environments — is stored on-device as plain files, so it works fully offline and plays well with Git if you want to version or share a workspace manually. There’s no account and no backend required to use it.

It covers the core of what you’d expect from a REST client:

  • Full request editor — URL, headers, query params, body — across GET, POST, PUT, DELETE, PATCH, HEAD, and OPTIONS
  • Collections and environment variables with {{variableName}} substitution
  • Import/export of Röle and Postman-style workspace JSON, with conflict handling
  • A collection runner with pass/fail history, and Flows for chaining multi-step requests
  • Light, dark, and system theming across desktop and mobile layouts

The backend

Local-only is the right default, but teams eventually need to share a workspace. Röle Node is the optional piece that adds that — a Node.js and TypeScript backend built on Express 5, kept entirely separate from the client so using it stays opt-in.

It handles workspace-based sync — teams, invitations, roles, and activity — so collections, environments, and variables stay consistent across everyone on a team, with the same Röle-native import/export the client already supports.

Under the hood:

  • Strict Zod validation and centralized error handling across the API
  • PostgreSQL with a migration workflow and a repeatable Docker reset for local development
  • A layered test suite — unit, integration, security, smoke, and end-to-end — enforced in CI
  • Automated dependency auditing, secret scanning, and CodeQL static analysis on every push

Where it stands

Both pieces are open source and under active development. The client works fully standalone; the backend is there for the moment a workspace needs more than one person.

Ready to transform your business?

Get started