Download Latest Version NeReO_1.4_build_103.apk (14.1 MB) Google Add to Preferred Sources
Home / 1.3.5
Name Modified Size InfoDownloads / Week
Parent folder
NeReO_1.3.5.apk 2026-09-13 14.0 MB
NeReO_features_IT_essenziali.txt 2026-09-13 1.0 kB
NeReO_features_EN_essentials.txt 2026-09-13 921 Bytes
README_EN.txt 2026-09-13 53.4 kB
README.txt 2026-09-13 56.9 kB
NeReO_1.3.5_src.zip 2026-09-13 667.8 kB
Totals: 6 Items   14.8 MB 37
======================================================================
 NeReO 1.3.5 - Ne(ws) Re(ader) O(pen-source)
 Text-only Usenet (NNTP) newsreader for Android
 By MCSM - 2026/09/10
======================================================================

 ***  VERSION 1.3.5  ***

 One thing only, and it is not a feature: the error messages coming
 from the network layer are now in ENGLISH for everyone.

  * Where it comes from: a user running NeReO with the interface in
    English was answered IN ITALIAN when his server refused the
    connection ("483 Connessione non cifrata...") and reasonably
    wondered what he had done wrong. He had done nothing wrong.
  * Why it happened: NntpClient deliberately has no Android
    dependencies - that is what keeps it testable from the command
    line - and therefore has no Context and cannot read strings.xml.
    Its messages are written in the code, and no system language
    touches them. This was not a forgotten translation: the three
    strings.xml files have full key parity.
  * What was chosen, and what it costs: if a single language has to
    serve everyone, it may as well be the one in values/ (the app's
    default) and the lingua franca of Usenet. This is NOT
    localisation: it is a declared stopgap, and the price is now
    paid by those using the app in Italian, who will read fewer
    than ten messages in English inside an otherwise translated
    app. The real fix - passing those texts in from outside that
    layer - will come when that class is next opened for other
    reasons.
  * The user name is now trimmed of stray spaces, exactly as the
    server address already was. A space picked up from a paste or from
    a keyboard suggestion was sent to the server, which counted it -
    and the only feedback was "authentication failed". The password is
    NOT trimmed, deliberately: it may legitimately begin or end with a
    space, and the app has no right to change it in silence.
  * Password field: a reveal button and a live character count. The
    count is there because it catches what revealing cannot: a
    trailing space is invisible even in plain sight. If you know your
    password is eleven characters and the field says twelve, you have
    found the problem. And if it really does have spaces at the edges,
    the app says so in red instead of correcting it for you.
  * The NNTP diagnostic log now records the SHAPE of each credential -
    how many characters, spaces at the edges, presence of non-ASCII
    characters - and NEVER the value. It is the difference between
    diagnosing a rejected login from a log and guessing at it.
  * Choosing a server from the built-in list now fills in port 563
    with encryption for the three that require an account (Eternal
    September, Solani, OVH). Until now the list offered port 119
    unencrypted to everyone, those three included - and since NeReO
    refuses to put a password on an unencrypted connection, the very
    first attempt ALWAYS failed with a 483. It was not an edge case:
    it was the normal path, and whoever picks a server from a list
    does so precisely in order not to have to choose a port. The two
    open servers stay on 119. Nothing changes for servers you have
    already set up.
  * One defect that showed up in two different ways has been fixed.
    "Open the first unread" sometimes jumped back to the opening
    post - ALREADY READ - even with unread messages waiting; and
    marking a conversation as read occasionally left it showing.
    They were the SAME defect: NeReO answered the question "which
    messages belong to this conversation" in THREE ways, and only
    one of them was the threading engine that actually draws the
    screen. The other two compared text in the References header,
    and disagreed whenever the opening post had never been
    downloaded or a message listed only its direct parent. Now
    every part of the app asks the threading engine.
  * A note for whoever reported it: orphan replies were exactly
    right. Subject changes were not - NeReO's threading engine
    never looks at the subject, so renaming a message cannot
    affect grouping.
  * Signatures may now use blank lines between their lines of text.
    Four lines separated by blanks used to lose the last two,
    because the limit counted physical lines; it now counts lines
    of text, with an overall cap so a signature cannot be padded
    out with empty space. Worth knowing: classic netiquette counts
    four physical lines, blanks included - this is NeReO being
    lenient, and another newsreader may still trim it.

 ***  VERSION 1.3.4 - TECHNICAL RELEASE  ***

 Not a single line of the app itself changed since 1.3.3. What changed
 is everything NeReO stands on.

  * Build toolchain migrated: Android Gradle plugin 8.7.3 -> 9.3.0,
    Gradle 8.9 -> 9.5.0, Kotlin 2.0.21 -> 2.2.10, KSP moved to the
    KSP2 numbering. Done with Android Studio's AGP Upgrade Assistant,
    not by hand: the tool picked the versions that this particular
    installation can actually support.
  * Jetpack Compose from 1.7.6 to 1.12 - twenty months in one step.
    compileSdk goes up to 37 because Compose 1.12 requires it;
    targetSdk STAYS at 35, deliberately: raising it would trigger new
    operating-system restrictions, and we do not want to mix THOSE
    with this jump.
  * Why it goes out on its own, with nothing else: twenty months of
    Compose touch text rendering, scrolling, keyboard and animations
    - that is the whole app. If something misbehaves after this, there
    has to be exactly ONE suspect. It is the same rule that sent
    1.2.14 out alone.
  * The intermediate step was field-tested: new toolchain with the old
    Compose, built and installed - APK verified, AGP 9.3.0 with
    Compose 1.7.6, everything normal. So AGP and Gradle are already
    cleared: if something breaks now, it is Compose.
  * What we are hoping for, stated for what it is: Compose 1.12
    contains explicit work on mouse-driven text selection and on the
    selection toolbar. On a device with no touchscreen that toolbar
    has never appeared. This is the only way to find out whether the
    problem was already fixed upstream. It is a FORECAST, not a
    promise: if it is not fixed, we will know that road was not
    enough - and twenty months of debt will be gone regardless.
  * One thing was lost along the way, and it is only fair to say so:
    selecting text in a message no longer offers "Search the web" and
    "Share". Those two were added in 1.2.8 at Dave Royal's request, by
    replacing the selection menu with our own. Compose 1.12 no longer
    goes through that mechanism: the menu is now the platform one, and
    ours was being ignored in silence.
  * Why they cannot be rebuilt: the new API does let an app ADD items
    to that menu, but it never says which text is selected - verified
    in the androidx source, not inferred. Without the text, "Search"
    and "Share" have nothing to act on. Copy and Select all are
    unaffected, and the "Copy the message" bar action is still there.
  * SelectionToolbar.kt has been deleted rather than left in place and
    inert: its comment kept claiming that it worked, and a file that
    lies is worse than a file that is missing.
  * If you notice anything behaving differently from 1.3.3, report it
    even if it seems trivial. That is precisely what this release is
    for.

 ---

 ***  VERSION 1.3.3  ***

 What's new in this version:
  * When an encrypted connection fails, NeReO now says WHICH of the
    two possible problems it is: the fixes are different, and up to
    1.3.2 we treated them as one.
  * SIGNING CHAIN: if the certificate is not signed by an authority
    Android knows (self-signed, private CA) or has expired, the
    message says so and states plainly that the security option
    CANNOT HELP. Up to 1.3.2 we suggested it in every case, sending
    people to look for a way out that does not exist.
  * HOST NAME: if instead the certificate is valid but issued for a
    different address, the option really does help and the message
    points at it.
  * UNDETERMINED: if the failure matches neither pattern, NeReO says
    so instead of inventing a diagnosis, and shows the raw exception
    text - the datum whoever reports the problem actually needs.
  * The option has been renamed to what it actually does: "Do not
    check the host name on the certificate". Its old name, "Allow
    unverifiable certificates", promised more than it delivered: it
    NEVER made NeReO accept a self-signed, unknown-authority or
    expired certificate - those are refused by Android's TrustManager,
    which that switch does not touch. Its note now says so.
  * No behaviour change: what connected before still connects, what
    was refused is still refused. Only what NeReO SAYS changes.
  * Reported by Bingo3331, who on Paganini did exactly what the error
    message told him to do, saw it fail, and concluded - reasonably -
    that the option was broken. It is not broken: it does something
    else. The dead end was ours.

 ---

  * New "Copy the message" action in the reading bar, both on the
    phone and in the multi-pane reading pane: ONE CLICK copies the
    whole message to the clipboard, with no need to select anything
    first. It is customizable like every other bar action (you can
    move it into the three-dots menu or switch it off). Alongside it,
    a "Paste" button in the compose screen toolbar.
  * Why it was needed, and it was not what we thought: Roxy's test
    video settles it. On his TV box text SELECTION WORKS - the block
    highlights and extends as you drag - but the floating
    Copy/Search/Share bar NEVER APPEARS, not for a single frame in 22
    seconds with the selection sitting in the middle of the screen. It
    is not a popup positioning problem, as we had assumed: the bar is
    never asked to appear at all.
  * The clue to the mechanism: the selection HANDLES are missing too,
    and Compose draws those on the touch path - whereas on a phone,
    with a finger, both handles and bar are there. Two devices, two
    input paths, consistent signals in opposite directions: it is the
    MOUSE path that does not raise the bar. And on Android the right
    button is BACK, so there is no context menu to fall back on
    either.
  * If you have a keyboard attached, Ctrl+C and Ctrl+V already work,
    including where the floating bar does not appear - confirmed by
    Roxy on his TV box. To copy PART of a message that remains the
    quickest route, and it is worth knowing: the capability was
    already there, the information was not.
  * The fix goes around the problem rather than fighting it: actions
    that do not go through the selection at all. One click, identical
    with touch and with a pointer.
  * Known limit of the action: it copies the WHOLE message. To copy a
    fragment you still have to select it - with a finger and the bar,
    or with Ctrl+C.

 ---

 ***  VERSION 1.3.2  ***

 What's new in this version:
  * On the PHONE too you can now go straight to the first unread
    message. New optional setting in Appearance -> "Tap the thread to
    open the first unread": tapping the head of a thread opens the
    first message you have not read yet, instead of the first post (if
    you have read them all, it opens the first post). It works in the
    TREE view and in the GROUPED one.
  * Off by default: if you do not turn it on, nothing changes. In the
    grouped view, if "Tap the message to expand the thread" is on as
    well, EXPANDING TAKES PRECEDENCE - there the thread opens in place
    and staying in the list is the sensible thing.
  * Why a new setting and not the 1.3.1 one: that one only acts where
    a row stands for the whole collapsible thread (grouped view), and
    in the tree view - the very one this was asked for - that premise
    does not hold. Reusing the existing switch could not have worked:
    two different behaviours in two different views, so two switches.
  * The declared User-Agent now follows RFC 5536 (technical note by
    Dave Royal): NeReO/1.3.2 (Android), with the version attached by a
    SLASH. Up to 1.3.1 it read "NeReO 1.3.1 (Android)", with a space.
  * Why this was not merely cosmetic: RFC 5536 sect. 3.2.13 defines
    product = [CFWS] token [ [CFWS] "/" product-version ], so the
    version attaches to the product with a slash. With a space the
    header was not ILLEGAL - the grammar allows several products and
    "1.3.1" is a valid token - but it said something else: TWO
    PRODUCTS, one named "NeReO" and one named "1.3.1". Anyone
    collecting newsreader statistics saw a piece of software that does
    not exist. The "(Android)" comment is CFWS and was already right.
  * Identities already saved are realigned once, and ONLY if they still
    hold exactly one of the defaults we shipped. A User-Agent you wrote
    yourself is never touched - an empty one included, which since
    1.2.9 means "declare nothing" and is a choice, not an oversight.
  * Fixed: if the newest article in a group was cancelled, that group
    stopped updating. Every attempt answered "423 No articles in
    NNNN-NNNN", and it only unblocked itself once somebody posted
    again.
  * Why it happened: once the last article is cancelled, the group's
    reported high water mark does NOT come down (RFC 3977 sect. 6.1.1:
    not all article numbers between the low and high water marks
    correspond to existing articles), so NeReO asked for the range
    from its own bookmark up to that number - a range that is now
    empty. The 423 the server returns is NOT an error: RFC 3977 sect.
    8.3 defines it as "no articles in that range", and it is the right
    answer. NeReO treated it as fatal.
  * What it actually cost, beyond the message on screen: the shared
    connection was torn down and reopened for the remaining groups
    (socket + TLS + authentication all over again, on every update),
    the group was skipped by the anti-loop guard, and the bookmark
    never moved - so the next update asked for the same dead range.
    Now 423 yields an empty list, the bookmark moves on, and the dead
    range is consumed once.
  * This was not a laboratory case: gaps between the low and high
    water marks are part of the protocol, and spam cancels hitting the
    newest article of a quiet group are routine. BIG Umberto's
    deliberate test on alt.test.a, reproduced three times on three
    different servers (Solani, eternal-september, Paganini), did not
    invent an impossible scenario: it made reproducible something that
    happens on its own and that until now could be written off as a
    "connection error".
  * Under the hood: before adding the FIFTH place in the code that
    works out "first unread of the thread", the logic was extracted
    once and all five now share it. 1.3 shipped with a defect exactly
    because a fix had been applied to two copies out of four of a
    duplicated block.

 ---

 ***  VERSION 1.3.1  ***

 What's new in this version:
  * In the multi-pane layout, tapping a thread now expands it AND goes
    there: with "Tap the first post to expand" enabled, the tap opens
    the first UNREAD message of that thread in the reading pane (or
    the first post, if you have read them all). Collapsing the thread
    puts the selection back on the first post, the only row still
    visible.
  * Why this was serious rather than merely annoying: before, the tap
    only expanded, and the first post of any thread with replies could
    not be opened at all. In 1.2.9 we pointed at the long-press menu
    as the way out - but on a TV box with a remote that gesture DOES
    NOT EXIST, so for anyone reading there the message was
    unreachable. Reported by Roxy, who had asked for that option
    himself back in 1.2.9.
  * Every row in the thread list now carries a "..." (vertical
    ellipsis) button that opens its context menu - open, plonk,
    supersede, withdraw, retention, multiple selection - with a SINGLE
    CLICK. The long press keeps working exactly as before: this adds a
    way in, it does not replace one. It comes from the same report: on
    a device driven by a pointer (a mini keyboard with a trackpad)
    holding a button down is technically possible, but so slow that -
    in Roxy's words - "it would put you off using it".
  * The reading pane bar in the multi-pane layout is now customizable
    too, like the phone one (Appearance -> Customize reading bar),
    with one deliberate difference: here "off" does not mean HIDDEN
    but MOVED INTO THE three-dots MENU - nothing becomes unreachable.
    It ships with ROT13 and Headers already in the menu, because on a
    tablet held upright the pane is narrow and five buttons left
    almost no room for the subject line. Suggested by Dave Royal, and
    asked before by Roxy.
  * Multi-pane only, deliberately: on a phone the tap NAVIGATES AWAY,
    so "expand and go" would be a contradiction - and there the long
    press is a natural gesture, not an obstacle.

 ---

 ***  VERSION 1.3  ***

 What's new in this version:
  * Fixed a gap in 1.2.17: "Send the password only when the server
    asks" was NOT applied when publishing a message or downloading the
    group list - those two paths still authenticated immediately. The
    cause: the same block of code existed in four copies and only two
    had been updated. The four places that opened a connection are now
    merged into one, so the rule holds everywhere by construction.
  * Otherwise 1.3 is 1.2.17 as tested in the field: it is the stable
    release gathering the whole 1.2.12-1.2.17 line - the hardening
    pass that came out of the security audit, TLS hostname
    verification, withdraw and supersede with per-server outcome, and
    everything learned from two days of real testing on three
    providers.
  * 1.3 is the FIRST PUBLIC RELEASE since 1.2.11: anyone updating
    from there also gets, in one go, everything from versions
    1.2.12-1.2.17, which were never distributed (see the note just
    below).

 ---

 ======================================================================
  PLEASE NOTE - VERSIONS 1.2.12 THROUGH 1.2.17 WERE NEVER RELEASED
 ======================================================================

 The last version published on SourceForge was 1.2.11.

 Everything listed below, from 1.2.12 to 1.2.17, was built and tested
 INSIDE the project only: against three real servers (Astraweb,
 usenet.ovh, eternal-september) and on a single device. None of those
 versions ever reached users, and no public APK contains them.

 They are listed because their content is ALL inside 1.3: they are
 here to explain what changed and why, not to point at an update that
 never existed. Anyone coming from 1.2.11 goes straight to 1.3 and
 gets everything at once.

 ---

 ***  VERSION 1.2.17  ***

 What's new in this version:
  * New "Send the password only when the server asks" option
    (Maintenance -> Security), OFF by default. Normally NeReO
    authenticates as soon as it connects, on every connection; with
    this on it waits for the server to ask, authenticates then, and
    repeats the command. On a server that cannot encrypt the
    connection this matters a great deal: INN servers let you read
    without credentials and only require them to publish, so the
    password crosses the network a few times a month instead of
    dozens of times a day. Off by default because it changes how
    EVERY server is contacted: if one stops working, turn it back off
    and everything is exactly as before.
  * The server list now shows "last connection was NOT encrypted"
    under any server that is talking in clear. It is based on what
    actually happened, not on the settings: a server can be
    configured to encrypt, announce it, and still fail to do so. It
    is a permanent mark rather than a recurring warning, because that
    state does not change by itself and a warning that keeps coming
    back is one you learn to ignore.
  * The diagnostic log no longer counts expected replies as errors: a
    successful withdrawal used to end its session with "1 error",
    because the 430 "no such article" - which is precisely the answer
    being looked for - was counted as a failure.

 ---

 ***  VERSION 1.2.16  ***

 What's new in this version:
  * Withdrawing a message (cancel) now tells you how it went on EVERY
    configured server, not just the one you posted to. A list appears
    at the end - withdrawn, still there, could not check - with the
    server the request was actually sent to marked as such. It is the
    answer you could previously only get by checking by hand, one
    server at a time, from another program.
  * The confirmation dialog now says up front what you used to find
    out afterwards. Four field tests on September 6th and 7th
    established that a withdrawal acts, in practice, only on the
    server you posted to: other servers keep the message, and many
    providers ignore withdrawal requests entirely. Hence the advice
    now written into the confirmation: if a correction has to be seen
    by everyone, the right tool is "Supersede", not "Withdraw" - a
    supersede is an ordinary article and always propagates, while a
    cancel is a control message that almost nobody forwards.
  * No background work: the servers are queried only at that moment,
    one connection each, and an unreachable one becomes "could not
    check" without failing the rest.

 ---

 ***  VERSION 1.2.15  ***

 What's new in this version:
  * "Withdraw from server (cancel)" now tells you WHETHER IT WORKED.
    Until now the app only said "request sent, the server may ignore
    it", so anyone withdrawing a message on a server that ignores
    control messages stayed convinced it was gone. Right after
    sending, NeReO now asks the server whether that article is still
    there and reports the answer: withdrawn, still present, or not
    verifiable. Three outcomes rather than two, because we have seen
    all three in the field.
  * A message that no longer exists on the server (expired, or
    withdrawn by its author) is now reported as such instead of as a
    generic network error, with a "Remove the local copy" button next
    to the explanation to clear the leftover summary row. Both in the
    page view and in the reading pane.
  * Supersedes handled on read: when a message replaces another, the
    replaced one is HIDDEN (not deleted: "Show hidden" brings it
    back), and only if both come from the same address. Without that
    check anyone could make someone else's message disappear from a
    reader's view.
  * Invisible technical fixes: a plain "article not found" reply is no
    longer mistaken for a dropped connection (a 1.2.13 defect that
    cost a needless reconnection); a server given as an IP address no
    longer produces an incomprehensible error; and changing the
    security switches now immediately closes any connection opened
    under the previous settings.

 ---

 ***  VERSION 1.2.14  ***

 What's new in this version:
  * TLS HOSTNAME VERIFICATION. Up to 1.2.13 the traffic to the server
    was encrypted, but nobody checked that the certificate presented
    really belonged to the address requested: a hostile network could
    interpose itself and read everything, credentials included,
    without the app noticing. The check is now in place on both paths
    (implicit TLS and STARTTLS), the way a browser does it.
  * If a server has a misconfigured certificate the connection now
    fails with an explicit message saying what happened and where to
    act, instead of a generic network error.
  * New "Allow unverifiable certificates" switch (Maintenance ->
    Security), OFF by default and flagged in red: if you know your
    provider's certificate is set up badly, you can still connect. It
    is global, not per-server, following the same model already used
    since 1.2.6 for cleartext authentication.
  * This version ships ON ITS OWN, deliberately: it is the one
    security-audit fix that can stop a currently working setup from
    working. If a server no longer connects after the update, the
    cause is unambiguously this one, and the cure is the switch above.

 ---

 ***  VERSION 1.2.13  ***

 What's new in this version:
  * No more network error shown in place of a message body when
    moving quickly from one message to the next. The connection kept
    open for reading was being dropped by the server while you read,
    and the first command after the pause fell into the void: now, if
    an I/O error happens on a REUSED connection, that connection is
    discarded and the message is fetched once more over a fresh one,
    silently. Diagnosed from the NNTP diagnostic log.
  * User-Agent pre-filled on NEW identities (requested by
    Merovingio): the field started out empty on a fresh install, so
    anyone who didn't fill it in posted anonymously without choosing
    to. It now contains %nereo%, which becomes the app name and its
    current version when you post (and stays up to date on its own).
    Empty it if you prefer to declare nothing: EXISTING identities
    are left exactly as they are.
  * Hostname verification for encrypted connections moves to 1.2.14
    accordingly: it remains the one fix that ships on its own.

 ---

 ***  VERSION 1.2.12  ***

 What's new in this version:
  * General hardening pass, following a security audit of the whole
    codebase. NeReO now copes safely with malformed or deliberately
    hostile articles and server replies: oversized messages, headers
    with line breaks smuggled inside them, abnormal References
    chains, unusual Face images, tampered backup files on restore.
    Nothing changes in normal use - these are defenses you only
    notice when something tries to take advantage.
  * "Supersede..." now appears only on YOUR OWN messages, and next to
    it there is a new "Withdraw from server (cancel)...": it sends a
    control message asking the server to withdraw an article you
    posted. Many servers ignore such requests, and propagation to
    other servers is never guaranteed: the confirmation dialog says
    so plainly rather than letting you find out afterwards.
  * NOT included here: hostname verification for encrypted
    connections. It is the one fix that can stop a setup that works
    today from working (some providers present a certificate whose
    name doesn't match), so it ships on its own in the next version -
    that way, if something stops connecting, there is no doubt about
    what caused it.

 ---

 ***  VERSION 1.2.11  ***

 What's new in this version:
  * Updated the internal database library (Room) from 2.6.1 to 2.8.4:
    an attempt to fix the rare CursorWindow crash (see version 1.2.10
    below) further upstream. 2.8.4 includes two official fixes for
    races between read Flows and concurrent writes, the same category
    as that crash - this is not a confirmation of the exact cause, it
    remains a partly-verified hypothesis, and the defenses already
    added in 1.2.10 stay active regardless, as an extra safety net. No
    visible change for the user.
  * Extended the same defense (show the last known good list instead
    of crashing) to text search as well, which shared the same risk
    but wasn't protected yet.

 ---

 ***  VERSION 1.2.10  ***

 What's new in this version:
  * More resilient article list: a rare database read error (a Room
    CursorWindow IllegalStateException) that could happen while
    leaving a group as a sync was still writing new messages no
    longer crashes the app - if it happens, it now shows the last
    known good list instead of closing. First real version to ship
    this defense: it had been ready since September 5th, waiting for
    a delivery round.
  * New "Auto-sync on opening a group" switch (Maintenance, reported
    by a tester via Marco): entering a group - even just coming back
    from an article you'd just read - always synced it, with no way
    to turn that off, so getting distracted while reading meant
    threads you'd left unread got mixed in with new ones. You can now
    turn it off, keeping everything still until you trigger a manual
    sync (button/pull-to-refresh, always available either way).
    Default on: no change for anyone who doesn't need it.

 ---

 ***  VERSION 1.2.9.c  ***

 What's new in this version:
  * More robust syncing: removed a possible race condition between the
    automatic new-message check and other syncs in progress (manual or
    timer-driven), which could have contributed to an occasional
    crash - a report from public testing still under investigation
    (see 1.2.9.b below for the diagnostic log). This is not a
    CONFIRMED fix for that specific crash (no direct proof yet), but a
    real concurrency defect, demonstrated in the code.

 ---

 ***  VERSION 1.2.9.b  ***

 Three fixes from 1.2.9's public testing, plus a new diagnostic tool:
 the first real new version to compile and distribute to users (the
 earlier fixes had stayed "version unchanged" because 1.2.9 had not
 been published yet).

 What's new in this version:
  * Search: the results list no longer resets when reopening a result
    (reported by Marco): coming back from a message opened from
    search, the query and results stay as they were instead of
    starting empty - before, you had to redo the same search every
    time to reach the next result.
  * "Show filtered" is now a complete audit (reported by Marco: "if
    they're filtered, why would we ever see them?" -> "to me this is
    a broken audit"): applying filters to already-downloaded
    messages, ones matching an "Ignore" rule (not just "Delete
    completely") are now marked and shown grayed out too - before,
    only the latter were actually removed, the former stayed
    invisible to the audit.
  * Blank User-Agent = a truly anonymous post (reported by Marco):
    leaving the User-Agent field blank in an identity now means the
    posted message carries no User-Agent header at all, exactly as
    the help text always promised - before, it was silently replaced
    with the app's default value.
  * New: last-crash report (Maintenance): if the app ever closes
    unexpectedly, the last crash is now saved on the device on its
    own - nothing is sent anywhere automatically. If it happens to
    you, please copy or export it from the new "Last crash" section
    and send it over: without this, a crash report with no other
    details can't actually be diagnosed.

 ---

 ***  VERSION 1.2.9  ***

 Real multi-identity (requested by Marco: "a real multi-user setup,
 like MesNews and/or Piao Hong's NR MOD17") plus the rest of the NNTP
 roadmap (item E), in the same release - the full plan, chosen
 explicitly by Marco instead of a staged one. This closes the gate
 towards the definitive 1.3, pending only on-device testing.

 What's new in this version:
  * Real multi-identity: create as many identities as you like (name,
    email, signature, User-Agent, X-No-Archive, custom headers, quote
    intro, Face) and assign each one to a specific server - post as
    "MCSM" on one server and as "TAF" on another, each with its own
    address and Face. New Identities screens (list + editor); a
    server's identity is assigned by editing that server. If you
    already had a general identity or a per-server override in an
    earlier version, it's migrated automatically, nothing to redo.
  * STARTTLS (RFC 4642): servers that stay on a plaintext port
    (usually 119) can now upgrade to an encrypted connection right
    after connecting, as an alternative to implicit TLS.
  * CAPABILITIES: read and logged in diagnostics at connection time.
  * Faster reading: while reading through a thread, article bodies
    now reuse the same connection instead of reconnecting for every
    single article.
  * Per-server override of plaintext authentication: force it always
    allowed or always blocked for a single server, regardless of the
    global setting (Maintenance -> Security).
  * Backup and restore now carry identities and the new per-server
    options too; older backups still open exactly as before.
  * Very nested quotes - numeric threshold (Appearance, requested by
    Marco): beyond a certain depth (default 8, configurable to
    6/8/10/12) the repeated ">" marks turn into the level number
    ("9", "10", "11"...) instead of growing forever - display only,
    with the "chevron"/"both" quote style: the text sent and received
    always keeps the standard ">" marks, so quote depth still reads
    correctly everywhere, including in other clients. On by default.
  * Tap the message to expand the thread (Appearance, optional,
    requested by Roxy): as an alternative to the +/- button (enlarged
    to a 48dp minimum for anyone aiming from a distance, e.g. a TV
    box with a remote), tapping the text of a thread's first message
    can expand or collapse it instead of opening it; the message
    stays reachable from the menu (long press) -> "Open". Off by
    default.
  * Drafts moved inside the group (requested by Marco): "Drafts" is
    no longer in the main menu - it opens from the menu of the group
    you're writing to, already filtered to that group's drafts (every
    draft already knows which group it belongs to). A "This group" /
    "All groups" toggle inside the screen still lets you see every
    draft together when you need to.
  * Vertical swipe: now also moves across threads (reported by
    Marco): in reading view, with "unread only" off, swiping past the
    last/first message used to stop silently at the end/start of the
    current thread instead of continuing - different from "unread
    only" on, which already jumped to the next thread. The vertical
    swipe now behaves the same way in both cases (the single < >
    arrows still stay bounded to the current thread, as always - the
    double arrows are for that).

 ---

 ***  VERSION 1.2.8  ***

 An intermediate step between 1.2.7 and the future "complete" 1.3:
 gathers everything that had been prepared as 1.3/1.3.1/1.3.2 during
 solo testing, renumbered before any wider release - none of those
 versions ever shipped officially (those numbers were later reused by the
 real versions described above: same names, different builds). The real 1.3 will land only once
 the rest of the NNTP roadmap (CAPABILITIES, STARTTLS, connection
 pooling, per-server unencrypted-auth override) is done or dropped.

 What's new in this version:
  * Customizable reading bar: under Appearance -> "Customize reading
    bar" choose which icons the bottom reading bar shows and in what
    order (show/hide switch + up/down arrows, which also work well
    with a TV box remote).
  * Selective refresh: the refresh icon now opens a menu - "Refresh
    everything" (as before) or "Choose which servers to refresh". A
    similar menu on each server's header lets you refresh just that
    server or just some of its groups, instead of always downloading
    everything. The server-level menu is also available in
    tablet/panel mode.
  * Full-screen reading in panel mode (tablet): while reading, a new
    icon temporarily hides the groups and threads columns so you can
    focus on the text; it closes itself again when you leave the
    article.
  * Search/Share on selected text: selecting text in an article now
    also offers Search (web search) and Share, next to Copy and
    Select all. "Translate" has been dropped FOR GOOD (it would
    depend on a handler not guaranteed on every device).
  * Update check, four modes: under Maintenance -> Updates, choose
    Never / Once a day / Every 4 hours / On every launch. A "Last
    check: ..." line always shows below the picker, so you can see
    it's working even when it finds nothing new (no popup in that
    case, just that line).
  * Fixed a bug: the old "once a day" limit was per calendar day, not
    elapsed time - opening the app even once before a new release
    went out could leave you "stuck" until the next day, no matter
    how many more times you reopened the app.
  * Beefed-up NNTP diagnostics (Bingo3331 + HAL): with the NNTP log
    switch on (Maintenance -> Diagnostics), the log now also records
    a summary of every OVER/XOVER response (rows received, missing
    numbers, duplicates), per-command timing, and a header/footer for
    every NNTP session - built to track down gaps in a provider's
    backfill (e.g. Astraweb).
  * New manual diagnostic "LISTGROUP diagnostic...": asks the server
    for the real list of articles in a group and compares it with the
    last overview summary; for numbers missing from the overview, it
    checks with STAT whether they truly exist - telling apart a gap
    in the server's overview database from an article that's really
    gone.

 ---

 ***  VERSION 1.2.7  ***

 What's new in this version:
  * Insecure connection: if a server refuses your password over an
    unencrypted connection, a clear dialog now offers two choices -
    "Switch to SSL" (recommended) or "Allow unencrypted" (not
    recommended). No more silent failure for newcomers. The dialog does
    not appear during the periodic automatic check, only when you
    refresh yourself.
  * Reply to crossposts: a new option in Maintenance to reply to ALL the
    original groups by default instead of just the current one (off by
    default; you can still choose case by case).
  * Continuous view: a thicker separator now marks where each new
    sub-thread begins, so they stand out at a glance.

 ---

 ***  VERSION 1.2.6  ***

 What's new in this version:
  * Security: your password is no longer sent over an unencrypted
    connection (it would travel in clear - RFC 4643 forbids it). If you
    really have an old server that needs it, you can knowingly allow it
    under Maintenance -> Security. Prefer the SSL port (usually 563).
  * "Check for updates" is now also in the main menu, next to About and
    What's new - no more digging into Maintenance for it.
  * Panel view: a three-dot menu on every post, with author plonk. Before
    you had to switch to full-screen view to plonk.
  * Panel view: you can reorder groups here too (a "reorder" icon at the
    top of the groups column), not only in full-screen view.
  * Backup now saves the group order: restoring no longer puts everything
    back in alphabetical order.
  * Cleaner Headers view: the long Face/X-Face base64 code is no longer
    shown (the little face still appears next to the author).
  * Mute quotes: a new button hides quoted text with one tap, so only the
    new message stands out (tap the placeholder to show it again). A
    "quote" icon in the reading bar and in the panel headers.
  * Panel view: in the reading pane, swipe up/down to jump to the next or
    previous unread post in the thread (if there are none, to the next or
    previous post) - just like on the phone.

 ---

 ***  VERSION 1.2.5 (fixes)  ***

 What's new and fixed in this version:
  * Continuous view: opening a long thread no longer marks the messages
    after the selected one as read in bulk. Now only what you actually
    see is marked read - the chosen message on opening, then each message
    as you bring it to the top by scrolling.
  * Continuous view: crosspost groups are now shown (in red) on every
    post, not only in the single-article view.
  * With the "unread only" filter on, the empty list now says "No unread
    messages in this group" instead of "No articles...".
  * Update check: NeReO can tell you when a newer version is on
    SourceForge (automatic once a day, can be turned off in Maintenance,
    plus a manual button). Notification and link only: the app never
    downloads or installs anything itself.

 ---

 ***  VERSION 1.2.4 (fixes)  ***

 What's new and fixed in this version:
  * Reflow text: now also joins the "orphan" one- or two-word lines
    left in the middle of a paragraph. Before, even with reflow on, a
    few short lines (like a lone "is" or "and") stayed isolated because
    the previous heuristic mistook them for deliberate breaks. Only
    labels, greetings and short lines that end with punctuation
    (. , : ; ! ? ...) now keep their own line. Off by default; reading
    only.

 ---

 ***  VERSION 1.2.3 (fixes)  ***

 What's new and fixed in this version:
  * Tree view: messages that open a discussion are no longer shown as
    "already read" when they aren't. The colour now follows the post's
    real state, matching "jump to next unread".
  * Continuous view: replying to a crossposted message now shows the
    prompt to choose which groups to reply to, like the single-article
    view. Before, the reply silently went only to the first group.
  * Continuous view: opening several unread messages no longer shows
    "Error: connection reset" instead of the text. Bodies are fetched
    one request at a time rather than opening many connections at once.
  * Panel view: refresh now uses the icon at the top of the column by
    default; the pull-to-refresh swipe no longer steals the first upward
    scroll. The swipe can be turned back on in Appearance. The phone is
    unaffected.
  * Reflow text: now also acts on posts wrapped narrow (around 38-40
    columns), which were skipped entirely before and kept their orphan
    words. Still off by default; reading only.
  * Continuous view: opening a thread on a message in the middle no
    longer marks the messages above it - merely skipped past - as read.
    Marking now applies from the chosen message downwards, not to what
    flashes by on opening.

 ---

 ***  VERSION 1.2.2 (fixes)  ***

 What's new and fixed in this version:
  * New "Reflow text" option (Appearance): rejoins paragraphs broken by
    the classic 72-column wrap, so posts read tidily on narrow screens
    instead of showing one- or two-word orphan lines. Off by default;
    reading only.
  * Refreshing is much faster: one connection per server instead of one
    per group (with many groups the difference is noticeable). The
    new-messages count now also appears when you tap the refresh icon,
    not only with pull-to-refresh.
  * Panel view (tablet): in continuous view the third column now
    follows the same thread order as the tree (not date order). Writing
    a post opens the editor full-screen, so the keyboard no longer
    covers the text area in landscape.
  * Panel view (tablet/landscape): picking a message from the tree
    again positions it correctly at the top and keeps it there (in 1.2
    it could land in a random spot).
  * The "refresh" spinner no longer sticks at the top of the tree pane:
    scrolling stays immediate.
  * SSL/TLS connections: added the missing read timeout, so a stalled
    encrypted connection no longer leaves the app waiting forever.

 ---

 ***  VERSION 1.2  ***

 What's new in this version:
  * Server compatibility: some providers (Astraweb among them) reject
    the OVER command used to fetch headers, and syncing would stop.
    NeReO now falls back to XOVER automatically, so those servers
    work again.
  * Plonk extended to replies: a rule on "from" can now also hide the
    replies to the filtered post and the whole branch below it, whoever
    wrote them (reversible: remove the rule and they come back).
  * Parity on tablets: the panel (three-column) view now has the full
    headers and ROT13 buttons, and the Drafts button is reachable too.
    Continuous view opens already positioned on the chosen message.
  * Groups: long-press a group to download, in one go, the missing
    bodies of the last 300 messages. "Follow the thread" now applies to
    the whole thread; your own posts are recognised even with per-server
    identities.
  * After posting: a "Message sent" confirmation and an automatic group
    refresh, so your own message shows up without a manual reload (as
    soon as the server makes it available).
  * Complete backup (per-server identities, all settings and followed
    threads; restoring stays compatible with older backups).
  * NNTP diagnostics under Maintenance: records the dialogue with the
    server (password always masked) to solve odd cases faster. Off by
    default.
  * Fixes: bottom icon bar wraps to two rows on narrow screens; a
    spurious error while scrolling fast is gone.

 Everything else keeps the full feature set of 1.1. The interface is
 available in Italian and English.

======================================================================


=============
 WHAT NeReO IS
=============

NeReO is a Usenet newsgroup reader for Android, dedicated to text
discussions.

No binary groups, no attachments, no ads, no telemetry: just messages
and conversations, the way Usenet has always been.

It is free software, released under the GNU GPL v3 or later.


===================
 INTERFACE LANGUAGE
===================

NeReO follows the phone language automatically:

  * phone in Italian     -> Italian interface
  * any other language   -> English interface

If you prefer a language different from the phone's, you can set it for
NeReO only, without touching the rest of the system, in two ways:

  * inside the app:  Appearance -> Language
  * from the system: Settings -> Apps -> NeReO -> Language
                     (Android 13 and later only)

On Android 13 and later the two paths control the same choice. On
Android 12 and earlier the system option does not exist: in that case
you change the language from the switch inside the app.

Only these two languages are provided.


==============
 WHAT IT DOES
==============

READING
  * Three ways to view discussions: threaded, sequential, or grouped
    by thread.
  * Continuous view: all messages of a discussion one below the other,
    with a direct jump to the message chosen in the tree.
  * Colour-graded quotes by level, which you can shorten.
  * Face (Usenet's historic avatar) shown next to the author.
  * ROT13, full headers, conversation tree.
  * Gesture navigation: scroll to move to the next message or thread.
  * Indication of replies to your own posts, with a direct jump to the
    first unread one.

WRITING
  * Replies with quoting in four modes, including reduced quoting and
    line-by-line trimming.
  * Crosspost: replies and new threads across several groups.
  * Signature with rotating variants and automatic placeholders.
  * A different identity per server, if needed.
  * Drafts saved locally.

ORGANISING
  * Filters with clear actions (Ignore, Delete, Highlight, Watch the
    thread) or score-based for those who want fine control. They apply
    to already-downloaded messages too.
  * One-tap author plonk.
  * Search by message or by discussion.
  * Automatic retention: by age or by number of discussions, set per
    group.
  * Backup and restore of the configuration, with optional encryption.

APPEARANCE
  * Light, dark or automatic theme; Material You dynamic colours.
  * Ten interface tints, six text sizes.
  * Panel layout for tablets and wide screens, with adjustable ratios.

CONNECTION
  * NNTP with authentication, SSL/TLS on a dedicated port.
  * Automatic IPv6/IPv4 fallback.


======================
 FIRST-TIME SETUP
======================

1. Open the menu (three dots, top right) and choose "Servers",
   then the "+" at the bottom.
   You can start from a known server or enter one by hand.
   Free example: news.eternal-september.org, port 563, SSL
   (requires a free registration on their site).

2. From the menu, open "Identity and signature" and enter the name and
   e-mail you want to appear with in the groups.

3. Go back to the list and tap the "+" at the bottom to browse the
   groups available on the server and subscribe to the ones you like.

4. Tap a group to download its messages.


======================
 INSTALLATION NOTES
======================

* If you are updating from a previous version, install the APK over
  the existing one: do NOT uninstall first, or you will lose groups,
  read state and settings.
* If the phone blocks the installation, allow unknown sources for the
  app you open the file from.
* Requirements: Android 8.0 or later.


==============
 REPORTS
==============

For a useful report, three things are enough:
  * what you were doing when it happened;
  * a screenshot, if the problem is visible;
  * the block from About -> Technical data (there is a Copy button).


================
 VERSION HISTORY
================

1.2.7      "Insecure connection" dialog with two choices (switch to SSL /
           allow unencrypted) when a server refuses cleartext auth.
           Option: reply to crossposts on all groups by default.
           Continuous view: thicker separators at each sub-thread start.
1.2.6      Security: no password over an unencrypted connection (opt-in
           override under Maintenance). "Check for updates" in the main
           menu. Panel view: per-post plonk menu and group reordering.
           Backup keeps the group order. Face/X-Face code hidden in the
           Headers view. Mute quotes with one tap. Panel view: swipe
           up/down to the next/previous unread post.
1.2.5      Continuous view: "read" marking follows what you actually see
           (only the message at the top, as you scroll), not the whole
           screenful of placeholders. Crosspost groups shown on every
           post in continuous view. "No unread messages" empty state.
           Update check against SourceForge (opt-out, notify + link only).
1.2.4      Reflow text: also joins the "orphan" one- or two-word lines
           left in the middle of a paragraph (only labels, greetings and
           short lines ending with punctuation keep their own line).
1.2.3      Tree view: discussion-opening messages no longer always shown
           as read (colour now follows the real state). Continuous view:
           crosspost reply prompt restored; no more "connection reset" on
           bodies (one request at a time). Panel view: refresh icon is the
           default, pull-to-refresh swipe opt-in (Appearance). Reflow text
           now also acts on narrow-wrap authors (~38-40 columns).
           Continuous view: "read" marking applies only from the chosen
           message downwards (no more thread heads marked read just for
           being skipped past on opening).
1.2.2      New "Reflow text" option (rejoins 72-column-wrapped
           paragraphs). Faster refresh (one connection per server
           instead of per group); new-messages count on the icon too. Message
           positioning in the panel view (landscape regression);
           "refresh" spinner no longer stuck at the top of the tree;
           read timeout on SSL/TLS connections.
1.2        Server compatibility (OVER->XOVER fallback: fixes Astraweb
           and the like). Plonk extended to replies. Tablet parity:
           full headers, ROT13 and Drafts in the panel view; continuous
           view positioned. "Download bodies (last 300)" by long-pressing
           a group. "Follow the thread" over the whole thread; per-server
           identities recognised. Complete backup. NNTP diagnostics under
           Maintenance. Two-row bottom icon bar. "Sent" confirmation and
           automatic refresh after posting.
1.1        In-app language switch (Appearance -> Language). Database
           safety net: automatic copy and warning before any reset for
           an incompatible schema.
1.0        First stable version. Interface in Italian and English.
1.0-RC01   Release candidate: full interface translation.
beta20     Fixed three crashes (very large groups, empty screen on the
           back button, confirmation dialogs). Filters applicable to
           already-downloaded messages; delete discussion; jump to
           replies to your own posts; quit application; fixes to
           continuous view, keyboard and reduced quoting.
beta19     Reduced quoting fixed; auto-capitalisation; full group list
           download; retention by number of discussions.
beta18     Replies to your own posts highlighted; continuous thread
           view; filters with actions instead of scores; crosspost on a
           new thread.
beta17     Reply to crossposts choosing the groups; IPv6/IPv4 fallback.
beta16     Fixes to the landscape layout and the interface.
beta14-15  Full headers; reliable Face; trim quote.
beta11-13  Search; group reordering; crosspost; splash screen.
beta7-10   From MyNewsReader to NeReO; drafts; multiple identities.
beta1      First release.


===============
 THANKS
===============

NeReO got this far thanks to those who tried it patiently version
after version, reporting flaws, proposing features and pushing back
when something wasn't right.

Special thanks to Roxy, Bingo3331, Big Umberto, rpoggi, Paul, Dave
Royal, Alessandro, John (n2n), Macchia, Allen and il Merovingio: many
of the things that work well today exist because someone took the
trouble to explain precisely what was wrong.

The project started from Piao Hong's MOD 17 of Newsreader, whose
interface approach it follows.

Usenet Still Lives!
===================
MCSM (aka Marco)
Source: README_EN.txt, updated 2026-09-13