← 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

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