Accessible Telegram: Script to Enhance Telegram Web Accessibility for VoiceOver Users on iOS

By mahmood, 5 September, 2025

Forum
iOS and iPadOS

Hi everyone,

Due to the numerous issues VoiceOver users face with the Telegram app on iOS and the frustrating lack of attention from Telegram’s developers regarding accessibility, I decided to take action myself and make Telegram Web more accessible. Now, Telegram is largely usable through Safari.

To get started, follow these steps carefully:

  1. First, install the Userscripts app from the App Store:
    Download Userscripts from the App Store
  2. Next, open the Settings app on your iPhone. Scroll down to your list of apps to find and tap Safari. From there, go to Extensions and enable the Userscripts extension.
  3. Now, open the Files app, navigate to the Userscripts folder (by default located under the "On My iPhone" path), and place the script file you downloaded from this post into this folder.
  4. Inside that same folder, you must delete the default demo.js file that is included with the Userscripts app, as it will cause conflicts.
  5. Finally, completely close Safari (from the app switcher) and re-open it to have the script activated.

From now on, when you visit web.telegram.org/a/, all your channels, groups, and chats will be properly labeled and accessible. Inside groups and channels, you can set the VoiceOver Rotor to Headings to move more easily between messages. To open and access the options related to a message, channel, or group, use the double-tap and hold gesture, which will bring up the context menu to access stuff like copy, forward, etc.

This script also makes it possible to download audio files and access comments.

Please be aware of a few things. If audio playback does not start, you need to select "Close Audio Player" and try again. This issue is not related to the script but comes from Telegram Web on iOS. Sometimes, after recording a voice message, VoiceOver audio may switch to the top earpiece of the iPhone. This is another bug in Telegram Web.

I also want to add that while I have done my best to minimize issues, this script may not be perfect. Given the complexity of Telegram Web, you might still encounter occasional bugs, such as a group being misidentified as a channel.

You are free to modify the source code of this script, and if you add new features, please share them with others. If you encounter problems with the script itself, please leave a comment on this post so we can see whether it is possible to work around them given the limitations of Telegram Web.

Download:
Download the script from Google Drive

Options

Comments

By mahmood on Sunday, September 7, 2025 - 16:10

Hi Ambro,
Thank you so much for your thoughtful and detailed feedback! I'm thrilled to hear that the script is working well for you and has made Telegram 90% accessible on your iPhone. It's very rewarding to know it's making a real difference.
You made an excellent discovery that the links work with the /k version of Telegram Web. That's very useful information, thank you for checking and reporting back. Regarding your request to make that version accessible, I will definitely look into it and try my best, but I can't make any promises at this time. Adapting the script for a different web client can sometimes be a complex task.
Please remember that this script is open-source and free. You, or anyone else in the community, are encouraged to modify it. If you or someone else manages to adapt the script to work with the /k version, I would be very happy if you shared it with everyone so we can all benefit.
Thanks again for your valuable feedback!

By mahmood on Monday, September 8, 2025 - 11:26

Just a quick note for anyone following the accessibility of web.telegram.org/k/: I've had to pause my efforts for the iOS version. I can't proceed because inspecting the web source on iOS requires a Mac, which I don't have access to. The code is different on mobile, making it impossible to debug from other platforms. I wanted to inform you all of the situation.

By Ambro on Monday, September 8, 2025 - 14:28

I have a Mac, can I help you with this? Do you need the code only for Telegram’s homepage or for other pages as well?
If you have a Windows PC and change the user agent to simulate a Mac, I think that should work anyway, right? Let me know.

By Cankut Değerli on Monday, September 8, 2025 - 14:38

So I tried the script on my M 1 Mac mini. Actually, it works priti well. However, it's really tricky to find the chat I want. When I press the chat element, I don't know it's not a button on my end, Voiceover gos until the new chat button. I can't see my chats. I need to tipe to the search box, but as I said, reaching the chat and tiping a message is a bit dificult and tricky on my end, unfortunately I don't know the reason.

By mahmood on Monday, September 8, 2025 - 15:05

