SLOP WARNING!!!! SKALA SZPONTU: SZPONT KWANTOWY (ROTACYJNY)
  • Java 57.4%
  • Rust 33.2%
  • Python 6.5%
  • Shell 2.9%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Tymek c3b581b891
Some checks failed
Checks / check (push) Has been cancelled
slopped fixes
2026-10-09 18:28:10 +02:00
.github/workflows slopped ui and bugfixes 2026-10-09 17:58:28 +02:00
client slopped fixes 2026-10-09 18:28:10 +02:00
deploy initial slopmit 2026-10-09 17:07:02 +02:00
docs slopped fixes 2026-10-09 18:28:10 +02:00
relay slopped ui and bugfixes 2026-10-09 17:58:28 +02:00
scripts slopped fixes 2026-10-09 18:28:10 +02:00
.editorconfig initial slopmit 2026-10-09 17:07:02 +02:00
.gitignore initial slopmit 2026-10-09 17:07:02 +02:00
Cargo.lock initial slopmit 2026-10-09 17:07:02 +02:00
Cargo.toml initial slopmit 2026-10-09 17:07:02 +02:00
LICENSE initial slopmit 2026-10-09 17:07:02 +02:00
README.md slopped fixes 2026-10-09 18:28:10 +02:00

SignalBerry

Signal text messaging for the BlackBerry Curve 8900 running OS 4.6.1.310, with a personal Rust relay using whisperfish/presage.

The relay is the Signal linked device and holds the Signal keys and readable messages. The handset connects to it over TLS. It includes native BlackBerry Java UI, a MIDP fallback, contacts/existing groups, text messaging, unread counts, reconnect, minimized reception, drafts, and a bounded offline cache.

Status: the user confirmed installation and CA certificate import on the Curve. The 0.2.2 UI still needs physical-device verification. The full relay compiles, automated tests run without a Signal account, and both clients compile to COD/JAD with JDE 4.6.1 and no required signing authorities listed by RAPC. Cellular networking, minimized execution, and real Signal interoperability still require device acceptance testing.

Run the relay

Build with the dependencies in build.md, then:

cargo build --locked --release
./target/release/signalberry-relay --data data link --name SignalBerry
./target/release/signalberry-relay --data data issue-token --label curve
./target/release/signalberry-relay --data data status

Scan the terminal linking QR from Signal on your primary phone. Save the issued token and enter it in the handset settings. Tokens are revocable; only their hashes are stored by the relay.

Create a local CA and RSA server certificate (the destination must be new), or supply your own:

scripts/create-cert.sh relay.example data/tls

For a LAN IP, use scripts/create-cert.sh 192.168.1.180 data/tls-192.168.1.180 instead. The helper adds an IP subject alternative name and verifies it with OpenSSL. Import that directory's ca.cer, use its server.pem and server.key when serving, and enter 192.168.1.180 as the handset host. The local CA requires explicit trust on the handset; set the device date/time correctly before connecting. The destination must be new, so existing certificates and CA keys are never overwritten.

Import data/tls/ca.cer on the handset and trust it for TLS. Set the relay hostname to match the certificate, then:

./target/release/signalberry-relay --data data serve \
  --listen 0.0.0.0:8443 --cert data/tls/server.pem --key data/tls/server.key \
  --legacy-tls

--legacy-tls explicitly enables TLS 1.0 with RSA/AES-CBC on this listener only. Without it the listener requires TLS 1.2+. Signal's upstream connection retains its own modern TLS stack. Native TLS compatibility on 4.6.1.310 must be established on hardware. There is no plaintext or certificate-verification bypass.

./target/release/signalberry-relay --data data revoke-token --label curve

Revocation also closes active handset sessions. Run one link/serve process per account; a filesystem lock prevents concurrent backend use. Deploy the relay on a machine you trust. Both SQLite stores, handset RMS history, credentials, and drafts are plaintext at rest; use appropriate device and host access controls. Data is retained on the relay for history unless deleted/expired; the handset cache is capped at 200 messages and 512 KiB.

Build and install the app

The native UI uses a dark palette across the conversation list, message bubbles, composer, and relay settings. It has a single conversation list with avatar initials, previews, unread badges, drafts, and recent chats first. Chat screens use rounded incoming/outgoing bubbles, group sender names, timestamps, a fixed composer, and Earlier/Latest actions in the menu. The selected home row has a persistent highlight and returns to the same thread after closing a chat. Transcript updates reuse fields and preserve the visible message offset; sending follows the latest messages, while incoming messages leave readers in place unless they were already at the bottom. Presentation follows Signal’s dark theme and chat colors. Contact display names resolve on the relay and update existing history; UUIDs remain stable identity keys.

Follow build.md. Native artifacts are under build/native; fallback artifacts are under build/midp. Install the native COD/JAD or ALX first, then configure relay host, port, token, Wi-Fi or cellular/APN. Clear cache and edit drafts from the application menu/composer. Exit stops the app; Minimize keeps the receiver running when the OS permits it.

For installation without Windows, run python3 scripts/package-ota.py after building both clients, then python3 scripts/serve-ota.py. Open http://YOUR_COMPUTER_WIFI_IP:8080/ in the Curve's built-in browser on the same Wi-Fi network and choose Install SignalBerry → Download. Upload the contents of build/SignalBerry-ota.zip to an HTTP host for remote downloads; see hosting and MIME configuration.

The UI displays twenty messages at a time and loads older pages. Text sends are limited to 2,000 UTF-8 bytes. Unknown delivery is displayed rather than automatically retried. Unsupported attachments have placeholders. Calls, attachment transfer, reactions, group creation/admin, push/autostart, and pre-link history transfer are outside this version. Read state is local to the handset/relay; no recipient read receipts are sent. Primary-device read sync starts supported disappearing timers.

Protocol types and framing are documented in protocol.md. Linux deployment example: systemd service. Stop the relay before backing up both databases and their WAL files; keep account state private.

Design references: discord-j2me for small handset payloads, worker-thread networking, offline storage, JDK 8/ProGuard builds, and the direct Wi-Fi suffix. SignalBerry uses a new framed protocol and Rust relay rather than Discord-specific proxy code.

Licensed AGPL-3.0-only, matching the Presage-backed relay dependency. SDK binaries are not redistributed in the repository.