<feed xmlns='http://www.w3.org/2005/Atom'>
<title>nymdrop, branch main</title>
<subtitle>Nym-native anonymous submission system (SecureDrop-style), using the Nym mixnet as transport instead of Tor.
</subtitle>
<id>https://git.virebent.art/virebent/nymdrop/atom?h=main</id>
<link rel='self' href='https://git.virebent.art/virebent/nymdrop/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.virebent.art/virebent/nymdrop/'/>
<updated>2026-07-12T18:41:35+00:00</updated>
<entry>
<title>Add prebuilt nymdrop-reader linux/amd64 binary</title>
<updated>2026-07-12T18:41:35+00:00</updated>
<author>
<name>Gab Virebent</name>
<email>gabriel1@virebent.art</email>
</author>
<published>2026-07-12T18:41:35+00:00</published>
<link rel='alternate' type='text/html' href='https://git.virebent.art/virebent/nymdrop/commit/?id=73f4fce0a482550b9c0f0e695a4fec9bf2003738'/>
<id>urn:sha1:73f4fce0a482550b9c0f0e695a4fec9bf2003738</id>
<content type='text'>
Tracked directly in-repo instead of a Forgejo release asset: this
instance's release/attachment upload hangs reproducibly on this specific
binary above ~55MB (isolated by bisection, not a size limit, not disk
space, unrelated to our code), while a plain git push works fine.
Downloadable read-only via cgit's plain view without touching Forgejo's
API. Built from commit 41d3abd.
</content>
</entry>
<entry>
<title>Document reader --gui/--data-dir modes and current platform support</title>
<updated>2026-07-12T18:09:51+00:00</updated>
<author>
<name>Gab Virebent</name>
<email>gabriel1@virebent.art</email>
</author>
<published>2026-07-12T18:09:51+00:00</published>
<link rel='alternate' type='text/html' href='https://git.virebent.art/virebent/nymdrop/commit/?id=263dfd5f237908f951567775bde3e7cd2dde27d0'/>
<id>urn:sha1:263dfd5f237908f951567775bde3e7cd2dde27d0</id>
<content type='text'>
Clarify that only the submission web form is truly cross-platform today;
nymdrop and nymdrop-reader are Linux/amd64 only because upstream nym-client
ships no Windows or macOS binary. Point to the linux/amd64 release build.
</content>
</entry>
<entry>
<title>Add Fyne GUI and portable --data-dir mode to nymdrop-reader</title>
<updated>2026-07-12T17:48:39+00:00</updated>
<author>
<name>Gab Virebent</name>
<email>gabriel1@virebent.art</email>
</author>
<published>2026-07-12T17:48:39+00:00</published>
<link rel='alternate' type='text/html' href='https://git.virebent.art/virebent/nymdrop/commit/?id=41d3abd30cb30be8a8e95c8396da5bb84ab72881'/>
<id>urn:sha1:41d3abd30cb30be8a8e95c8396da5bb84ab72881</id>
<content type='text'>
Extract reader logic (key management, embedded nym-client lifecycle,
receive loop, decrypt, save) into internal/reader as a Hooks-driven
package, shared by both the existing headless CLI and a new --gui mode
built with Fyne. Add --data-dir to make a reader instance fully
self-contained: privkey, inbox, and the embedded nym-client's own state
(normally fixed to $HOME/.nym) all live under the given directory via a
HOME override on the subprocess, enabling zero-trace USB operation.

CLI default behavior is unchanged (same paths, same protocol) so the
pietro deployment is unaffected.
</content>
</entry>
<entry>
<title>Switch Nym WS transport to nym-client's binary protocol, drop second base64 layer</title>
<updated>2026-07-11T11:37:23+00:00</updated>
<author>
<name>Gab Virebent</name>
<email>gabriel1@virebent.art</email>
</author>
<published>2026-07-11T11:37:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.virebent.art/virebent/nymdrop/commit/?id=bec3734676faf3868ea225e0316e77ad5a7e4421'/>
<id>urn:sha1:bec3734676faf3868ea225e0316e77ad5a7e4421</id>
<content type='text'>
Client.Send now speaks nym-client's native binary websocket protocol
(tag || recipient || conn_id || data_len || data) instead of wrapping
the ciphertext in a JSON text message, which required base64-encoding
it a second time on top of the browser's own base64 layer.

The reader's self-address query also switched to the binary protocol:
nym-client picks text-vs-binary for every later "received" push based
on the format of the last request seen on a connection, so leaving the
reader in JSON/text mode would have made nym-client run a lossy UTF-8
conversion over the now-unencoded binary payload, corrupting it. Fixed
the binary Received-frame parsing along the way (previous code assumed
a fixed 16-byte tag with no length prefix, which never matched the real
protocol and was never exercised while the connection stayed text-mode).

