{"id":51563026,"url":"https://github.com/firetiger-oss/stripes","last_synced_at":"2026-07-10T12:02:30.996Z","repository":{"id":356136760,"uuid":"1227784443","full_name":"firetiger-oss/stripes","owner":"firetiger-oss","description":"Streaming pretty-printer for JSON, YAML, XML, HTML, CSV, protobuf, and text — Go library and CLI","archived":false,"fork":false,"pushed_at":"2026-06-20T01:35:28.000Z","size":12712,"stargazers_count":7,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-20T03:22:12.993Z","etag":null,"topics":["ansi","cli","formatter","go","golang","json","pretty-printer","protobuf","structured-data","terminal","xml","yaml"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/firetiger-oss.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-03T06:54:37.000Z","updated_at":"2026-06-20T01:35:32.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/firetiger-oss/stripes","commit_stats":null,"previous_names":["firetiger-oss/stripes"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/firetiger-oss/stripes","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/firetiger-oss%2Fstripes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/firetiger-oss%2Fstripes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/firetiger-oss%2Fstripes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/firetiger-oss%2Fstripes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/firetiger-oss","download_url":"https://codeload.github.com/firetiger-oss/stripes/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/firetiger-oss%2Fstripes/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35330738,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-10T02:00:06.465Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ansi","cli","formatter","go","golang","json","pretty-printer","protobuf","structured-data","terminal","xml","yaml"],"created_at":"2026-07-10T12:02:29.092Z","updated_at":"2026-07-10T12:02:30.984Z","avatar_url":"https://github.com/firetiger-oss.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# stripes [![CI](https://github.com/firetiger-oss/stripes/actions/workflows/ci.yml/badge.svg)](https://github.com/firetiger-oss/stripes/actions/workflows/ci.yml) [![Go Reference](https://pkg.go.dev/badge/github.com/firetiger-oss/stripes.svg)](https://pkg.go.dev/github.com/firetiger-oss/stripes)\n\n\u003cp align=\"center\"\u003e\n  \u003cimg width=\"300\" height=\"255\" alt=\"stripes\" src=\"stripes.png\" /\u003e\n\u003c/p\u003e\n\nStreaming pretty-printer for structured data formats — JSON, YAML, XML, HTML, CSV, Dockerfile, markdown, protobuf, parquet, plain text, source code (via [chroma](https://github.com/alecthomas/chroma)), txtar archives, WebAssembly — usable as a Go library or as a standalone CLI.\n\n## Motivation\n\nPretty-printers in the Unix toolchain are fragmented: `jq` for JSON, `yq` for\nYAML, browsers for HTML, no canonical option for protobuf. They share neither\nflags nor styling, which makes uniform terminal output hard to assemble inside\na single Go program emitting mixed structured payloads (logs, traces, debug\ndumps, RPC responses).\n\n`stripes` collapses that surface to a single library and CLI:\n\n- Renderers stream — bytes are emitted as they arrive, no whole-input load. Works for `tail -f`, large objects, and HTTP response bodies.\n- Format dispatch is by MIME type, so any program already carrying a content type can pick a renderer without parsing its own input.\n- The same library powers the CLI; no separate process required when a Go program wants colored output.\n- One binary, one set of flags, one styling model across all supported formats.\n\n## Library\n\n### Format sub-packages\n\nEach format lives in its own sub-package that registers itself with the\nroot `stripes` package at init. Import the formats you need for their\nside effects — this keeps your dependency graph free of the parsers you\ndon't use:\n\n```go\nimport (\n    \"github.com/firetiger-oss/stripes\"\n    _ \"github.com/firetiger-oss/stripes/json\"\n    _ \"github.com/firetiger-oss/stripes/yaml\"\n)\n```\n\nOr import everything with the umbrella package:\n\n```go\nimport _ \"github.com/firetiger-oss/stripes/all\"\n```\n\n| Content type                     | Sub-package  | Renderer(s)                                  |\n|----------------------------------|--------------|----------------------------------------------|\n| `application/json`               | `stripes/json`       | `Render`                             |\n| `application/yaml`               | `stripes/yaml`       | `Render`                             |\n| `application/xml`                | `stripes/xml`        | `Render`                             |\n| `text/html`                      | `stripes/html`       | `Render`                             |\n| `text/csv`                       | `stripes/csv`        | `Render`                             |\n| `text/x-dockerfile`              | `stripes/dockerfile` | `Render`                             |\n| `text/x-go-mod` etc.             | `stripes/gomod`      | `RenderMod`, `RenderSum`, `RenderWork`, `RenderVendorModules` |\n| `text/markdown`                  | `stripes/markdown`   | `Render`                             |\n| `text/x-source-code`             | `stripes/code`       | `New` (factory; pass chroma lexer name) |\n| `application/wasm`               | `stripes/code`       | `RenderWasm` (requires `wasm-tools`, or `wasm2wat` from WABT as fallback) |\n| `application/protobuf`           | `stripes/protobuf`   | `New` (factory; pass message descriptor) |\n| `application/vnd.opentelemetry.trace` | `stripes/trace` | `Write` / `New` (structured); `NewRenderer` / `NewJSONRenderer` (byte stream) |\n| `application/vnd.apache.parquet` | `stripes/parquet`    | `Render`                             |\n| `text/x-txtar`                   | `stripes/txtar`      | `Render` (recursive per-file dispatch) |\n| `image/png`                      | `stripes/image/png`  | inline rendering via [rasterm](https://github.com/BourgeoisBear/rasterm) (kitty / iTerm2) |\n| `image/jpeg`                     | `stripes/image/jpeg` | inline rendering via rasterm |\n| `image/gif`                      | `stripes/image/gif`  | inline rendering via rasterm |\n| `image/webp`                     | `stripes/image/webp` | inline rendering via rasterm |\n| `image/bmp`                      | `stripes/image/bmp`  | inline rendering via rasterm |\n| `image/tiff`                     | `stripes/image/tiff` | inline rendering via rasterm |\n| `text/plain`                     | `stripes` (root)     | `Text`, `Plain`                      |\n\nThe plain renderers share the\n[`Renderer`](https://pkg.go.dev/github.com/firetiger-oss/stripes#Renderer)\nsignature: `func(io.Writer, io.Reader, *stripes.Styles)`. The two `New`\nfactories (`stripes/code`, `stripes/protobuf`) take format-specific\nparameters and return a `Renderer`.\n\n`.wat`/`.wast` text-format WebAssembly is detected automatically and\nrouted through chroma's `wat` lexer. Binary `.wasm` rendering shells\nout to `wasm-tools print` from\n[wasm-tools](https://github.com/bytecodealliance/wasm-tools), which\ntracks the current WebAssembly specification (component model, GC,\nexception handling, …); install via `brew install wasm-tools` or\n`cargo install wasm-tools`. When `wasm-tools` is not on `$PATH`,\nrendering falls back to `wasm2wat` from\n[WABT](https://github.com/WebAssembly/wabt) (`brew install wabt` or\n`apt install wabt`), which may fail on modules using newer spec\nfeatures.\n\nTerraform `.tf` and `.hcl` files are picked up by chroma's built-in\nfilename match; `.tfvars` is routed to the same `terraform` lexer.\n`.tfstate` and `.tfstate.backup` are routed to the JSON renderer.\n\nThe image renderers emit kitty graphics protocol escapes when\n`$KITTY_WINDOW_ID` is set or `$TERM_PROGRAM` is `wezterm` / `ghostty`,\nand iTerm2 inline-image escapes when `$LC_TERMINAL` is `iterm2` or\n`$TERM_PROGRAM` is `wezterm` / `rio`. Terminals that advertise neither\nget a styled placeholder line (`[image: PNG 1920×1080, 245 KiB]\n(terminal does not support inline images)`). `less -R` does not preserve\nthe graphics escapes, so use `--paging=never` when displaying images\nthrough the CLI.\n\n### [stripes.Func](https://pkg.go.dev/github.com/firetiger-oss/stripes#Func)\n\nPick a [`Renderer`](https://pkg.go.dev/github.com/firetiger-oss/stripes#Renderer)\nby MIME type. Returns `nil` if no imported sub-package handles the\ncontent type.\n\n```go\nimport (\n    \"github.com/firetiger-oss/stripes\"\n    _ \"github.com/firetiger-oss/stripes/json\"\n)\n\nrenderer := stripes.Func(\"application/json\", \"\")\nrenderer(os.Stdout, body, stripes.DefaultStyles)\n```\n\nFor `application/protobuf`, pass the message's full name as the second\nargument so the dynamic descriptor lookup can resolve fields.\n\n### [stripes.Detect](https://pkg.go.dev/github.com/firetiger-oss/stripes#Detect)\n\nResolve a content type from a filename and/or the leading bytes of a\nstream, using the filenames, extensions, magic bytes, and heuristics\nregistered by the imported sub-packages.\n\n```go\nbuf, _ := bufio.NewReader(input).Peek(512)\nct := stripes.Detect(\"payload.yaml\", buf)\nrenderer := stripes.Func(ct, \"\")\n```\n\n### [stripes.Register](https://pkg.go.dev/github.com/firetiger-oss/stripes#Register)\n\nThird-party code can register additional formats by calling\n`stripes.Register` with a [`Format`](https://pkg.go.dev/github.com/firetiger-oss/stripes#Format)\nfrom an `init` function — the same mechanism the built-in sub-packages\nuse.\n\n### [stripes.Styles](https://pkg.go.dev/github.com/firetiger-oss/stripes#Styles)\n\nPass [`stripes.DefaultStyles`](https://pkg.go.dev/github.com/firetiger-oss/stripes#DefaultStyles)\nfor the built-in grayscale theme, a `Clone()` to customize, or `\u0026stripes.Styles{}`\nfor unstyled output.\n\n## [stripes/trace](https://pkg.go.dev/github.com/firetiger-oss/stripes/trace)\n\nRender OpenTelemetry trace data as a terminal waterfall. Each\n`trace_id` becomes its own block: a top rule, a `Key: value`\nmetadata table (`Trace ID`, `Root`, `Duration`, `Spans`, `Errors`),\na bottom rule with embedded time-axis tick marks and labels, then\none row per span with `tree+kind+name · duration · bar`. The bar is\na coloured rectangle whose background is the service's hash-stable\nhue, with the bold `service.namespace/service.name` label overlaid\nat the left edge — so the bar simultaneously shows duration,\nposition, and ownership. Right-edge sub-cell precision uses\neighth-block glyphs; the left edge always snaps to a whole cell for\ncross-terminal robustness. Span names and the tree connectors are\nrendered in the terminal's default colour, keeping the focus on the\ncoloured bars.\n\n```go\nimport (\n    \"iter\"\n    \"os\"\n\n    \"github.com/firetiger-oss/stripes\"\n    \"github.com/firetiger-oss/stripes/trace\"\n    tracev1 \"go.opentelemetry.io/proto/otlp/trace/v1\"\n)\n\nfunc render(td *tracev1.TracesData) error {\n    return trace.Write(os.Stdout, trace.FromTracesData(td),\n        trace.WithStyles(stripes.DefaultStyles),\n        trace.WithWidth(120),\n        trace.WithVerbose(true), // expand attributes + events\n    )\n}\n```\n\n`Write` / `Format` are one-shot helpers; `New(opts...) *Formatter`\nprecomputes the options for hot loops. The structured API accepts\n`iter.Seq[*tracev1.ResourceSpans]` — `FromTracesData`,\n`FromResourceSpans`, `FromScopeSpans`, and `FromSpans(serviceName,\nspans...)` adapt the common OTLP wrapper levels into that shape.\n\nFor MIME-routed byte-stream use,\n[`NewRenderer`](https://pkg.go.dev/github.com/firetiger-oss/stripes/trace#NewRenderer)\nand\n[`NewJSONRenderer`](https://pkg.go.dev/github.com/firetiger-oss/stripes/trace#NewJSONRenderer)\nmirror `protobuf.New` / `protobuf.NewJSON` — they accept a message\ndescriptor (TracesData / ResourceSpans / ScopeSpans / Span) and return\na `stripes.Renderer`. The CLI's `--format=trace` flag picks them\nautomatically; in `--format=auto`, a `--schema` that names an\nOpenTelemetry trace message also routes here instead of the generic\nprotobuf text renderer.\n\n## [stripes/log](https://pkg.go.dev/github.com/firetiger-oss/stripes/log)\n\nRender log data — both OpenTelemetry log batches (binary or\nprotojson) and line-oriented text log formats — through one\nshared rendering pipeline. Every record produces the same shape:\n\n    yyyy/mm/dd hh:mm:ss.mmm LEVEL metadata message\n      attr1      = value\n      attr2.key1 = value\n\nSingle line when there are no attrs — the per-record vertical cost\nis paid only when there's structured data to surface. Timestamps\nare normalised to the host's local time (parsed from RFC 3339,\nlog4j/python comma-millisecond, Apache combined, BSD/journald,\netc.). The 4-character `LEVEL` column is coloured by class\n(`TRAC`/`DEBU` cyan, `INFO` green, `WARN` yellow, `ERRO` red,\n`FATA` purple); formats with no level concept (BSD syslog, macOS)\ndrop the column entirely. `metadata` is the format's per-line\nvisual identity (HTTP access logs land on a coloured \"HTTP\nstatus\" pair with the status code class-tinted; log4j shows\n`logger[thread]`; syslog shows `tag[pid]`; python shows\n`logger:line`). Attributes are alphabetically sorted with keys\naligned on the `=`.\n\n### OpenTelemetry logs\n\n```go\nimport (\n    \"iter\"\n    \"os\"\n\n    \"github.com/firetiger-oss/stripes\"\n    \"github.com/firetiger-oss/stripes/log\"\n    logsv1 \"go.opentelemetry.io/proto/otlp/logs/v1\"\n)\n\nfunc render(ld *logsv1.LogsData) error {\n    return log.Write(os.Stdout, log.FromLogsData(ld),\n        log.WithStyles(stripes.DefaultStyles),\n        log.WithWidth(120),\n        log.WithVerbose(true), // expand attributes + trace correlation\n    )\n}\n```\n\n`Write` / `Format` are one-shot helpers; `New(opts...) *Formatter`\nprecomputes the options for hot loops. The structured API accepts\n`iter.Seq[*logsv1.ResourceLogs]` — `FromLogsData`,\n`FromResourceLogs`, `FromScopeLogs`, and `FromLogRecords(serviceName,\nrecords...)` adapt the common OTLP wrapper levels into that shape.\n`-v` folds `trace_id`, `span_id`, and the instrumentation scope into\nthe same indented attrs block.\n\nFor MIME-routed byte-stream use,\n[`NewRenderer`](https://pkg.go.dev/github.com/firetiger-oss/stripes/log#NewRenderer)\nand\n[`NewJSONRenderer`](https://pkg.go.dev/github.com/firetiger-oss/stripes/log#NewJSONRenderer)\naccept a message descriptor (LogsData / ResourceLogs / ScopeLogs /\nLogRecord) and return a `stripes.Renderer`. The CLI's `--format=logs`\nflag picks them automatically; in `--format=auto`, a `--schema` that\nnames an OpenTelemetry log message also routes here instead of the\ngeneric protobuf text renderer.\n\n### Text log formats\n\n| Format            | CLI alias         | Detection                                          |\n|-------------------|-------------------|---------------------------------------------------|\n| logfmt            | `logfmt`          | ≥2 `key=value` tokens on the first line           |\n| JSON-per-line     | `jsonlog`         | JSON object with a recognised time/level/msg key  |\n| AWS ALB access    | `alb-access`      | `^(h2\\|http\\|https\\|ws\\|wss) \u003ciso-timestamp\u003e`     |\n| NGINX/Apache combined | `nginx-access` | Apache common-log shape with bracketed date       |\n| log4j / Kafka     | `log4j`           | Bracketed date OR plain date with `[thread]`/`- ` |\n| Python `logging`  | `python-log`      | `YYYY-MM-DD HH:MM:SS,sss LEVEL logger:line msg`   |\n| Go stdlib `log`   | `go-log`          | `YYYY/MM/DD HH:MM:SS …`                           |\n| BSD syslog/journald/macOS | `syslog`  | `Mon DD HH:MM:SS hostname tag[pid]: …`            |\n| RFC 5424 syslog   | `syslog-rfc5424`  | `\u003cPRI\u003e1 \u003ciso-timestamp\u003e hostname app procid …`    |\n\nDetection is content-based (no format claims `.log`), so dropping\na `.log` file with no flag uses the first matching `Detect`. The\nclassifiers are registered most-specific first; logfmt and\njsonlog register last because their predicates are the most\npermissive.\n\n**Note on JSONL auto-detection:** the Go runtime initializes\nsub-packages in alphabetical order, so the `json` renderer's\n`Detect` (which requires a parseable first JSON value) is\nconsulted before `jsonlog`'s. JSON Lines payloads detect as plain\nJSON unless you pass `--format=jsonlog` explicitly.\n\nAdding a new text log format is one file: define a `LineFormat`\nvalue and call [`log.Register`](https://pkg.go.dev/github.com/firetiger-oss/stripes/log#Register)\nfrom `init()`. The registry wires it into both the byte-stream\nrenderer and `stripes.Detect`. The shipped formats register in a\ndeterministic priority order from the package's own `init`;\nexternally-added formats run after the built-ins, so write a\n`Detect` predicate strict enough to avoid false positives.\n\n## [stripes/table](https://pkg.go.dev/github.com/firetiger-oss/stripes/table)\n\nRender typed iterators of struct values as styled CLI tables. Columns are\nderived by reflection from exported fields: headers come from field names\n(or a `table:\"NAME\"` tag), cell formatters from field types\n(`time.Time`/`time.Duration` get dedicated formats, numerics are\nright-aligned). Tag modifiers like `table:\",bytes\"`, `table:\",count\"`, and\n`table:\",0-100%\"` pin specific formatters and suffixes.\n\n```go\nimport (\n    \"iter\"\n    \"os\"\n    \"time\"\n\n    \"github.com/firetiger-oss/stripes/table\"\n)\n\ntype Pod struct {\n    Name     string\n    Status   string\n    Restarts int\n    Memory   int64 `table:\"MEM,bytes\"`\n    Age      time.Time\n}\n\nfunc render(seq iter.Seq2[Pod, error]) error {\n    return table.Write(os.Stdout, seq, table.WithNow(time.Now))\n}\n```\n\n`Write` / `Format` are one-shot helpers; `NewWriter[T]` / `NewFormatter[T]`\nprecompute the schema and are appropriate for hot loops. For non-struct\nrows (`[]string`, `[]any`, …) pass [`WithColumns`](https://pkg.go.dev/github.com/firetiger-oss/stripes/table#WithColumns)\nor [`WithHeaders`](https://pkg.go.dev/github.com/firetiger-oss/stripes/table#WithHeaders).\nBorders, viewports/scrollbars, row selectors, and per-cell or per-row\nstyle callbacks are available via the\n[`Option`](https://pkg.go.dev/github.com/firetiger-oss/stripes/table#Option)\nconstructors.\n\n## [stripes/cobra](https://pkg.go.dev/github.com/firetiger-oss/stripes/cobra)\n\nDrop-in styled help, usage, and error output for CLIs built with\n[`spf13/cobra`](https://github.com/spf13/cobra). The palette is sourced\nfrom [`stripes.DefaultStyles`](https://pkg.go.dev/github.com/firetiger-oss/stripes#DefaultStyles)\nso help text matches the rest of the project's output. ANSI is downgraded\nor stripped automatically when stdout/stderr is not a terminal.\n\n```go\nimport (\n    \"context\"\n    \"errors\"\n    \"os\"\n\n    \"github.com/spf13/cobra\"\n\n    stripescobra \"github.com/firetiger-oss/stripes/cobra\"\n)\n\nfunc main() {\n    root := \u0026cobra.Command{\n        Use:   \"mytool\",\n        Short: \"A demo CLI\",\n    }\n    root.PersistentFlags().StringP(\"config\", \"c\", \"/etc/mytool.cfg\", \"config `file` path\")\n\n    root.AddCommand(\u0026cobra.Command{\n        Use:   \"serve\",\n        Short: \"Start the server\",\n        RunE: func(*cobra.Command, []string) error {\n            return errors.New(\"not implemented\")\n        },\n    })\n\n    if err := stripescobra.Execute(context.Background(), root); err != nil {\n        os.Exit(1)\n    }\n}\n```\n\n[`Execute`](https://pkg.go.dev/github.com/firetiger-oss/stripes/cobra#Execute)\ninstalls styled help/usage/error rendering on `root` and every subcommand\nbefore calling `root.ExecuteContext`. Use\n[`Apply`](https://pkg.go.dev/github.com/firetiger-oss/stripes/cobra#Apply)\nto install the renderers without running the command. The palette,\noutput writers, and error handler are overridable via\n[`WithStyles`](https://pkg.go.dev/github.com/firetiger-oss/stripes/cobra#WithStyles),\n[`WithOutput`](https://pkg.go.dev/github.com/firetiger-oss/stripes/cobra#WithOutput),\n[`WithErrorOutput`](https://pkg.go.dev/github.com/firetiger-oss/stripes/cobra#WithErrorOutput),\nand [`WithErrorHandler`](https://pkg.go.dev/github.com/firetiger-oss/stripes/cobra#WithErrorHandler).\n\n## CLI\n\n```\ngo install github.com/firetiger-oss/stripes/cmd/stripes@latest\n```\n\n```\n$ stripes --help\nUsage: stripes [flags] [file...]\n\nPretty-print structured data (JSON, YAML, XML, HTML, CSV, Dockerfile, markdown,\nprotobuf, parquet, text, source code, txtar, wasm) with ANSI colors and optional paging.\n\nWhen multiple files are given, each is preceded by a centered rule\n(───── filename ─────) so the source is visible inline. --format,\n--content-type, and --schema apply to all of them.\n\nFlags:\n  -f, --format string         json|yaml|xml|html|csv|dockerfile|markdown|text|code|protobuf|trace|parquet|txtar|wasm|table|auto (default auto)\n                              \"table\" routes CSV/TSV/JSONL/parquet through the\n                              new typed-table renderer with width-fitting,\n                              JSON-cell colorization, and (for parquet) schema-\n                              driven column formatting.\n      --content-type string   Override MIME type (e.g. application/vnd.foo+json)\n      --schema string         Schema URL (protobuf full name)\n      --color string          always|never|auto (default auto)\n      --paging string         always|never|auto (default auto). In \"auto\",\n                              the pager is spawned only when the rendered\n                              output is wider or taller than the terminal,\n                              or when more than one file is rendered.\n      --profile string        Color profile name or path. Bare names resolve\n                              against $XDG_CONFIG_HOME/stripes/profiles\n                              (~/.config/stripes/profiles) and the built-in\n                              set. A value containing \"/\" or ending in\n                              .yaml/.yml is loaded as a file directly.\n  -w, --width int             Output width in columns. 0 (default) =\n                              auto-detect from the terminal; falls back\n                              to no wrap when stdout is not a TTY.\n  -p, --pager string          Pager command (e.g. \"less -R\", \"bat --plain\").\n                              Use --paging=never to bypass paging.\n  -n, --line-numbers          Show line numbers in a left-aligned gutter.\n  -v, --verbose               Expand per-row detail (currently used by\n                              the trace format to reveal attributes,\n                              events, and status messages under each\n                              span).\n\nPager resolution: -p flag \u003e $PAGER \u003e \"less -R\"\nProfile resolution: --profile flag \u003e $STRIPES_PROFILE \u003e built-in default\nColor is auto-disabled when NO_COLOR is set or stdout is not a terminal.\n```\n\n### Shell aliases\n\n```sh\nalias scat='stripes'                 # auto-paging: pages only when content overflows\nalias spcat='stripes --paging=never' # always-stream, never page\n```\n\n![stripes CLI screenshot](assets/screenshot.png)\n\n## Contributing\n\nContributions are welcome! To get started:\n\n1. Ensure you have Go 1.25+ installed\n2. Run `go test ./...` to verify tests pass\n\nPlease report bugs and feature requests via [GitHub Issues](https://github.com/firetiger-oss/stripes/issues).\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffiretiger-oss%2Fstripes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffiretiger-oss%2Fstripes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffiretiger-oss%2Fstripes/lists"}