Fernschreiber is a Telegram client for Sailfish OS
Go to file
Sebastian Wolf 0236586e44 Switch to gh tool for release creation, see https://github.com/actions/runner-images/issues/8362 2023-12-03 23:52:21 +03:00
.github/workflows Switch to gh tool for release creation, see https://github.com/actions/runner-images/issues/8362 2023-12-03 23:52:21 +03:00
db Add Emoji 14.0 support :) 2022-03-21 22:37:27 +01:00
doc fix long emoji names 2021-08-18 11:30:39 +02:00
icons Update logo, original by @iamnomeutente, adjustments by @monich 2021-02-03 21:48:59 +01:00
images Update logo, original by @iamnomeutente, adjustments by @monich 2021-02-03 21:48:59 +01:00
qml Restore content width in landscape as per discussion in #540 2023-12-03 23:52:06 +03:00
rlottie@7c5b40cbb8 Introduce possibility to display stickers as emojis 2021-05-20 23:41:55 +02:00
rpm Prepare 0.17 release 2023-12-03 23:52:19 +03:00
src Jump to post from quote (#538) 2023-12-03 23:50:23 +03:00
tdlib/include/td Update tdlib headers 2023-11-19 16:11:29 +03:00
translations Update harbour-fernschreiber-es.ts (#542) 2023-12-03 23:50:55 +03:00
.gitignore Update gitignore 2023-11-21 14:23:24 +03:00
.gitmodules Added rlottie submodule 2020-11-11 03:12:52 +02:00
LICENSE Initial commit 2020-08-10 13:50:11 +02:00
README.md Prepare 0.17 release 2023-12-03 23:52:19 +03:00
harbour-fernschreiber.desktop Revert executable rename 2023-11-20 19:31:56 +00:00
harbour-fernschreiber.pro project build settings were modified 2023-04-04 10:54:18 +03:00



A Telegram client for Sailfish OS

Fernschreiber build


Sebastian J. Wolf sebastian@ygriega.de and several contributors


Fernschreiber wouldn't be the same without all the people helping in making it better. Thank you very much to all contributors!

Code (Features, Bugfixes, Optimizations etc.)

  • Chat list model, chat model, notifications, TDLib receiver, animated stickers, project dependencies, qml/c++ optimizations, chatPhoto, TDLibFile, code reviews, logging categories: Slava Monich
  • Chat info page, performance improvements to chat page, location support, app initialization/registration with Telegram, project dependencies, emoji handling, qml/js optimizations, multi-message actions, i18n fixes, chat permission handling, code reviews, logging categories, bot support, github build: jgibbon
  • Copy message to clipboard: Christian Stemmle
  • Hide send message button if send-by-enter is switched on, focus text input on entering a chat: santhoshmanikandan
  • Integration of logout and sesison options to settings page, search results optimization, highlight unread conversations: Peter G.
  • Option to always append last message in notifications: Johannes Bachmann
  • Option to jump to quoted message, widescreen UI adjustments: Mikhail Barashkov

This list might not be complete. In case I forgot something/somebody, please let me know or create a PR, thanks! :)




Licensed under GNU GPLv3


Local build

Simply clone this repository and ensure to have all submodules imported as well (e.g. by using git submodule update --init). Then use the project file harbour-fernschreiber.pro to import the sources in your SailfishOS IDE. To build and run Fernschreiber or an application which is based on Fernschreiber, you need to create the file harbour-fernschreiber/src/tdlibsecrets.h and enter the required constants in the following format:

const char TDLIB_API_ID[] = "42424242";
const char TDLIB_API_HASH[] = "1234567890abcdef1234567890abcdef";

You get the Telegram API ID and hash as soon as you've registered your own application on https://my.telegram.org.

Moreover, you need to have a compiled version of TDLib 1.8.21 or higher in the sub-directory tdlib. This sub-directory must contain another sub-directory that fits to the target device architecture (e.g. armv7hl, i486). Within this directory, there needs to be a folder called lib that contains at least libtdjson.so. For armv7hl the relative path would consequently be tdlib/armv7hl/lib.

You may just want to download the tdlib.zip from our fork to just use the exact version of the latest official Fernschreiber release. To use it, you need to extract it into your local tdlib/ folder as described above. If so, you're done and can compile Fernschreiber using the Sailfish SDK. If you want to build TDLib for yourself, please keep on reading.

In case you want to use the same codebase which was used to compile the library that is shipped with Fernschreiber, please check out the fork, be sure to use the branch fernschreiber and compile these sources using the following commands (be sure to have the Sailfish OS build engine running):

  • alias sfdk=~/SailfishOS/bin/sfdk
  • sfdk config target=SailfishOS- (this compiles the sources on SFOS 4.4 and ARM - the target needs to be adjusted according to the running SDK engine and the platform)
  • mkdir build
  • cd build
  • sfdk build-init
  • sfdk build-shell cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=../tdlib -DTD_ENABLE_LTO=ON .. (in case of compilation issues, try removing the flag -DTD_ENABLE_LTO=ON)
  • sfdk build-shell cmake --build . --target install

You'll find the compiled library in the directory td/tdlib.

Github Action

Please read the "Local build" section anyway to understand what's going on before continuing. If you want to automatically build your fork on Github, you'll still need to get a Telegram API ID and hash. These are then added as project secrets named TDLIB_API_ID and TDLIB_API_HASH.

By default, only commits to the master branch will be built. You may change that for your fork, but please don't create a pull request to the official repository changing the github action without consulting the Fernschreiber contributors first.

If you push a tag containing the letter "v" (for example "v0.99.3"), a github release will be created allowing easy download of the resulting rpms. If the tag is named for example "pre-0.99.3", the resulting release is marked as a pre-release for testing purposes.


Fernschreiber does only output a few TDLib messages by default. To get its own debug log messages, you can either run a debug build to see all of them or use the environment variable QT_LOGGING_RULES to specify/filter which messages you'd like to see.

Run QT_LOGGING_RULES="fernschreiber.*=true" harbour-fernschreiber to see all messages or replace the * with specific logging categories. You'll find the logging category inside the corresponding .cpp file for backend usage or you can use JS to only see frontend messages.

You can append &> fernschreiber.log to the command to create a text file containing the debug messages.

Please be aware that debug messages will most likely include personal information including (but not limited to) chat content and user ids/names of yourself and all your chat partners. Do not share it publicly and, at your discretion, try to remove private info even from the parts you do share with a trusted person.


If you want to contribute bug fixes, improvements, new features etc. please create a pull request (PR). PRs are always welcome and will be reviewed as soon as possible, but may take some time. :)


This project uses

Thanks to the maintainers of the used components and - again - all contributors to Fernschreiber!