Hello Ambro,
Just wanted to give you a quick and positive update! For now, I've actually managed to solve the problem using another method, which is great news.
However, your generous offer to help with your Mac is still something I truly value. If you are still willing, I would be very grateful if you could send me your contact details through my AppleVis contact form—especially if you have a Telegram account.
That way, if I run into another roadblock or need assistance in the future, I'll know how to reach you.
Thank you once again for your fantastic willingness to help!
Best,
Mahmood

By mahmood on Monday, September 8, 2025 - 15:14

Hi Cankut,
Thank you so much for taking the time to test the script on your M1 Mac mini and for sharing this valuable feedback. I'm glad to hear that it's working pretty well for the most part.
I understand the main issue is with navigating the chat list, and how activating a chat incorrectly moves the VoiceOver focus to the "New Chat" button. This is certainly a frustrating experience.
This problem likely happens because the script was primarily developed and tested for VoiceOver on iOS, which is a touch-based interface. The way VoiceOver interacts with web pages using keyboard commands on macOS can be quite different.
For the best and most consistent accessibility, the Telegram Web interface should ideally be structured in a specific way:

Each chat in the chat list should be a proper button. This would make them clearly actionable elements for screen readers on all platforms.
Inside a chat, every message from a person, group, or channel should be a heading. This allows screen reader users to efficiently navigate from message to message using the heading shortcut (e.g., the 'H' key or the Rotor).
Unfortunately, I don't have access to a Mac to directly test and debug this behavior. The structure of the Telegram Web page might also be slightly different on macOS browsers compared to iOS or Windows, which could be contributing to the issue.
Thanks again for your insightful feedback.
Best regards,
Mahmood

By Earle on Tuesday, September 9, 2025 - 09:21

Despite my efforts, the script isn’t working for me. I’ve uninstalled and reinstalled both the app and the script file multiple times without success. I’ve experimented with various permission settings for the extension, but that didn’t help either. I even thought my ad blocker might be causing issues, so I uninstalled it, but that didn’t resolve the problem. I’ve added /a to the web address, yet still no luck. I’ve also restarted my phone and Safari several times. The demo script has been removed from the folder on my phone. I’m using an iPhone 16 Pro Max with Developer beta 9. If anyone has any other suggestions, I would greatly appreciate it.

By mahmood on Tuesday, September 9, 2025 - 13:15

Hi, thank you for the very detailed report. This is a really interesting situation.
I'm also using iOS 26 beta 9, and the script has been running perfectly for me. This makes the issue even more of a mystery! Since we're on the same OS, the problem must be caused by some other difference in our setups.
You mentioned disabling your ad blocker, but do you have any other scripts or extensions running that you could try temporarily disabling? Sometimes another extension can interfere in unexpected ways.
Let's try to figure this out. Thanks for your patience as we look into it.

By Earle on Tuesday, September 9, 2025 - 13:30

It's very interesting that we are running the same beta and getting different results. I'm not running any other extensions. I even went in and double checked just to be sure.

By mahmood on Tuesday, September 9, 2025 - 13:37

Hi Earle,
I have another idea for a more direct check. Can you please try these steps?
1.
Go to web.telegram.org/a/ in Safari.
2.
Next to the address bar, tap on the page menu button.
3.
From the menu that appears, select "Userscripts".
4.
A new list should open. In that list, do you see the name of the script, "Telegram Web Accessibility Helper"?
Important Warning: Please be very careful not to tap on the script's name. If you tap it, it will disable the script for the website, and VoiceOver does not announce this change. We just need to know if the name is visible there.
This will help us understand if the extension is attempting to load the script on the page. Thanks again for your patience!

By Earle on Tuesday, September 9, 2025 - 13:51

I followed your steps, and I do see the name of the script when I tap on the extension. I did not tap on the name of the script, I just tapped done. I tried removing all website data and user history under Safari, but that didn't help either.

By Richard Bartholomew on Tuesday, September 9, 2025 - 19:41

Hi, Mahmood

Firstly, apologies for the delay in replying to you but only just been able to look at this again.

I deleted the demo file and restarted Safari but it still wasn't working. However, eventually noticed that the /k site was being used so once I loaded the correct site, all seems to be well.

thanks to other posters with their problems which pointed me in the right direction.

I look forward to testing this out more effectively over next few days.

Thanks for your work in providing the script.