Skip to content
salesforce-miscPublic

About

A Template-driven API orchestration/automation tool for JVM (Java/Kotlin)

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

23 stars

Watchers

0 watching

Forks

Latest commit

 

History

1,253 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

ReṼoman (Rev-Woman)

Maven Central Build GitHub stars JVM 25+ License

ReṼoman is an API Orchestration Engine for the JVM — the middleware between an agent and your API-Graphs.

Describe a workflow of interdependent API calls as executable API metadata. ReṼoman executes that graph on the JVM — resolving data dependencies between calls, handling auth, polling, and type-safe payloads — and hands back a structured Rundown of everything that happened. That makes it a building block for Agentic API Orchestration, with JVM API test automation as one powerful application.

ℹ️
NO licensed Postman SDKs are used inside this project. This is written ground up natively in JVM. ReṼoman comes from the API-first SaaS company, Salesforce.

See it run

Hand the engine the executable API metadata you already author for manual testing. It runs the graph in order, threads each step’s output into the next, and returns a Rundown you assert on — right inside your JVM stack.

  ReṼoman ▸ executing API-Graph ······································
   01   GET     /objects           200     88 ms   ✓
   02   POST    /objects           200    142 ms   ✓   → {id}
   03   PATCH   /objects/{id}      200    110 ms   ✓   ← {id}
   04   GET     /objects/{id}      200     76 ms   ✓   ← {id}
  ················································· 4 steps · 4 passed
   › rundown.toJson(VERBOSE)
   { "stepReports": [ 4 — all passed ], "mutableEnv": {…}, "stats": {…} }

The four steps above are a real, passing run against a deterministic local http4k-backed handler over a loopback socket — POST creates an object, and later steps reuse its {id}. ReṼoman ships the public MockHttpServer; DeterministicMockApi is this repository’s application-specific example handler. The caller owns both, starts the server explicitly, and injects its URL into the run:

final var api = new DeterministicMockApi();
try (final var server = MockHttpServer.start(api)) {
  final var rundown =
      ReVoman.revUp(                          // (1)
          Kick.configure()
              .templatePath(PM_COLLECTION_PATH)     // (2)
              .environmentPath(PM_ENVIRONMENT_PATH) // (3)
              .dynamicEnvironment("baseUrl", server.getBaseUrl()) // (4)
              .nodeModulesPath("js")
              .off());
  assertThat(rundown.firstUnsuccessfulStepReport()).isNull(); // (5)
  assertThat(rundown.stepReports).hasSize(4);                  // (6)
}
  1. revUp runs the graph, taking a configuration built with Kick.configure()

  2. An exported Postman collection JSON — your executable API metadata

  3. An exported Postman environment JSON

  4. Overlay the fixture’s loopback URL

  5. Assert the run had no failures

  6. Assert on the structured Rundown

MockHttpServer listens only on an ephemeral IPv4 127.0.0.1 address. It records request bodies in memory so tests can inspect server.requests() without calling a real HTTP service. Handlers may run concurrently, so mutable handler state must be thread-safe.


Why not just a collection runner?

Newman and the Postman CLI overlap with ReṼoman only at "execute a collection." A runner emits a pass/fail report; ReṼoman is middleware that executes an API-Graph and returns structured context your JVM code — or an agent — builds on.

  • JVM-native. Runs inside your JVM stack — coverage, assertions, and all. Newman/Postman CLI run on Node and can’t.

  • Type-safe. Its Moshi bridge hands responses back as POJOs you assert on directly, not raw JSON.

  • Richer execution model. Dynamic pre/post-step hooks plug custom JVM code between steps; polling, execution control, and a mutable environment are first-class.

  • A Rundown, not a report. The Rundown is far richer than a newman report — it is the structured Context Information an agentic orchestration loop reasons over.

Install

Minimum Java version required = 25 (0.90.x is the last line that runs on JDK 21)

Maven

<dependency>
    <groupId>com.salesforce.revoman</groupId>
    <artifactId>revoman</artifactId>
    <version>0.90.0</version>
</dependency>

Gradle Kotlin

implementation("com.salesforce.revoman:revoman:0.90.0")

Bazel

"com.salesforce.revoman:revoman"

Documentation

Each topic links to its published page. The source for every page lives in docs/modules/ROOT/pages/<page-name>.adoc (one concept per file) — e.g. the Hooks page below is docs/modules/ROOT/pages/hooks.adoc.

Overview / pitch

Agentic API Orchestration

Why ReṼoman?

Getting started

Configuration

Executable API metadata (v2/v3)

Rundown & toJson

Step procedure & failures

Variables

Type safety (Moshi)

Hooks

Scripts & pm APIs

Polling

Timing metrics

Mutable environment

Execution control

Applications (testing, etc.)

Troubleshooting & FAQ

Contributing


⭐ Star ReṼoman

If ReṼoman saved you from writing yet another bespoke API-automation framework, a star helps other JVM teams find it — and tells us to keep investing in the open.

🙌🏼 Consume · Collaborate · Contribute

  • The CONTRIBUTING doc has everything to set up this library locally and get hands-on.

  • Any issues or PRs are welcome! ♥️

  • Join the Slack Community to discuss issues or PRs.

About

A Template-driven API orchestration/automation tool for JVM (Java/Kotlin)

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

23 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages