0.3.0: client configuration, address management, relays, and file exchange - #6
Merged
Merged
Conversation
Contributor
Author
lundog
marked this pull request as ready for review
July 4, 2026 09:37
lundog
force-pushed
the
update-simplex-6.5.5
branch
from
July 16, 2026 01:47
bc524a2 to
9108a19
Compare
Contributor
Author
|
Update: I've retargeted this PR to Earlier I rebased this branch onto So for now this PR targets What changed:
Happy to rebase this forward onto the 2.0 line once I've sorted out the startup issue. |
lundog
force-pushed
the
update-simplex-6.5.5
branch
from
July 16, 2026 04:33
9108a19 to
e767759
Compare
…ge (0.3.0)
Turns the bridge from a bare Websocket endpoint into a fully configurable
SimpleX client driven from the StartOS UI, bundles simplex-chat v6.5.5, and
reworks the file-exchange contract for consumer packages. Targets start-sdk
1.5.3 (the version that runs on current released StartOS).
Image
- lundog/simplex-websocket-bridge:6.5.5-2 (was simplex-chat v6.5.4): bundles
v6.5.5, raises the websocat message ceiling (default 16 MiB), adds optional
received-files retention. License declared MIT AND AGPL-3.0-only.
- Fixes a connect-time bug: websocat's 64 KiB default split large SimpleX
events (e.g. a ~77 KB new-contact event) into two frames, breaking JSON
parsing ("Unterminated string ... at position 65536").
Configuration
- All client settings live in client-settings.json (read on start; settable
before first start). New "Configure Client" action (replaces Configure Bot
Profile): display name, full name, profile picture, peer type, auto-accept
contact requests, business mode, welcome message, message relays, and
received-file cleanup.
- Profile picture accepts an image URL (http/https, fetched with timeout +
size cap), a data URL, or raw base64; center-cropped square and shrunk to a
<=12 KB JPEG (jimp) to fit SimpleX's avatar limit.
- Profile/address and relay changes apply live over the Websocket (no restart);
only a received-file-retention change restarts (container/janitor env). Reads
are non-reactive, so saving settings doesn't restart the service mid-edit.
- Hands-off mode (manageProfile, default on): "Managed by StartOS" vs "Managed
by my application". When app-managed, the bridge makes no Websocket writes
(start-time sync skipped) and applies relays + cleanup via container env.
Message relays
- Public / self-hosted SimpleX Server / custom SMP+XFTP, applied over the
operator-servers API (/_servers GET -> mutate -> SET), not the --server flag,
which simplex-chat persists in its DB (so the flag stuck and dropping it never
reverted to public). The round-trip makes switching authoritative, including
back to public. Applied on every (re)start and live on change.
- Local declares an optional dependency on the simplex package and auto-pulls
its SMP/XFTP addresses (preference: clearnet domain -> clearnet IP -> Tor ->
.local).
Addresses & lifecycle
- New "View SimpleX Address" / "Reset SimpleX Address" (Danger Zone) for the
long-lived reusable address; "Create SimpleX Invitation" still covers one-time
links. "Reset Client" (was Reset Profile) with an expanded warning covering
the OpenClaw reused-contact-id caveat.
- Start-time settings sync waits for the Websocket to answer (waitForBotReady)
before syncing, fixing an ECONNREFUSED race against websocat's bind.
File exchange (consumer packages)
- Single /data mount; consumers use mountDependency on subpaths (optional
dependency, opt-in). Drops the neutral /simplex re-mount: consumers mount
.simplex/files (read-only) and .simplex/outbound (read-write) at any path and
translate outbound paths on their side (openclaw-simplex does this via
connection.outboundFolder + outboundFolderOnClient), so no shared/verbatim
mountpoint is needed. DB and keys stay private.
- The file-exchange dirs are pinned via env in serverConfig.ts
(SIMPLEX_INBOUND_DIR=/data/.simplex/files, SIMPLEX_TMP_DIR=/data/.simplex/tmp)
so the contract is independent of the image's $HOME-derived defaults.
Version 0.3.0:0; no data migration (client-settings.json created on demand,
store.json/keys unchanged). tsc --noEmit clean; make packs an s9pk; installs
and runs on current released StartOS (0.4.0-beta.9).
lundog
force-pushed
the
update-simplex-6.5.5
branch
from
July 17, 2026 06:15
e767759 to
1f0fd33
Compare
6 tasks
helix-nine
approved these changes
Jul 21, 2026
helix-nine
approved these changes
Jul 21, 2026
9 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Turns the bridge from a bare Websocket endpoint into a fully configurable SimpleX client, driven from the StartOS UI, and bundles simplex-chat v6.5.5.
Image
lundog/simplex-websocket-bridge:6.5.5-2(was simplex-chat v6.5.4): bundles v6.5.5, raises thewebsocatmessage ceiling (default 16 MiB), adds optional received-files retention. License declaredMIT AND AGPL-3.0-only(bundled simplex-chat is AGPL-3.0).websocat's 64 KiB default split large SimpleX events (e.g. a new-contact event, ~77 KB) into two frames, breaking JSON parsing (Unterminated string … at position 65536).Configuration
All client settings live in
client-settings.json(read on start; can be set before first start). Configure Client action (replaces Configure Bot Profile):manageProfile, default on): a "SimpleX Profile" union offers Managed by StartOS vs Managed by my application. When app-managed, the bridge makes no Websocket writes (start-time sync skipped) and applies relays + cleanup via container env, so a non-OpenClaw app can own the profile, address, and runtime server changes itself. Env relays are set-once (--serverpersists in the DB), so reverting to public is then the app's responsibility.Message relays
Public / self-hosted SimpleX Server / custom SMP+XFTP, applied over the client's operator-servers API (
/_serversGET → mutate → SET), not the container--serverflag.simplexpackage and auto-pulls its SMP/XFTP addresses from that package's service interfaces (preference: clearnet domain → clearnet IP → Tor →.local).Addresses & lifecycle
Reliability
waitForBotReady) before syncing, fixing an ECONNREFUSED race against websocat's bind.File exchange (consumer packages)
Single
/datamount; consumers usemountDependencyon subpaths (optional dependency, opt-in):.simplex/filesread-only at any path; resolve reported filenames against it..simplex/outboundread-write at any path; pass the bridge path (/data/.simplex/outbound/<name>), translating the prefix. The openclaw-simplex plugin does this viaconnection.outboundFolder+connection.outboundFolderOnClient. No shared/verbatim mountpoint needed..simplex/or the whole volume.Version / migration
0.3.0:0; no data migration (client-settings.json is created on demand, store.json/keys unchanged).Testing
Installed against a live StartOS and verified:
.simplex/files(ro) and.simplex/outbound(rw) into OpenClaw; with the openclaw-simplex plugin installed (via CLI for now — StartOS auto-install is a later step), inbound and outbound files transferred through OpenClaw over the shared volume.