Additional Output Formats
Plain text, only-* filters, markdown-table, TOML, and Postman collections.
Plain Text (Default)
Without -f, Noir prints each endpoint followed by its parameters, grouped by where they travel in the request:
noir scan . --no-log
GET /
○ headers:
└── x-api-key
POST /query
○ cookies:
└── my_auth
○ body:
└── query
Add --include to show more per endpoint: path (source file and line), techs (the analyzer), and callee (functions the handler calls). --verbose turns on --include path (and all taggers) for you.
noir scan . --no-log --include path,techs
GET /
○ headers:
└── x-api-key
○ tech: crystal_kemal
○ file: ./src/testapp.cr (line 3)
Filtering with only-* Formats
Print one kind of value per line, with nothing else around it. Handy for piping into other tools.
URLs Only
Query parameters are appended to the URL as ?name=.
noir scan . -f only-url
/
/paren?kind=
/query
/token
/socket
/api/v1/users/:id
Parameters Only
noir scan . -f only-param
kind
query
client_id
redirect_url
grant_type
Headers Only
noir scan . -f only-header
x-api-key
Cookie
Cookies Only
noir scan . -f only-cookie
my_auth
Tags Only
Tags come from taggers, so add -T:
noir scan . -f only-tag -T
oauth
ssrf
websocket
idor
Markdown Table
noir scan . -f markdown-table
| Endpoint | Protocol | Params |
| -------- | -------- | ------ |
| `GET /` | http | `x-api-key (header)` |
| `POST /query` | http | `my_auth (cookie)` `query (form)` |
| `GET /token` | http | `client_id (form)` `redirect_url (form)` `grant_type (form)` |
| `GET /socket` | ws | - |
TOML
noir scan . -f toml
[[endpoints]]
callees = []
url = "/"
method = "GET"
internal = false
details = { code_paths = [{ path = "./src/testapp.cr", line = 3 }], technology = "crystal_kemal" }
protocol = "http"
kind = ""
tags = []
params = [{ name = "x-api-key", value = "", param_type = "header", tags = [] }]
[[endpoints]]
callees = []
url = "/query"
method = "POST"
internal = false
details = { code_paths = [{ path = "./src/testapp.cr", line = 17 }], technology = "crystal_kemal" }
protocol = "http"
kind = ""
tags = []
params = [{ name = "my_auth", value = "", param_type = "cookie", tags = [] }, { name = "query", value = "", param_type = "form", tags = [] }]
Configuration-style output that's easy to skim in a terminal or paste into a project config. It carries the full endpoint model, including the --include callee and --ai-context fields when those flags are on. TOML can't write an empty array of tables, so passive_results and errors only show up when they have entries. In diff mode (--diff-path or --diff-ref), -f toml renders the diff in the same format.
JSON Lines (JSONL)
JSONL (-f jsonl) is covered together with JSON on the JSON and JSONL page.
Postman Collection
noir scan . -f postman -u https://api.example.com
Generates a Postman Collection v2.1 JSON file. Save the output and import it into Postman. The collection defines a baseUrl variable set from -u (http://localhost without it). Without -u, request URLs are written as {{baseUrl}}/path, so you can switch targets inside Postman.
Request bodies follow the parameter types Noir recorded:
jsonbecomes a raw JSON body.formbecomesurlencoded.file(with any sibling form fields) becomesformdatawithtype: file.xmlbecomes a raw body withContent-Type: application/xml, and the Postman raw language is set toxml.
An empty xml param becomes a self-closing tag named after the param (<body/> when the name is body), so the Postman raw editor stays non-empty and the field remains visible. Without those body types, requests stay header/URL-only as in the sample below.
{
"info": {
"name": "Generated by Noir",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
},
"item": [
{
"name": "GET api.example.com/",
"request": {
"method": "GET",
"header": [
{
"key": "x-api-key",
"value": ""
}
],
"url": {
"raw": "https://api.example.com/",
"host": ["api", "example", "com"],
"path": [],
"protocol": "https"
}
}
}
],
"variable": [
{
"key": "baseUrl",
"value": "https://api.example.com"
}
]
}