Bienvenido a github.com
ÍNDICE

* Code
* Issues 1
* Pull requests
* Actions
* Projects
* Security and quality
* Insights
* Releases
* Tags
* Next
* Terms
* Privacy
* Security
* Status
* Community
* Docs
* Contact

HOME
MUSEO
Releases · Faultless/textlog_flutter · GitHub

https://github.com/Faultless/textlog_flutter/releases

Skip to content

Faultless /textlog_flutterPublic

Releases · Faultless/textlog_flutter

Release list

Jump to release

v0.7.2 — what F-Droid review asked forPre-release

Pre-release

Compare

Choose a tag to compare

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

No results found

View all tags

[@Faultless]Faultless released this 31 Aug 08:58

v0.7.2

69d0925

Two changes asked for by F-Droid review, and nothing else. If you are running
v0.7.1 there is
nothing here for you.

Per-ABI version codes on F-Droid's scheme. Flutter offsets a split build's code by
1000 for armeabi-v7a and 2000 for arm64-v8a. F-Droid asks for code * 10 + n, so
pubspec's +25 becomes 251 and 252 — adjacent and ordered, and the scheme
their other Flutter apps use.

No dependency metadata in the signature. The Android Gradle Plugin writes a signed
blob listing the app's dependencies into the APK signing block for the Play Store to
read. F-Droid's scanner rejects an APK carrying a signing block it cannot account for,
which is the right call, and nothing here wanted Google reading a dependency list
either way. Their scanner now reports zero problems on both APKs.

The reading changes people actually notice are in
v0.7.0.

The two per-ABI APKs are built inside F-Droid's own buildserver image at the path
their rebuild uses, by
fdroid/build-release.sh,
so F-Droid can publish these rather than rebuilding and signing with a key of its own —
which is what lets an install from here update in place from F-Droid later. Signing
certificate, unchanged since v0.1.0:
c9a6e70cea72c16c2f146789eb2a7919cecfb36baad3666972fd001423cfe6d6.

Which file

  • textlog-0.7.2-arm64-v8a.apk (21MB) — almost certainly this one.
  • textlog-0.7.2-armeabi-v7a.apk (19MB) — older 32-bit devices.
  • textlog-0.7.2.apk (57MB) — every architecture in one file.
  • textlog-0.7.2-macos.dmg (23MB) — the desktop build, ad-hoc signed.

512 tests pass.

Assets6

Loading

Uh oh!

There was an error while loading. Please reload this page.

