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:

  • json becomes a raw JSON body.
  • form becomes urlencoded.
  • file (with any sibling form fields) becomes formdata with type: file.
  • xml becomes a raw body with Content-Type: application/xml, and the Postman raw language is set to xml.

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"
    }
  ]
}