API Testing,
Supercharged.

Napper is a free, open-source API testing tool that runs from the command line and integrates natively with VS Code. Define HTTP requests as plain text .nap files, add declarative assertions, chain them into test suites, and run everything in CI/CD with JUnit output. As simple as curl for quick requests. As powerful as F# for full test suites.

get-users.nap
[meta]
name = Get all users
 
[request]
GET https://api.example.com/users
 
[request.headers]
Authorization = Bearer {{token}}
 
[assert]
status = 200
body.length > 0
duration < 500ms
Napper VS Code extension running a playlist with test results, response headers, and body inspection

Run playlists, inspect responses, and verify assertions — all inside VS Code.

What can Napper do?

Everything you need for API testing. Nothing you don't.

CLI First

The command line is the product. Run requests, execute test suites, and integrate with CI/CD pipelines from your terminal.

VS Code Native

Full extension with syntax highlighting, request explorer, environment switching, and Test Explorer integration. Never leave your editor.

F# Scripting

Full power of F# for pre/post request hooks. Extract tokens, build dynamic payloads, orchestrate complex flows. No limits.

Declarative Assertions

Assert on status codes, JSON paths, headers, and response times with a clean, readable syntax. No scripting required for simple checks.

Composable Playlists

Chain requests into test suites with .naplist files. Nest playlists, reference folders, pass variables between steps.

Plain Text, Git Friendly

Every request is a .nap file. Every environment is a .napenv file. Version control everything. No binary blobs, no lock-in.

How does Napper compare to other API testing tools?

See how Napper stacks up against Postman, Bruno, and .http files.

Feature Napper Postman Bruno .http files
CLI-first design Yes No GUI-first No CLI
VS Code integration Native Separate app Separate app Built-in
Git-friendly files Yes JSON blobs Yes Yes
Assertions Declarative + scripts JS scripts JS scripts None
Full scripting language F# (.fsx) Sandboxed JS Sandboxed JS None
CI/CD output formats JUnit, TAP, JSON Via Newman Via CLI None
Test Explorer Native No No No
Free & open source Yes Freemium Yes Yes
No account required Yes Account needed Yes Yes

How do you use Napper?

From one-liners to full test suites.

Minimal request

health.nap
GET https://api.example.com/health

POST with body

create-user.nap
[request]
POST {{baseUrl}}/users
 
[request.headers]
Content-Type = application/json
 
[request.body]
"""
{
  "name": "Ada Lovelace",
  "email": "ada@example.com"
}
"""
 
[assert]
status = 201
body.id exists

Run from CLI

terminal
# Run a single request
$ napper run ./health.nap
 
# Run a full test suite
$ napper run ./smoke.naplist
 
# With environment + JUnit output
$ napper run ./tests/ --env staging --output junit

Frequently Asked Questions

What is Napper?

Napper is a free, open-source, CLI-first API testing tool that integrates natively with VS Code. It lets you define HTTP requests as plain text .nap files, add declarative assertions to validate responses, compose requests into test suites with .naplist files, and run everything from the terminal or your editor. It uses F# for advanced scripting and outputs JUnit XML for CI/CD pipelines.

Is Napper free?

Yes. Napper is completely free and open source under the MIT license. There are no paid tiers, no account requirements, and no feature gates. The CLI binary and the VS Code extension are both free to use.

How is Napper different from Postman?

Postman is a GUI-first tool that requires an account, stores collections as JSON, and locks advanced features behind a paywall. Napper is CLI-first, stores everything as plain text files in your repository, requires no account, and is completely free. Napper also provides F# scripting instead of sandboxed JavaScript, and integrates directly into VS Code with native Test Explorer support.

How is Napper different from Bruno?

Bruno is an excellent open-source alternative to Postman, but it is GUI-first with a standalone desktop application. Napper puts the CLI first and lives inside VS Code. For scripting, Bruno offers sandboxed JavaScript while Napper gives you full F# Interactive with access to the entire .NET ecosystem. Both store requests as plain text files.

Does Napper work with CI/CD pipelines?

Yes. Napper is designed for CI/CD from the ground up. The CLI binary is self-contained with no runtime dependencies. It outputs JUnit XML, TAP, JSON, and NDJSON formats. It integrates with GitHub Actions, GitLab CI, Jenkins, Azure DevOps, and any platform that supports standard test output formats. Exit code 0 means all assertions passed, exit code 1 means a test failed.

What scripting language does Napper use?

Napper uses F# Interactive (.fsx scripts) for pre-request and post-request hooks. Unlike the sandboxed JavaScript in Postman and Bruno, F# scripts in Napper have full access to the .NET ecosystem. You can parse XML, call databases, generate cryptographic tokens, validate complex schemas, and use any NuGet package.

What file formats does Napper use?

Napper uses three plain text file formats: .nap files for individual HTTP requests, .naplist files for composing requests into ordered test suites, and .napenv files for environment-specific variables like base URLs and tokens. All files are human-readable, git-friendly, and produce clean diffs in code reviews.

Does Napper require VS Code?

No. The Napper CLI runs independently from any editor or IDE. You can use it entirely from the terminal. The VS Code extension is optional and provides syntax highlighting, a request explorer, environment switching, and Test Explorer integration for developers who prefer working in an editor.

Ready to ship faster?

Install from the VS Code Marketplace or grab the CLI binary.

$ code --install-extension nimblesite.napper