Releases: Faultless/textlog_flutter
Release list
v0.0.11 — the meta line, tidied
A pass over the line above every post.
The meta line holds together now
reply edit delete did not fit on a phone, so delete wrapped onto its own row in red,
under the post it belonged to. reply stays where it was; everything else a post allows
moves into a small menu behind ⋯. One line, whatever the post is and whoever is reading.
The time and the reply count each carry their own underline now, with the · between them
left plain. They were one run of text before, so the rule ran straight across the gap.
The fold control is a bordered box at a fixed size rather than a + loose in the text, and
it no longer changes width when it toggles.
Taps say they landed
Everything in the app is text you tap, and until now a tap was invisible until whatever it
did appeared. Text actions take the accent colour while you hold them, buttons darken, the
fold box lights up. Sliding your thumb off cancels it, the way a button should.
Your own posts are obvious
Your handle gets its own colour in feeds and threads, so you can tell at a glance which
posts in a conversation are yours. Each theme picks its own: dracula gets its green, the
rest a deep teal.
Which file
| File | Size | For |
|---|---|---|
textlog-0.0.11-arm64-v8a.apk |
17 MB | Virtually every Android phone from the last decade — take this one |
textlog-0.0.11-armeabi-v7a.apk |
15 MB | Older 32-bit Android devices |
textlog-0.0.11.apk |
49 MB | Universal Android; runs on anything |
textlog-0.0.11-macos.dmg |
19 MB | macOS (Apple silicon) |
Coming from v0.0.3 or earlier, or the very first v0.0.4 upload? Those were debug-signed
and Android will refuse to install over them — uninstall first. From signed v0.0.4 or
later this updates normally.
macOS, first launch
The app is ad-hoc signed, not notarised. macOS will refuse it the first time. Allow it once
under System Settings → Privacy & Security → Open Anyway, or run
xattr -dr com.apple.quarantine /Applications/textlog.app.
Unofficial client. textlog is by stagas.
v0.0.10 — a thread is one request
Mostly about being a better guest on someone else's server, and about failing in ways you can act on.
A thread is one request now
Opening a thread used to walk the whole tree, firing a request for every branching
node in it. Measured against a local server: 16 requests at once for a thread four
levels deep, fifteen of them for posts nobody had opened.
Threads now load one level. Each branch says + N more replies and loads in place when
you tap it, one request each. Nothing that was visible before is hidden: every post
already tells us how many replies it has, so the counts cost nothing.
Starting the app was doing the same thing on a smaller scale. All three tabs were built
at launch, so opening to the latest feed also fetched the hot feed and opened a live
connection. Tabs mount when you first visit them. Cold start went from three requests and
an open connection to one request.
Thanks to @stagas for
reporting it.
Rate limits behave like rate limits
Being told to slow down used to be handled badly in several places at once:
- A rate limited launch signed you out. Any failure from
/mewas treated as a
rejected token, so a limit logged you out, and then signing back in was refused too.
Only a genuinely rejected token clears the session now. - A failed page kept retrying itself, once per frame, for as long as you sat at the
bottom of a feed. It waits for you to tap retry. - Nothing waited. Background refreshes and live reconnects now stand down while a
limit is tripped, and the live connection obeysRetry-After. - Nothing had a timeout, so a request that never came back left a spinner with no way
out. Everything gives up after 20 seconds and offers a retry.
Errors say how long to wait where the server tells us, and an error page that is not JSON
now reads as what it actually was instead of "could not reach textlog".
Which file
| File | Size | For |
|---|---|---|
textlog-0.0.10-arm64-v8a.apk |
17 MB | Virtually every Android phone from the last decade — take this one |
textlog-0.0.10-armeabi-v7a.apk |
15 MB | Older 32-bit Android devices |
textlog-0.0.10.apk |
49 MB | Universal Android; runs on anything |
textlog-0.0.10-macos.dmg |
19 MB | macOS (Apple silicon) |
Coming from v0.0.3 or earlier, or the very first v0.0.4 upload? Those were debug-signed
and Android will refuse to install over them — uninstall first. From signed v0.0.4 or
later this updates normally.
macOS, first launch
The app is ad-hoc signed, not notarised. macOS will refuse it the first time. Allow it once
under System Settings → Privacy & Security → Open Anyway, or run
xattr -dr com.apple.quarantine /Applications/textlog.app.
Unofficial client. textlog is by stagas.
v0.0.9 — the keyboard stops covering the compose box
Hotfix for v0.0.8. Everything in those notes still applies.
The keyboard no longer sits on top of what you are writing
On a phone, opening the compose sheet raised the keyboard straight over the text field and
the post button. You could type, but you could not see what you were typing.
The sheet was measuring the keyboard from the wrong place: it read the screen insets from
the context that opened it rather than its own, so the dependency was registered outside
the sheet's route. The keyboard came up, nothing inside the sheet rebuilt, and the padding
that should have lifted it stayed at zero.
The sheet also scrolls now, so a short window, a landscape phone or an unusually tall
keyboard leaves the button reachable instead of pushing it off the bottom.
Both are covered by tests that raise a keyboard and assert the field and the button stay
above it, for the compose sheet and for the sign-in screen.
Which file
| File | Size | For |
|---|---|---|
textlog-0.0.9-arm64-v8a.apk |
17 MB | Virtually every Android phone from the last decade — take this one |
textlog-0.0.9-armeabi-v7a.apk |
15 MB | Older 32-bit Android devices |
textlog-0.0.9.apk |
49 MB | Universal Android; runs on anything |
textlog-0.0.9-macos.dmg |
19 MB | macOS (Apple silicon) |
Coming from v0.0.3 or earlier, or the very first v0.0.4 upload? Those were debug-signed
and Android will refuse to install over them — uninstall first. From signed v0.0.4 or
later this updates normally.
macOS, first launch
The app is ad-hoc signed, not notarised. macOS will refuse it the first time. Allow it once
under System Settings → Privacy & Security → Open Anyway, or run
xattr -dr com.apple.quarantine /Applications/textlog.app.
Unofficial client. textlog is by stagas.
v0.0.8 — sign in and write, natively
Early pre-release for testing on Android and macOS.
Coming from v0.0.3 or earlier, or the very first v0.0.4 upload? Those were debug-signed
and Android will refuse to install over them — uninstall first. From signed v0.0.4 or
later this updates normally.
Try it in a browser first — same code,
built for web.
You can actually use it now
Every release before this one could only read. Writing meant being bounced into a browser
tab, because textlog's public API was GET only.
That changed: textlog now has authenticated write endpoints
(stagas/textlog#3, written for this client and
merged upstream). So v0.0.8 does all of this natively:
- Sign in with a six-digit code emailed to you. No password, same as the website.
- Post, reply, edit and delete, in a sheet that is the site's compose box.
- Follow, unfollow and report.
- Your profile comes from your session now, instead of a handle you typed in.
The token is an ordinary textlog session. It shows up under account security on the
website next to your browser sessions, and revoking it there signs the app out. The app never
sees your password, because textlog does not have one.
Signing up is still a browser tab, on purpose. The API refuses to create accounts. That
is where the server puts its abuse controls, and an app that routed around them would be the
thing everyone was right to worry about.
Filter a timeline as you type
Long timelines get a / box. It filters what is already loaded, instantly, with no request
to the server. Every word you type has to appear somewhere in the post: the body, the handle,
a hashtag or a mention.
Edits and deletes land immediately
Editing a post rewrites it everywhere it is already on screen rather than refetching the
screen, and deleting one removes it the same way. Deleting the post a thread is about takes
you up to its parent; deleting from a feed or your profile leaves you exactly where you were,
with the post gone and the note count corrected.
Which file
| File | Size | For |
|---|---|---|
textlog-0.0.8-arm64-v8a.apk |
17 MB | Virtually every Android phone from the last decade — take this one |
textlog-0.0.8-armeabi-v7a.apk |
15 MB | Older 32-bit Android devices |
textlog-0.0.8.apk |
49 MB | Universal Android; runs on anything |
textlog-0.0.8-macos.dmg |
19 MB | macOS (Apple silicon) |
macOS, first launch
The app is ad-hoc signed, not notarised — notarising needs a paid Apple developer account.
macOS will refuse it the first time. Allow it once under System Settings → Privacy &
Security → Open Anyway, or run
xattr -dr com.apple.quarantine /Applications/textlog.app.
Unofficial client. textlog is by stagas.
v0.0.7 — ASCII art that draws, a font picker, and a macOS build
Early pre-release for testing on Android.
Coming from v0.0.3 or earlier, or the very first v0.0.4 upload? Those were debug-signed
and Android will refuse to install over them — uninstall first. From signed v0.0.4 or
later this updates normally.
Try it in a browser first — same code,
built for web.
Which file
| File | Size | For |
|---|---|---|
textlog-0.0.7-arm64-v8a.apk |
17 MB | Virtually every Android phone from the last decade — take this one |
textlog-0.0.7-armeabi-v7a.apk |
15 MB | Older 32-bit Android devices |
textlog-0.0.7.apk |
48 MB | Universal Android; runs on anything |
textlog-0.0.7-macos.dmg |
19 MB | macOS (Apple silicon) |
macOS, first launch
The app is ad-hoc signed, not notarised — notarising needs a paid Apple developer account.
macOS will refuse it the first time. Allow it once under System Settings → Privacy &
Security → Open Anyway, or run
xattr -dr com.apple.quarantine /Applications/textlog.app.
ASCII art finally draws properly
The app shipped with Roboto Mono, which matches what the website resolves to on Android. It
turns out to contain no box-drawing or block characters whatsoever — not one of
┌ ─ ┐ ╔ ═ ╭ ┼ █. Every drawing was falling back to a different face mid-line, which is why
art on a site whose community posts a lot of it came apart.
The second half was line spacing. textlog tags art with #ascii or #ascii_art and drops
those posts to tighter lines; the app was rendering them at normal prose spacing, so
everything drawn on a character grid was pulled apart vertically. Both fixed.
Art is also no longer run through the markdown renderer, which was eating the _ and * out
of the middle of drawings when you had markdown switched on.
Pick your font
Three, under appearance:
- JetBrains Mono — the new default. Sober, ligatures off, full box-drawing coverage.
- Fira Code — ligatures on, which is the reason to choose it.
- System — whatever your phone calls monospace. Costs no download.
Both bundled faces are subset to just what textlog needs — Latin, punctuation, arrows, maths,
box drawing and blocks — so the download did not grow: arm64 is still 17 MB. Emoji are left to
the system, which already has a colour font for them.
Hotfix
The appearance sheet was clipped at the bottom, so the font and markdown settings could not
be reached on a phone. It scrolls now.
Unofficial client. textlog is by stagas.
v0.0.6 — live tab and stale threads fixed
Early pre-release for testing on Android. A fix release for the live tab and for stale threads.
Coming from v0.0.3 or earlier, or the very first v0.0.4 upload? Those were debug-signed
and Android will refuse to install over them — uninstall first. From signed v0.0.4 or
later this updates normally.
Which file
| File | Size | For |
|---|---|---|
textlog-0.0.6-arm64-v8a.apk |
18 MB | Virtually every phone from the last decade — take this one |
textlog-0.0.6-armeabi-v7a.apk |
15 MB | Older 32-bit devices |
textlog-0.0.6.apk |
48 MB | Universal; runs on anything |
Threads no longer go stale on you
Caching threads for the session made navigation instant, and introduced a worse problem: a
thread you had already opened would never show new replies, even if you pulled to refresh.
Two causes, both fixed.
Refresh did nothing. Pull-to-refresh was only refetching parts of the thread older than
five minutes, so on a thread you had just been reading it was a no-op. An explicit refresh
now refetches the whole thread, always. Someone who pulls has usually just been told there is
a new reply, and "nothing has expired yet" is never the answer they wanted.
Nothing noticed the change. Every post carries its own reply_count, and feeds, the live
stream and a single post fetch all return a current one. The app now compares that against
what it holds: if a post claims more replies than are cached, the cached copy is dropped and
the next open refetches. No polling, and no waiting out a timer.
The live stream gives a sharper signal still — a post arriving with a parent_id says that
thread just changed, so its cached replies are dropped outright. That is the "1 reply" you
see appear next to someone's name, now wired to actually invalidate the thread behind it.
Reopening an unchanged thread still costs zero requests.
Also still in 0.0.6
The live tab stops dropping posts. An idle firehose connection is closed after about twelve
seconds while the server's keep-alive is on a fifteen-second timer, so it never arrives in
time — that part is server-side. The app now reconnects promptly instead of backing off, and
reconciles against /feeds/latest on every reconnect so nothing published during the gap is
lost.
Unofficial client. textlog is by stagas.
v0.0.5 — threads stop re-fetching themselves
Early pre-release for testing on Android.
Coming from v0.0.3 or earlier, or from the very first v0.0.4 upload? Those were signed
with a debug key, so Android will refuse to install over them — uninstall first.
Coming from the signed v0.0.4, this updates normally.
Which file
| File | Size | For |
|---|---|---|
textlog-0.0.5-arm64-v8a.apk |
18 MB | Virtually every phone from the last decade — take this one |
textlog-0.0.5-armeabi-v7a.apk |
15 MB | Older 32-bit devices |
textlog-0.0.5.apk |
48 MB | Universal; runs on anything, if you would rather not choose |
Threads stop re-fetching themselves
This one is about being a good guest. textlog allows 120 API requests a minute, and a nested
thread costs one request per branching node — so browsing a few threads could rate-limit you,
and every trip back into a thread paid the full price again.
Reply pages are now kept for the whole session. Measured against a real five-level thread:
| before | now | |
|---|---|---|
| Opening it the first time | 10 requests | 10 requests |
| Opening it again | 10 requests | 0 |
| Following "+ N more replies" into a branch already loaded | 1–2 requests | 0 |
Freshness is tracked per node rather than per thread, so a pull-to-refresh refetches only
what has actually gone stale instead of the whole tree. If something has aged out, you get
the cached version straight away and the update arrives behind you — on a micro-blog, a
thread that was quiet five minutes ago is almost certainly still quiet.
Also fixed: the same replies page could be requested twice while a screen was being built.
For iPhone owners
There are still no iOS downloads — Apple wants a paid developer account to hand anyone an
installable build, and this project is AGPL, which has historically been incompatible with
the App Store. The README now has step-by-step instructions for building it onto your own
phone with a free Apple ID, if you have a Mac.
Unofficial client. textlog is by stagas.
v0.0.4 — nested reply threads
Early pre-release for testing on Android.
⚠️ This build is signed with a real key. Earlier builds — including the first upload of
v0.0.4 — used a debug key. Android refuses to replace an app whose signature changed, so
uninstall any previous version first. This is a one-time break; releases from here on
update normally.
Which file
| File | Size | For |
|---|---|---|
textlog-0.0.4-arm64-v8a.apk |
18 MB | Virtually every phone from the last decade — take this one |
textlog-0.0.4-armeabi-v7a.apk |
15 MB | Older 32-bit devices |
textlog-0.0.4.apk |
48 MB | Universal; runs on anything, if you would rather not choose |
Nested reply threads
Tapping "N replies" now opens a real thread — replies nested under what they answer, each
level indented behind a hairline rail, with − / + to fold a branch you are done with.
The post a thread is about is set larger, as it is on the site.
A note on how this works, because the API shapes it: /posts/{id}/replies returns direct
children only, so a thread is assembled one request per branching node. Every post reports
its own reply_count, which is what lets the app know where the branches are without
spending a request to find out, and say exactly how many replies it has not loaded.
Threads nest five levels at a time. Deeper than that — or wider than the request budget
allows — a branch shows + N more replies, which opens that reply as its own thread. Nothing
is hidden without being counted.
Also in this release
- The caret mark from textlog is now the app icon, as a proper Android adaptive icon
- Properly signed builds, and per-device APKs at a third the size
- Fold controls are real buttons for screen readers
Installing
Download one and open it. Android asks once for permission to install from your browser or
files app.
Unofficial client. textlog is by stagas.
v0.0.3 — profile, themes, markdown
Early pre-release for testing on Android.
New
Your profile. Tell the app your handle once and it remembers it — @you in the top
bar, your own profile with account and log out.
This is identity, not a login. textlog signs you in by emailing a link that opens in your
browser, and no platform lets an app read the browser's cookies — that isolation is exactly
what makes the link work. Nothing in a read-only client needs a session, so the app only
needs to know whose profile to show. Writing still happens on textlog.cc.
Themes. light, dark, sepia and dracula, plus eight accent colours. Behind the small
icon in the top right.
Markdown, optional. Bold, italic, strikethrough, links, bullets and headings. Off by
default on purpose — textlog.cc renders posts as plain text, so turning this on shows
formatting the author did not necessarily intend.
Faster navigation. Feeds and posts are cached, so tapping into a thread and coming back
no longer refetches and throws you to the top. Opening a post you just saw costs no request
at all.
Installing
Download textlog-0.0.3.apk and open it. Android asks once for permission to install from
your browser or files app.
Note: debug-signed. A future properly-signed build will not install over it — you would
need to uninstall first.
Unofficial client. textlog is by stagas.
v0.0.2 — replying works
Early pre-release for testing on Android.
Fixed in this build
Replying and logging in now work. The previous build opened writes in an embedded
WebView, which keeps its own private cookies. textlog signs you in by emailing a magic
link, and that link always opens in your normal browser — so the session landed somewhere
the app could never see, and replying was impossible.
Writes now open in your browser's own tab (Chrome Custom Tabs), which shares its cookies.
Tap the magic link once and you stay signed in.
Also fixed: a missing Android 11+ declaration that stopped the app from finding a browser
at all, and returning from a reply now refreshes that thread.
What works
- Latest and hot feeds, infinite scroll
- Live tab — new posts arrive as they are written
- Threads with the parent post quoted, profiles, hashtag feeds
- Reply, post and log in via textlog.cc in a browser tab
Installing
Download textlog-0.0.2.apk and open it. Android asks once for permission to install from
your browser or files app — expected for anything outside the Play Store.
Note: debug-signed. It installs and runs, but a future properly-signed build will not
install over it — you would need to uninstall first.
Unofficial client. textlog is by stagas.