A collection of general-purpose data transformation and processing CLI utilities maintained under the nlink-jp organisation.
Each tool is a standalone project with its own repository, release cycle, and documentation. This umbrella repository tracks them together as git submodules and hosts shared conventions.
| Tool | Language | Description |
|---|---|---|
| json-to-table | Go | Format a JSON array into text, Markdown, HTML, CSV, PNG, or Slack Block Kit tables |
| rex | Go | Extract fields from text using named regex capture groups — outputs JSON |
| sdate | Go | Calculate timestamps using Splunk-like relative time modifiers (e.g., -1d@d) |
| csv-to-json | Go | Convert CSV data to a JSON array |
| csv-editor | Go + React (Wails) | CSV/TSV viewer & editor GUI for macOS/Windows — ARM64-native, handles UTF-8/Shift_JIS/CP932 |
| json-to-sqlite | Go | Load JSON data into SQLite with automatic schema inference and evolution |
| lookup | Go | Enrich JSON/JSONL streams by matching fields against CSV/JSON data sources |
| markdown-viewer | Go | Single-binary local Markdown viewer — renders GFM, Mermaid, and syntax-highlighted code in the browser |
| pptx-to-markdown | Python | Convert .pptx presentations to structured Markdown for LLM analysis |
| json-filter | Go | Extract, validate, prettify, and repair JSON from arbitrary text streams |
| jstats | Go | SPL-style stats aggregations for JSON streams — count, avg, p95, stdev, values, and more |
| jviz | Go | Visualize JSON arrays as interactive charts in the browser — bar, line, pie, table with live SSE updates |
| eml-to-jsonl | Go | Parse .eml files and output structured JSONL — headers, body, attachments |
| msg-to-jsonl | Go | Parse Outlook .msg files and output structured JSONL — same schema as eml-to-jsonl |
| cclaude | Bash | Containerized Claude Code — run Claude Code in an isolated container with project isolation |
| mcp-guardian | Go | MCP governance proxy — zero-dependency single binary for tool call auditing, constraint learning, and loop detection |
- Pipe-friendly: stdout is data, stderr is diagnostics. Every tool reads from stdin and writes to stdout.
- Unix composable: output in plain text or JSON; designed to work with
jq,grep,xargs, and each other. - Single binary: no runtime dependencies; download and run.
- Minimal surface: each tool does one thing well.
All tools use a unified Makefile with consistent targets:
make build # Build for the current platform → dist/<binary>
make build-all # Cross-compile for all platforms → dist/<binary>-<goos>-<goarch>[.exe]
make package # Build and create .zip archives → dist/<binary>-<version>-<goos>-<goarch>.zip
make test # Run the test suite
make clean # Remove dist/Target platforms: linux/amd64, linux/arm64, darwin/amd64, darwin/arm64, windows/amd64.
Note for
json-to-sqlite: this tool depends ongo-sqlite3(CGO). Linux and Windows cross-compilation uses Podman (or Docker) containers.Note for
pptx-to-markdown: this is a Python project managed withuv. It does not usemake; useuv syncto install dependencies anduv run pytestto run tests.
See CONVENTIONS.md for coding, documentation, and release standards that apply across all tools in this series.
- Create the repository under
nlink-jp/. - Follow CONVENTIONS.md from the start.
- Add it as a submodule here:
git submodule add git@github.com:nlink-jp/<tool>.git - Add a row to the table above.