个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证desktop telegram client on flutter. same layout as the official one + liquid glass and the stuff it's missing
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗layout is the same as telegram desktop, so there's nothing to relearn. on top of it: liquid glass and the features the official client doesn't have.
[!NOTE] early stage, but already works: sign-in, chat list, chats with every message type, tabs, split view and the command palette. guides for users and plugin authors are at docs.mollygram.dev. what comes next is in
docs/roadmap.md, the backlog vs the official client indocs/parity.md.
| plugins | sandbox with explicit permissions declared in the manifest, s/o exteraGram. |
| privacy | ghost mode: no read receipts, no "typing", no "online". deleted messages and edit history saved locally. |
| media | video messages at 120 fps and up to 640×640, photos and videos go uncompressed by default. |
| chat workflow | tabs, split view for two chats, command palette on ⌘ K. |
| look | liquid glass only on the floating layer: sidebar, chat header, composer, palette. light and dark themes. |
| component | tech |
|---|---|
| ui | Flutter desktop, stable channel |
| protocol | TDLib via dart:ffi |
| plugins | javascript and typescript on QuickJS-ng, more in docs/plugins.md |
| platforms | macOS, windows, linux |
| package | what's in it |
|---|---|
packages/tdlib | dart:ffi bindings to td_json, the td_receive loop in a background isolate, td_api types generated from the schema |
packages/core | models and state on top of tdlib, no flutter dependency |
packages/ui_kit | shared widgets, glass, theme |
packages/media | video, video messages, voice messages |
packages/shell | window layout: chat tabs, split view, ⌘K command palette |
packages/plugin_host | plugin sandbox and the built-in filters and translate plugins |
packages/plugins_ui | plugins settings screen |
packages/plugin_sdk | typescript types for plugin authors |
packages/app | the app itself |
flutter comes through fvm. the version is pinned in .fvmrc, ci uses the same one. we track latest stable.
git clone --recurse-submodules https://github.com/mollykitten/mollygram.git
cd mollygram
fvm install
fvm flutter pub get
forgot --recurse-submodules? run git submodule update --init --recursive once, the plugin host builds quickjs from the quickjs-ng submodule.
it's a monorepo on pub workspaces, so pub get at the root installs deps for every package.
telegram api keys never go into the repo. grab your api_id and api_hash at my.telegram.org, copy config/telegram.example.json to config/telegram.json (it's gitignored) and run:
cd packages/app
fvm flutter run -d macos --dart-define-from-file=../../config/telegram.json
release builds take the same values from the repo secrets TELEGRAM_API_ID and TELEGRAM_API_HASH.
prs are welcome. read CONTRIBUTING.md first: we use conventional commits and semver, the changelog is generated from commit messages. be nice, see the code of conduct. vulnerabilities go privately, see SECURITY.md.
| workflow | runs on | what it does |
|---|---|---|
ci.yml | push to main, prs | dart format, flutter analyze, flutter test, then release builds for macOS, windows and linux |
pr-title.yml | prs | checks that the pr title follows conventional commits |
release-please.yml | push to main | keeps a release pr with the next version and CHANGELOG.md up to date, merging it tags v* and starts the release |
release.yml | v* tag, release pr merge | builds all three platforms with keys from secrets and attaches the archives to the github release |
plugin_host.yml | changes to the plugin packages | builds quickjs, runs the plugin host tests on all three platforms and tests the plugins screen |
tdlib.yml | tdlib version change, manual | builds a universal libtdjson.dylib for macOS and publishes it to the tdlib-<version> release |
icon is a white speech bubble with an m on raspberry. the neon wordmark is promo only: readme, website, channel. the app itself has no neon.
| color | light | dark |
|---|---|---|
| default accent | ||
| raspberry accent (optional) | ||
| outgoing bubbles, raspberry theme | ||
| neon, promo only |
accent is system blue by default, raspberry is a toggle in settings. icon sources are in docs/assets.
design/ has the sources of the interactive mockups: main window, chat media and files, plugins, command palette, settings. each one switches between english and russian. they're in the design canvas format (.dc.html) so a plain browser won't open them.