{"id":15035154,"url":"https://github.com/ajaxy/telegram-tt","last_synced_at":"2025-05-15T05:08:24.607Z","repository":{"id":37596696,"uuid":"356231211","full_name":"Ajaxy/telegram-tt","owner":"Ajaxy","description":"Telegram Web A, GPL v3","archived":false,"fork":false,"pushed_at":"2025-05-14T16:27:18.000Z","size":1198018,"stargazers_count":2864,"open_issues_count":178,"forks_count":761,"subscribers_count":44,"default_branch":"master","last_synced_at":"2025-05-15T05:08:15.197Z","etag":null,"topics":["javascript","telegram","weba","webapp","webz"],"latest_commit_sha":null,"homepage":"https://web.telegram.org/a","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Ajaxy.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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,"zenodo":null}},"created_at":"2021-04-09T10:29:32.000Z","updated_at":"2025-05-15T04:00:24.000Z","dependencies_parsed_at":"2024-05-03T15:09:07.993Z","dependency_job_id":"d93ea1fe-92a9-4d03-a80c-0b9d12007933","html_url":"https://github.com/Ajaxy/telegram-tt","commit_stats":{"total_commits":3740,"total_committers":16,"mean_commits":233.75,"dds":"0.025401069518716568","last_synced_commit":"60892cccbc9ee6388d6a5150e2a0aa4de1395d7c"},"previous_names":[],"tags_count":94,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ajaxy%2Ftelegram-tt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ajaxy%2Ftelegram-tt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ajaxy%2Ftelegram-tt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ajaxy%2Ftelegram-tt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Ajaxy","download_url":"https://codeload.github.com/Ajaxy/telegram-tt/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254276464,"owners_count":22043868,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["javascript","telegram","weba","webapp","webz"],"created_at":"2024-09-24T20:27:40.926Z","updated_at":"2025-05-15T05:08:19.594Z","avatar_url":"https://github.com/Ajaxy.png","language":"TypeScript","readme":"# Telegram Web A\n\nThis project won the first prize 🥇 at [Telegram Lightweight Client Contest](https://contest.com/javascript-web-3) and now is an official Telegram client available to anyone at [web.telegram.org/a](https://web.telegram.org/a).\n\nAccording to the original contest rules, it has nearly zero dependencies and is fully based on its own [Teact](https://github.com/Ajaxy/teact) framework (which re-implements React paradigm). It also uses a custom version of [GramJS](https://github.com/gram-js/gramjs) as an MTProto implementation.\n\nThe project incorporates lots of technologically advanced features, modern Web APIs and techniques: WebSockets, Web Workers and WebAssembly, multi-level caching and PWA, voice recording and media streaming, cryptography and raw binary data operations, optimistic and progressive interfaces, complicated CSS/Canvas/SVG animations, reactive data streams, and so much more.\n\nFeel free to explore, provide feedback and contribute.\n\n## Local setup\n\n```sh\nmv .env.example .env\n\nnpm i\n```\n\nObtain API ID and API hash on [my.telegram.org](https://my.telegram.org) and populate the `.env` file.\n\n## Dev mode\n\n```sh\nnpm run dev\n```\n\n### Invoking API from console\n\nStart your dev server and locate GramJS worker in console context.\n\nAll constructors and functions available in global `GramJs` variable.\n\nRun `npm run gramjs:tl full` to get access to all available Telegram requests.\n\nExample usage:\n``` javascript\nawait invoke(new GramJs.help.GetAppConfig())\n```\n\n## Electron\n\nElectron allows building a native application that can be installed on Windows, macOS, and Linux.\n\n#### NPM scripts\n\n- `npm run dev:electron`\n\nRun Electron in development mode, concurrently starts 3 processes with watch for changes: main (main Electron process), renderer (FE code) and Webpack for Electron (compiles main Electron process from TypeScript).\n\n- `npm run electron:webpack`\n\nThe main process code for Electron, which includes preload functionality, is written in TypeScript and is compiled using the `webpack-electron.config.js` configuration to generate JavaScript code.\n\n- `npm run electron:build`\n\nPrepare renderer (FE code) build, compile Electron main process code, install and build native dependencies, is used before packaging or publishing.\n\n- `npm run electron:staging`\n\nCreate packages for macOS, Windows and Linux in `dist-electron` folders with `APP_ENV` as `staging` (allows to open DevTools, includes sourcemaps and does not minify built JavaScript code), can be used for manual distribution and testing packaged application.\n\n- `npm run electron:production`\n\nCreate packages for macOS, Windows and Linux in `dist-electron` folders with `APP_ENV` as `production` (disabled DevTools, minified built JavaScript code), can be used for manual distribution and testing packaged application.\n\n- `npm run deploy:electron`\n\nCreate packages for macOS, Windows and Linux in `dist-electron` folder and publish release to GitHub, which allows supporting autoupdates. See [GitHub release workflow](#github-release) for more info.\n\n#### Code signing on MacOS\n\nTo sign the code of your application, follow these steps:\n\n- Install certificates from `/certs` folder to `login` folder of your Keychain.\n- Download and install `Developer ID - G2` certificate from the [Apple PKI](https://www.apple.com/certificateauthority/) page.\n- Under the Keychain application, go to the private key associated with your developer certificate. Then do `key \u003e Get Info \u003e Access Control`. Down there, make sure your application (Xcode) is in the list `Always allow access by these applications` and make sure `Confirm before allowing access` is turned on.\n- A valid and appropriate identity from your keychain will be automatically used when you publish your application.\n\nMore info in the [official documentation](https://www.electronjs.org/docs/latest/tutorial/code-signing).\n\n#### Notarize on MacOS\n\nApplication notarization is done automatically in [electron-builder](https://github.com/electron-userland/electron-builder/) module, which requires `APPLE_ID` and `APPLE_APP_SPECIFIC_PASSWORD` environment variables to be passed.\n\nHow to obtain app-specific password:\n\n- Sign in to [appleid.apple.com](appleid.apple.com).\n- In the \"Sign-In and Security\" section, select \"App-Specific Passwords\".\n- Select \"Generate an app-specific password\" or select the Add button, then follow the steps on your screen.\n\n#### GitHub release\n\n##### GitHub access token\n\nIn order to publish new release, you need to add GitHub access token to `.env`. Generate a GitHub access token by going to https://github.com/settings/tokens/new. The access token should have the repo scope/permission. Once you have the token, assign it to an environment variable:\n\n```\n# .env\nGH_TOKEN=\"{YOUR_TOKEN_HERE}\"\n```\n\n##### Publish settings\n\nPublish configuration in `src/electron/config.yml` config file allows to set GitHub repository owner/name.\n\n##### Release workflow\n\n- Run `npm run electron:publish`, which will create new draft release and upload build artefacts to newly reated release. Version of created release will be the same as in `package.json`.\n- Once you are done, publish the release. GitHub will tag the latest commit.\n\n### Dependencies\n* [GramJS](https://github.com/gram-js/gramjs) ([MIT License](https://github.com/gram-js/gramjs/blob/master/LICENSE))\n* [pako](https://github.com/nodeca/pako) ([MIT License](https://github.com/nodeca/pako/blob/master/LICENSE))\n* [cryptography](https://github.com/spalt08/cryptography) ([Apache License 2.0](https://github.com/spalt08/cryptography/blob/master/LICENSE))\n* [emoji-data](https://github.com/iamcal/emoji-data) ([MIT License](https://github.com/iamcal/emoji-data/blob/master/LICENSE))\n* [twemoji-parser](https://github.com/twitter/twemoji-parser) ([MIT License](https://github.com/twitter/twemoji-parser/blob/master/LICENSE.md))\n* [rlottie](https://github.com/Samsung/rlottie) ([MIT License](https://github.com/Samsung/rlottie/blob/master/COPYING))\n* [opus-recorder](https://github.com/chris-rudmin/opus-recorder) ([Various Licenses](https://github.com/chris-rudmin/opus-recorder/blob/master/LICENSE.md))\n* [qr-code-styling](https://github.com/kozakdenys/qr-code-styling) ([MIT License](https://github.com/kozakdenys/qr-code-styling/blob/master/LICENSE))\n* [croppie](https://github.com/Foliotek/Croppie) ([MIT License](https://github.com/Foliotek/Croppie/blob/master/LICENSE))\n* [mp4box](https://github.com/gpac/mp4box.js) ([BSD-3-Clause license](https://github.com/gpac/mp4box.js/blob/master/LICENSE))\n* [music-metadata-browser](https://github.com/Borewit/music-metadata-browser) ([MIT License](https://github.com/Borewit/music-metadata-browser/blob/master/LICENSE.txt))\n* [lowlight](https://github.com/wooorm/lowlight) ([MIT License](https://github.com/wooorm/lowlight/blob/main/license))\n* [idb-keyval](https://github.com/jakearchibald/idb-keyval) ([Apache License 2.0](https://github.com/jakearchibald/idb-keyval/blob/main/LICENCE))\n* [fasttextweb](https://github.com/karmdesai/fastTextWeb)\n* webp-wasm\n* fastblur\n\n## Bug reports and Suggestions\nIf you find an issue with this app, let Telegram know using the [Suggestions Platform](https://bugs.telegram.org/c/4002).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fajaxy%2Ftelegram-tt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fajaxy%2Ftelegram-tt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fajaxy%2Ftelegram-tt/lists"}