{"id":15016733,"url":"https://github.com/superilu/dostodon","last_synced_at":"2025-04-07T10:29:25.890Z","repository":{"id":63490888,"uuid":"565274189","full_name":"SuperIlu/DOStodon","owner":"SuperIlu","description":"MS-DOS Mastodon client","archived":false,"fork":false,"pushed_at":"2024-04-05T13:22:04.000Z","size":43518,"stargazers_count":289,"open_issues_count":1,"forks_count":8,"subscribers_count":15,"default_branch":"main","last_synced_at":"2024-04-13T21:01:29.741Z","etag":null,"topics":["dojs","javascript","mastodon","mastodon-client","ms-dos","retrocomputing"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SuperIlu.png","metadata":{"files":{"readme":"README.md","changelog":null,"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}},"created_at":"2022-11-12T21:48:10.000Z","updated_at":"2024-03-18T19:53:18.000Z","dependencies_parsed_at":"2023-02-18T20:16:06.357Z","dependency_job_id":"f5d71c06-fcaa-4fc6-bcf7-cd23bf198b6c","html_url":"https://github.com/SuperIlu/DOStodon","commit_stats":{"total_commits":96,"total_committers":3,"mean_commits":32.0,"dds":"0.36458333333333337","last_synced_commit":"6a39168c2eeec58e82c9704149a49ad57eaec189"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SuperIlu%2FDOStodon","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SuperIlu%2FDOStodon/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SuperIlu%2FDOStodon/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SuperIlu%2FDOStodon/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SuperIlu","download_url":"https://codeload.github.com/SuperIlu/DOStodon/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247635349,"owners_count":20970722,"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":["dojs","javascript","mastodon","mastodon-client","ms-dos","retrocomputing"],"created_at":"2024-09-24T19:49:18.251Z","updated_at":"2025-04-07T10:29:25.859Z","avatar_url":"https://github.com/SuperIlu.png","language":"JavaScript","readme":"# DOStodon\nThis is the source of DOStodon, a Mastodon client for MS-DOS.\n\nDOStodon is implemented in Javascript and relies on [DOjS](https://github.com/SuperIlu/DOjS) to run (included).\n\nHelp on this project is very much appreciated, contact me on [Mastodon](https://mastodon.social/@dec_hl) or in the [DOjS Discord](https://discord.gg/J7MUTap9fM) if you want to help or have questions...\n\n# Quick start for DOS\n- **You need a VM, real HW or DOSBox-staging with a network card and a matching packet driver to use it.**\n- **A Pentium 133 or faster with at least 32MiB of RAM is recommended.**\n- **Packet drivers can e.g. be found on [packetdriversdos.net](http://packetdriversdos.net/) (make sure to download the driver from the \"PC/TCP PACKET DRIVERS\" section) or on [crynwr.com](http://crynwr.com/drivers/) or [www.georgpotthast.de](http://www.georgpotthast.de/sioux/packet.htm)**\n- **You don't need any TCP/IP stack, [Watt32](https://www.watt-32.net/) is compiled into the program and directly uses the packet driver**\n- **Make sure you read the section about the limitations!**\n- **see \"DOSBox-staging config\" below for an example config that works (for me) with DOSBox-staging**\n\nJust [download](https://github.com/SuperIlu/DOStodon/archive/refs/heads/main.zip) the whole repository.\n\n## Linux version\nThere is an experimental Linux version of DOStodon. It is based on [DOjS v1.12](https://github.com/SuperIlu/DOjS). You can try it at your own risk. You need to compile DOjS yourself, please look at [this instruction](https://github.com/SuperIlu/DOjS/blob/master/README_Linux.md) how to do that. Fullscreen mode does not get keyboard input on WSL2, you can switch to windowed mode by removing the `-u` option in `dostodon.sh`.\n\n\u003cimg src=\"https://github.com/SuperIlu/DOStodon/raw/main/images/timeline.png\" alt=\"DOStodon timeline\" width=\"200\"\u003e\n\u003cimg src=\"https://github.com/SuperIlu/DOStodon/raw/main/images/profile.png\" alt=\"DOStodon profile\" width=\"200\"\u003e\n\u003cimg src=\"https://github.com/SuperIlu/DOStodon/raw/main/images/find_user.png\" alt=\"DOStodon find user\" width=\"200\"\u003e\n\u003cimg src=\"https://github.com/SuperIlu/DOStodon/raw/main/images/hashtag.png\" alt=\"DOStodon hashtag\" width=\"200\"\u003e\n\n## Win32 version\nI uploaded an experimental Win32 version. It should work from Windows XP onwards. Simply run `wintodon.bat` after following the instructions below\n\n# Usage\n## Before first start\n**IMPORTANT NOTE:** Mastodon v4.4 disabled the authentication via username/password (see [here](https://mastodon.social/@BenCollver@tilde.zone/113466787872836725)). The following is a workaround using a modern computer:\n- Login to your account on the webinterface of a modern PC\n- Go to the preferences page (cog icon)\n- Click on `\u003c\u003e Development`\n- Click on `New Application`\n- Fill in the Form like this:\n\t- Application name: DOStodon\n\t- Application website: https://github.com/SuperIlu/DOStodon\n\t- Check the scopes: `read`, `profile`, `write`, `follow` and `push`\n- Click on `Submit`\n- Click on the newly created `DOStodon` application in the `Your applications` list\n- Copy the string after `Your access token` and create the file `CREDS.JSN` in the DOStodon directory like this, replacing `YOUR TOKEN` and `YOUR SERVER` with the token and the address of your server. Leave the rest of the file as it is.\n```\n{\n\t\"client_id\": \"XXX\",\n\t\"client_secret\": \"XXX\",\n\t\"token\": \"YOUR TOKEN\",\n\t\"url\": \"https://YOUR SERVER\"\n}\n```\n\n## subsequent starts\nJust run `DOStodon.bat` or `wintodon.bat`.\n\n## Proxy support\nIf you want DOStodon to use a proxy you have to set the following ENV variables (e.g. in the BAT files):\n- `PROXY_HOST`: HTTP proxy to use. The parameter should be a string holding the host name or dotted IP address. To specify port number in this string, append :[port] to the end of the host name. The proxy string may be prefixed with [protocol]:// since any such prefix will be ignored. The proxy's port number may optionally be specified with the separate function SetProxyPort().\n- `PROXY_PORT`: Pass a port number with this option to set the proxy port to connect to unless it is specified in the proxy string using PROXY_HOST.\n- `PROXY_TYPE`: set this to `SOCKS` to use a SOCKS proxy. If unset or set to anything else a HTTP proxy is asumed.\n\n## NOISE.SYS\nDOStodon supports NOISE.SYS, a MS-DOS random number generator. It can be obtained here: https://github.com/robrwo/noise.sys\n\n## Keys\n### Common\n- `ESC`: Quit DOStodon\n- `h/H/?/CTRL-H`: Help screen\n- `F1`: Switch to home timeline\n- `F2`: Switch to notifications\n- `F3`: Switch to hashtag timeline\n- `F4`: Switch to local timeline\n- `F5`: Switch to global timeline\n- `F6`: Switch to bookmarks list (last 40)\n- `F7`: Switch to favourites list (last 40)\n- `F10`: Switch to Toot composer\n- `F11`: Info screen\n- `F12`: Poll/Refresh home/notification timelines\n- `UP/DOWN, Page UP/DOWN, HOME/END`: scroll entries in home/notifications\n- `p`: Show profile of currently selected entry (for boosts the boosters profile)\n- `P`: Show profile of currently selected entry (for boosts the original profile)\n- `CTRL-S`: Save screenshot as PNG. Screenshots are numbered, starting with `1.PNG`.\n- `CTRL-P`: Search for a user/profile. The profile is displayed when pressing `ENTER`.\n- `CTRL-C`: Show config dialog\n- `DEL`: close dialog\n\n### Timelines\n- `b`: Boost/reblog currently selected toot in home screen\n- `B`: UN-Boost/reblog currently selected toot in home screen\n- `f`: Favorite/like currently selected toot in home screen\n- `F`: UN-Favorite/like currently selected toot in home screen\n- `m`: Bookmark currently selected toot in home screen\n- `M`: UN-Bookmark currently selected toot in home screen\n- `R`/`r`: reply to selected toot in home screen\n- `D`/`d`: Print JSON of selected toot in home screen to logfile\n- `C`/`c`: Toggle toots with content warning\n- `1..4`: show media attachment 1 to 4. Any key to close.\n- `5`: show show YouTube preview image. Any key to close.\n- `CTRL-1..4`: show image description of media attachment 1 to 4. Any key to close.\n- `ENTER`: show thread view of current entry, `DEL` or `BACKSPACE` to return to timeline.\n- `CTRL-B`: Toggle toots\u0026boosts, boosts only, toots only\n- `CTRL-M`: Toggle showing posts with media only\n\n### Tag timeline\n- `T`/`t`: change tag\n- `ENTER`: confirm tag in tag editor\n- `BACKSPACE`: delete character in tag editor\n\n### Notifications\n- `L`/`l`        : Toggle showing of favorites\n- `B`/`b`        : Toggle showing of boosts\n- `F`/`f`        : Toggle showing of follows\n- `M`/`m`        : Toggle showing of mentions\n- `O`/`o`        : Toggle showing of other notifications\n- `SPACE`        : Reset all filters\n\n### Editor\n- `CTRL-ENTER`: Send toot in Toot editor\n- `CTRL-P`: Open account search, ENTER puts the selected account into the toot\n- `BACKSPACE`: delete character\n- `DEL`: delete toot composer text and reply-to toot\n- `TAB`: switch toot visibility between `public`, `unlisted`, `private` and `direct`.\n- `INSERT`: Image selector for image attachments to the toot.\n\n### Profile screen\n- `ENTER`: close profile\n- `f`: follow\n- `F`: unfollow\n- `b`: block\n- `B`: unblock\n- `m`: mute\n- `M`: unmute\n- `T`: Write toot to account\n\n## General\n- DOStodon is busy while the Mastodon logo is displayed in middle of the screen. Don't hit keys like crazy, every keypress will be queued :)\n- DOStodon polls home/notifications every 5 minutes for new entries. Countdown is in the lower right corner.\n- To add a content warning/spoiler to a toot start the toot with \"cw:\". The first line of the toot will be the content warning, all subsequent lines will be the body text of the toot.\n- If you press DOWN on the last entry in home/notifications older entries are fetched.\n- Favourite/boost/bookmark status ([FBM]) is displayed below the profile picture of each toot.\n- The selected hashtag is displayed in the upper right corner of the hashtag timeline.\n- When first selecting the hashtag timeline you have to enter a hashtag.\n\n## Limitations\n- 2FA is not supported right now!\n- logging in with passwords that contain characters outside 7bit ASCII might not be possible\n- HTTPS requests can take quite a lot of time, be patient!\n- Can't play videos/audio\n- Image attachements are just drawn at the upper left corner\n- No support for HTML tags, they are (badly) filtered out\n- No support for emojis (replaced by spaces)\n- No support for characters like umlauts, etc.\n- The toot composer only supports BACKSPACE, it is not a real text editor.\n- You can only remove the whole editor content. You can't undo adding an image.\n- You can only add ALT text for the last image added.\n- Bookmarks and favourites do not support pagination (yet).\n- **NO REAL TESTING/QUALITY ASSURANCE!** Folks, this is a **fun project**, if you need a production ready client contribute or use something real! If it works for you, it works, but don't blame me for broken commits or missing features...\n\n# Hacking/contributions\nThe source is split into several files right now:\n- `dstdn.js` the \"application\"\n- `home.js` the home timeline\n- `imgcache.js` image fetching/caching\n- `info.js` info screen display\n- `splash.js` splash screen\n- `mstdn.js` contains the Mastodon REST API\n- `notific.js` the notification timeline\n- `profile.js` profile viewer\n- `toot.js` toot creation\n- `util.js` support code\n- `dialogs.js` all input fields\n- `filsel.js` image file selector\n\nDOStodon is implemented using DOjS native API (no p5js emulation). Network operations block the input processing/rendering.\n\n# DOSBox-staging config\nI use [DOSBox Staging](https://github.com/dosbox-staging/dosbox-staging/releases/tag/v0.79.1) to test this version of DOStodon. A NE2000 packet driver can be found on [this](http://www.georgpotthast.de/sioux/packet.htm) page [here](http://www.georgpotthast.de/sioux/pktdrv/ne2000.zip).\n\n**DO NOT use DOSBox-X right now, it has a known bug in file io which creates broken SQLite databases**\n**DOSBox-staging has a problem with mouse support, thats why I disabled that in the example config!**\n\nMy `dosbox-staging.conf` looks like this:\n```\n[sdl]\ncapture_mouse = nomouse\n\n[dosbox]\nmemsize = 64\n\n[cpu]\ncputype = pentium_slow\ncycles  = max\n\n[ethernet]\nne2000  = true\nnicbase = 300\nnicirq  = 3\nmacaddr = AC:DE:48:88:99:AA\n\n[autoexec]\nmount c E:\\_DEVEL\\GitHub\\DOStodon\nPATH=d:;%PATH%\nc:\nne2000 0x60 3 0x300\n```\n\n# TODO\n- Busy indicator is missing for some network operations\n- Some network errors lead to an endless loop\n- Color themes?\n- invert timeline (oldest post on top)\n- Fix bugs\n- Have fun\n\n# Changelog\n## 22. February 2025\n- Updated README.md for authentication\n- Added Win32 binaries\n\n## 20. October 2024\n- Updated curl to 8.10.1\n- Updated mbedTLS to 3.6.2\n- Updated jpeg from 9e to 9f\n- Updated SQLite to 3.46.1 (thanks to https://mastodon.social/@BenCollver@tilde.zone)\n\n## 18. August 2024\n- Fixed a small bug when viewing threads in notification screem.\n- Implemented setting for CW toots (default collapsed or visible)\n- Fixed date calculation\n- Fixed an issue with image viewing\n- Added help screen to toot editor\n- Changed some colors for better contrast\n- Updated curl to 8.9.1\n- Added ALT text for image uploads\n\n## 14. June 2024\n- Updated curl to 8.8.0\n- Updated mbedTLS to 3.6.0\n- Added support for [NOISE.SYS](https://github.com/robrwo/noise.sys)\n\n## 5. April 2024\n- Updated curl to 8.7.1\n- Updated mbedTLS to 2.28.8\n- Updated zip to 0.3.2\n\n## 01. February 2024\n- Updated mbedTLS and cURL for the DOS version\n- removed Linux binaries, added link to the compilation instructions of DOjS v1.12\n\n## 26. January 2024\n- Added Linux version for Ubuntu 20.04 and ArchLinux\n\n## 16. January 2024\n- Display votes with results in the notifications\n- Improve single choice voting dialog\n- Implemented multiple choice voting\n\n## 13. January 2024\n- Improved handling of Unicode characters (displaying German Umlauts and other diacritic characters)\n- Finally display votes in the timeline\n- Enable voting in single-choice votes (sorry, no multiple choice votes yet)\n\n## 06. January 2024\n- Updated curl to 8.5.0\n- Updated mbedTLS to 2.28.6\n- Updated zip to 0.3.1\n- Added example proxy config to `DOSTODON.BAT``\n\n## 16. Oktober 2023\n- Some tiny fixes after helpful comments from @colin_mcmillen@piaille.fr \n\n## 14. Oktober 2023\n- Added webp image format\n\n## 11. Oktober 2023\n- Security update to curl 8.4.0 and mbedTLS 2.28.5\n- Fixed tag selection in tag screen display\n\n## 23. august 2023\n- highlight DMs in timeline and notifications\n- added visibility options to toot editor\n- added visibility to toot display\n\n## 05. august 2023\n- Added proxy support through ENV variables\n\n## 19. july 2023\n- Updated DOjS to curl-8.2.0\n\n## 8. july 2023\n- fixed drive letter detection in the file selector\n- file selector cursor start position is between drives and files now\n- fixed 'parent' handling in file selector\n- accept HTTP status 206 for home timeline\n\n## 25. june 2023\n- recompiled DOjS with GCC 12.2 and DJGPP CVS (fixes SSL/date bug _AGAIN_)\n- added YouTube video preview\n\n## 21. june 2023\n- added image upload/attachment to toots\n\n## 14. may 2023\n- newly polled entries in home and notifications screens are now highlighted red\n\n## 10. may 2023\n- Fixed a bug with displaying boosted toots when they had a content warning\n- Moved filter display in notifications to lower left\n- Added filtering of Toot-types to timelines: boosts, original toots and media attachments\n\n## 7. apr 2023\n- Updated to DOjS 1.11alpha with mbedTLS 2.28.3 and curl 8.0.1\n\n## 4. mar 2023\n- view the timeline of an account by pressing `F3` on the profile screen\n- updated DOjS, now using mbedTLS 2.28.2\n\n## 4. feb 2023\n- Help pages will now also be displayed when pressing `?`.\n- Enabled auto_vacuum for SQLite image cache.\n- Added rainbow colors to the thread view.\n- Reduced indentation in thread view.\n- Added highligting of \"root\" entry in thread view.\n- You can now press `RETURN` in thread view to see details of displayed children.\n- Added configuration dialog (press `CTRL-C`) and config saving to `CFG.JSN`.\n- Changed some colors\n- `CTRL-L` and `CTRL-W` to load/save the timeline position is still work in progress!\n\n## 14. jan 2023\n- Profile view now shows the header image as well\n- You can toot to the profile owner now by pressing `T`\n- DOStodon now returns to the calling screen after replying to a toot\n- CTRL-P in the editor lets you search for an account\n- Added \"reply\" marker `\u003c`\n- Improved thread view and search dialog\n\n## 13. jan 2023\n- Implemented indentation and lines for toot context view (threads)\n\n## 12. jan 2023\n- Toots and notifications now show the time in a more readable fashion as a relative time.\n- Added type filter for notifications\n\n## 8. jan 2023\n- Updated DOjS, new curl, new jpeg decoder and bugfixes\n- Tinkered a little bit on the splash screen\n- You can now press `t` to select a hashtag from the current toot and display the hashtags timeline\n- You can now press `F1`/`F2` in profile view to show a list of followers/following accounts.\n\n## 7. jan 2023\n- Added 'LOCKED' and 'BOT' info to profile screen.\n- Used a smaller font for timeline timestamps and toot stats\n- You can now search for a user (profile) by pressing `CTRL-P`\n- Lots of small internal optimizations, especially text rendering\n\n## 6. jan 2023\n- New, experimental word wrapping algorithm with support for coloring hashtags and handles\n\n## 1. jan 2023\n- Reworked the \"login\" section in the README\n- You can now save PNG screenshots using `CTRL-S`\n\n## 29. Dec 2022\n- Added scroll indicators `^` and `v` at the very right of the screen\n- Added thread view for toots.\n- Fixed bug with toggling content warnings on toots with no spoiler text\n- Added image description viewing\n- Added help screen when pressing `H`\n\n## 28. Dec 2022\n- Added local timeline\n- Added global timeline\n- Added hashtag timeline\n- Added 'view bookmarks'\n- Added 'view favorites'\n- Added text input field\n- Reworked sidebar\n- Added auto refresh countdown\n\n## 26. Dec 2022\n- Fixed issue with the image cache\n- Fixed issue with profile screen follow/block/mute function\n- Fixed wrong sound being played\n- Added Makefile to create DOSTODON.ZIP\n\n## 22. Dec 2022\n- Added follow/mute/block info to profile screen\n- Added (un) follow/mute/block keys to profile screen (yet untested)\n\n## 20. Dec 2022\n- Updated README regarding DOSBox (switched from DOSBox-X to DOSBox-staging)\n- Added UnBoost and UnFav\n- Added Bookmarks\n- Added boost/fav/bookmark markers\n- Added splash screen\n- Added SQLite based image cache. Images are deleted from cache after 28 days.\n\n## 19. Dec 2022\n- Updated README regarding DOSBox-X\n- Added debug timestamp during startup\n- Fixed 486 incompatibility (hopefully)\n\n## 17. Dec 2022\n- Switched compiler for DOjS from GCC 7.2.0 to 12.2.0\n- Added UTC date of toots\n\n## 15. Dec 2022\n- Fixed a time() bug in DOjS and re-enabled certificate validation.\n\n## 14. Dec 2022\n- Switched from nanojpeg to libjpeg to be able to load progressive JPEGs\n- Added toot stat display to home screen\n\n## 13. Dec 2022\n- Disabled TLS/SSL certificate verification for now. DOStodon is not able to verify the certificate of https://mastodon.social anymore and I need to dive deeper into the reason for that.\n- Added Page UP/DOWN and HOME/END to home and notifications\n- Added content warnings/spoilers to the toot composer\n- Added fetching of older entries when viewing home/notifications\n\n## 11. Dec 2022\n- Fixed a memory corruption in DOjS\n- Images are no longer saved into TMP files\n- Images are now scaled to fit the screen when displayed\n\n## 4. Dec 2022\n- implemented LRU cache for images\n- fixed some quirks with key handlings\n- DOjS now uses cURL 7.86.0\n\n## 2. Dec 2022\n- Blurhash is now implemented in C\n\n## 1. Dec 2022\n- added `\u003cCW\u003e` for content warnings, you can toggle the toot with `C`\n- added media indicator for non-images (e.g. `\u003cvideo\u003e`)\n\n## 30. Nov 2022\n- added JS based blurhash\n\n## 27. Nov 2022\n- implemented connection reuse\n- you can now reply to toots by pressing R\n- you can now clear the toot-composer by pressing DEL\n- improved display of boosted toots\n- added sounds\n\n## 26. Nov 2022\n- DOjS now uses mbedTLS instead of OpenSSL\n- changed display of user handles\n- added info screen\n- reworked Mastodon-API, prepared it to re-use cURL objects (doesn't work yet)\n- now shows a busy indicator when fetchingt iages during scrolling\n- disabled alpha channel to speed up rendering\n\n## 18. Nov 2022\n- code cleanup\n- several fixes all over the place\n- added splash screen\n- added entry scrolling\n- added manual reload with F5\n- changed polling time from 1min to 5min\n- added profile viewer\n- added media preview\n- added media showing\n- added liking\n- added boosting\n- added \"busy\" indicator\n\n## 16. Nov 2022\n- added some help in README.md\n- first working version\n\n## 14. Nov 2022\n- first public release\n- didn't work\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsuperilu%2Fdostodon","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsuperilu%2Fdostodon","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsuperilu%2Fdostodon/lists"}