Verified end-to-end against the real embedded nym-client 1.1.76 binary,
with the exact wire format cross-checked against upstream nym source at
the pinned build commit.
</content>
</entry>
<entry>
<title>Add Nym community favicon and allow img-src in CSP</title>
<updated>2026-07-08T21:54:25+00:00</updated>
<author>
<name>Gab Virebent</name>
<email>gabriel1@virebent.art</email>
</author>
<published>2026-07-08T21:54:25+00:00</published>
<link rel='alternate' type='text/html' href='https://git.virebent.art/virebent/nymdrop/commit/?id=f21e4d8781c06c0686f4a8697ce0697f9bf6a5cc'/>
<id>urn:sha1:f21e4d8781c06c0686f4a8697ce0697f9bf6a5cc</id>
<content type='text'>
favicon.ico/32/48 reference the official Nym icon so the site is
recognizable as Nym-community. CSP img-src 'self' data: was needed
for the PNG variants to load under the strict script-src 'self' policy.
</content>
</entry>
<entry>
<title>Show current file size limit next to the attachment picker</title>
<updated>2026-07-06T15:00:06+00:00</updated>
<author>
<name>Gab Virebent</name>
<email>gabriel1@virebent.art</email>
</author>
<published>2026-07-06T15:00:06+00:00</published>
<link rel='alternate' type='text/html' href='https://git.virebent.art/virebent/nymdrop/commit/?id=b3d7132714f35174cef0cf5d96bed02a1c4ddff4'/>
<id>urn:sha1:b3d7132714f35174cef0cf5d96bed02a1c4ddff4</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Guard key material in RAM with memguard, add Markdown preview for message field</title>
<updated>2026-07-06T14:34:47+00:00</updated>
<author>
<name>Gab Virebent</name>
<email>gabriel1@virebent.art</email>
</author>
<published>2026-07-06T14:34:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.virebent.art/virebent/nymdrop/commit/?id=16854e8b24a3b00d9d5dbd285bbe3b93ee47ce1c'/>
<id>urn:sha1:16854e8b24a3b00d9d5dbd285bbe3b93ee47ce1c</id>
<content type='text'>
Reader now keeps the private key bytes and the per-submission ECDH/HKDF
secrets in memguard.LockedBuffer (mlock + guaranteed wipe) instead of a
manual zero loop. Added a regression test for the decrypt path.

Message field gets a self-hosted Markdown toggle preview (no external
library): headers, bold/italic, inline code, code blocks, blockquotes,
lists, links. Output is HTML-escaped and link schemes are whitelisted
before rendering. Submitted content is still the raw Markdown source,
unchanged on the wire.
</content>
</entry>
<entry>
<title>Fix payload cap: double base64 inflation broke files near the old 10MB limit</title>
<updated>2026-07-03T13:51:07+00:00</updated>
<author>
<name>Gab Virebent</name>
<email>gabriel1@virebent.art</email>
</author>
<published>2026-07-03T13:51:07+00:00</published>
<link rel='alternate' type='text/html' href='https://git.virebent.art/virebent/nymdrop/commit/?id=4fd6b4fefa7243f68fae7e24df3da46ee1a8e356'/>
<id>urn:sha1:4fd6b4fefa7243f68fae7e24df3da46ee1a8e356</id>
<content type='text'>
The old 10MB cap was checked against the wire body, but two base64 layers
sit between the raw file and that body: crypto.js base64-encodes the file
before AEAD encryption, then nym.Client.Send base64-encodes the ciphertext
again to embed it in the JSON sent to the local nym-client over its control
WebSocket. A file at exactly the old cap produced a wire body just over the
limit after the first layer, and would have blown nym-client's own hardcoded
16MB WebSocket message limit after the second, surfacing as an opaque 500.

Lower the wire-body cap to 11MB, which keeps the second base64 layer with
real margin under nym-client's 16MB ceiling. Effective safe raw file size
is now roughly 8MB, not 10MB.

Reported by Ch1ffr3punk on nym.forum, reproduced with an exact 10MB file.
</content>
</entry>
<entry>
<title>Fix base64 encoding crash on file attachments over ~1MB</title>
<updated>2026-07-02T16:01:21+00:00</updated>
<author>
<name>Gab Virebent</name>
<email>gabriel1@virebent.art</email>
</author>
<published>2026-07-02T16:01:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.virebent.art/virebent/nymdrop/commit/?id=25fb52dc5c587acca2f4457d5c6f7b8032b7829c'/>
<id>urn:sha1:25fb52dc5c587acca2f4457d5c6f7b8032b7829c</id>
<content type='text'>
String.fromCharCode(...bytes) spreads every byte as a separate call
argument, exceeding the engine's max-arguments limit on multi-MB files
(RangeError: Maximum call stack size exceeded). Chunk the conversion
instead. Reported by a real submitter trying a 1.5MB file.
</content>
</entry>
<entry>
<title>Add light/dark theme toggle, fix dark theme text contrast</title>
<updated>2026-07-02T01:58:31+00:00</updated>
<author>
<name>Gab Virebent</name>
<email>gabriel1@virebent.art</email>
</author>
<published>2026-07-02T01:58:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.virebent.art/virebent/nymdrop/commit/?id=52eb46afad75d76c707ed11bbddddbcf5e121deb'/>
<id>urn:sha1:52eb46afad75d76c707ed11bbddddbcf5e121deb</id>
<content type='text'>
Theme state persists via localStorage, applied pre-paint by theme-init.js
to avoid flash. All JS moved to external files (app.js, theme-init.js)
to keep script-src 'self' CSP intact, no inline scripts.

Dark theme footer/notice/tagline colors were too close to the background
(footer nearly matched the card border color) and hard to read; brightened
to readable grays while leaving the light theme and submit button untouched.
</content>
</entry>
</feed>
