Port Numbers
A developer-focused cut of the IANA Service Name and Transport Protocol Port Number Registry — nearly every assigned port in the well-known range (0–1023) plus the registered ports developers reach for constantly, like 3306 for MySQL, 5432 for PostgreSQL, 6379 for Redis, and 27017 for MongoDB. Each entry gives the port number, transport protocol, IANA service name, and the registry's description.
Quick fetch
Stable URL. CORS-enabled. No auth.
curl https://staticdata.dev/v1/ports.json
Or use as a typed import:
import { ports } from "https://staticdata.dev/v1/ports.ts"
Formats
- JSON 99.1 KB
/v1/ports.json
min: 74.1 KB · /v1/ports.min.json
- CSV 31.8 KB
/v1/ports.csv
- TypeScript 99.3 KB
/v1/ports.ts
export const ports
type Port = (typeof ports)[number]
Schema
Each record in the dataset has the following shape.
| Field | Type | Description | Example |
|---|---|---|---|
| port | number | Port number (0–65535) | 443 |
| protocol | string | Transport protocol: tcp, udp, or tcp/udp | tcp/udp |
| service | string | IANA service name | https |
| description | string | Service description from the registry | http protocol over TLS/SSL |
| wellKnown | boolean | Whether the port is in the well-known range (0–1023) | true |
Preview
First 10 records.
| port | protocol | service | description | wellKnown |
|---|---|---|---|---|
| 1 | tcp/udp | tcpmux | TCP Port Service Multiplexer | true |
| 5 | tcp/udp | rje | Remote Job Entry | true |
| 7 | tcp/udp | echo | Echo | true |
| 9 | tcp/udp | discard | Discard | true |
| 11 | tcp/udp | systat | Active Users | true |
| 13 | tcp/udp | daytime | Daytime | true |
| 17 | tcp/udp | qotd | Quote of the Day | true |
| 18 | tcp/udp | msp | Message Send Protocol (historic) | true |
| 19 | tcp/udp | chargen | Character Generator | true |
| 20 | tcp/udp | ftp-data | File Transfer [Default Data] | true |
Fetch examples
Drop-in snippets in five languages.
curl -sSL https://staticdata.dev/v1/ports.json | jq '.[0]' import type { Port } from "https://staticdata.dev/v1/ports.ts";
const res = await fetch("https://staticdata.dev/v1/ports.min.json");
if (!res.ok) throw new Error(`Fetch failed: ${res.status}`);
const ports: Port[] = await res.json();
console.log(ports[0]); import urllib.request, json
with urllib.request.urlopen("https://staticdata.dev/v1/ports.min.json") as r:
ports = json.load(r)
print(ports[0]) package main
import (
"encoding/json"
"fmt"
"net/http"
)
func main() {
resp, err := http.Get("https://staticdata.dev/v1/ports.min.json")
if err != nil { panic(err) }
defer resp.Body.Close()
var data []map[string]any
if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
panic(err)
}
fmt.Println(data[0])
} use serde_json::Value;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let body = ureq::get("https://staticdata.dev/v1/ports.min.json").call()?.into_string()?;
let data: Vec<Value> = serde_json::from_str(&body)?;
println!("{:?}", data.first());
Ok(())
} Sources and methodology
The source is the IANA Service Name and Transport Protocol Port Number Registry. The full registry contains tens of thousands of rows, the vast majority unassigned or reserved; this dataset is a deliberate subset chosen for usefulness:
- Assigned ports in the well-known range (0–1023) that have a description in the registry. These are
wellKnown: true. About two dozen legacy well-known assignments that IANA lists with a service name but no description (for example 518ntalkand 543klogin) are not included. - A curated list of popular registered ports above 1023 that developers reference routinely — databases, message brokers, dev servers, and infrastructure tooling (e.g. 3306, 5432, 6379, 8080, 9200, 27017). These are
wellKnown: false.
Rows IANA marks Reserved, Unassigned, or Deprecated are excluded. Where a single port number has separate TCP and UDP registrations, they are collapsed into one entry: protocol is set to tcp/udp when both transports are registered, and the service name and description are taken from the TCP registration when present. Ports outside the curated registered set are intentionally omitted, so a port not appearing here is not necessarily unassigned — consult the full IANA registry for the authoritative, complete list. Service names and descriptions are the registry’s own (as of October 2026), which is why, for example, 9200 is listed as wap-wsp rather than Elasticsearch.
Versioning
URLs under /v1/ are stable: field names and types will not change in a way
that breaks consumers. Values can be corrected or records added when the upstream source
changes; schema-incompatible updates ship under a new version path. See the
ports changelog for this dataset's history.
Related datasets
More Web datasets
- aria-attributes
- aria-roles
- character-encodings
- csp-directives
- credit-card-types
- dns-record-types
- dom-events
- emoji
- emoji-shortcodes
- html-elements
- html-entities
- html-attributes
- input-types
- http-auth-schemes
- http-cache-directives
- http-content-codings
- http-methods
- http-status-codes
- http-versions
- iframe-sandbox-tokens
- ip-protocol-numbers
- keyboard-event-codes
- link-relations
- media-type-suffixes
- mime-types
- oauth-grant-types
- referrer-policies
- ip-special-blocks
- svg-elements
- tcp-flags
- tls-cipher-suites
- tls-versions
- uri-schemes
- well-known-uris