{"id":21017881,"url":"https://github.com/bouvens/zero-packer","last_synced_at":"2026-04-28T10:07:22.638Z","repository":{"id":111457205,"uuid":"97023647","full_name":"bouvens/zero-packer","owner":"bouvens","description":"Encoding strings with any set of characters","archived":false,"fork":false,"pushed_at":"2024-03-08T16:08:00.000Z","size":3031,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-01T07:21:56.449Z","etag":null,"topics":["decoding","encoder-decoder","encoding","javascript","react"],"latest_commit_sha":null,"homepage":"https://bouvens.github.io/zero-packer/","language":"JavaScript","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/bouvens.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}},"created_at":"2017-07-12T15:28:00.000Z","updated_at":"2022-05-07T11:31:06.000Z","dependencies_parsed_at":null,"dependency_job_id":"4290cba0-39b7-4cac-9bd8-05e914fb4626","html_url":"https://github.com/bouvens/zero-packer","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/bouvens/zero-packer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bouvens%2Fzero-packer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bouvens%2Fzero-packer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bouvens%2Fzero-packer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bouvens%2Fzero-packer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bouvens","download_url":"https://codeload.github.com/bouvens/zero-packer/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bouvens%2Fzero-packer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32375788,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-28T09:24:15.638Z","status":"ssl_error","status_checked_at":"2026-04-28T09:24:15.071Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["decoding","encoder-decoder","encoding","javascript","react"],"created_at":"2024-11-19T10:22:33.392Z","updated_at":"2026-04-28T10:07:22.623Z","avatar_url":"https://github.com/bouvens.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Zero ~~Width~~ Packer\n\n### [Demo](https://bouvens.github.io/zero-packer/)\n\nThis experiment is made with [state-control ![npm][npm-badge]][npm]\n\n[npm-badge]: https://img.shields.io/npm/v/state-control.png?style=flat-square\n\n[npm]: https://www.npmjs.org/package/state-control\n\n## What's this?\n\nThis coder transforms Unicode strings into new ones consisting of any set of symbols (from 3 to 36 ones). You can\nalso, decode a resulting string.\n\n## How can I use the Zero-Width Packer?\n\nThe packer can be used for steganography with zero-width symbols or as a non-safe coder.\n\n## Encoding and decoding\n\n[Core code](https://github.com/bouvens/zero-packer/blob/master/src/coder.js) is quite small:\n\n```javascript\nexport function encodeToSymbols(stringForEncoding, symbols, leader) {\n  const base = Math.min(symbols.length - 1, 36) // 16\n  const charCodes = stringForEncoding // '«test»'\n    .split('') // ['«', 't', 'e', 's', 't', '»']\n    .map((char) =\u003e char // '«'\n      .charCodeAt(0) // 171\n      .toString(base) // 'ab'\n      .split('') // ['a', 'b']\n      .map((numberInBase) =\u003e {\n        const index = parseInt(numberInBase, base) // 10\n        return symbols[index] // 'a'\n      })\n      .join('')) // 'ab'\n\n  return `${leader}${charCodes.join(symbols[base])}` // '0abg74g65g73g74gbb'\n}\n\nexport function decodeFromSymbols(stringForDecoding, symbols, leader) {\n  const base = Math.min(symbols.length - 1, 36) // 16\n\n  return stringForDecoding // '0abg74g65g73g74gbb'\n    .slice(leader.length) // 'abg74g65g73g74gbb'\n    .split(symbols[base]) // ['ab', '74', '65', '73', '74', 'bb']\n    .map((encodedNumber) =\u003e {\n      const asciiNumber = encodedNumber // 'ab'\n        .split('') // ['a', 'b']\n        .map((char) =\u003e { // 'a'\n          const index = symbols.indexOf(char) // 10\n          return index.toString(base) // 'a'\n        })\n        .join('') // 'ab'\n      const asciiCode = parseInt(asciiNumber, base) // 171\n      return String.fromCharCode(asciiCode) // '«'\n    })\n    .join('') // '«test»'\n}\n```\n\nThe functions convert every character in an input string to its Unicode number. The number is converted to a\nnumber that is base _N_. _N_ is equal to the number of characters for encoding minus 1. We have minus 1 because the last character is\nused as a separator. Then each number is mapped to a corresponding symbol for encoding.\n\n## How to run locally\n\nRun in console:\n\n```Shell\ngit clone git@github.com:bouvens/zero-packer.git\ncd zero-packer\nnpm install\nnpm run start\n```\n\nAlso, there's a script for a local build:\n\n```Shell\nnpm run build\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbouvens%2Fzero-packer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbouvens%2Fzero-packer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbouvens%2Fzero-packer/lists"}