{
  "slug": "hex-codec",
  "name": "gizza-ai/hex-codec",
  "version": "0.1.0",
  "title": "Hex Encoder & Decoder — Text to Hex & Hex to Text — gizza.ai",
  "description": "Encode text to hex and decode hex back to text in your browser. Delimiters, uppercase, and 0x prefixes; tolerant decoding accepts any format. Free and private.",
  "tags": [
    "hex",
    "hex encode",
    "hex decode",
    "text to hex",
    "hex to text",
    "hexadecimal",
    "encoder",
    "decoder",
    "hex converter",
    "bytes"
  ],
  "category": "encoding",
  "urls": {
    "page": "https://gizza.ai/tools/hex-codec/",
    "markdown": "https://gizza.ai/tools/hex-codec/index.md",
    "descriptor": "https://gizza.ai/tools/hex-codec/tool.json",
    "deep_link_example": "https://gizza.ai/tools/hex-codec/?input=Hello%2C%20world%21&mode=encode&format=text&delimiter=none&uppercase=true&prefix=none"
  },
  "cli": "gizza tool hex-codec \"Hello, world!\"",
  "tool": {
    "description": "Encode text or bytes to a hexadecimal string, or decode a hex string back to text. Use mode='encode' (default, e.g. 'Hi' -> '4869') or mode='decode' (e.g. '4869' -> 'Hi'). delimiter inserts a separator between bytes when encoding ('none' default, 'space', 'colon', 'dash', 'comma', 'newline'); uppercase emits A-F caps; prefix adds '0x' or '\\x' before each byte. On decode, format='text' (default) renders UTF-8 (errors on non-UTF-8 bytes) and format='bytes' shows the raw bytes as a plain hex string. Decoding is case-insensitive and ignores whitespace, the common delimiters (: - ,), and 0x / \\x prefixes, so any encoded form round-trips back.",
    "parameters": {
      "additionalProperties": false,
      "properties": {
        "delimiter": {
          "default": "none",
          "description": "Separator placed between bytes when encoding: 'none' (default), 'space', 'colon' (:), 'dash' (-), 'comma', or 'newline'. Decoding ignores any of these.",
          "enum": [
            "none",
            "space",
            "colon",
            "dash",
            "comma",
            "newline"
          ],
          "type": "string"
        },
        "format": {
          "default": "text",
          "description": "On decode, how to render the recovered bytes: 'text' (default) is UTF-8 and errors if the bytes aren't valid UTF-8; 'bytes' shows them as a plain lowercase hex byte string (use for binary data). Ignored on encode.",
          "enum": [
            "text",
            "bytes"
          ],
          "type": "string"
        },
        "input": {
          "description": "The text to encode (read as UTF-8), or the hexadecimal string to decode.",
          "type": "string"
        },
        "mode": {
          "default": "encode",
          "description": "Direction: 'encode' (default) turns text into hex, 'decode' turns hex back into text.",
          "enum": [
            "encode",
            "decode"
          ],
          "type": "string"
        },
        "prefix": {
          "default": "none",
          "description": "Marker placed before each byte when encoding: 'none' (default), '0x' (e.g. 0x48), or '\\x' (e.g. \\x48). Decoding strips 0x and \\x automatically.",
          "enum": [
            "none",
            "0x",
            "\\x"
          ],
          "type": "string"
        },
        "uppercase": {
          "default": false,
          "description": "When true, emit uppercase A-F hex digits while encoding (default false, lowercase). Decoding is case-insensitive.",
          "type": "boolean"
        }
      },
      "required": [
        "input"
      ],
      "type": "object"
    }
  }
}