https://github.com/paradise-in-matrix/paradise
A Matrix client for everyone
https://github.com/paradise-in-matrix/paradise
matrix matrix-client matrix-protocol
Last synced: about 2 months ago
JSON representation
A Matrix client for everyone
- Host: GitHub
- URL: https://github.com/paradise-in-matrix/paradise
- Owner: Paradise-in-Matrix
- Created: 2026-02-17T21:31:28.000Z (4 months ago)
- Default Branch: master
- Last Pushed: 2026-04-27T23:33:44.000Z (about 2 months ago)
- Last Synced: 2026-04-28T01:02:54.917Z (about 2 months ago)
- Topics: matrix, matrix-client, matrix-protocol
- Language: Clojure
- Homepage: https://experimental.paradise.moi
- Size: 17.1 MB
- Stars: 14
- Watchers: 0
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.org
Awesome Lists containing this project
README
#+TITLE: Paradise: A Literate CLJS-WASM Matrix Client
#+TEXINFO_FILENAME: matrix-cljs.info
#+TEXINFO_DIR_CATEGORY: Network Applications
#+TEXINFO_DIR_TITLE: Matrix-CLJS
#+TEXINFO_DIR_DESC: A ClojureScript client for the Matrix protocol.
#+OPTIONS: toc:2 ;; Show 2 levels of Table of Contents
#+OPTIONS: num:nil ;; Don't number the headings
#+OPTIONS: html-postamble:nil
**** What is Paradise?
Intended to be both a lightweight CLJS-based Matrix client that uses the matrix-rust-sdk with WASM bindings.
This is necessary to avoid rewriting logic that has complex implementations. Instead we should use the views described
and expand on them via the lovely polymorphic options provided via ClojureScript.
As a final design choice, we opt for using .org files to generate the actual ClojureScript files. Org-mode provides
a clean way to document the methods without making the 'source' code a mess as we will auto-tangle the files.
This allows the process to be:
Org file -> CLJS -> ShadowCLJS compiles -> Vite detects change -> Browser refresh
So we still maintain a crisp developer experience while adding great depth to the documentation end.
Goals for the client include creating a reusable base that can be built on top of and extended easily.
Expanding on that we can then try to build out a full feature client. For the most part these will be React-based
Reagent components in hiccup.
Now there is one feature we use to develop with that is only usable in one editor on the planet. Org-mode.
It isn't practical to remake all of org-mode, but it might be worthwhile to build out tangling of .org files
for VS Code or as a Clojure program embedded in the project. We don't want to limit the options of those who
would help improve on Paradise.
***** Why Paradise?
Often, as time has passed, the internet has become less free and more walled. It is an unfortunate situation
to see more and more information hidden behind the pay walls of corporations. That our data and privacy
might be owned by others. If we can help capture even a sliver of that experience people associate with the
premium of closed-source solutions, then maybe in our own way we might aid in reversing the degradation
of the online experience.
The name stems from Sir Robert Hall II's novel Ultra-85 and the music album of the same name.
The novel itself isn't life-changing, but it conveys ideas similar to the situation we find ourselves in.
We are trapped in an artificial space station that is non-free, corporate-owned platforms whose name could be seen
as analogous to Babel. So we must make our way to Paradise. Many individuals have set out on creating
or finding Paradise, but the goal for this project is to provide people perhaps a small slice of paradise.
***** Set-up
The WASM package is extracted from the repo for cleanliness. So the set-up is rather simple on
most platforms.
#+NAME: build-scripts
#+begin_src sh :tangle build-all.sh :tangle-mode (identity #o755)
npm i
#+end_src
Running involves two terminal windows or running both commands together at the moment. No release build for shadow-cljs quite yet.
** Development Workflow
To develop Paradise, you need to run the ClojureScript compiler and the Vite
asset server simultaneously. If you're making changes to the repo,
then it is advised to use the tangler provided too.
The commands for these are:
*** 1. Start ShadowCLJS/Vite
This handles the compilation of the ~.cljs~ files and provides the REPL.
#+begin_src sh :async t
npm run notangle
#+end_src
*** 2. Start ShadowCLJS/Vite/Tangler
#+begin_src sh :async t
npm run dev
#+end_src
This initializes the following commands:
ShadowCLJS
npx shadow-cljs watch app
Vite
npx vite
Org Tangler (if not notangle)
npx nbb src/utils/tangler.cljs