Skip to content

Releases: Lwb89dev/outkast

OUTKAST v2.1.0

Choose a tag to compare

@github-actions github-actions released this 16 Oct 17:37

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

Choose a tag to compare

@Lwb89dev Lwb89dev released this 13 Oct 18:49

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

Choose a tag to compare

@github-actions github-actions released this 12 Oct 20:46

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 (a q tag, or an e mention 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 a q tag 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

Choose a tag to compare

@Lwb89dev Lwb89dev released this 08 Oct 05:36

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

Choose a tag to compare

@Lwb89dev Lwb89dev released this 07 Oct 19:42

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

Choose a tag to compare

@Lwb89dev Lwb89dev released this 02 Oct 18:50

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-92 imeta tag (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 matching emoji tags. Settings has a new
    Emoji packs screen to browse packs from your relays, add one from an naddr link, 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

Choose a tag to compare

@github-actions github-actions released this 29 Sep 17:34

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

Choose a tag to compare

@github-actions github-actions released this 29 Sep 16:38

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 OR between words, -word to 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 lightning required both words instead of either, and a since:/until: date could
    be misread as a kind: filter that matched nothing.

LibreNostr v0.7.0

Choose a tag to compare

@Lwb89dev Lwb89dev released this 28 Sep 18:49

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

Choose a tag to compare

@Lwb89dev Lwb89dev released this 28 Sep 06:05

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 .local name, for a self-hosted relay with no certificate.
  • #bitcoin renders as ₿ in Bitcoin's own orange; #nostr, #grownostr and #asknostr get 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.