{"id":47633925,"url":"https://github.com/paradise-in-matrix/paradise","last_synced_at":"2026-05-01T20:01:27.295Z","repository":{"id":339080536,"uuid":"1160372502","full_name":"Paradise-in-Matrix/Paradise","owner":"Paradise-in-Matrix","description":"A Matrix client for everyone","archived":false,"fork":false,"pushed_at":"2026-04-27T23:33:44.000Z","size":17983,"stargazers_count":14,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-04-28T01:02:54.917Z","etag":null,"topics":["matrix","matrix-client","matrix-protocol"],"latest_commit_sha":null,"homepage":"https://experimental.paradise.moi","language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Paradise-in-Matrix.png","metadata":{"files":{"readme":"README.org","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2026-02-17T21:31:28.000Z","updated_at":"2026-04-27T23:33:37.000Z","dependencies_parsed_at":null,"dependency_job_id":"58c64994-0b03-492c-84b3-cbf0ecb78b7f","html_url":"https://github.com/Paradise-in-Matrix/Paradise","commit_stats":null,"previous_names":["gigiaj/clorusa","gigiaj/paradise","paradise-in-matrix/paradise"],"tags_count":85,"template":false,"template_full_name":null,"purl":"pkg:github/Paradise-in-Matrix/Paradise","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Paradise-in-Matrix%2FParadise","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Paradise-in-Matrix%2FParadise/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Paradise-in-Matrix%2FParadise/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Paradise-in-Matrix%2FParadise/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Paradise-in-Matrix","download_url":"https://codeload.github.com/Paradise-in-Matrix/Paradise/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Paradise-in-Matrix%2FParadise/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32510815,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"online","status_checked_at":"2026-05-01T02:00:05.856Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["matrix","matrix-client","matrix-protocol"],"created_at":"2026-04-01T23:58:02.658Z","updated_at":"2026-05-01T20:01:27.080Z","avatar_url":"https://github.com/Paradise-in-Matrix.png","language":"Clojure","funding_links":[],"categories":[],"sub_categories":[],"readme":"#+TITLE: Paradise: A Literate CLJS-WASM Matrix Client\n#+TEXINFO_FILENAME: matrix-cljs.info\n#+TEXINFO_DIR_CATEGORY: Network Applications\n#+TEXINFO_DIR_TITLE: Matrix-CLJS\n#+TEXINFO_DIR_DESC: A ClojureScript client for the Matrix protocol.\n#+OPTIONS: toc:2          ;; Show 2 levels of Table of Contents\n#+OPTIONS: num:nil        ;; Don't number the headings\n#+OPTIONS: html-postamble:nil\n\n\n**** What is Paradise?\nIntended to be both a lightweight CLJS-based Matrix client that uses the matrix-rust-sdk with WASM bindings.\n\nThis is necessary to avoid rewriting logic that has complex implementations. Instead we should use the views described\nand expand on them via the lovely polymorphic options provided via ClojureScript.\n\nAs a final design choice, we opt for using .org files to generate the actual ClojureScript files. Org-mode provides\na clean way to document the methods without making the 'source' code a mess as we will auto-tangle the files.\n\nThis allows the process to be:\nOrg file -\u003e CLJS -\u003e ShadowCLJS compiles -\u003e Vite detects change -\u003e Browser refresh\nSo we still maintain a crisp developer experience while adding great depth to the documentation end.\n\n\n\nGoals for the client include creating a reusable base that can be built on top of and extended easily.\nExpanding on that we can then try to build out a full feature client. For the most part these will be React-based\nReagent components in hiccup.\n\n\nNow there is one feature we use to develop with that is only usable in one editor on the planet. Org-mode.\nIt isn't practical to remake all of org-mode, but it might be worthwhile to build out tangling of .org files\nfor VS Code or as a Clojure program embedded in the project. We don't want to limit the options of those who\nwould help improve on Paradise.\n\n\n\n***** Why Paradise?\nOften, as time has passed, the internet has become less free and more walled. It is an unfortunate situation\nto see more and more information hidden behind the pay walls of corporations. That our data and privacy\nmight be owned by others. If we can help capture even a sliver of that experience people associate with the\npremium of closed-source solutions, then maybe in our own way we might aid in reversing the degradation\nof the online experience.\n\nThe name stems from Sir Robert Hall II's novel Ultra-85 and the music album of the same name.\nThe novel itself isn't life-changing, but it conveys ideas similar to the situation we find ourselves in.\nWe are trapped in an artificial space station that is non-free, corporate-owned platforms whose name could be seen\nas analogous to Babel. So we must make our way to Paradise. Many individuals have set out on creating\nor finding Paradise, but the goal for this project is to provide people perhaps a small slice of paradise.\n\n\n***** Set-up\nThe WASM package is extracted from the repo for cleanliness. So the set-up is rather simple on\nmost platforms.\n\n#+NAME: build-scripts\n#+begin_src sh :tangle build-all.sh :tangle-mode (identity #o755)\nnpm i\n#+end_src\n\n\nRunning involves two terminal windows or running both commands together at the moment. No release build for shadow-cljs quite yet.\n\n** Development Workflow\nTo develop Paradise, you need to run the ClojureScript compiler and the Vite\nasset server simultaneously. If you're making changes to the repo,\nthen it is advised to use the tangler provided too.\nThe commands for these are:\n\n\n*** 1. Start ShadowCLJS/Vite\nThis handles the compilation of the ~.cljs~ files and provides the REPL.\n#+begin_src sh :async t\nnpm run notangle\n#+end_src\n\n*** 2. Start ShadowCLJS/Vite/Tangler\n#+begin_src sh :async t\nnpm run dev\n#+end_src\n\n\nThis initializes the following commands:\nShadowCLJS\nnpx shadow-cljs watch app\nVite\nnpx vite\nOrg Tangler (if not notangle)\nnpx nbb src/utils/tangler.cljs\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fparadise-in-matrix%2Fparadise","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fparadise-in-matrix%2Fparadise","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fparadise-in-matrix%2Fparadise/lists"}