{ "name": "it-tools", "version": "2026.10.25", "description": "Collection of handy online tools for developers, with great UX. ", "keywords": [ "converter", "developer-productivity", "developer-tools", "frontend", "productivity", "tool", "tools", "vuejs", "website" ], "license": "GNU GPLv3", "author": "Corentin Th (https://corentin.tech)", "repository": { "type": "git", "url": "https://github.com/sharevb/it-tools" }, "type": "module", "scripts": { "dev": "vite", "build": "vite build", "preview": "vite preview --port 5050", "test:unit": "vitest", "test:e2e": "playwright test", "coverage": "vitest run --coverage", "typecheck": "vue-tsc --noEmit -p tsconfig.vitest.json --composite false", "lint": "oxlint src", "lint:fix": "oxlint src --fix", "fmt": "oxfmt src", "fmt:check": "oxfmt --check src", "script:create:tool": "node scripts/create-tool.mjs", "script:create:ui": "hygen generator ui-component", "release": "node ./scripts/release.mjs", "script:extract:desc": "node ./scripts/extract-tools-desc.mjs", "script:extract:strings": "node ./scripts/extract-tools-strings.mjs", "script:update:git-templates": "node ./scripts/update-git-templates.mjs", "script:translate-missing": "node ./scripts/translate-missings.mjs -e ./locales/en.yml -t ./locales/*.yml", "vue-i18n-extract": "vue-i18n-extract report --vueFiles 'src/**/*.?(ts|vue)' --languageFiles 'locales/*.yml'", "precommit": "pnpm install --ignore-scripts && pnpm lint:fix && pnpm typecheck" }, "dependencies": { "@boxyhq/saml20": "^1.16.0", "@chenfengyuan/vue-barcode": "^2.0.2", "@codemirror/lang-cpp": "^6.0.3", "@codemirror/lang-css": "^6.3.1", "@codemirror/lang-go": "^6.0.1", "@codemirror/lang-html": "^6.4.11", "@codemirror/lang-javascript": "^6.2.5", "@codemirror/lang-json": "^6.0.2", "@codemirror/lang-markdown": "^6.5.0", "@codemirror/lang-php": "^6.0.2", "@codemirror/lang-python": "^6.2.1", "@codemirror/lang-sql": "^6.10.0", "@codemirror/lang-xml": "^6.1.0", "@codemirror/lang-yaml": "^6.1.3", "@codemirror/language": "^6.12.4", "@codemirror/state": "^6.7.0", "@codemirror/theme-one-dark": "^6.1.3", "@codemirror/view": "^6.43.5", "@colordx/core": "^5.5.0", "@date-fns/utc": "^2.1.1", "@dice-roller/rpg-dice-roller": "^5.5.1", "@faker-js/faker": "^10.5.0", "@ffmpeg/core": "0.12.10", "@ffmpeg/ffmpeg": "^0.12.15", "@finegym/fitness-calc": "^1.0.1", "@fontsource/open-sans": "^5.3.0", "@fontsource/varela-round": "^5.3.0", "@fortawesome/fontawesome-svg-core": "^7.3.0", "@fortawesome/free-solid-svg-icons": "^7.3.0", "@fortawesome/vue-fontawesome": "^3.3.1", "@github/paste-markdown": "^1.5.3", "@guolao/vue-monaco-editor": "^1.6.0", "@guyplusplus/turndown-plugin-gfm": "^1.0.7", "@huggingface/transformers": "3.7.6", "@iplookup/country-extra": "^1.0.20260711", "@it-tools/bip39": "^0.0.4", "@it-tools/oggen": "^1.3.0", "@jsonquerylang/jsonquery": "^5.1.1", "@kenjiuno/decompressrtf": "^0.1.4", "@kenjiuno/msgreader": "^1.28.0", "@langfreak/convert-layout": "^0.11.2", "@lezer/highlight": "^1.2.3", "@mdit/plugin-align": "^0.16.0", "@noble/ciphers": "^1.3.0", "@plausible-analytics/tracker": "^0.4.6", "@regexper/render": "^1.0.0", "@resvg/resvg-wasm": "^2.6.2", "@sindresorhus/slugify": "^3.0.0", "@skeepit/unicode-to-gsm7": "^1.0.0", "@tabler/icons-vue": "^3.44.0", "@tesseract.js-data/chi_sim": "^1.0.0", "@tesseract.js-data/eng": "^1.0.0", "@tiptap/core": "^3.31.3", "@tiptap/extension-color": "^3.31.3", "@tiptap/extension-gapcursor": "^3.31.3", "@tiptap/extension-highlight": "^3.31.3", "@tiptap/extension-table": "^3.31.3", "@tiptap/extension-text-align": "^3.31.3", "@tiptap/extension-text-style": "^3.31.3", "@tiptap/extensions": "^3.31.3", "@tiptap/pm": "^3.31.3", "@tiptap/starter-kit": "^3.31.3", "@tiptap/vue-3": "^3.31.3", "@toon-format/toon": "^4.1.1", "@types/haversine": "^1.1.8", "@types/html-to-text": "^9.0.4", "@types/swagger-ui-dist": "^3.30.6", "@unicode/unicode-15.1.0": "^1.6.17", "@vicons/material": "^0.12.0", "@vicons/tabler": "^0.12.0", "@vueuse/core": "^10.11.1", "@vueuse/head": "^1.3.1", "@vueuse/integrations": "^14.3.0", "@vueuse/router": "^10.11.1", "@xmldom/xmldom": "^0.8.15", "@xterm/xterm": "^5.5.0", "@younestouati/playing-cards-standard-deck": "^6.0.1", "@zxcvbn-ts/core": "^3.0.4", "@zxcvbn-ts/language-common": "^3.0.4", "@zxcvbn-ts/language-en": "^3.0.2", "@zxing/library": "^0.23.0", "a11y-color-contrast": "^0.2.0", "abort-signal-polyfill": "^1.0.0", "aircodes": "^1.3.16", "ajv": "^8.20.0", "ajv-errors": "^3.0.0", "ansi-styles": "^6.2.3", "ansible-vault": "^1.3.0", "apache-md5": "^1.1.8", "arr-diff": "^4.0.0", "bcryptjs": "^3.0.3", "bech32": "^2.0.0", "big.js": "^7.0.1", "braces": "^3.0.3", "bwip-js": "^4.11.2", "byte-data": "^19.0.1", "change-case": "^5.4.4", "chardet": "^2.2.0", "chart.js": "^4.5.1", "chartjs-plugin-zoom": "^2.2.0", "chatgpt-prompt-splitter": "^1.0.5", "chinesegen": "^0.3.3", "cidr-tools": "^13.0.4", "citation-formatter": "^1.0.1", "codemirror": "^6.0.2", "colord": "^2.10.0", "composerize": "^1.7.6", "composeverter": "^1.7.5", "convert": "^7.0.2", "countries-and-timezones": "^3.9.0", "countries-db": "^1.2.0", "country-code-lookup": "^0.1.5", "crc": "^4.3.2", "creditcard": "^0.1.3", "creditcard-generator": "^0.0.7", "cron-parser": "5.10.0", "cron-validator": "^1.4.0", "cronstrue": "^3.24.0", "cropperjs": "^1.6.3", "cross-spawn": "^7.0.6", "crypto-es": "^3.1.3", "csstoxpath": "^2.0.0", "curlconverter": "^4.12.0", "currency-codes-ts": "^3.0.0", "damerau-levenshtein": "^1.0.8", "data-guardian": "^1.1.4", "date-fns": "^4.4.0", "date-fns-tz": "^3.2.0", "date-holidays": "^3.34.1", "decimal.js": "^10.6.0", "decomposerize": "^1.4.4", "detect-csv": "^1.1.0", "diceware-generator": "^3.0.1", "diceware-wordlist-en": "^1.0.0", "diceware-wordlist-en-eff": "^1.0.1", "diceware-wordlist-jp": "^1.0.1", "diceware-wordlist-ru": "^1.0.0", "diceware-wordlist-sp": "^1.0.0", "diceware-wordlist-swe": "^1.0.1", "dmarc-report-parser": "^0.1.5", "dns-query": "^0.11.2", "docker2kube": "^0.0.14", "dom-to-image-more": "^3.10.0", "dompurify": "^3.4.16", "duration-fns": "^3.0.2", "echarts": "^6.1.0", "email-bounce-parser-browser": "^1.1.0", "email-normalizer": "^1.0.0", "emojilib": "^4.0.3", "epubjs": "^0.3.93", "es-toolkit": "^1.49.0", "esm-potrace-wasm": "^0.4.4", "ethers": "^6.17.0", "event-cron-parser": "^1.0.37", "exif-be-gone": "^1.5.1", "exifreader": "^4.46.0", "fanger": "0.3.1", "fast-json-patch": "^3.1.1", "fast-xml-parser": "^5.11.1", "fast_array_intersect": "^1.1.0", "fflate": "^0.8.3", "figlet": "^1.11.0", "figue": "^1.2.0", "file-type": "^22.0.1", "flatten-anything": "^4.0.2", "flexsearch": "^0.8.212", "fuse.js": "^7.4.2", "gcoord": "^1.0.7", "generate-schema": "^2.6.0", "get-timezone-offset": "^1.0.5", "ghostscript-wasm-esm": "^1.0.1", "gtin-validator": "^1.0.0", "hash-wasm": "^4.12.0", "haversine": "^1.1.1", "heic-convert": "^2.1.0", "hex-array": "^1.0.0", "highlight.js": "^11.11.1", "html-to-text": "^10.0.0", "htmlfy": "^1.0.2", "htmlparser2": "^10.1.0", "hyparquet": "^1.26.2", "hyparquet-compressors": "^1.1.1", "ibantools": "^4.5.4", "ical-generator": "^11.0.0", "ical.js": "^2.2.1", "iconv-lite": "^0.7.3", "idb-keyval": "^6.3.0", "image-compare-viewer": "^1.6.2", "image-in-browser": "^3.5.3", "image-to-ascii-art": "^0.0.4", "ip-address": "^10.7.2", "ip-bigint": "^9.0.6", "ip-cidr": "^4.0.2", "ip-matching": "^2.1.2", "ip-regex": "^5.0.0", "is-cidr": "^7.0.0", "is-ip": "^5.0.1", "isbn3": "^2.0.9", "iso-639-1": "^3.1.6", "jasypt": "^1.0.7", "javascript-obfuscator": "^5.4.7", "javastack.js": "^1.0.3", "jks-js": "^1.1.7", "jose": "5.10.0", "jpeg-quality-estimator": "^1.0.1", "jq-wasm": "^1.0.1", "js-base64": "^3.9.4", "js-beautify": "^2.0.3", "js-tiktoken": "^1.0.21", "jsbarcode": "^3.12.3", "json-analyzer": "^1.2.2", "json-editor-vue": "^0.19.2", "json-to-ts": "^2.1.0", "json5": "^2.2.3", "jsonar-mod": "^1.9.0", "jsonlint-mod": "^1.7.6", "jsonpath": "^1.3.0", "jsonrepair": "^3.15.0", "jsonschema": "^1.5.0", "jsonschema-protobuf": "^1.0.2", "jsstack.js": "^2.0.0", "jsvat-next": "^3.0.4", "jszip": "^3.10.1", "jwt-decode": "^4.0.0", "katex": "^0.17.0", "korean-unpacker": "^1.0.3", "langs": "^2.0.0", "leaflet": "^1.9.4", "libmime": "^5.4.1", "libphonenumber-js": "^1.13.8", "lodash": "^4.18.1", "long": "^5.3.2", "lorem-ipsum-japanese": "^1.0.1", "luhn-js": "^1.1.2", "luxon": "^3.7.2", "markdown-docx": "^1.7.0", "markdown-it": "^14.3.0", "markdown-it-mark": "^4.0.0", "markdown-it-sanitizer": "^0.4.3", "markdown-it-sub": "^2.0.0", "markdown-it-sup": "^2.0.0", "markdown-table-prettify": "^4.1.0", "marked": "^10.0.0", "mathjs": "^15.2.0", "md-editor-v3": "^7.0.0", "mdt2json": "^1.1.0", "memorystream": "^0.3.1", "merge-anything": "^6.0.6", "mermaid": "^12.0.0", "mime-types": "^3.0.2", "mitex-wasm": "^0.2.5", "monaco-editor": "^0.55.1", "morsee": "^1.0.10", "msgpackr": "^2.0.4", "naive-ui": "^2.44.1", "nanoid": "^6.0.0", "nanoid-dictionary": "^5.0.0", "nestify-anything": "^4.0.1", "netmask": "^2.1.1", "netstack.js": "^2.1.4", "nginx-config-formatter": "^1.4.5", "niceware": "^4.0.0", "node-emv": "^1.0.23", "node-forge": "^1.4.0", "openai-chat-tokens": "^0.2.8", "openpgp": "^6.3.1", "otpauth-migration": "^1.0.0", "oui-data": "^1.1.571", "pako": "^3.0.1", "parse-duration": "^2.1.8", "parse-torrent": "^11.0.21", "paseto-ts": "^2.0.6", "path2d-polyfill": "^3.2.2", "pdf-signature-reader": "^1.4.3", "pdfjs-dist": "^4.10.38", "picomatch": "^4.0.5", "pinia": "^3.0.4", "podletjs": "^1.0.2", "port-numbers": "^8.0.32", "postal-mime": "^2.7.5", "potrace": "^2.1.8", "pp-qr-code": "^0.6.4", "prettier": "^3.9.9", "pretty-ms": "^9.3.0", "proj4": "^2.20.9", "proj4-list": "^1.0.4", "properties": "^1.2.1", "punycode": "^2.3.1", "pythonstack.js": "^1.0.2", "qpdf-wasm-esm-embedded": "^1.1.1", "qrcode": "^1.5.4", "qrcode-parser": "^2.1.3", "qrcode-terminal-nooctal": "^0.12.1", "qrcode-vue3": "^1.7.1", "quicktype-core": "^26.0.0", "randexp": "^0.5.3", "regex": "^6.1.0", "rekcod": "^3.0.0", "remove-markdown": "^0.6.4", "resistor-data": "^2.0.0", "riimut": "^0.9.1", "roboto-base64": "^0.1.2", "rtf-stream-parser": "^3.8.1", "run-pace": "^2.2.1", "safe-license-list": "^0.1.2", "sandybox": "^1.1.2", "sanitize-html": "^2.17.7", "screenfull": "^5.2.0", "shamirs-secret-sharing": "^2.0.1", "shiki": "1.29.2", "silly-password-generator": "^1.0.29", "slashes": "^3.0.12", "smol-toml": "^1.9.0", "sms-segments-calculator": "^1.2.0", "spdx-satisfies": "^6.0.0", "sponge-case": "^2.0.3", "sql-formatter": "^15.8.2", "sshpk": "^1.18.0", "staveless-futhark": "^0.6.1", "stopword": "^3.1.5", "stringify-object": "^7.0.0", "svgo": "^3.3.5", "swagger-ui-dist": "^5.32.8", "swap-case": "^3.0.3", "tesseract.js": "^7.0.0", "tesseract.js-core": "7.0.0", "tick-time": "^1.0.1", "tidy-url": "^1.18.3", "title-case": "^4.3.2", "to-double-quotes": "^4.0.0", "to-single-quotes": "^4.0.0", "turndown": "^7.2.4", "ua-parser-js": "^2.0.10", "ulid": "^3.0.2", "unicode-emoji-json": "^0.9.0", "unique-random": "^4.0.0", "units-converter": "^1.0.3", "unixcrypt-browser": "^2.0.4", "unpdf": "^1.8.0", "unplugin-auto-import": "^21.0.0", "utf8": "^3.0.0", "uuid": "^14.0.1", "vanilla-jsoneditor": "^3.13.0", "vite-plugin-sitemap": "^0.8.2", "vue": "^3.5.39", "vue-color-wheel": "^0.1.1", "vue-i18n": "^11.4.6", "vue-loading-overlay": "^6.0.6", "vue-markdown-render": "^2.3.1", "vue-router": "^5.1.0", "vue-shadow-dom": "^4.2.0", "vue-tsc": "^3.3.10", "vue3-flip-countdown": "^0.1.6", "vue3-katex": "^0.8.1", "vuedraggable": "^4.1.0", "vuex": "^4.1.0", "webcrack": "^2.16.0", "webcrypto-liner-shim": "^1.4.8", "webp-converter-browser": "^1.0.4", "xlsx": "https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz", "xml-formatter": "^3.7.0", "xml-js": "^1.6.11", "xpath": "^0.0.34", "xpath-to-css": "^1.2.0", "xslt-processor": "^3.4.0", "yaml": "^2.9.0" }, "devDependencies": { "@iconify-json/mdi": "^1.2.3", "@iconify-json/tabler": "^1.2.35", "@intlify/unplugin-vue-i18n": "^11.2.4", "@playwright/test": "^1.62.0", "@tsconfig/node24": "^24.0.4", "@types/arr-diff": "^4.0.3", "@types/big.js": "^7.0.0", "@types/codemirror": "^5.60.17", "@types/damerau-levenshtein": "^1.0.2", "@types/emscripten": "^1.41.5", "@types/har-format": "^1.2.16", "@types/hex-array": "^1.0.2", "@types/js-beautify": "^1.14.3", "@types/jsdom": "^28.0.0", "@types/jsonpath": "^0.2.4", "@types/leaflet": "^1.9.21", "@types/libmime": "^5.3.0", "@types/luxon": "^3.7.2", "@types/markdown-it": "^14.0.0", "@types/memorystream": "^0.3.4", "@types/mime-types": "^3.0.1", "@types/morsee": "^1.0.2", "@types/nanoid-dictionary": "^4.2.3", "@types/netmask": "^2.0.6", "@types/node": "^24.13.3", "@types/node-forge": "^1.3.14", "@types/picomatch": "^4.0.3", "@types/potrace": "^2.1.5", "@types/punycode": "^2.1.4", "@types/qrcode": "^1.5.6", "@types/sanitize-html": "^2.16.1", "@types/spdx-satisfies": "^6.0.0", "@types/sshpk": "^1.17.5", "@types/stopword": "^2.0.3", "@types/stringify-object": "^4.0.5", "@types/turndown": "^5.0.6", "@types/ua-parser-js": "^0.7.39", "@types/unist": "^3.0.3", "@types/utf8": "^3.0.3", "@vitejs/plugin-vue": "^6.0.7", "@vitejs/plugin-vue-jsx": "^5.1.6", "@vue/compiler-sfc": "^3.5.39", "@vue/runtime-dom": "^3.5.39", "@vue/test-utils": "^2.4.11", "@vue/tsconfig": "^0.9.1", "axios": "^1.18.1", "commander": "^15.0.0", "consola": "^3.4.2", "dotenv": "^17.4.2", "fast-glob": "^3.3.3", "hygen": "^6.2.11", "jsdom": "^29.1.1", "less": "^4.6.7", "oxfmt": "^0.57.0", "oxlint": "^1.72.0", "oxlint-tsgolint": "^7.0.2001", "rollup-plugin-visualizer": "^7.0.1", "semver": "^7.8.5", "typescript": "~6.0.3", "unocss": "^66.7.4", "unocss-preset-scrollbar": "^4.0.0", "unplugin-icons": "^23.0.1", "unplugin-vue-components": "^32.1.0", "unplugin-vue-markdown": "^32.0.0", "vite": "^8.1.3", "vite-plugin-node-polyfills": "^0.28.0", "vite-plugin-pwa": "^1.3.0", "vite-plugin-wasm": "^3.6.0", "vite-svg-loader": "^5.1.1", "vitest": "^4.1.11", "vue-i18n-extract": "^2.0.7", "workbox-build": "^7.4.1", "workbox-window": "^7.4.1", "zx": "^8.8.5" }, "devEngines": { "packageManager": { "name": "pnpm", "version": "12.6.0", "onFail": "download" }, "runtime": { "name": "node", "version": "24.x", "onFail": "download" } }, "engines": { "node": "24.x" }, "scarfSettings": { "enabled": false } }