{"id":20696111,"url":"https://github.com/haliphax/xthulu","last_synced_at":"2026-03-07T08:03:37.009Z","repository":{"id":38334226,"uuid":"244547295","full_name":"haliphax/xthulu","owner":"haliphax","description":"Python asyncio community server (HTTPS, SFTP, SSH) with a modern terminal interface","archived":false,"fork":false,"pushed_at":"2025-12-29T00:22:21.000Z","size":3187,"stargazers_count":25,"open_issues_count":12,"forks_count":0,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-12-31T18:23:06.276Z","etag":null,"topics":["ansi","ascii","asyncio","bbs","community","console","curses","docker","docker-compose","ncurses","postgresql","python","redis","server","sftp","ssh","terminal","textmode","tty","xterm"],"latest_commit_sha":null,"homepage":"https://haliphax.github.io/xthulu/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/haliphax.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE.md","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,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"haliphax","ko_fi":"haliphax"}},"created_at":"2020-03-03T05:10:48.000Z","updated_at":"2025-12-29T00:22:24.000Z","dependencies_parsed_at":"2023-10-17T07:50:30.822Z","dependency_job_id":"f8c69450-0274-4e63-9817-e2e5ff85e2cb","html_url":"https://github.com/haliphax/xthulu","commit_stats":null,"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/haliphax/xthulu","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haliphax%2Fxthulu","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haliphax%2Fxthulu/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haliphax%2Fxthulu/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haliphax%2Fxthulu/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/haliphax","download_url":"https://codeload.github.com/haliphax/xthulu/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haliphax%2Fxthulu/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30209797,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-07T05:23:27.321Z","status":"ssl_error","status_checked_at":"2026-03-07T05:00:17.256Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["ansi","ascii","asyncio","bbs","community","console","curses","docker","docker-compose","ncurses","postgresql","python","redis","server","sftp","ssh","terminal","textmode","tty","xterm"],"created_at":"2024-11-17T00:12:38.008Z","updated_at":"2026-03-07T08:03:36.998Z","avatar_url":"https://github.com/haliphax.png","language":"Python","funding_links":["https://github.com/sponsors/haliphax","https://ko-fi.com/haliphax"],"categories":[],"sub_categories":[],"readme":"# xthulu\n\nxthulu _(\"ch-THOO-loo\")_ Python asyncio community server\n\n![Header image](https://github.com/haliphax/xthulu/raw/assets/banner.jpg)\n\n[![Build](https://img.shields.io/github/actions/workflow/status/haliphax/xthulu/docker-build.yml?label=Build)](https://github.com/haliphax/xthulu/actions/workflows/docker-build.yml)\n[![Checks](https://img.shields.io/github/actions/workflow/status/haliphax/xthulu/checks.yml?label=Checks)](https://github.com/haliphax/xthulu/actions/workflows/checks.yml)\n[![Tests](https://img.shields.io/github/actions/workflow/status/haliphax/xthulu/tests.yml?label=Tests)](https://haliphax.testspace.com/spaces/318003?utm_campaign=metric\u0026utm_medium=referral\u0026utm_source=badge)\n[![Coverage](https://img.shields.io/coverallsCoverage/github/haliphax/xthulu?label=Coverage)](https://coveralls.io/github/haliphax/xthulu)\n\nWhile **xthulu** is intended to be a _community_ server with multiple avenues of\ninteraction (e.g. terminal, browser, REST API), its primary focus is to provide\na modern SSH terminal interface which pays tribute to the [bulletin boards][] of\nthe 1990s. Rather than leaning entirely into [DOS][]-era nostalgia, modern\ncharacter sets (UTF-8) and [terminal capabilities][] are taken advantage of.\n\n- 📔 [Contributor guide][]\n- 📽️ [Demo video][] (animated GIF)\n\n## Progress\n\n- 📊 [Alpha release project board][]\n- ✅ [Feature check list][]\n\n## Setup\n\n```shell\n# in the project root\nbin/setup\n```\n\n\u003cdetails\u003e\n\u003csummary\u003eManual steps\u003c/summary\u003e\n\n---\n\nIf you want to perform the steps in the setup script manually for some reason,\nhere they are:\n\n### Create a configuration file and generate host keys\n\n```shell\n# in the data/ directory\ncp config.example.toml config.toml\nssh-keygen -f ssh_host_key -t rsa -b 4096 -N \"\"\n```\n\n### Prepare the docker images\n\n```shell\n# in the docker/ directory\ndocker compose build base-image\ndocker compose pull --ignore-buildable\n```\n\n### Create and seed the database\n\n\u003e ℹ️ Note the names of the scripts. The `bin/xt` script is the command line\n\u003e interface for server tasks, while the `bin/xtu` script is for userland.\n\n```shell\n# in the project root\nbin/xt db create --seed\nbin/xtu db create --seed\n```\n\n### Build the static web assets\n\n```shell\n# in the project root\nbin/build-web\n```\n\n---\n\n\u003c/details\u003e\n\n### Start the services\n\n```shell\n# in the docker/ directory\ndocker compose up -d\n```\n\n## Connect\n\n### Connect to the terminal server\n\nThere is a `guest` account which demonstrates the ability for some accounts to\nbypass authentication.\n\n```shell\nssh guest@localhost\n```\n\nThere is a `user` account with a password for testing password authentication.\n\n```shell\nssh user@localhost  # password is also \"user\"\n```\n\n### Connect to the web server\n\nFor the time being, the web server only demonstrates simple interoperability\nbetween the REST API and static pages. It is available at https://localhost.\nThere is a demo application that can be used for chatting with other users\nconnected via both the web and the SSH server.\n\n\u003e ⚠️ [Traefik][] will be using an untrusted certificate, and you will likely be\n\u003e presented with a warning.\n\nThe same credentials may be used here; for the `guest` account, any password (or\na blank password) will work.\n\n[alpha release project board]: https://github.com/users/haliphax/projects/1\n[blessed]: https://blessed.readthedocs.io/en/latest/intro.html\n[bulletin boards]: https://archive.org/details/BBS.The.Documentary\n[contributor guide]: ./CONTRIBUTING.md\n[demo video]: https://github.com/haliphax/xthulu/raw/assets/demo.gif\n[dos]: https://en.wikipedia.org/wiki/MS-DOS\n[feature check list]: ./CHECKLIST.md\n[terminal capabilities]: https://en.wikipedia.org/wiki/Terminal_capabilities\n[traefik]: https://traefik.io/traefik\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhaliphax%2Fxthulu","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhaliphax%2Fxthulu","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhaliphax%2Fxthulu/lists"}