{"id":51288284,"url":"https://github.com/junhey/json-toolkit","last_synced_at":"2026-06-30T08:02:12.903Z","repository":{"id":366965080,"uuid":"1278041153","full_name":"junhey/json-toolkit","owner":"junhey","description":"JSON Toolkit - A powerful JSON toolbox built with Rust + Tauri. Format, minify, sort, decode, JSONPath, tree view, table view, diff, schema validation, CSV conversion.","archived":false,"fork":false,"pushed_at":"2026-06-24T03:28:31.000Z","size":110,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-24T04:23:09.915Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","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/junhey.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-06-23T12:08:47.000Z","updated_at":"2026-06-24T03:28:35.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/junhey/json-toolkit","commit_stats":null,"previous_names":["junhey/json-toolkit"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/junhey/json-toolkit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/junhey%2Fjson-toolkit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/junhey%2Fjson-toolkit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/junhey%2Fjson-toolkit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/junhey%2Fjson-toolkit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/junhey","download_url":"https://codeload.github.com/junhey/json-toolkit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/junhey%2Fjson-toolkit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34957627,"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-06-30T02:00:05.919Z","response_time":92,"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":[],"created_at":"2026-06-30T08:02:11.681Z","updated_at":"2026-06-30T08:02:12.892Z","avatar_url":"https://github.com/junhey.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ⚡ JSON Toolkit\n\nA powerful multi-platform JSON toolbox built with **Rust + Tauri 2.0 + React**. One Rust core, every platform — desktop, web, mobile, browser extension, and mini program.\n\n**Live Demo**: [https://junhey.github.io/json-toolkit/](https://junhey.github.io/json-toolkit/)\n\n## Features\n\n10 core JSON tools, all powered by a shared Rust core:\n\n| Tool | Description | Web | Desktop | Extension | Mini Program |\n|------|-------------|:---:|:-------:|:---------:|:------------:|\n| **Formatter** | Beautify JSON with configurable indent | ✅ | ✅ | ✅ | ✅ |\n| **Minifier** | Compress JSON, remove all whitespace | ✅ | ✅ | ✅ | ✅ |\n| **Sorter** | Sort by key or value, ascending/descending | ✅ | ✅ | ✅ | ✅ |\n| **Decoder** | Base64 / Base64URL / URL / Unicode encode \u0026 decode | ✅ | ✅ | ✅ | ✅ |\n| **JSONPath** | Query JSON with JSONPath expressions | ✅ | ✅ | ✅ | ✅ |\n| **Tree View** | Collapsible interactive JSON tree browser | ✅ | ✅ | ✅ | — |\n| **Table View** | Flatten JSON arrays/objects to tables | ✅ | ✅ | ✅ | — |\n| **Diff** | Compare two JSON objects, highlight changes | ✅ | ✅ | ✅ | — |\n| **Schema Validator** | Validate JSON against JSON Schema | ✅ | ✅ | — | — |\n| **CSV Converter** | Convert between JSON and CSV/TSV | ✅ | ✅ | ✅ | ✅ |\n\n## Platform Support\n\n| Platform | Status | Tech | How to Get |\n|----------|--------|------|------------|\n| **Web** | ✅ Deployed | Vite + React + WASM | [Open in browser](https://junhey.github.io/json-toolkit/) |\n| **macOS** | ✅ Ready | Tauri 2.0 | `pnpm build:tauri` → `.dmg` / `.app` |\n| **Windows** | ✅ Ready | Tauri 2.0 | CI builds `.msi` / `.exe` on tag push |\n| **Linux** | ✅ Ready | Tauri 2.0 | CI builds `.deb` / `.AppImage` on tag push |\n| **Android** | ✅ Configured | Tauri Mobile | CI builds `.apk` (see [setup](#android-ios)) |\n| **iOS** | ✅ Configured | Tauri Mobile | CI builds `.ipa` (see [setup](#android-ios)) |\n| **Chrome Extension** | ✅ Ready | WXT + React + WASM | Load unpacked (see [setup](#chrome-extension)) |\n| **WeChat Mini Program** | ✅ Ready | Taro 4 + React | Import to WeChat DevTools (see [setup](#wechat-mini-program)) |\n\n## Architecture\n\n```\n                         ┌─────────────┐\n                         │  json-core  │  (Rust library)\n                         │  10 tools   │\n                         └──────┬──────┘\n                                │\n              ┌─────────────────┼─────────────────┐\n              │                 │                  │\n       ┌──────▼──────┐  ┌───────▼───────┐  ┌──────▼──────┐\n       │   WASM      │  │    Tauri      │  │  Pure JS    │\n       │ (wasm-pack) │  │  (native)     │  │ (fallback)  │\n       └──────┬──────┘  └───────┬───────┘  └──────┬──────┘\n              │                 │                  │\n      ┌───────┴───────┐  ┌─────┴──────┐    ┌──────┴──────┐\n      │               │  │            │    │             │\n ┌────▼────┐  ┌───────▼──┐ │ ┌────────▼──┐ │ ┌──────────▼──┐\n │ Web SPA │  │ Chrome   │ │ │ macOS App │ │ │ Mini Program│\n │ (Vite)  │  │ Extension│ │ │ Win/Linux │ │ │ (Taro)      │\n └─────────┘  └──────────┘ │ │ Android   │ │ └─────────────┘\n                           │ │ iOS       │ │\n              ┌────────────┘ └───────────┘ │\n              └─ Mobile uses Tauri native ─┘\n```\n\n**Key design**: The Rust `json-core` crate compiles to both WASM (for web/extension) and native (for Tauri desktop/mobile). A platform adapter auto-detects the environment and routes calls accordingly. The mini program uses a pure JS fallback since WASM support is limited in that environment.\n\n## Project Structure\n\n```\njson-toolkit/\n├── crates/json-core/        # Shared Rust core (10 JSON tools + WASM bindings)\n├── src-tauri/               # Tauri desktop + mobile app\n│   ├── src/\n│   │   ├── main.rs          # Entry point\n│   │   ├── lib.rs           # Tauri app setup\n│   │   └── commands.rs      # 12 Tauri commands wrapping json-core\n│   ├── Cargo.toml           # Tauri dependencies\n│   ├── tauri.conf.json      # Tauri config (desktop + mobile)\n│   └── capabilities/        # Tauri 2.0 capability configs\n├── web/                     # Web app (Vite + React + TailwindCSS)\n│   ├── src/\n│   │   ├── App.tsx          # Main app with sidebar + tool routing\n│   │   ├── tools/           # 10 tool components\n│   │   ├── lib/\n│   │   │   ├── adapter.ts   # Platform adapter (WASM vs Tauri)\n│   │   │   ├── types.ts     # Shared TypeScript types\n│   │   │   ├── tools.ts     # Tool metadata + categories\n│   │   │   └── i18n.ts      # Chinese/English translations\n│   │   ├── components/      # Shared UI components\n│   │   ├── store.ts         # Zustand state (theme, lang, history)\n│   │   └── wasm/            # Generated WASM output (gitignored)\n│   ├── vite.config.ts\n│   └── package.json\n├── extension/               # Chrome Extension (WXT + React + WASM)\n│   ├── entrypoints/\n│   │   ├── popup/           # 400×500 popup with 4 quick tools\n│   │   ├── sidepanel/       # Full side panel with all 9 tools\n│   │   ├── background.ts    # Service worker\n│   │   └── content.ts       # Auto-detect JSON on pages\n│   ├── utils/wasm.ts        # WASM loader via chrome.runtime\n│   ├── wasm/                # Copied WASM files (gitignored)\n│   ├── wxt.config.ts        # WXT config with manifest\n│   └── package.json\n├── miniprogram/             # WeChat Mini Program (Taro 4 + React)\n│   ├── src/\n│   │   ├── pages/\n│   │   │   ├── index/       # Main page (tool grid + input/output)\n│   │   │   ├── result/      # Result display page\n│   │   │   └── about/       # About page\n│   │   ├── utils/\n│   │   │   └── jsonTools.ts # Pure JS implementation (7 tools)\n│   │   ├── app.ts           # App entry\n│   │   ├── app.config.ts    # Pages + tabBar config\n│   │   └── app.css          # Global styles\n│   ├── config/index.ts      # Taro build config\n│   ├── project.config.json  # WeChat DevTools config\n│   └── package.json\n├── .github/workflows/\n│   ├── ci.yml               # Rust tests + web build (on push/PR)\n│   ├── deploy-web.yml       # Deploy to GitHub Pages (on push to main)\n│   ├── build-desktop.yml    # Build macOS/Win/Linux (on tag push)\n│   ├── build-mobile.yml     # Build Android/iOS (on tag push)\n│   └── build-extension.yml  # Build Chrome Extension (on tag push)\n├── Cargo.toml               # Rust workspace root\n├── package.json             # pnpm workspace root (all scripts)\n├── pnpm-workspace.yaml      # Workspace: web + extension + miniprogram\n└── rust-toolchain.toml      # Rust toolchain config\n```\n\n## Getting Started\n\n### Prerequisites\n\n- **Rust** 1.75+ (`rustup`)\n- **Node.js** 20+ and **pnpm** 10+\n- **wasm-pack** (`curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh`)\n- **Android Studio** (for Android builds only)\n- **Xcode** (for iOS builds only, macOS only)\n- **WeChat DevTools** (for mini program only)\n\n### Quick Start\n\n```bash\n# Clone\ngit clone https://github.com/junhey/json-toolkit.git\ncd json-toolkit\n\n# Install dependencies\npnpm install\n\n# Build WASM core (required before first run)\npnpm wasm:build\n\n# Run web dev server\npnpm dev:web          # → http://localhost:5173\n\n# Run Tauri desktop dev (macOS)\npnpm dev:tauri        # → opens desktop window\n\n# Run tests\npnpm test:rust        # → 37 Rust unit tests\n```\n\n## Platform Guide\n\n### Web\n\nAlready deployed to GitHub Pages: [https://junhey.github.io/json-toolkit/](https://junhey.github.io/json-toolkit/)\n\n```bash\n# Dev\npnpm dev:web\n\n# Build for production\npnpm build:web\n\n# Build for GitHub Pages (uses /json-toolkit/ base path)\nGITHUB_PAGES=true pnpm --filter web build\n```\n\nDeployment is automatic — pushing to `main` triggers the `deploy-web.yml` workflow.\n\n### Desktop (macOS / Windows / Linux)\n\n```bash\n# Dev (macOS)\npnpm dev:tauri\n\n# Build for current platform\npnpm build:tauri\n# Output: src-tauri/target/release/bundle/\n\n# Cross-compile (macOS only)\npnpm build:tauri -- --target aarch64-apple-darwin  # Apple Silicon\npnpm build:tauri -- --target x86_64-apple-darwin   # Intel\n```\n\n**CI builds**: Push a `v*` tag to trigger automatic builds for all desktop platforms:\n\n```bash\ngit tag v0.1.0\ngit push origin v0.1.0\n# → GitHub Actions builds .dmg (macOS), .msi (Windows), .deb (Linux)\n```\n\n**Linux prerequisites**:\n```bash\nsudo apt install libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf\n```\n\n### Android / iOS\n\nTauri Mobile uses the same React frontend and Rust core, packaged as a native mobile app.\n\n**One-time setup**:\n\n```bash\n# Android: Install Android Studio + NDK + set ANDROID_HOME\n# https://tauri.app/start/prerequisites/#android\n\n# iOS: Install Xcode (macOS only)\n# https://tauri.app/start/prerequisites/#ios\n\n# Initialize mobile projects (generates src-tauri/gen/)\npnpm tauri android init\npnpm tauri ios init\n```\n\n**Development**:\n\n```bash\n# Android dev (requires Android emulator or device)\npnpm dev:android\n\n# iOS dev (requires iOS Simulator or device)\npnpm dev:ios\n```\n\n**Build**:\n\n```bash\n# Build Android APK\npnpm build:android\n# Output: src-tauri/gen/android/app/build/outputs/apk/\n\n# Build iOS (requires Apple Developer account for device builds)\npnpm build:ios\n# Output: src-tauri/gen/apple/build/Release-iphoneos/\n```\n\n**CI builds**: The `build-mobile.yml` workflow runs on tag push. Android builds on Ubuntu, iOS builds on macOS. Both use `continue-on-error: true` since mobile builds may fail without proper signing keys.\n\n### Chrome Extension\n\nBuilt with [WXT](https://wxt.dev) framework — modern WebExtension development with Vite.\n\n**Features**:\n- **Popup** (400×500): Quick access to Format, Minify, Sort, JSONPath\n- **Side Panel**: Full workspace with all 9 tools\n- **Content Script**: Auto-detects JSON on web pages, shows badge\n- **Powered by WASM**: Uses the same Rust core compiled to WASM\n\n**Build**:\n\n```bash\n# Build WASM + copy to extension\npnpm wasm:build\npnpm wasm:copy-ext\n\n# Build extension\npnpm build:extension\n# Output: extension/.output/chrome-mv3/\n```\n\n**Load in Chrome**:\n\n1. Run `pnpm build:extension`\n2. Open `chrome://extensions/`\n3. Enable **Developer mode** (top right)\n4. Click **Load unpacked**\n5. Select the `extension/.output/chrome-mv3/` directory\n6. The JSON Toolkit icon appears in your toolbar\n\n**Dev mode**:\n\n```bash\npnpm dev:extension    # → WXT dev mode with hot reload\n```\n\n**CI builds**: Push a `v*` tag to build and package the extension as a `.zip` for Chrome Web Store submission.\n\n### WeChat Mini Program\n\nBuilt with [Taro 4](https://taro.jd.com) — cross-platform mini program framework.\n\n**Features**:\n- **7 tools**: Format, Minify, Sort, Decode, JSONPath, Validate, CSV\n- **Pure JS implementation** (WASM not directly available in MP runtime)\n- **TabBar navigation**: Tools + About\n- **Chinese UI** optimized for mobile\n\n\u003e **Note**: WeChat Mini Programs have limited WASM support. This implementation uses a pure JavaScript fallback that handles all core operations. To integrate WASM, see [WeChat WASM docs](https://developers.weixin.qq.com/miniprogram/dev/framework/client-sdk/wasm.html).\n\n**Build**:\n\n```bash\n# Install miniprogram dependencies\npnpm --filter miniprogram install\n\n# Build for WeChat\npnpm build:miniprogram\n# Output: miniprogram/dist/\n```\n\n**Import to WeChat DevTools**:\n\n1. Run `pnpm build:miniprogram`\n2. Open **WeChat DevTools** (微信开发者工具)\n3. Select **Import project** (导入项目)\n4. Choose the `miniprogram/` directory\n5. Set your AppID (or use test AppID)\n6. The project loads with the built files in `miniprogram/dist/`\n\n**Dev mode**:\n\n```bash\npnpm dev:miniprogram    # → Watch mode, rebuilds on file change\n```\n\n## CI/CD\n\n| Workflow | Trigger | What it does |\n|----------|---------|-------------|\n| `ci.yml` | Push to main/PR | Rust tests + WASM build + Web build verification |\n| `deploy-web.yml` | Push to main | Build web → Deploy to GitHub Pages |\n| `build-desktop.yml` | Tag `v*` push | Build macOS (.dmg), Windows (.msi), Linux (.deb) |\n| `build-mobile.yml` | Tag `v*` push | Build Android (.apk) + iOS (.ipa) |\n| `build-extension.yml` | Tag `v*` push | Build Chrome Extension (.zip) |\n\n**Release flow**:\n\n```bash\n# 1. Update version in package.json and src-tauri/tauri.conf.json\n# 2. Commit and push\ngit commit -am \"release: v0.2.0\"\ngit push\n\n# 3. Create tag\ngit tag v0.2.0\ngit push origin v0.2.0\n\n# 4. GitHub Actions builds all platforms automatically\n# → Draft release with all artifacts attached\n```\n\n## Tech Stack\n\n| Layer | Technology |\n|-------|-----------|\n| **Core** | Rust, serde_json, jsonpath_lib, jsonschema, csv, base64 |\n| **Desktop/Mobile** | Tauri 2.0 (macOS, Windows, Linux, Android, iOS) |\n| **Web** | Vite, React 18, TypeScript, TailwindCSS |\n| **Extension** | WXT, React, Chrome Manifest V3 |\n| **Mini Program** | Taro 4, React |\n| **Bridge** | wasm-pack, wasm-bindgen (Web + Extension) |\n| **State** | Zustand with localStorage persistence |\n| **CI/CD** | GitHub Actions (5 workflows) |\n\n## Scripts Reference\n\n| Command | Description |\n|---------|------------|\n| `pnpm wasm:build` | Build Rust core to WASM |\n| `pnpm wasm:copy-ext` | Copy WASM files to extension dir |\n| `pnpm dev:web` | Web dev server (port 5173) |\n| `pnpm dev:tauri` | Tauri desktop dev |\n| `pnpm dev:android` | Android dev (needs SDK) |\n| `pnpm dev:ios` | iOS dev (needs Xcode) |\n| `pnpm dev:extension` | Chrome extension dev with HMR |\n| `pnpm dev:miniprogram` | Mini program dev with watch |\n| `pnpm build:web` | Build web for production |\n| `pnpm build:tauri` | Build desktop app |\n| `pnpm build:android` | Build Android APK |\n| `pnpm build:ios` | Build iOS app |\n| `pnpm build:extension` | Build Chrome extension |\n| `pnpm build:miniprogram` | Build WeChat mini program |\n| `pnpm test:rust` | Run 37 Rust unit tests |\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjunhey%2Fjson-toolkit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjunhey%2Fjson-toolkit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjunhey%2Fjson-toolkit/lists"}