All reactions

    v0.7.1 — buildable by F-DroidPre-release

    Pre-release

    Compare

    Choose a tag to compare

    Sorry, something went wrong.

    Uh oh!

    There was an error while loading. Please reload this page.

    No results found

    View all tags

    [@Faultless]Faultless released this 31 Aug 00:57

    v0.7.1

    a7410c3

    A build fix, and nothing anyone can see. Everything in
    v0.7.0 still
    stands; if you are already running it there is no reason to hurry.

    Why it exists

    F-Droid builds apps from source, and before it builds it strips signing configuration
    out of build.gradle.kts with a line-based rule:

    ^[\t ]*signingConfig\s*[= ]\s*[^ ]*$
    

    This app wrote that assignment across two lines. The rule matched the first, deleted
    it, and left the ?: continuation stranded — so F-Droid's build of textlog could not
    compile the file at all. It is one line now. The rule no longer matches it, the line
    survives, and once the signingConfigs block above it has been removed the fallback
    to the debug key happens by itself, which is exactly what an unsigned build should do.

    Found by running fdroid build against the recipe for the first time rather than by
    reading the documentation — along with two invalid metadata categories, an
    AntiFeatures field that changed shape in fdroidserver 2.x, and rm: globs pointing
    at linux/ and windows/ directories this repo has never had.

    The APKs here are built differently

    The two per-ABI APKs were built inside F-Droid's own buildserver image, at the same
    absolute path their rebuild uses, by
    fdroid/build-release.sh.
    That is what makes a reproducible build possible: F-Droid rebuilds from source,
    compares against these, and — if they match — publishes these, signed with the same
    key. An install from here can then be updated from F-Droid in place, rather than
    having to be uninstalled first.

    Same signing certificate as every release since v0.1.0:
    c9a6e70cea72c16c2f146789eb2a7919cecfb36baad3666972fd001423cfe6d6.

    Which file

    • textlog-0.7.1-arm64-v8a.apk (21MB) — almost certainly this one. Every Android
      phone sold in the last several years is arm64.
    • textlog-0.7.1-armeabi-v7a.apk (19MB) — older 32-bit devices.
    • textlog-0.7.1.apk (57MB) — every architecture in one file. Only worth it if you
      do not know what the target is.
    • textlog-0.7.1-macos.dmg (23MB) — the desktop build. Ad-hoc signed, so Gatekeeper
      will ask you to allow it explicitly the first time.

    512 tests pass.

    Assets6

    Loading

    Uh oh!

    There was an error while loading. Please reload this page.

    All reactions

      v0.7.0 — read by reading, and caught up with the serverPre-release

      Pre-release

      Compare

      Choose a tag to compare

      Sorry, something went wrong.

      Uh oh!

      There was an error while loading. Please reload this page.

      No results found

      View all tags

      [@Faultless]Faultless released this 30 Aug 09:25

      v0.7.0

      2cfad9d

      Reading a post is what marks it read

      Marking by scrolling shipped in v0.5.0 and the rule was too strict to do its job.
      Three separate things left dots on screen that the reader had already earned the right
      to be rid of, and all three are gone:

      • A post had to be fully on screen. The post filling your screen was never fully
        on it. Neither was the one you had plainly started reading at the bottom edge. So
        the posts you actually read were the ones that stayed unread — and a post taller
        than the screen could never be marked at all. Now a slice showing is enough. The
        only thing still excluded is the hairline of the next post always poking in at the
        edge, which is the thing you are scrolling towards.
      • Nothing was marked until the scroll stopped. Now every scroll marks what has
        come into view, and the ids are batched behind it — a fling through forty posts is
        still one request, and the last few of a session go out when you leave the tab
        rather than coming back next launch.
      • A reply grouped under a post was never marked at all. A feed page joins replies
        to parents on the same page, and only the top of each block was measured, so the
        replies inside it stayed unread forever. Passing a block now passes everything in
        it.

      A backlog you can actually finish

      all is everything anyone wrote, so a day away is hundreds of unread posts — and
      "scroll past them to clear them" at that size is a joke, which is why everyone pressed
      "mark all as read" instead. That button was supposed to be the fallback, not the way
      out.

      A fresh start now offers a catch-up set of a dozen posts: the newest ones, marked
      unread, everything behind them shown as read. Read those twelve and the app marks
      the whole feed read on the server
      , including pages it never loaded. Caught up is
      caught up; you should not have to say so afterwards. The button is still there.

      Caught up with upstream

      The server has moved a long way since v0.6.0. Five of those changes are here:

      • Bookmarks. Keep a post from its menu, and bookmarks in the account sheet lists
        what you kept — server side, so it is the same collection as the website's.
      • #exec. textlog runs the code fence once when the post is written and stores
        what it printed. The output is drawn under the post, clipped to the same ten lines
        and two hundred characters a line the site clips it to. Nothing executes on your
        phone.
      • #map. The server geocodes the place and renders the map tile itself, so the
        card is a picture from textlog and a link to whichever maps app it picked. Your own
        location is never involved.
      • #pin. A profile's pinned note and pinned reply are drawn above the list under
        a pinned label, rather than sitting somewhere in date order.
      • Coloured code fences for js and python, in the same four colours the site
        gives them. A hundred-line scanner rather than a highlighting library: it cannot
        fail on code it does not understand, and the worst it does is leave a run plain.

      The site's new names came with it: to me is @, for you is my feed,
      latest is all, and @ goes first as it does on the web. Links to the old URLs
      still open in the app. The API paths deliberately did not change — /feeds/latest and
      /activities/for-you are documented aliases of the new spellings, so the old names
      work against every server this app might meet.

      Still upstream-only: the conversations feeds — the app has grouped a page into
      threads by itself since v0.2.0 — and moderation flags.

      Which file

      • textlog-0.7.0-arm64-v8a.apk (21MB) — almost certainly this one. Every Android
        phone sold in the last several years is arm64.
      • textlog-0.7.0-armeabi-v7a.apk (19MB) — older 32-bit devices.
      • textlog-0.7.0.apk (57MB) — every architecture in one file. Only worth it if you
        do not know what the target is.
      • textlog-0.7.0-macos.dmg (23MB) — the desktop build. Ad-hoc signed, so Gatekeeper
        will ask you to allow it explicitly the first time.

      Android will ask once for permission to install apps from your browser or files app —
      that is expected for anything not from the Play Store. Play Protect may also offer to
      scan it; that prompt keys off the APK itself and there is no way for a developer
      outside the Play Store to avoid it.

      512 tests pass. The signed release build here was run against textlog.cc.

      Assets6

      Loading

      Uh oh!

      There was an error while loading. Please reload this page.

      All reactions

        v0.6.0 — opens as itself, and yours to arrangePre-release

        Pre-release

        Compare

        Choose a tag to compare

        Sorry, something went wrong.

        Uh oh!

        There was an error while loading. Please reload this page.

        No results found

        View all tags

        [@Faultless]Faultless released this 27 Aug 14:12

        v0.6.0

        cfa0580

        The app opens as itself

        A cold start used to render a signed-out app — sign in in the header, no account
        tabs, an empty feed with a spinner — and then rearrange itself once a local read and a
        network round trip had finished. Two separate causes, both fixed.

        Storage is opened before the first frame, so what the device already knows is there
        immediately. The confirmation runs behind you, filling in the rest of the account, and
        only a rejected token signs you out — being offline is not evidence that anyone did.

        And the last page of hot and latest is kept on the device, so there are posts on
        screen straight away rather than a spinner over a feed you were shown yesterday. The
        network replaces them when it lands.

        Yours to arrange

        • Tabs reorder and hide, and stay that way. A tab added by a later version still
          appears, and hiding everything leaves one standing — a tab row with nothing in it is
          an app with no way back to the setting that broke it.
        • Timestamps and reply counts each turn off. With both off the meta line
          collapses rather than leaving an empty tap target.
        • Follow notices can be kept out of your for you feed, if reading about who
          followed whom is not what you came for.
        • Swipe a post leftwards to reply. Leftwards on purpose: a rightward drag from the
          edge is the system back gesture, and competing with that would break something you
          rely on to win something you did not know existed. A wide code block still scrolls
          sideways inside the post.

        Everything above persists, everything defaults to how the app shipped, and none of it
        changes what the server sends.

        Read a post in English

        textlog detects the language and translates once per post, storing nothing when the
        body is already English. So the translation is the server's: the app does not detect
        anything and does not send anybody's post to a third-party translator. It only decides
        whether to offer the swap — and it does not offer one when the translation says the
        same thing as the body, which happens.

        Caught up with upstream

        A post can be moved back to drafts, now that there is an API route for it rather
        than only a form on the website. Not the same as deleting: the words go to your drafts
        list.

        The latest feed is read as you. That brings unread marks that clear as you scroll
        past them, and a mark-all — but the part worth saying is what it fixed. Feed reads were
        going out anonymously, which meant no viewer, which meant the accounts and hashtags you
        had blocked still came back in your own feeds. They do not any more.

        Still upstream-only: moderation flags and a direct reply count, both on the website's
        own post shape rather than the API's.

        Which file

        • textlog-0.6.0-arm64-v8a.apk (21MB) — almost certainly this one. Every Android
          phone sold in the last several years is arm64.
        • textlog-0.6.0-armeabi-v7a.apk (19MB) — older 32-bit devices.
        • textlog-0.6.0.apk (57MB) — every architecture in one file. Only worth it if you
          do not know what the target is.
        • textlog-0.6.0-macos.dmg (23MB) — the desktop build. Ad-hoc signed, so Gatekeeper
          will ask you to allow it explicitly the first time.

        Android will ask once for permission to install apps from your browser or files app —
        that is expected for anything not from the Play Store. Play Protect may also offer to
        scan it; that prompt keys off the APK itself and there is no way for a developer
        outside the Play Store to avoid it.

        465 tests pass. Verified on an Android emulator with the signed release build attached
        here.

        Assets6

        Loading

        Uh oh!

        There was an error while loading. Please reload this page.

        All reactions

          v0.5.0 — clips that play, and dots that clear themselvesPre-release

          Pre-release

          Compare

          Choose a tag to compare

          Sorry, something went wrong.

          Uh oh!

          There was an error while loading. Please reload this page.

          No results found

          View all tags

          [@Faultless]Faultless released this 24 Aug 16:47

          v0.5.0

          b94d5d4

          Two things that were reported as broken or missing, and the groundwork for F-Droid.

          Voice clips play in the app

          They opened Vocaroo before. That was a deliberate call and the wrong one: the site plays
          a clip inline, and so does this now — streamed through textlog's own
          /media/vocaroo/{id}, which is a plain ranged mp3. Going through the proxy is the point,
          the same reason link previews are fetched server side: listening tells Vocaroo nothing.

          One line, one control: play or pause, the elapsed time, and a bar that fills. One player
          for the whole app, so two clips can never play over each other, and it is created only
          when a clip is first pressed — a feed full of them costs nothing until you press one.

          The bug behind the first attempt is worth naming, because it looked like something else
          entirely. The link identifies the clip on the page; the proxy is where the bytes are.
          Handing the link to the player asks it to decode Vocaroo's web page, and the failure
          surfaces as "none of the available extractors could read the stream" — which reads as an
          unplayable clip rather than the mix-up it was. A test now pins the two apart.

          Activity marks itself read as you scroll past it

          Only a tap counted before. So you could read a whole tab and leave every dot exactly
          where it was, and the only way to clear them was pressing "mark all as read" — a chore
          you had already done by reading.

          A row counts once it has been fully on screen. Fully matters: half a row at the
          bottom edge is the thing you were scrolling towards, not the thing you just read, and
          marking it would quietly lose it. A row taller than the screen never counts at all, so a
          wall of text is not declared read for having passed by. The sweep runs when scrolling
          stops rather than per frame, because flinging through a feed is not reading it.

          Packaged for F-Droid

          Store metadata and screenshots under fastlane/, a pinned Flutter floor, and the build
          recipe under fdroid/. Not submitted yet: the recipe still has to be validated by an
          fdroid build, and there is one decision that cannot be taken back — F-Droid signs with
          its own key by default, which means anyone already running the APK from here would have
          to uninstall, losing their settings, to move across. fdroid/README.md lays out both
          paths.

          The pleasant surprise: nothing to strip. The usual blocker for a Flutter app on F-Droid
          is a plugin dragging Google Play Services in through its Android side, and there is none
          here — notifications are a background poll rather than Firebase, and the new audio
          player uses AndroidX media3. Verified on the shipped APK: zero Play Services or Firebase
          classes.

          Which file

          • textlog-0.5.0-arm64-v8a.apk (21MB) — almost certainly this one. Every Android
            phone sold in the last several years is arm64.
          • textlog-0.5.0-armeabi-v7a.apk (19MB) — older 32-bit devices.
          • textlog-0.5.0.apk (57MB) — every architecture in one file. Only worth it if you
            do not know what the target is.
          • textlog-0.5.0-macos.dmg (23MB) — the desktop build. Ad-hoc signed, so Gatekeeper
            will ask you to allow it explicitly the first time.

          Android will ask once for permission to install apps from your browser or files app —
          that is expected for anything not from the Play Store. Play Protect may also offer to
          scan it; that prompt keys off the APK itself and there is no way for a developer outside
          the Play Store to avoid it.

          425 tests pass. Verified on an Android emulator with the signed release build attached
          here, including a clip played end to end.

          Assets6

          Loading

          Uh oh!

          There was an error while loading. Please reload this page.

          All reactions

            v0.4.0 — quizzes, three new markers, and a retry that reads as onePre-release

            Pre-release

            Compare

            Choose a tag to compare

            Sorry, something went wrong.

            Uh oh!

            There was an error while loading. Please reload this page.

            No results found

            View all tags

            [@Faultless]Faultless released this 24 Aug 15:12

            v0.4.0

            845da70

            Catching up with what textlog added upstream, plus one fix that was overdue.

            A quiz took down the page it was on

            Quizzes landed upstream as polls with a right answer — and a quiz has no deadline, so
            expires_at comes back null where this app read a required string. Every feed page, search
            result and thread carrying a quiz failed to decode whole: not a missing card, a blank
            page.

            Quizzes work properly now. #quiz, the answer marked >, an optional explanation after a
            blank line. The right answer and the explanation stay hidden until you commit to one — the
            same rule the tally follows — and the verdict is a tick or a cross as well as a colour,
            because green-versus-red says nothing to a reader who cannot tell those apart. No
            countdown, since there is nothing to close. The meta line says created a quiz rather than
            calling it a poll.

            Three new body markers

            • /italics/ — the site had already spent * on bold and _ on underline.
            • |redacted| — a bar you press to reveal, drawn ink-on-ink so revealing it does not
              reflow the paragraph.
            • > quoted lines — deliberately not behind the markdown setting, because the site
              quotes unconditionally. Consecutive lines group into one quote, > > x nests, and both
              fenced code and ASCII art are left alone: the first so a quiz-syntax example stays
              literal, the second because a drawing's first column is often >.

            Locked threads

            A #lock closes the thread under it, and the server answers a reply with 409 thread_locked. The app now says thread locked where the reply link would be — worked out
            from the post's own tags and the parent the API inlines, and carried down a thread from its
            subject. The server still has the last word; knowing early just saves writing a reply that
            was never going to be accepted.

            Voice clips

            Vocaroo sends no preview metadata at all, so a clip and a blog post looked identical. One
            is now named as a voice clip. Tapping it opens Vocaroo, which has a player — an audio
            engine in here would bring a lock-screen entry, a focus policy and an interruption story
            with it, which is not what a voice clip in a text feed is asking for.

            Retry did nothing you could see

            Riverpod keeps the previous error while a provider rebuilds, so the error branch drew the
            same words and the same button with no spinner. Tapping retry was indistinguishable from
            tapping nothing — which is why the only refresh that felt real was pulling down, where the
            indicator has a spinner of its own.

            It says retrying… now and stops accepting taps until the request settles. That meant
            every call site had to return a future that completes when the refetch does, rather than a
            bare invalidate that returns before there is anything to wait for. The profile screen,
            which stated the problem and offered nothing, has a retry too.

            Upstream also raised the read limit to 600 a minute when signed in, counted per account
            rather than per IP. Nothing here encodes the number — it reacts to a 429 — but it is why
            paging a long thread signed in no longer meets the gate.

            Left alone on purpose: playing a voice clip; the #pin badge, since the API returns
            pinned posts in the right order but does not expose the flag; and unpublishing a post back
            into a draft, which is a website form with no API route behind it.

            411 tests pass. Verified on an Android emulator with the signed release build attached
            here — including the quiz, all three new markers against live posts, and the retry with the
            network actually cut.

            Which file

            • textlog-0.4.0-arm64-v8a.apk (20MB) — almost certainly this one. Every Android phone
              sold in the last several years is arm64.
            • textlog-0.4.0-armeabi-v7a.apk (18MB) — older 32-bit devices.
            • textlog-0.4.0.apk (57MB) — every architecture in one file. Only worth it if you do
              not know what the target is.
            • textlog-0.4.0-macos.dmg (22MB) — the desktop build. Ad-hoc signed, so Gatekeeper
              will ask you to allow it explicitly the first time.

            Android will ask once for permission to install apps from your browser or files app — that
            is expected for anything not from the Play Store.

            Assets6

            Loading

            Uh oh!

            There was an error while loading. Please reload this page.

            All reactions

              v0.3.1 — links that stay in the app, and taps that landPre-release

              Pre-release

              Compare

              Choose a tag to compare

              Sorry, something went wrong.

              Uh oh!

              There was an error while loading. Please reload this page.

              No results found

              View all tags

              [@Faultless]Faultless released this 23 Aug 15:21

              v0.3.1

              827d006

              Three fixes, all reported from a phone rather than found in a test.

              A checklist could not be ticked. The card underneath every item opens the post it is
              about, so on the post's own page a tick pushed another copy of the page already showing —
              and a second tick another. There were two faults, so there are two fixes: nothing
              navigates to the route it is already on, and a checkbox or a poll option absorbs its own
              tap even when it cannot act on it, instead of leaving the card to catch it. The post a page
              is about is no longer offered as tappable at all.

              A link back to textlog left the app./post/2201 written in a post used to open a
              browser onto a page this app already has a screen for. Posts, profiles, hashtags and their
              followers, every feed, search with its query, drafts and /enter now open in place.
              Anything else still goes to the browser — another site, a lookalike host, /account/…
              which deliberately has no screen here.

              A fenced code block blanked the page it was on. The tinted box asked for the whole of
              an unbounded width inside its own sideways scroll view; it threw during layout and the
              thread came up empty — post, replies and reply form with it. Every post upstream with a
              code fence in it was an empty page. A short fence still fills the column and a long one
              still scrolls.

              Also: the compose limit in the docs still said 280 where the app has allowed 500 for a
              while.

              367 tests pass. Verified on an Android emulator with the signed release build attached
              here.

              Which file

              • textlog-0.3.1-arm64-v8a.apk (20MB) — almost certainly this one. Every Android phone
                sold in the last several years is arm64.
              • textlog-0.3.1-armeabi-v7a.apk (18MB) — older 32-bit devices.
              • textlog-0.3.1.apk (57MB) — every architecture in one file. Only worth it if you do
                not know what the target is.
              • textlog-0.3.1-macos.dmg (22MB) — the desktop build. Ad-hoc signed, so Gatekeeper
                will ask you to allow it explicitly the first time.

              Android will ask once for permission to install apps from your browser or files app — that
              is expected for anything not from the Play Store.

              Assets6

              Loading

              Uh oh!

              There was an error while loading. Please reload this page.

              All reactions

                v0.3.0 — polls, previews, checklists and draftsPre-release

                Pre-release

                Compare

                Choose a tag to compare

                Sorry, something went wrong.

                Uh oh!

                There was an error while loading. Please reload this page.

                No results found

                View all tags

                [@Faultless]Faultless released this 23 Aug 14:37

                v0.3.0

                a3a9412

                textlog put four things on the API at once, and every one of them was on this app's
                "waiting on the server" list. They are all in.

                Polls you can vote in

                The options, the tally and whether you voted now come from the server instead of being
                guessed at from the post body, and there is an endpoint to vote through — so a tap casts
                a real vote rather than opening a browser.

                The tally is withheld by the server until the poll closes or you have voted, so a
                running count cannot sway your choice. Voting shows the result immediately and corrects
                itself against the server's answer.

                Link previews

                A thumbnail beside the title and description, or a compact text-only line when there is
                no image. The images are textlog's own — it fetches and stores them itself — so showing
                one reveals nothing to the linked site. That is exactly why this waited for the API
                rather than being unfurled client side.

                Two things worth knowing:

                • The card is a thumbnail, not a banner. One preview on textlog is 1191×1684, which
                  at its own aspect is 475 pixels of a phone screen — it buried the post that linked it.
                • No thumbnails on the web build. textlog serves preview images from a host that sends
                  no CORS header at all, and Flutter's web renderer cannot draw an image it is not allowed
                  to fetch. Web gets the compact form, which is the honest rendering there.

                #todo checklists

                A #todo line and [ ] / [x] items, rendered as a list with a count of what is done.

                There is deliberately no endpoint for ticking one off, and that is not a gap: a checklist
                is the post body, so a tick is an edit — which means only its author can tick their own
                list. The same rule the site has.

                Drafts, kept on the server

                save draft in the compose box, and a drafts screen behind your handle. Server-side, so a
                draft started on the website is here and one started here is there. Posting a draft
                publishes it rather than leaving a copy beside the post it became.

                Explore, and hashtags you can follow

                A screen of people and hashtags worth following, and follow / block on any hashtag
                page.

                Smaller, but wrong before

                • The character limit is 500, up from 280.
                • The bio limit was wrong the other way: the app allowed 280 where the server caps at
                  160, so it accepted bios the server then refused.
                • *x* is bold and _x_ is underline, rendered unconditionally. The app had them as
                  italics and behind the markdown setting — wrong on both counts, which meant showing
                  the reader something the author had not written.
                • bot is a report reason.

                Faster, and two crashes that only a phone would show

                • A body is parsed once now. Rendering one asks a dozen questions of the same string,
                  and build runs on every frame a tile scrolls through — about 300µs per body per build,
                  which on a debug build on a phone was enough to hang the app. It is a lookup now.
                • A link card could not lay out at all.CrossAxisAlignment.stretch resolves against
                  the incoming maximum height, which inside a scrollable is unbounded — so it threw
                  "BoxConstraints forces an infinite height" and took the whole list with it. It only
                  happened on the branch with a thumbnail, which the web build never takes.
                • Notifications now take their baseline when you switch them on, instead of waiting up
                  to fifteen minutes and then announcing a backlog of things you had already read on the
                  website.

                Still waiting on the server

                Instant notifications. They need an endpoint under /api/v1/ that takes an FCM or APNs
                device token; textlog's push is Web Push under /account/, cookie-authenticated and
                expecting a browser endpoint, which an app cannot use. Until then the app polls, and
                Android will not run periodic work more often than every fifteen minutes — batching it
                further while the phone is idle. The setting says so rather than implying a schedule
                Android does not keep.

                Assets6

                Loading

                Uh oh!

                There was an error while loading. Please reload this page.

                All reactions

                  v0.2.1 — the reply link works, and threads stop hiding themselvesPre-release

                  Pre-release

                  Compare

                  Choose a tag to compare

                  Sorry, something went wrong.

                  Uh oh!

                  There was an error while loading. Please reload this page.

                  No results found

                  View all tags

                  [@Faultless]Faultless released this 23 Aug 02:25

                  v0.2.1

                  a555a39

                  Two reported problems, and a third found while reproducing the first.

                  "+N more replies" did nothing

                  Reproduced, and it was worse than it looked: the tap fired a request every time and
                  could never change anything.

                  reply_count is a post's whole descendant count, not the number of direct replies.
                  Three things were treating it as the latter:

                  1. The count was wrong.+7 more replies on a node whose entire visible branch was
                    already on screen. It now counts descendants against everything drawn beneath the
                    node, so the number means what it says.
                  2. The link did the wrong thing. It always tried to load in place — including past
                    the nesting cap, where there is nowhere to draw a reply. So it spent a request and
                    left the tree exactly as it was, which is the "does nothing" that was reported. It
                    now opens the post, where those replies can actually be read, and only loads in place
                    when that will genuinely add something. Fewer requests, not more.
                  3. Cached replies were being thrown away. The same comparison drove change
                    detection, so nearly every node with a grandchild looked out of date and had its
                    replies discarded on every feed fetch — then refetched. It now compares against the
                    count seen when those replies were cached, and stays quiet when it never saw one.

                  That third one was quietly working against the caching the whole feature depends on.

                  A thread with replies could render as empty

                  Found while writing the reproduction. /replies returns the newest hundred of a
                  subtree, which is not the top hundred: a busy branch deep in a thread fills the page and
                  leaves its own ancestors off it, and those posts cannot be placed by parent_id alone.
                  Every one was dropped, so a thread with a hundred and twenty replies showed "No replies
                  yet."

                  The server inlines each post's parent, so the missing level is rebuilt from data already
                  in the response — no extra request. Only when more than one level is missing does it
                  spend a single request on the root's direct children, which guarantees a thread with
                  replies is never blank.

                  The reply header no longer wraps

                  The row carrying the handle, the relation and the fold control is the header of an
                  accordion. When it reflowed, the -/+ control dropped onto a second line and the whole
                  thing read as broken.

                  It stays on one line now. The stamp and the control keep their room; a handle too long to
                  fit is abbreviated with an ellipsis rather than wrapping. The quoted parent's line does
                  the same, so its top link stays put too.

                  Feed tiles still wrap: nothing on those lines has to stay in place, so showing the whole
                  handle beats abbreviating it.

                  Assets6

                  Loading

                  Uh oh!

                  There was an error while loading. Please reload this page.

                  All reactions

                    v0.2.0 — notifications, and a feed that stops repeating itselfPre-release

                    Pre-release

                    Compare

                    Choose a tag to compare

                    Sorry, something went wrong.

                    Uh oh!

                    There was an error while loading. Please reload this page.

                    No results found

                    View all tags

                    [@Faultless]Faultless released this 23 Aug 01:53

                    v0.2.0

                    5b4e351

                    Two things: notifications, and a feed that stops repeating the same conversation at you.

                    Upstream moved 54 commits since v0.1.1. Almost none of it touched the API — the only new
                    endpoint behaviour is bot as a report reason, which is in. Link previews and drafts both
                    shipped on the site and neither is on the API's post shape, so neither is implementable
                    here yet; there is a table at the bottom of what would need to change.

                    Notifications for replies, mentions and follows

                    Off by default. Turning it on is the only thing that asks for permission or schedules any
                    background work.

                    • Reply straight from the notification. A text field in the shade, and the reply posts
                      without opening the app.
                    • Mark read from the notification, which marks it read on the server too, so the web
                      and the app agree.
                    • Tapping one opens the post it is about.
                    • They group into one stack rather than filling the shade, the body is shown in full
                      rather than one clipped line, and each kind can be turned off on its own.

                    How they arrive, honestly. textlog does have push, but it is Web Push: the subscription
                    routes are under /account/, authenticate with a session cookie rather than a bearer
                    token, and expect a browser push endpoint. None of that is reachable from an app. So this
                    polls /activities/to-me in the background — which is exactly replies, mentions and
                    follows of you — and raises the notifications itself.

                    The cost is latency. Android will not run periodic work more often than every fifteen
                    minutes, and iOS decides for itself when a background refresh is worth the battery.
                    The
                    setting says so rather than implying instant delivery. Instant would need an endpoint that
                    takes an FCM or APNs device token.

                    Verified on an Android emulator end to end: the notification and its group summary
                    appear, Reply posts to /api/v1/posts with the right parent, Mark read posts to
                    /activities/to-me/read, and the periodic job registers with a network constraint.
                    iOS is written but unverified — no iOS SDK on the machine this was built on.

                    A feed that does not repeat itself

                    The site now joins a reply to its parent when both are on the same feed page, instead of
                    rendering the reply on its own with the parent quoted underneath it. That is the change
                    somebody asked for on textlog itself — "conversations split into repeated blocks" — and it
                    is worth more on a phone, where the duplication cost the most scrolling.

                    On a live page of twenty posts, six nest and six duplicated quotes disappear. It needs
                    nothing the feed did not already return.

                    A node whose replies are not all on the page offers read more into the thread.

                    Also

                    • bot is a report reason now, and the report sheet scrolls rather than clipping the
                      fifth one — which it had started doing.

                    What is still waiting on the server

                    WantedNeeds
                    Instant notificationsan /api/v1/ endpoint taking an FCM or APNs device token
                    Link previewslink_previews on the API's post shape
                    Drafts/api/v1/drafts
                    Voting in a polla poll endpoint; the site votes by form POST

                    Each is the same shape of gap the write endpoints were before
                    stagas/textlog#3, and the same answer applies:
                    ask for the endpoint rather than scrape the HTML.

                    Assets6

                    Loading

                    Uh oh!

                    There was an error while loading. Please reload this page.

                    All reactions

                      You can’t perform that action at this time.


                      Eres el visitante número 077927 desde el 12/06/1996 · Última actualización: 02/09/2026 · [inicio] · Convertido a HTML 3.2 por el proxy rebajador de Bivid Dial-Up · [ver la versión reinterpretada por IA]
                      Netscape Now! Under construction