{"id":48459125,"url":"https://github.com/layergram/layergram","last_synced_at":"2026-04-07T01:01:30.552Z","repository":{"id":348695652,"uuid":"1198404103","full_name":"layergram/layergram","owner":"layergram","description":"Official open-source Layergram app for local encrypted steganographic messaging.","archived":false,"fork":false,"pushed_at":"2026-04-02T10:39:35.000Z","size":1290,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-03T00:57:08.572Z","etag":null,"topics":["aes-gcm","cross-platform","dart","encryption","end-to-end-encryption","flutter","local-first","offline-first","open-source","privacy","secure-storage","security","steganography","unicode","x25519"],"latest_commit_sha":null,"homepage":"https://layergram.app","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/layergram.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":"2026-04-01T11:50:32.000Z","updated_at":"2026-04-02T13:53:30.000Z","dependencies_parsed_at":null,"dependency_job_id":"384d9e05-73a7-4f04-ab08-f03c45c40254","html_url":"https://github.com/layergram/layergram","commit_stats":null,"previous_names":["layergram/layergram"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/layergram/layergram","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/layergram%2Flayergram","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/layergram%2Flayergram/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/layergram%2Flayergram/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/layergram%2Flayergram/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/layergram","download_url":"https://codeload.github.com/layergram/layergram/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/layergram%2Flayergram/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31495466,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-06T17:22:55.647Z","status":"ssl_error","status_checked_at":"2026-04-06T17:22:54.741Z","response_time":112,"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":["aes-gcm","cross-platform","dart","encryption","end-to-end-encryption","flutter","local-first","offline-first","open-source","privacy","secure-storage","security","steganography","unicode","x25519"],"created_at":"2026-04-07T01:00:49.683Z","updated_at":"2026-04-07T01:01:30.281Z","avatar_url":"https://github.com/layergram.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Layergram\n\n**Privacy-first encrypted messaging — transport agnostic, fully local, zero servers.**\n\nLayergram is the official open-source Layergram app built with Flutter.\nIt lets users encrypt sensitive content locally and share it through **any** existing text-based communication channel — WhatsApp, Telegram, Signal, iMessage, email, social networks, SMS, or any other platform that preserves Unicode text.\n\nMessages are hidden inside ordinary-looking text using zero-width Unicode steganography, making them visually indistinguishable from a normal conversation while keeping the cryptographic workflow fully local to the device.\n\n## Official Project Links\n\n- **Website:** https://layergram.app\n- **GitHub organization:** https://github.com/layergram\n\n## Release and Distribution Model\n\n- This repository contains the public source code for the official Layergram app.\n- Anyone may inspect, compile, modify, and run the app under the terms of the [Apache License 2.0](LICENSE).\n- Official Layergram builds may also be distributed free of charge by Layergram through the Apple App Store, Google Play, and Microsoft Store.\n- The first public open-source release intentionally does **not** ship a web distribution target.\n- This public release ships without premium functionality enabled.\n- Future optional paid add-ons may be developed separately and are **not** part of this repository.\n\n## Supported Platforms\n\n| Platform | Status |\n|----------|--------|\n| Android  | Ready |\n| iOS      | Ready |\n| macOS    | Ready |\n| Windows  | Ready |\n| Linux    | Compilable from source |\n| Web      | Not distributed in this release |\n\n## Key Features\n\n### Security\n- **End-to-end encryption** — X25519 key agreement + AES-GCM-256\n- **Steganographic encoding** — encrypted payloads hidden inside zero-width Unicode characters\n- **App lock** — biometric unlock with PIN fallback support\n- **Secure local storage** — sensitive state protected at rest\n- **Screen protection** — optional privacy shielding where supported\n\n### Core Functionality\n- **Compose and share** encrypted messages over any text-based channel\n- **Decode** received messages by pasting them into the app\n- **Identity management** — create, export, and import public identities via QR code, deep link, or text block\n- **Local chat history** — encrypted archive of sent and received messages\n- **Pin / search / delete** conversations\n- **Self-destructing messages** — optional expiration and delete-after-read\n- **42 languages** included\n\n### Architecture\n- **Capability interfaces** — clean extension points for future optional add-ons\n- **Riverpod** state management\n- **Hive + secure storage** for local persistence\n- **Clear separation of concerns** between crypto, storage, UI, and capability boundaries\n\n## What This Repository Includes\n\n- The public Layergram Flutter application\n- The open **Layergram Message Format (LMF)** specification\n- Local identity, encryption, steganography, and secure storage logic\n- No-op capability implementations for features that are intentionally outside the public repository scope\n\n## What This Repository Does Not Include\n\n- A proprietary messaging network, relay, or backend\n- Hosted user accounts or cloud message storage\n- Closed-source premium implementations or billing logic\n\n## Project Structure\n\n```text\nlib/\n├── core/\n│   ├── capabilities/     # Capability interfaces + no-op stubs\n│   ├── crypto/           # Encryption, key management, message format\n│   ├── domain/           # Domain types (IdentityId, etc.)\n│   ├── security/         # App lock, biometrics, screen protection\n│   └── storage/          # Hive repositories, secure storage\n├── features/\n│   ├── home/             # Chat list, message composer/viewer\n│   ├── settings/         # Settings \u0026 about screens\n│   └── premium/          # Optional entry points kept inactive in the public OSS release\n├── app.dart              # App entry point\n└── main.dart             # Bootstrap\n```\n\n## Capability Interfaces\n\nLayergram uses capability interfaces to keep the public repository clean while preserving extension points for future official add-ons.\n\n| Capability | Description |\n|------------|-------------|\n| `IdentityCapability` | Multi-identity management |\n| `BackupCapability` | Encrypted backup and restore |\n| `CoverGeneratorCapability` | AI-assisted cover message generation |\n| `ChatFoldersCapability` | Custom chat folder organization |\n| `MediaLightCapability` | Lightweight media attachments |\n| `SecureKeyboardCapability` | In-app touch keyboard with multilingual layouts and optional key scrambling |\n\nIn this public repository, these optional capabilities default to **safe no-op implementations**. Any future official paid add-ons will live outside this repository and are intentionally excluded from the public codebase.\n\nA future optional add-on may provide an in-app secure keyboard for touch devices so sensitive input can avoid the system IME and optionally use scrambled key layouts per supported locale. This is intended as defense in depth only: it can reduce exposure to third-party keyboard telemetry and learned suggestions, but it does not protect against a compromised OS, screen recording, abusive accessibility tooling, or direct visual observation.\n\n## Getting Started\n\n### Prerequisites\n- Flutter SDK \u003e= 3.4\n- Dart SDK \u003e= 3.4\n- Platform-specific tooling (Xcode for iOS/macOS, Android SDK, Visual Studio for Windows, Linux toolchain as needed)\n\n### Build and Run\n\n```bash\nflutter pub get\nflutter run\nflutter run -d macos\nflutter run -d windows\nflutter run -d linux\n```\n\n### Validation\n\n```bash\nflutter analyze\nflutter test\n```\n\n### Generate API Docs\n\n```bash\ndart doc\n```\n\n## Specifications\n\n- [Layergram Message Format (LMF)](specs/LAYERGRAM_MESSAGE_FORMAT.md)\n- [Cryptography Export Compliance Notes](specs/CRYPTOGRAPHY_EXPORT_COMPLIANCE.md)\n\n## Contributing\n\nContributions are welcome.\nPlease read [CONTRIBUTING.md](CONTRIBUTING.md) before opening a large feature PR, especially for work that touches cryptography, storage, protocol behavior, or the boundary between the public app and future optional add-ons.\n\n## Security\n\nIf you believe you have found a security vulnerability, **please do not open a public issue**.\nReport it privately to **security@layergram.app** and see [SECURITY.md](SECURITY.md) for the reporting policy.\n\nFor general project information, see https://layergram.app.\n\n## License\n\n### Apache License 2.0\n\nLayergram is released under the [Apache License, Version 2.0](LICENSE).\nYou may use, modify, and redistribute this code — including in commercial and closed-source products — as long as you comply with the license conditions.\n\n### Trademark Notice\n\nThe name **Layergram**, the Layergram logo, the official Layergram store listings, and related brand assets remain the property of **Simone Riccetti**.\nAdditional legal and trademark information is available at https://layergram.app/legal.\nThis repository's open-source license does **not** grant permission to ship your own fork under the Layergram name or branding.\n\n### Forks and Derivative Works\n\nIf you create a fork or derivative application based on this repository, you must:\n\n- Use your own product name, logo, and branding.\n- Clearly disclose that your project is derived from Layergram and is **not** an official Layergram release.\n- Use your own URI scheme and application identifiers unless you have explicit written permission from **Simone Riccetti**. See https://layergram.app/legal for additional legal and trademark guidance.\n\n### URI Scheme\n\nThe custom URI scheme `layergram://` is reserved for official Layergram applications and explicitly authorized interoperable clients.\nForks and derivative projects must use their own URI schemes (for example `yourapp://`) unless they have obtained prior written permission from **Simone Riccetti**. See https://layergram.app/legal for additional legal and trademark guidance.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flayergram%2Flayergram","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flayergram%2Flayergram","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flayergram%2Flayergram/lists"}