Repository navigation
Releases: Lwb89dev/outkast
Releases · Lwb89dev/outkast
Release list
OUTKAST v2.1.0
Added
- Swiping up on a photo or video in the full-screen viewer opens the note's thread, with its
replies, rising from the bottom of the screen. The Reply button still opens the editor. The swipe
is ignored while the photo is zoomed in, so moving around a magnified picture cannot leave the
viewer.
Fixed
- Swiping between Feed, Discover, Long reads and Inbox failed on phones with gesture navigation:
the edge strip lay inside the area Android reserves for the back gesture, which took the swipe.
Android lets an app take only 200dp of each edge away from the back gesture, so the edge swipe
alone could not fix this: measured on a phone, a swipe from the edge at any other height was read
as "back" (second world to the first, first world out of the app). The swipe now also works from
anywhere on the screen, like a pager: left for the next world, right for the previous one.
Horizontal scrollers keep their own swipes (photo carousels, the sections of Discover and Long
reads) and hand the swipe over only when they are on their last page. The edge swipe stays as a
shortcut that wins over them, protected from the back gesture in the middle of each edge. - The same swipe only ever worked for the first two worlds: the gesture kept the destination it was
given when the screen first appeared, so after one move it kept aiming at the same place. It now
always uses the world currently showing. - The edge strip no longer swallows taps and vertical scrolls that start at the edge of the screen;
it takes over only once a finger has clearly started moving inward. - Picking, in Orbit, the feed that is already showing (Home → Recent, or Recent with replies) did
nothing. It now refreshes that feed and scrolls it to the top. - The app crashed when the Feed gallery section of Discover came on screen if the same feed had been
received twice (it is fetched from several relays): the list used the feed's identity as its key
and refused the duplicate. Duplicates are now dropped before the list is built. Swiping through
the sections of Discover reaches this section far more easily than the section picker did.
OUTKAST 2.0.0
OUTKAST 2.0.0 release. Signed arm64-v8a APK with the complete OUTKAST rebrand, modern gesture-first navigation, integrated mini-navbar access to Home modes, Algorithms, Reads, Bookmarks, Profile and Settings, plus Zapstore-compatible release metadata.
LibreNostr v1.1.3
Added
- Quotes: a counter and a list. A note's stats line now shows how many notes quote it, and tapping
it opens a new Quotes tab next to Zaps, Likes and Reposts. The tab lists the quoting notes
themselves, as full cards, and a tap on one opens that note's thread. Quotes are found the two
ways clients write them (aqtag, or anemention with the note's link in the text), and a
reply that happens to embed the note it answers is still counted as a reply. Notes you quote now
carry aqtag as well, which is what other clients look for. - React with any emoji. A long press on the heart opens a picker with six common reactions and
the whole emoji list. A reaction on a note you already reacted to replaces the old one. The Likes
list shows each person's emoji instead of a heart where they sent one. - Comments the NIP-22 way (kind 1111). Comments on an article, and replies to those comments, are
now published as kind 1111 with the article as the root and the comment as the parent, and read
back as a tree: replies under an article are drawn nested, the way thread replies are. Replies to
ordinary notes stay NIP-10 kind 1, as the NIP says. Comments of both kinds, including the kind 1111
ones other clients write under plain notes, appear in threads and in notifications.
Changed
- A tap on a filled heart takes the reaction back. It used to do nothing, so a mistaken reaction
could not be undone. The reaction is withdrawn with a deletion request and the heart empties at
once; if the request cannot be published, the heart is filled again. - GIF search uses LibreNostr's nostr.build access. Results come from nostr.build with the
app's registered key instead of falling back to GIFverse, in one request of up to 200 GIFs (no more
paging), searched the way the service asks (trimmed, lower case, no single letters). The picker says
"GIFs from nostr.build" with a link to the site, as the service's terms require. When the service
limits the app, the picker says so and stops asking until the limit lifts instead of switching
provider. Release builds get the key from a repository secret and fail loudly without it. - Upload errors say what the servers answered. "Unable to upload file" now carries each server's
own words (for instance "Access denied (403)" or "File size exceeds the maximum allowed size of
20 MiB"), so a refusal is no longer indistinguishable from a bad connection.
Fixed
- Uploads failed over Tor. blossom.band and blossom.nostr.build refuse uploads that arrive
through a Tor exit, and cdn.satellite.earth wants an upload permission nobody has by default, so with
the default servers every upload failed. While every connection goes through Tor, servers that accept
anonymous uploads (cdn.nostrcheck.me, cdn.hzrd149.com) now come right after your own. - Videos could not be uploaded. The default server takes at most 20 MiB and a phone video is
usually far larger, so every default server refused it. Large files are now offered to each server
first and skipped by the ones that say no, without sending the file, and two more servers that take
large files are tried when none of the configured ones will. Progress is also reported in larger
steps, which spared a long upload tens of thousands of redraws. - The media tab of a profile never loaded. It asked a centralized service that this build does not
have. It now reads the author's notes from the relays and shows the ones with a picture or a video. - Article comments never loaded. The article itself was looked up with a filter that relays do not
match, so the page found no article and, with it, no comments. - A like that could not be published stayed counted. The failed reaction left the counter raised
and the heart filled until the next refresh. The same went for reposts and zaps. - Files mirrored onto the server that already had them. When the first server refused an upload
and a later one took it, the mirroring still included the one that took it.
LibreNostr v1.1.2
Fixed
- Older notes were fetched while scrolling but never shown. Loading more notes stored them in
the database without telling the list, whose query deliberately does not watch that table, so
the list kept what it had and looked as if it had stopped loading. The new notes only appeared
when something unrelated (a like, a mute, a bookmark sync) happened to refresh it. Every page
added to a feed now refreshes the list. - Returning to the feed could skip notes or stop paging. The feed is replaced with its newest
page whenever the screen comes back into view, but the loader still remembered how far back the
previous scroll had gone: the next page started there, skipping everything in between, or, when
it repeated a request from a few seconds earlier, ended the list for good. It now starts over
from the new page.
LibreNostr v1.1.1
Changed
- Dark Pixel is the default theme. It applies to anyone who never picked a theme: a fresh
install, or an existing one that never opened the appearance settings, no longer follows the
system's light/dark setting. A theme you chose stays, and so does "adjust to the system" if you
turned that on.
Fixed
- Older notes stopped loading while scrolling. A page that no relay answered (a dropped
connection, relays still backing off after one) was read as "there is nothing older", and four of
those in a row ended the feed for good, which could happen within a second of a signal glitch. An
unanswered page now changes nothing and is asked again on the next scroll, after two quick retries.
The same walk had two more ways to stall or skip: a page made only of replies, which a notes feed
hides, looked empty even though older notes were behind it, and a busy group of followed accounts
could push the page past notes it had not been read to yet, losing them; and when the list was
hiding every note a page had just stored, the next request jumped six hours back instead of
continuing from where the page ended. - Long reads disappeared from the Reads tab. A refresh that no relay answered replaced the
cached articles with nothing, and that refresh runs whenever the cache is a few minutes old. It now
keeps what it had. Two quick scrolls could also end the list permanently (the guard against
repeating a request closed it instead of skipping the repeat), and the whole follow list went out
as one filter that relays with a size limit refuse; it is now split into groups of 250 authors,
like the note feed. - Profile header said "Followed by" over the wrong list. The people shown are the ones the
profile follows and you follow too, not its followers. It now reads "Following". - Polls could not be published with an external signer. Kinds 1068 (poll) and 6969 (zap poll)
were missing from the set of kinds sent to Amber or a NIP-46 bunker, so both were refused before
anything was sent and reported as a generic publish error. Voting already worked.
LibreNostr v1.1.0
Added
- GIFs from nostr.build. The GIF picker now searches nostr.build's index of GIFs uploaded to its
free public pool, replacing the Wikimedia Commons search. It opens with results and one-tap topic
chips (gm, lol, bitcoin…), suggests search terms as you type, and posts the GIF by its URL with a
NIP-92imetatag (type, dimensions, size, alt text) instead of downloading and re-uploading it.
nostr.build only serves registered clients, and LibreNostr is not registered yet: until it is, the
picker answers from GIFverse (the index Ditto uses) and says so in its "Powered by" line. Once the
registration is done it switches to nostr.build by itself, with no update needed. - Custom emoji packs (NIP-30).
:shortcode:in a note is drawn as the image the note declares.
The composer has a new emoji panel with the built-in LibreNostr Ostrich pack and the packs on your
emoji list (kind 10030), and published notes carry the matchingemojitags. Settings has a new
Emoji packs screen to browse packs from your relays, add one from annaddrlink, and create,
edit or delete your own (images are uploaded to your Blossom servers).
Fixed
- A single failing relay could stall every load in the app — notes, direct messages and
notifications alike. Every finished query re-dialled each unreachable relay just to close its
subscription while holding one of the few query slots the whole app shares, so a dead relay
starved the others until their queries timed out empty. Closing a subscription no longer opens a
connection; a relay that fails to connect is now left alone for a growing interval (2 seconds up
to 5 minutes, at least a minute when the server refuses outright) and is retried at once when the
network changes, when the Tor mode changes, or when you reconnect it by hand; concurrent callers
share a single connection attempt; and DM and publish operations no longer connect to their relays
one after another before starting.
LibreNostr v1.0.1
Fixed
- Deck mode crashed immediately on any tablet, as soon as it activated (opening the app in
landscape, or rotating into it). Each column sets up its own view-model store so closing it
frees what it opened, but that store wasn't wired to Hilt's dependency injection, so the very
first view model a column tried to create — its feed — crashed instead.
LibreNostr v1.0.0
LibreNostr's first stable release. Every data path in the app — feeds, profiles, threads,
notifications, DMs, search, bookmarks, mute lists — has run directly against Nostr relays since the
0.x series; this release adds a tablet layout on top of that and closes a long list of bugs found in
a full review of the app, several of which could silently lose data.
Added
- Deck mode for tablets. Hold a tablet in landscape and LibreNostr switches to a multi-column
layout in the style of notedeck; rotate back to portrait and you get the usual tabbed app. Phones
never switch, in either orientation.- Several named decks, switched from a sidebar; each can be renamed, reordered or deleted.
- Columns for any of your feeds, a hashtag, a profile, Reads, notifications and messages. A
profile column can be picked by name, NIP-05 address, npub or hex key. - Columns can be rearranged by drag and drop (or with the arrow buttons in the column header).
- Opening a note, a profile or a DM conversation from a column opens it inside that same column,
with a back button to return to the column's feed, instead of leaving the deck. - The deck layout is saved on the device, separately for each of your profiles.
- Advanced search now understands
ORbetween words,-wordto exclude a word,
filter:image/filter:video/filter:audio, and the custom date range from the date picker (which
was previously ignored).
Changed
- Search is much faster. Many relays answer a full-text search request by refusing it; the app
used to miss that refusal and wait out a timeout of several seconds before trying the fallback,
on every step of every search. It now moves on immediately. - Profile search shows matches already stored on the device straight away and refines them as
relays answer; typing a new query cancels the previous search instead of letting its results
arrive late and overwrite the new ones. - Hashtag feeds and hashtag columns are in chronological order, newest first. Searching
#bitcoin
could previously show posts from years ago at the top. - Loading more notes no longer skips newer notes held only by slower relays: a page is closed only
once enough of your relays have answered, not as soon as the fastest one fills it. - Feeds you are not looking at (another tab, a removed deck column) no longer keep a live relay
subscription open in the background, saving battery and data.
Fixed
- Mute list and bookmarks could be wiped. Muting, unmuting or bookmarking while relays were slow
to answer could publish a list containing only that one change, replacing everything else on
your relays. Private (encrypted) entries and entries written by other clients were also dropped
on every edit. Edits now always start from your latest published list and keep everything they
don't change. - With more than one profile in the app, bookmarks and notifications of one profile could overwrite
those of another when both had bookmarked the same note or received the same notification. - The extra relays LibreNostr adds to reach people you follow who publish elsewhere were also sent
your relay login (NIP-42 AUTH) and your private requests (DMs, private lists). They are now
read-only helpers used for public content only. - Profile names and pictures could flip back to an older version when a relay holding an outdated
copy answered last. - An author could stay shown as a raw npub for the rest of the session if a screen was closed while
their profile was still loading. - Loading older notifications could skip some between one page and the next.
- The notification badge never came back after you had opened the notifications once, until the
app was restarted. - Tapping the "new notes" pill replaced the feed with just the new notes, dropping everything
already loaded below them. - Replying from inside a thread with the undo timer enabled showed no countdown, so the reply
seemed to do nothing for several seconds, and leaving the thread in that window discarded it.
The countdown now appears there too. - A note could be published twice when "post now" was tapped as the undo countdown ran out.
- The media gallery failed to open images and videos whose address contains a query string.
- Unread message counts could come back after a conversation had been marked as read.
- Searching for text containing quotes or a backslash broke the search.
- Profile search no longer matches almost every profile on short queries (it used to match the
profile data's field names and fragments of picture URLs). bitcoin OR lightningrequired both words instead of either, and asince:/until:date could
be misread as akind:filter that matched nothing.
LibreNostr v0.7.0
Changed
- The note feed, notifications and DM conversations now show content noticeably faster: opening a
reply's parent note, refreshing the feed, and loading notifications no longer wait on profile
pictures/names or on interaction counts before showing anything — the note or notification itself
appears first, names and counters fill in moments later. - Opening a DM conversation no longer re-decrypts the whole inbox every time; it also runs off the
main thread now, instead of occasionally freezing the app while it worked. - Relay queries no longer wait far longer than intended when a relay is slow or unreachable: a
single stuck query could previously hold up the screen for well over ten seconds; it's now capped
consistently across the app.
Fixed
- Some notes crashed the feed outright when their content matched more than one highlighted piece
at the same spot (a hashtag inside a link, for instance).
LibreNostr v0.6.2
Added
- A local web of trust filter for the following feed (Settings > Web of Trust): hides notes and
reposts from accounts you don't follow and that aren't followed by enough of the people you do
follow. Entirely on-device — it reads only public follow lists already published to relays, no
server involved. - Relay addresses can now be plain
ws://when they point at your own network:localhost,
127.0.0.1,::1, or a.localname, for a self-hosted relay with no certificate. #bitcoinrenders as ₿ in Bitcoin's own orange;#nostr,#grownostrand#asknostrget a
purple circle.
Changed
- The relays LibreNostr adds on top of your own, to reach people you follow who don't publish to
any of your configured relays, are now chosen by how many additional people they actually reach,
not by how often a relay shows up overall — the same fixed number of relays now covers more of
your follow list.
Fixed
- Removed an unused CameraX manifest placeholder service that had no function but showed up as an
unexplained entry to anyone inspecting the app's manifest.