mrkeyoor.com_
Sun 27 Sept 03:24 UTC
Dev Toolsevaluationupdated 27 Sept 2026

fx review

fx is a terminal viewer and command-line processor for JSON, YAML, and TOML. It lets you browse nested data in an interactive interface or transform it with JavaScript expressions instead of learning a separate query language.

Verdict

Our fx run installed 58 packages in 30 seconds, built in 32 seconds, and passed all 20 tests in 7 seconds, making it an easy tool to try. Keep it for interactive exploration and JavaScript-shaped transformations, especially when jq syntax slows you down. Use jq or yq for shared automation when language compatibility, strict validation defaults, or a broader format workflow matters more than the TUI.

We ran it

Lab card: what happened when we ran fxScreenshot of fx (fx.wtf)
Install✓ · 30s58 packages
Build✓ · 32s
Tests✓ · 7s20 passed · 0 failed of 20 (go test)
Repo110 files~17,845 lines of source · 3.1 MB · 4 CI workflows · Dockerfile

Answers from our run

Does fx build from source?

Dependencies installed in 30 seconds (58 packages), and the build succeeded in 32 seconds. We cloned commit 6b69712 into a clean Debian container with 3 CPUs and no project-specific setup.

Do fx's tests pass?

Yes: 20 of 20 passed when we ran the project's own test command (go test). Some failures need services or credentials a bare container does not have.

Who should not use fx?

Teams with a large library of jq filters: fx uses JavaScript through goja, so jq programs are not drop-in expressions.

What are the alternatives to fx?

jq, yq, dasel. Our fx run installed 58 packages in 30 seconds, built in 32 seconds, and passed all 20 tests in 7 seconds, making it an easy tool to try.

Setup5/530-second install, 32-second build, and no credentials
Docs5/5Install, TUI keys, expressions, functions, and limits are documented
Community5/520,640 stars with issues and pull requests active in September 2026
Maturity4/539.2.0 is stable, though several terminal edge cases remain open

Who it’s for

Developers who regularly inspect API responses, logs, package files, or Kubernetes output in a terminal.
JavaScript users who find jq's expression language harder to remember than familiar array and object operations.
People who want fuzzy path search, regex search, folding, history, and value printing while exploring nested JSON.
Shell users who need one binary for interactive viewing plus JSON, YAML, and TOML transformations.

Who it’s NOT for

Teams with a large library of jq filters: fx uses JavaScript through goja, so jq programs are not drop-in expressions.
Anyone installing the npm or Deno edition for an interactive viewer: the installation guide says that JavaScript edition only processes JSON in noninteractive mode.
CI jobs that assume default parsing enforces strict JSON: fx accepts comments, trailing commas, Infinity, and NaN unless --strict is used, and open issue 399 asks for empty files to return a nonzero status.
Node.js CLI developers who need the TUI directly after a pipe: open issue 415 reports broken key handling for direct Node stdout on macOS and Ubuntu with v39.2.0.
Operators navigating arrays with millions of items by index: open issue 432 requests a jump-to-index or jump-to-last control because arrow navigation does not cover that case well.

Setup reality

Our sandbox install succeeded in 30 seconds, adding 58 Go packages. The build succeeded in 32 seconds, and all 20 tests passed in 7 seconds. The checkout was 3.1 MB with 110 files and about 17,845 lines of source.

The project needs no account, API key, or background service. The docs offer package managers, a release binary, Docker, go install, and a shell installer. Shell completion for bash, zsh, or fish is optional.

The Go binary supplies the interactive interface. The npm and Deno edition is processing-only. Fx accepts several JavaScript values and relaxed JSON syntax by default, so validation jobs should add --strict. Configuration is through environment variables for sizes, line numbers, mouse input, collapsed nodes, indentation, and themes.

The Go binary combines a TUI with JavaScript expressions

fx 39.2.0 has two useful personalities. Give the Go binary a file or pipe it data without an expression, and it opens an interactive terminal viewer. Add expressions, and it becomes a processor. The viewer folds nested objects, searches with regular expressions, jumps through matching paths, wraps long strings, copies values, and prints a selected value to stdout. That makes it closer to a data browser than a colorized pretty-printer.

The processor uses JavaScript through the embedded goja engine. Input moves through each expression in order, so .name, Object.keys, map, filter, groupBy, and ordinary arrow functions feel familiar to a web developer. Fx adds shortcuts such as @ for mapping and ? for filtering. This is its sharpest advantage over jq for occasional users, and the main incompatibility for teams that already share jq programs.

Three data formats share one browsing and processing tool

Fx reads JSON, YAML, and TOML, while its streaming mode handles concatenated JSON and line-delimited records. The --slurp option collects a stream into an array when a transformation needs the whole set. Large integers beyond JavaScript's safe integer range become BigInt values, and the docs show arithmetic with the n suffix. Those choices cover many API responses, configuration files, and structured logs without a conversion command first.

