Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
b0bc7fa
Fixes to Nostr feed and threads
Dec 10, 2025
9f5ad15
Fixed nostr quotes
Dec 10, 2025
17a8da0
UI fixes
Dec 10, 2025
9f70719
fixed composer spinner style
Jan 7, 2026
bc88d53
fixed quote logo truncation
Jan 8, 2026
ce829c4
Compatibility with 409
Jan 8, 2026
1e13550
UI style fixes
Jan 8, 2026
a4f4d48
Merry Christmas
Jan 8, 2026
06d2bdc
added welcome message (claude)
Jan 8, 2026
d408dab
streamlined websocket closing poke
Jan 8, 2026
490bada
Rebased vere fork on current vere
Jan 8, 2026
224d624
Changed composer input to textarea
Jan 8, 2026
4c508b4
Added autocomplete to composer, refactored composer input out
Jan 8, 2026
088b024
probably too much work for the feature but Claude is a good boi
Jan 10, 2026
14c34fe
added s3 browser to composer
Jan 10, 2026
b442064
Some refactoring and finishing touches on autocomplete and s3 support
Jan 10, 2026
b5cf514
Added feedback after relaying post to nostr
Jan 11, 2026
43e0ac8
Added server side ws poke
Jan 11, 2026
5b111ec
Added visual feedback for every nostr event received
Jan 11, 2026
2f08af4
final fixes
Jan 11, 2026
152f5cb
building
Jan 11, 2026
c21647d
Small bugfixes
Jan 11, 2026
7ea7dc5
Fixes on eyre websockets management
Jan 11, 2026
d202090
beta ready
Jan 11, 2026
de85c1b
Fix vere-ws download link in README
polwex Jan 30, 2026
0c27815
added global feed to gui
Feb 2, 2026
a01a198
Merge branch 'develop' of polwexgh:gwbtc/ursockets into develop
Feb 17, 2026
4b002e2
fix to zig build system so it reads parent git repo
Feb 24, 2026
06c6ad7
fix: misc issues in frontend
Feb 24, 2026
432a8d2
fix: 罪該萬死
Feb 24, 2026
467cb38
fix: some utils to use app as websockets server
Feb 24, 2026
982890f
WIP: thread to do one-off requests to WS endpoints as client
Feb 24, 2026
2e7428b
WS one-off thread working
Feb 24, 2026
85cd80f
Cleanup on ws thread
Feb 24, 2026
ba7911e
fix type errors and nested modals in frontend
Feb 25, 2026
dedda3c
fix: changed sys.kelvin to support only %zuse 408
Mar 11, 2026
084d654
Trigger gwbtc/urbit build on push to develop or polwex/tlondesks
nisfeb Mar 18, 2026
3a216f9
Add deploy workflow to distribution ship
nisfeb Mar 20, 2026
4616ec8
Test deploy workflow
nisfeb Mar 20, 2026
cf998ce
fix: changes to lib/websockets.hoon to adapt to changes in iris.hoon …
Mar 27, 2026
2bd0b31
new glob for nostrill UI
Mar 27, 2026
99cb1aa
Merge branch 'develop' of polwexgh:gwbtc/ursockets into develop
Mar 27, 2026
49a8122
UI: new icons, other UI fixes
Apr 1, 2026
365cf44
UI: fixed issue with nostr threads not showing
Apr 1, 2026
14ae54f
new docket tile
Apr 1, 2026
a70f2dd
added relay provenance to every nostr event for ease of fetching
Apr 1, 2026
f72c9ef
UI: type fixes
Apr 1, 2026
01f5f62
new glob
Apr 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
34 changes: 34 additions & 0 deletions .github/workflows/deploy-desk.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
name: Deploy to distribution ship
on:
push:
branches:
- develop

env:
DESK: nostrill
SHIP_HOST: [email protected]
PIER_PATH: /root/.local/share/groundwire-alpha/ribsyp-lidwex-mitdev-sopsyn--difrel-mapler-mitnyt-daplyd
TMUX_TAB: ribsyp

jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup SSH
run: |
mkdir -p ~/.ssh
echo "${{ secrets.DEPLOY_SSH_KEY }}" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
ssh-keyscan -H 143.198.70.9 >> ~/.ssh/known_hosts

- name: Deploy desk
run: |
rsync -az --delete --exclude='.git*' \
app/ ${SHIP_HOST}:${PIER_PATH}/${DESK}/

- name: Commit desk on ship
run: |
ssh ${SHIP_HOST} "tmux send-keys -t ${TMUX_TAB} '|commit %${DESK}' Enter"
18 changes: 18 additions & 0 deletions .github/workflows/trigger-urbit-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
name: Trigger Groundwire Build
on:
push:
branches:
- develop
- polwex/tlondesks

