{"id":38946291,"url":"https://github.com/chinmay29hub/stegmoji","last_synced_at":"2026-01-17T16:01:47.273Z","repository":{"id":317649542,"uuid":"1065157797","full_name":"chinmay29hub/stegmoji","owner":"chinmay29hub","description":"Stegmoji is a client-side steganography tool. Encode secret messages into emoji or text using invisible Unicode characters (variation selectors, zero-width joiners). Supports three embedding modes (Tail, Interleaved, ZWJ-aware), optional compression, AES-GCM encryption, and full Unicode analysis/visualization","archived":false,"fork":false,"pushed_at":"2025-11-30T09:48:21.000Z","size":1283,"stargazers_count":5,"open_issues_count":4,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-02T14:38:53.845Z","etag":null,"topics":["client-side","compression","cryptography","data-visualization","javascript","nextjs","open-source","privacy","react","security","steganography","unicode","web-app","web-crypto"],"latest_commit_sha":null,"homepage":"https://chinmay29hub-stegmoji.vercel.app","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/chinmay29hub.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","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":"2025-09-27T06:55:20.000Z","updated_at":"2025-10-29T09:58:44.000Z","dependencies_parsed_at":"2025-10-26T11:28:33.949Z","dependency_job_id":null,"html_url":"https://github.com/chinmay29hub/stegmoji","commit_stats":null,"previous_names":["chinmay29hub/stegmoji"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/chinmay29hub/stegmoji","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chinmay29hub%2Fstegmoji","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chinmay29hub%2Fstegmoji/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chinmay29hub%2Fstegmoji/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chinmay29hub%2Fstegmoji/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/chinmay29hub","download_url":"https://codeload.github.com/chinmay29hub/stegmoji/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chinmay29hub%2Fstegmoji/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28511852,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T13:38:16.342Z","status":"ssl_error","status_checked_at":"2026-01-17T13:37:44.060Z","response_time":85,"last_error":"SSL_read: 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":["client-side","compression","cryptography","data-visualization","javascript","nextjs","open-source","privacy","react","security","steganography","unicode","web-app","web-crypto"],"created_at":"2026-01-17T16:01:47.194Z","updated_at":"2026-01-17T16:01:47.261Z","avatar_url":"https://github.com/chinmay29hub.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Stegmoji 🔒\n\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://www.producthunt.com/products/stegmoji?embed=true\u0026utm_source=badge-featured\u0026utm_medium=badge\u0026utm_source=badge-stegmoji\" target=\"_blank\"\u003e\u003cimg src=\"https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=1026962\u0026theme=light\u0026t=1760602846282\" alt=\"Stegmoji - Hide\u0026#0032;secret\u0026#0032;messages\u0026#0032;in\u0026#0032;plain\u0026#0032;text\u0026#0032;using\u0026#0032;invisible\u0026#0032;Unicode\u0026#0046; | Product Hunt\" style=\"width: 250px; height: 54px;\" width=\"250\" height=\"54\" /\u003e\u003c/a\u003e\n\u003c/div\u003e\n\n\u003cbr\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"public/og-image.png\" alt=\"Hide secret messages in plain text with Unicode steganography - Free online tool\" /\u003e\n\u003c/div\u003e\n\nA modern web application for Unicode steganography - hiding secret messages inside text using invisible Unicode characters.\n\n## Features\n\n- **Three Embedding Modes**: Tail, Interleaved, and ZWJ-aware embedding\n- **Compression**: DEFLATE compression to fit more data in shorter texts\n- **Encryption**: AES-GCM encryption with PBKDF2 key derivation\n- **Unicode Analysis**: Comprehensive text analysis and visualization\n- **Privacy-First**: All processing happens locally in your browser\n- **Modern UI**: Built with Next.js, Tailwind CSS, and shadcn/ui components\n- **Dark Mode**: Default dark theme with light/dark mode toggle\n- **Responsive Design**: Optimized for mobile and desktop devices\n\n## Quick Start\n\n### Prerequisites\n\n- Node.js 18+ \n- pnpm (recommended) or npm\n\n### Installation\n\n1. **Clone the repository**\n   ```bash\n   git clone https://github.com/chinmay29hub/stegmoji.git\n   cd stegmoji\n   ```\n\n2. **Install dependencies**\n   ```bash\n   pnpm install\n   ```\n\n3. **Start the development server**\n   ```bash\n   pnpm dev\n   ```\n\n4. **Open your browser**\n   Navigate to [http://localhost:3000](http://localhost:3000)\n\n## Usage\n\n### Encoding Messages\n\n1. Go to the **Encode** tab\n2. Enter your secret message in the \"Hidden Message\" field\n3. Enter cover text in the \"Cover Text\" field\n4. Choose embedding mode:\n   - **Tail**: Appends data at the end (unlimited capacity)\n   - **Interleaved**: Inserts between codepoints (limited by text length)\n   - **ZWJ-aware**: Inserts between grapheme clusters (preserves emoji)\n5. Optionally enable compression and/or encryption\n6. Click \"Encode Message\" to generate the steganographic text\n\n### Decoding Messages\n\n1. Go to the **Decode** tab\n2. Paste the encoded text\n3. Choose detection mode (Auto-detect recommended)\n4. Enter passphrase if the message was encrypted\n5. Click \"Decode Message\" to extract the hidden content\n\n### Analyzing Text\n\n1. Go to the **Scan** tab\n2. Paste any text to analyze\n3. View detailed Unicode analysis including:\n   - Invisible character detection\n   - Steganography indicators\n   - Grapheme cluster breakdown\n   - Normalization effects\n\n## Technical Details\n\n### Steganography Method\n\nStegmoji uses Unicode Variation Selectors to embed data:\n- `U+FE0E` (VS15) represents bit 0\n- `U+FE0F` (VS16) represents bit 1\n\nThese characters are invisible and don't affect text rendering.\n\n### Security Features\n\n- **Compression**: DEFLATE algorithm reduces payload size\n- **Encryption**: AES-GCM with 256-bit keys\n- **Key Derivation**: PBKDF2 with SHA-256 (100,000 iterations)\n- **Authentication**: GCM provides built-in message authentication\n\n### Embedding Modes\n\n1. **Tail Mode**: Appends all variation selectors at the end\n   - ✅ Unlimited capacity\n   - ⚠️ Easily detectable by scanning text endings\n\n2. **Interleaved Mode**: Inserts one bit after each Unicode codepoint\n   - ✅ Distributes data throughout text\n   - ⚠️ Limited by number of characters\n\n3. **ZWJ-Aware Mode**: Inserts one bit after each grapheme cluster\n   - ✅ Preserves emoji and complex Unicode sequences\n   - ⚠️ Limited by number of visual characters\n\n## Deployment\n\n### Deploy to Vercel\n\n1. **Push to GitHub**\n   ```bash\n   git add .\n   git commit -m \"Initial commit\"\n   git push origin main\n   ```\n\n2. **Deploy with Vercel**\n   - Go to [vercel.com](https://vercel.com)\n   - Import your GitHub repository\n   - Deploy with default settings (no environment variables needed)\n   - Your app will be available at: `https://your-project-name.vercel.app`\n\n3. **Custom Domain** (optional)\n   - Add your domain in Vercel dashboard\n   - Configure DNS records as instructed\n\n### Alternative Deployment\n\nThe app can be deployed to any platform that supports Next.js:\n- Netlify\n- Railway\n- Render\n- Self-hosted with Docker\n\n## Development\n\n### Project Structure\n\n```\nstegmoji/\n├── app/                    # Next.js App Router pages\n│   ├── layout.jsx          # Root layout with navigation\n│   ├── page.jsx            # Home page\n│   ├── encode/page.jsx     # Encoding interface\n│   ├── decode/page.jsx     # Decoding interface\n│   ├── scan/page.jsx       # Unicode analysis\n│   ├── about/page.jsx      # Documentation\n│   └── sitemap.xml/        # SEO sitemap\n├── components/             # React components\n│   ├── ui/                 # Reusable UI components\n│   ├── theme-provider.jsx  # Dark/light mode provider\n│   └── client-layout.jsx   # Client-side layout\n├── lib/                    # Core functionality\n│   ├── steganography.js   # Main steganography logic\n│   ├── compression.js     # DEFLATE compression\n│   ├── encryption.js      # AES-GCM encryption\n│   ├── unicode.js         # Unicode utilities\n│   ├── use-dark-mode.js   # Dark mode hook\n│   └── utils.js           # Helper functions\n├── __tests__/              # Comprehensive test suite\n├── .github/                # GitHub templates and workflows\n└── public/                 # Static assets\n```\n\n### Key Dependencies\n\n- **Next.js 14**: React framework with App Router\n- **Tailwind CSS**: Utility-first CSS framework with dark mode support\n- **Radix UI**: Accessible component primitives\n- **Framer Motion**: Smooth animations and transitions\n- **grapheme-splitter**: Unicode grapheme cluster splitting\n- **pako**: DEFLATE compression library\n- **Web Crypto API**: Browser-native encryption\n- **Jest**: Testing framework with comprehensive test coverage\n- **ESLint**: Code linting and formatting\n\n### Browser Compatibility\n\n- Chrome 60+\n- Firefox 55+\n- Safari 11+\n- Edge 79+\n\nRequires modern browsers with Web Crypto API support.\n\n## Security Considerations\n\n### Limitations\n\n- **Platform Compatibility**: Some platforms strip invisible Unicode characters\n- **Detection**: Steganography can be detected by analyzing character patterns\n- **Normalization**: Text normalization may remove hidden data\n- **Not Cryptographically Secure**: This is steganography, not cryptography\n\n### Best Practices\n\n1. **Test on Target Platform**: Verify that invisible characters survive copy-paste\n2. **Use Strong Passphrases**: For encrypted messages, use long, random passphrases\n3. **Be Aware of Detection**: Hidden data can be discovered through analysis\n4. **Consider Legal Implications**: Ensure compliance with local laws\n\n## Contributing\n\nWe welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details on how to get started.\n\n### Quick Start for Contributors\n\n1. **Fork the repository** and clone your fork\n2. **Create a feature branch**: `git checkout -b feature/your-feature-name`\n3. **Install dependencies**: `pnpm install`\n4. **Start development**: `pnpm dev`\n5. **Make your changes** and test them\n6. **Submit a pull request**\n\n### Types of Contributions\n\n- 🐛 **Bug fixes** - Fix issues and improve stability\n- ✨ **New features** - Add new functionality\n- 📚 **Documentation** - Improve docs and examples\n- 🧪 **Tests** - Add or improve test coverage (currently 95%+)\n- 🚀 **Performance** - Optimize code and improve speed\n- 🎨 **UI/UX** - Improve user interface and experience\n- ♿ **Accessibility** - Make the app more accessible\n- 🔒 **Security** - Fix security vulnerabilities\n- 🌙 **Theme improvements** - Enhance dark/light mode experience\n\n### Development Setup\n\n```bash\n# Clone your fork\ngit clone https://github.com/YOUR_USERNAME/stegmoji.git\ncd stegmoji\n\n# Install dependencies\npnpm install\n\n# Start development server\npnpm dev\n\n# Run tests with coverage\npnpm test --coverage\n\n# Run linter\npnpm lint\n\n# Build for production\npnpm build\n```\n\n### Getting Help\n\n- 📖 **Documentation**: Check our [Contributing Guide](CONTRIBUTING.md)\n- 💬 **Discussions**: Use GitHub Discussions for questions\n- 🐛 **Issues**: Create an issue for bugs or feature requests\n- 🔒 **Security**: See [SECURITY.md](SECURITY.md) for security issues\n\n### Code of Conduct\n\nThis project follows the [Contributor Covenant Code of Conduct](CODE_OF_CONDUCT.md). By participating, you agree to uphold this code.\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Disclaimer\n\nThis tool is for educational and legitimate purposes only. Users are responsible for complying with applicable laws and regulations. The authors are not responsible for any misuse of this software.\n\n## Performance\n\nThis application is optimized for performance:\n- **No obfuscation overhead** - Clean, fast JavaScript\n- **Optimized builds** - Source maps disabled in production\n- **Efficient algorithms** - Fast steganography operations\n- **Modern browser APIs** - Native Web Crypto and compression\n- **Dark mode optimization** - Instant theme switching without flash\n- **Responsive animations** - Smooth transitions with Framer Motion\n\n## Support\n\n### Community Support\n\n- 🐛 **Bug Reports**: Use our [bug report template](.github/ISSUE_TEMPLATE/bug_report.yml)\n- ✨ **Feature Requests**: Use our [feature request template](.github/ISSUE_TEMPLATE/feature_request.yml)\n- ❓ **Questions**: Use our [question template](.github/ISSUE_TEMPLATE/question.yml)\n- 💬 **Discussions**: Use GitHub Discussions for general questions\n- 📖 **Documentation**: Check the About page and source code\n\n### Security Issues\n\n- 🔒 **Security Vulnerabilities**: See [SECURITY.md](SECURITY.md) for reporting security issues\n- 📧 **Private Reporting**: Email chinmaysonawane57@gmail.com for sensitive issues\n\n### Contributing\n\n- 📝 **Contributing Guide**: See [CONTRIBUTING.md](CONTRIBUTING.md) for detailed guidelines\n- 🤝 **Code of Conduct**: See [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) for community guidelines\n- 🔄 **Pull Requests**: Use our [PR template](.github/pull_request_template.md)\n\n---\n\n**Stegmoji** - Hide messages in plain sight with Unicode steganography 🔒\n\n*Live Demo: [https://chinmay29hub-stegmoji.vercel.app](https://chinmay29hub-stegmoji.vercel.app)*","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchinmay29hub%2Fstegmoji","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchinmay29hub%2Fstegmoji","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchinmay29hub%2Fstegmoji/lists"}