Default parsing is intentionally forgiving. Comments, trailing commas, Infinity, and NaN can pass even though they fall outside strict JSON. The --strict flag rejects those values. That flexibility is pleasant during inspection and risky when a shell script is supposed to validate an artifact. Open issue 399 also asks fx to return a nonzero status for an empty or whitespace-only file, so strict pipelines should test the exact invalid inputs they care about.

What happened when we ran it

Our sandbox installed fx in 30 seconds and brought in 58 Go packages. The build completed in 32 seconds. The full Go test command then passed 20 tests with 0 failures in 7 seconds. The project occupied 3.1 MB at checkout, with 110 files and roughly 17,845 lines of source. Nothing in those three steps required credentials, a network service, or platform setup beyond the supplied Go environment.

Our test method used commit 6b69712 in a fresh unprivileged Debian container with 3 CPUs and 8 GB of RAM. The repository scan found 4 CI workflow files and a Dockerfile. It did not find a directory literally named tests, because the Go test files sit with the packages they exercise. The clean 20-of-20 result covers the available command we ran; it is not a performance claim about browsing very large documents.

The small codebase is part of the appeal. A 7-second green test step is easy to place in a contributor loop, and a 32-second build is manageable on the modest box we used. Fx still relies on terminal behavior that unit tests cannot settle for every shell, OS, and upstream command. Current issue reports are most useful when they describe those boundaries rather than the parser core.

The npm edition drops the interactive interface

The installation page lists Homebrew, Snap, Scoop, Pacman, pkg, Go, Docker, Nix, release binaries, and a shell installer for the Go program. Windows users are directed to go install. Bash, zsh, and fish completion are available through fx --comp. None of these routes needs an account or daemon, so trying the native tool is a low-commitment change to a terminal setup.

Npm and Deno are a different build. The docs state that the JavaScript edition works only in noninteractive mode and provides JSON processing. That distinction matters in GitHub Actions, where npx fx is convenient, but it cannot demonstrate the TUI that defines the native program. If the goal is folding a large response and jumping through paths, install the Go binary rather than judging fx through its npm package.

Two open terminal cases can interrupt real workflows

Issue 415 reports that piping direct Node.js stdout into fx v39.2.0 displayed the JSON but left keyboard input writing over the interface on macOS and Ubuntu 22. The reporter's file-then-cat workaround behaved correctly. We did not reproduce that UI path in our noninteractive sandbox, so it remains a specific open report, not a blanket claim that Node pipes fail everywhere. A Node CLI team should try its real pipe before adopting fx for support work.

Issue 432 describes another concrete limit: reaching the final item or a chosen index in an array with millions of entries. The current key list has top, bottom, paging, siblings, search, and history controls, while the request asks for direct array-index navigation. Search may solve many cases, but an operator who knows only 500000 and needs that item should test the experience before relying on the viewer.

A recent push matters more than the older release date

GitHub recorded the last push on September 26, 2026, even though 39.2.0 was released on November 12, 2025. The repository had 20,640 stars, 18 open issues, and 11 open pull requests when checked. Issue 432 was updated on September 26, and the latest commit landed that day. The release tag is older than the current code, but the push and issue activity show ongoing maintenance.

Fx is easiest to recommend as a personal inspection tool. It passed all 20 tests in our run, installs without a service, and turns a nested response into something you can search with both eyes and keys. Shared production scripts need a different test: does the team want JavaScript expressions, relaxed parsing unless flagged strict, and fx-specific shortcuts? If the answer is no, jq's established language or yq's wider format handling is the cleaner standard.

Alternatives

ProjectWhat it isPick it when
jqThe established command-line JSON processor with its own compact query language.pick this instead when scripts, teammates, and deployment images already standardize on jq filters.
yq gh↗A portable processor for YAML, JSON, XML, CSV, TOML, HCL, and properties files.pick this instead when YAML editing and format conversion matter more than an interactive JSON browser.
daselA single CLI for querying and changing several structured-data formats.pick this instead when one consistent selector syntax across JSON, YAML, TOML, XML, INI, HCL, KDL, and CSV is the priority.

What people are saying

  1. [velocity-scout] antonmedv/fx
  2. [producthunt] EP–2350 FX–MIC

Sources

  1. fx repository and README
  2. fx getting started
  3. fx installation guide
  4. fx advanced usage
  5. fx 39.2.0 release
  6. Empty input exit-status request
  7. Node.js pipe TUI report
  8. Long-array navigation request

More dev tools reviews

qmk_firmware · foundry · terminal-browser · fearless_simd · devops-exercises · scriptc · the whole board →