jobs:
trigger:
runs-on: ubuntu-latest
steps:
- name: Trigger gwbtc/urbit build
run: |
gh workflow run groundwire-build.yml \
--repo gwbtc/urbit \
--ref gw/next/kelvin/408
env:
GH_TOKEN: ${{ secrets.GH_PAT }}
74 changes: 74 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# Nostrill

Poasting on Urbit and Nostr

## Get started

The Nostr network uses WebSockets as its only way of communication. Therefore this app required adding WebSockets support to the Urbit runtime and OS. Which we did.

To run this app you'll need to run an Urbit ship on this experimental runtime, and install an experimental fork of Arvo on it.
There's an easy way and a hard way to do that.

#### Easy way:

1. Download vere-ws (for linux x64) [from this link](https://s3.sortug.com/globs/vere-ws.tar.gz).
2. Download the arvo-ws pill [from this link](https://s3.sortug.com/globs/nostrill.pill.tar.gz).
3. Boot a new ship, e.g.: `vere-ws -F zod -B arvo-ws.pill`.

Your ship should already have Nostrill installed and running.

#### Hard way:

1. Clone this repo.
2. Build the runtime
2.1. Go to the `vere` folder and compile the runtime running `zig build`.
2.2. Locate the compiled executable from `vere/zig-out` (the rest of the path depends on your system). We suggest making a new folder in the repo root called `piers` and putting it there.
3. Build the kernel
3.1 Boot a new ship of your liking with the newly compiled runtime. Here let's assume your ship's pier is `piers/zod` in the repo root folder.
3.2. Once the ship is running, mount the base desk by running `|mount %base` on Dojo.
3.3. The Arvo source files with WebSockets support are in the `arvo` folder. Copy or symlink `arvo/lull.hoon` to your pier's `base/sys` folder, and the rest to `base/sys/vane`.
3.4. Recompile the Arvo kernel on Dojo by running `|commit %base`. This process is slow, can take 10-30 minutes
4. Install the app
4.1 Make a new desk in Dojo: `|new-desk %nostrill`.
4.2 Mount it: `|mount %nostrill`.
4.3 Go to your pier and delete the empty desk: `rm -rf piers/zod/nostrill`
4.4 Copy the nostrill desk from the repo root `cp -r app piers/zod/nostrill`.
4.5 Back in Dojo commit the changes: `|commit %nostrill`.
4.6 Install the app `|install %nostrill`.

Your ship should already have Nostrill installed and running and you should be an hour or so older. And wiser.

## Features

### WebSockets support
This repo fullfills the [UIP-0125](https://github.com/urbit/UIPs/blob/main/UIPS/UIP-0125.md) with WebSockets support to both Eyre (server) and Iris (client), and their respective equivalents in Vere. Take a look at the proposal to see which types and data structures are used.

Below is a short explanation on how to use WebSockets in your typical Gall agent development. In `app/lib/websockets.hoon` there is a simple library which will help with most of the boilerplate.

#### Use as a server
Say you want to communicate from a frontend to an Urbit agent through WebSockets. Your agent will need to set an Eyre binding to a given path with the `%connect` task. This makes Eyre know where to route the WebSockets request.
Then have the frontend establish a WebSockets connection to that path. Eyre will receive that first connection attempt and send a `%websocket-handshake` poke to your agent.
If your agent accepts the handshake, Eyre will establish the connection, give it an id number, and subscribe to your agent with the path `/websocket-server/[id]`. You can send data to your client by sending `%give %fact` card to that path.
Further messages from that client will be received as pokes with the `%websocket-server-message` mark and vase of shape [id=@ud =path websocket-message:eyre]

#### Use as a client
To connect from your Gall agent to a WebSockets server, you must pass Iris a `%websocket-connect` task.
If successful, Iris will subscribe to the agent witht he path `/websocket-client/[id]`.
Other than that the flow is very similar. The agent sends WebSockets messages as `%fact` through the open subscription with the vane.
Incoming messages appear as pokes with a `%websocket-client-message` and a vase of shape [id=@ud websocket-message:eyre]

### Urbit Microblogging

Nostrill is the spiritual successor to `%trill`. No import mechanism of `%triill` is planned but we will consider if there's demand.
As such you can poast, set a profile, follow people, and build a feed of your favorite content.
Not all the features of `%trill` are present of yet but Nostrill is *much* faster. And it will stay that way.

### Nostr integration

Add your favorite Nostr relay in the Settings page (or several), then sync in the Nostr tab at the Home page. Your ship will start receiving messages immediately.

You can follow users of Nostr, i.e. subscribe to them, and your `%nostrill` will keep receiving every post they publish on one of your set relays.

As of present only Nostr events kinds `0` (user profiles), `1` (short posts), `6` (reposts) and `7` (reactions) are handled but that will grow soon.


Loading
Loading