The official guide to

Streams are a revolutionary approach to blogging simple way to write and publish posts from a Telegram chat.

This site contains details that go beyond basic usage of the Streams bot. If you’ve ever wanted to learn about all the bot commands, use the fancier markdown syntax, export your data, or use the simple Streams API, this is the place for it.


Non-exhaustive list of features offered by

Feature Details
RSS feed Available at your-url/rss
API GET/POST endpoints, check the API page.
Protected drops The /protect command hides Drops to your private Stream (your-url/keyphrase)
Theme editor Use the editor at your-url/editor/your-keyphrase to create your own themes
Search By both date (syntax: year-month-day), and keyword
Export/migration The markdown for all your posts is available at your-url/export/keyphrase
Storage for images, files and audio As long as they are smaller than 2MB
LaTeX Check out the syntax in the Markdown section

Note: There are /export, /rss, and /editor that will provide you with links to all those pages whnever you want them.


In the database, your Stream is associated with your Telegram ID, which is a number that provides me with no private information. Your name, phone number and other profile data remains a secret.

When you first create your Stream, your Telegram username is used as your username and as the Stream’s title. You can easily change this, using the /newusername and /title commands.

The transferring of messages to my bot is handled by Telegram, with whatever security protocols they have in place for their app as a whole. I can confirm that these message payloads do not contain any private information either.

If you’d like to erase all trace of your account, let me know and I’ll get my best agents on the job.


The original markdown spec doesn’t support certain elements (highlighting and LaTeX) that I wanted Streams to have. So I’ve had to extend the syntax using code blocks with special inital characters.

Element Markup
a cool link [a cool link](
bold text **bold text**
italic __italic__
highlight `::highlight` or `==highlight`
`$ latex x_{2}` or ```$ latex x_{2}```
inline code `inline code`
 let x = “code block” 
```let x = “code block”```
strikethrough ~~strikethrough~~
To be somebody or to do something…To be or to do? Which way will you go?
> To be somebody or to do something…To be or to do? Which way will you go?

Themes are the simplest level of customization, each is different combination of fonts, highlight colors, and backgrounds. You can change between themes using the /theme command.


Dignified serif, plain old black & white. Screenshot of the Classic theme


system-ui font, lightly-dotted background, yellow highlighting.

Screenshot of the Notebook theme


Avenir, easy on the eyes. Screenshot of the Dark theme


Georgia with red highlights.

Screenshot of the Royal theme


Soft pink background and highlights, Avenir.

Screenshot of the Candy theme

Layouts control how Drops in your Stream are laid out, think of them as the structural customization vs. the ornamental features provided by themes.

You can, of course, mix-and-match themes and layouts. The layouts here all use the Classic theme for consistency, but they look much cooler with the other themes, if you ask me.


Horizontal on desktop, squeezes in from there. Screenshot of the Classic layout


Half the width, twice the scroll. Screenshot of the Feed layout


Pinterest-sytle bricks in a wall. Screenshot of the Wall layout


Dense text, triple columns. Screenshot of the Newspaper layout


If you don’t see something here that you’d really like, feel free to tell me about it.

Note: Some of these might become paid features.


Here is a list of great streams/microblogs that could make for good design inspiration:


There are a few small details that need to be ironed out:


Thanks to evgenii, nvpkv, daytura, Abhimanyu, Cam, gobborg, nobu, and Nihal for their excellent suggestions, encouragement and critique. And to Kai for writing the first (and only) $100 cheque.