Repository navigation
Releases: TechIdiots-LLC/tippr
Releases · TechIdiots-LLC/tippr
Release list
tippr v0.28.0
✨ Features and improvements
🐞 Bug fixes
Downloads
- Docker:
docker pull techidiotsllc/tippr:0.28.0, or unpacktippr-0.28.0-compose.tar.gz, copy
.env.exampleto.env, fill it in and rundocker compose up -d(docker/README.md). - Proxmox:
tippr-0.28.0-proxmox-amd64.tar.zstis an LXC template with the whole site installed;
create a container with the site's domain as its hostname and start it (docs/PROXMOX.md). - Installer (Ubuntu 24.04): unpack
tippr-0.28.0-installer.tar.gzinto/home/tippr/srcand
runsudo TIPPR_USER=tippr TIPPR_DOMAIN=example.com ./install-tippr.shintippr/; it doesn't need
to clone anything (docs/INSTALL_tippr.md).
SHA256SUMS lists the files' checksums.
tippr v0.26.0
✨ Features and improvements
- Paste is no longer used: the error pages, static files and per-request objects (
c,g,request) it
provided are tippr's own now (r2/config/middleware.py,pylons/); PasteDeploy, which reads the ini, stays.
Updating a server, from /admin/servers or with the installer, uninstalls Paste. - About 30 fewer Python packages: baseplate no longer needs formenergy-observability, which brought in Dagster (a
data pipeline framework) and cappedpackagingbelow 25; the two tracing helpers it used are in baseplate now.
Updating a server uninstalls them, andpackagingis current (26.3). - Current Python packages: OpenTelemetry 1.45 (was 1.28), protobuf 7, Pillow 13, wrapt 2, grpcio 1.85, pytest 9,
and python-json-logger 4 and pyrate-limiter 4 through tippr's baseplate (which now needs Python 3.10 or newer);
the rest are at their newest too. python-dateutil stays at 2.9, as botocore needs. importlib_metadata and zipp,
which nothing needs any more, are uninstalled on update, and so is Whoosh, a search library nothing used. - A check that a server's tippr is up:
scripts/smoke_check.shchecks the services the server runs, a few pages
(the front page, login, the API, an error page, a POST) and the web app's log, and says what failed. The
installer's CI runs it after installing, so an install that finishes with a broken site fails. - Package updates from Dependabot: weekly pull requests for newer Python packages and GitHub Actions, with
packages that move together (OpenTelemetry, boto3 and botocore, grpcio and protobuf) in one. CI installs the exact
pins as a release would and tests them, and patch updates that pass are merged automatically, once master's
ruleset requires the checks (.github/workflows/dependabot-automerge.yml).
🐞 Bug fixes
- Domain listings (/domain/example.com) redirected to a broken address: every one went to
/domain/b'example.com'/instead of listing the domain's posts. They list them again, and an international domain
name still goes to itsxn--form. - Uploading an app's icon (/prefs/apps) gave an error: the resized icon was written as text, which Python 3
refuses, so no app could have an icon. It's saved as a PNG again. - "Exclude custom vaults" (/me/f/all) gave "you broke tippr" to gold members: its sidebar asked for the
filtered vaults by their name from before vaults were renamed. It lists them again, to add to or remove. - Filtering a vault out of /all didn't take effect for a minute, and could show someone else's filter: the
spread-out /v/all hot list was cached by the page's address, which is /me/f/all for every member. It's cached by
the vaults left out now. - Top and controversial listings never updated when tippr runs as a user other than
tippr: the database
password file named the Linux user instead of the database's, so the job that computes them couldn't connect and
failed every 15 minutes. Updating rewrites the file.
Downloads
- Docker:
docker pull techidiotsllc/tippr:0.26.0, or unpacktippr-0.26.0-compose.tar.gz, copy
.env.exampleto.env, fill it in and rundocker compose up -d(docker/README.md). - Proxmox:
tippr-0.26.0-proxmox-amd64.tar.zstis an LXC template with the whole site installed;
create a container with the site's domain as its hostname and start it (docs/PROXMOX.md). - Installer (Ubuntu 24.04): unpack
tippr-0.26.0-installer.tar.gzinto/home/tippr/srcand
runsudo TIPPR_USER=tippr TIPPR_DOMAIN=example.com ./install-tippr.shintippr/; it doesn't need
to clone anything (docs/INSTALL_tippr.md).
SHA256SUMS lists the files' checksums.
tippr v0.25.0
✨ Features and improvements
- One panel at a time under a post or comment: share, scales and report opened one under another; opening one
now closes the others there (clicking the same link again still closes its own). - Gold on /admin/users, including permanent gold: an account's page shows its gold (until a date, permanent, or
none) and lets an admin give or take months (up to 120 at once), make it permanent, or remove it (with a reason,
after ticking to confirm), each recorded under the account's admin actions. Permanent gold doesn't run out: the
daily expiry job and refunds leave it, and members' profiles and/api/meshow it with no end date. The old
/admin/goldform, which only added or took months, now goes to /admin/users.
🐞 Bug fixes
- The API documentation by OAuth scope (/dev/api/oauth) gave an error: endpoints any OAuth client may use are
listed under "any" scope, which Python 3 couldn't sort with the scope names. It lists them first, as "any", again.
Downloads
- Docker:
docker pull techidiotsllc/tippr:0.25.0, or unpacktippr-0.25.0-compose.tar.gz, copy
.env.exampleto.env, fill it in and rundocker compose up -d(docker/README.md). - Proxmox:
tippr-0.25.0-proxmox-amd64.tar.zstis an LXC template with the whole site installed;
create a container with the site's domain as its hostname and start it (docs/PROXMOX.md). - Installer (Ubuntu 24.04): unpack
tippr-0.25.0-installer.tar.gzinto/home/tippr/srcand
runsudo TIPPR_USER=tippr TIPPR_DOMAIN=example.com ./install-tippr.shintippr/; it doesn't need
to clone anything (docs/INSTALL_tippr.md).
SHA256SUMS lists the files' checksums.
tippr v0.24.0
✨ Features and improvements
- Current setuptools, without pkg_resources: setuptools 81 deprecated
pkg_resourcesand later versions remove it,
and tippr was held below 81 by what still imported it: tippr's baseplate (nowimportlib.metadata), OpenTelemetry's
instrumentation before 0.49 (now 1.28.2 / 0.49b2, which needs protobuf 5), the test setup's PasteScript import, and
Pyramid 2.1, which only the activity service's HTTP gateway uses and tippr never runs (it's an optional extra of the
activity service now). The installer's package check usesimportlib.metadata(scripts/check_requirements.py),
and the pins in the installer, Docker image, builds and CI are gone. Packages a release no longer uses are listed
ininstall/requirements-retired.txt, and the installer, and so an update from /admin/servers, removes them: this
one removes PasteScript, Pyramid and what came with it. - Account activity lists where your account is used from: it only recorded logins, and a login cookie lasts for
months, so the page was usually empty. Visits are recorded too now, at most once an hour for each address, kept 100
days as before. A visit from a private network address (a home or office network reaching the site directly) isn't
kept, and the page now says so instead of showing an empty table; an empty list says when visits will appear. The
privacy policy's information list names this (account activity, 100 days, seen by you and the site's
administrators, private addresses not kept), and the "accessing tippr from" line names no site. - /v/all mixes vaults: it ranks every post together, so a feed's run of new posts in one vault filled it (the
front page and multis mix vaults already). Its hot listing now never puts two posts from the same vault next to
each other while another vault's post is within 30 places.
🐞 Bug fixes
Downloads
- Docker:
docker pull techidiotsllc/tippr:0.24.0, or unpacktippr-0.24.0-compose.tar.gz, copy
.env.exampleto.env, fill it in and rundocker compose up -d(docker/README.md). - Proxmox:
tippr-0.24.0-proxmox-amd64.tar.zstis an LXC template with the whole site installed;
create a container with the site's domain as its hostname and start it (docs/PROXMOX.md). - Installer (Ubuntu 24.04): unpack
tippr-0.24.0-installer.tar.gzinto/home/tippr/srcand
runsudo TIPPR_USER=tippr TIPPR_DOMAIN=example.com ./install-tippr.shintippr/; it doesn't need
to clone anything (docs/INSTALL_tippr.md).
SHA256SUMS lists the files' checksums.
tippr v0.23.0
✨ Features and improvements
🐞 Bug fixes
Downloads
- Docker:
docker pull techidiotsllc/tippr:0.23.0, or unpacktippr-0.23.0-compose.tar.gz, copy
.env.exampleto.env, fill it in and rundocker compose up -d(docker/README.md). - Proxmox:
tippr-0.23.0-proxmox-amd64.tar.zstis an LXC template with the whole site installed;
create a container with the site's domain as its hostname and start it (docs/PROXMOX.md). - Installer (Ubuntu 24.04): unpack
tippr-0.23.0-installer.tar.gzinto/home/tippr/srcand
runsudo TIPPR_USER=tippr TIPPR_DOMAIN=example.com ./install-tippr.shintippr/; it doesn't need
to clone anything (docs/INSTALL_tippr.md).
SHA256SUMS lists the files' checksums.
tippr v0.22.0
✨ Features and improvements
- A site can be split over several servers: the installer's
TIPPR_ROLEmakes a server the backend
(PostgreSQL, Cassandra, RabbitMQ, ZooKeeper, OpenSearch, memcached, the "here now" counts, the queue processors
and the scheduled jobs) or a frontend (the pages and live comments), any number of which, on any servers,
share one backend behind a load balancer.all, one server doing everything, stays the default. The backend
opens its services to the frontends' address range and writes/etc/tippr/cluster.env, the passwords, signing
secrets and shared settings a frontend installs from; the Proxmox template makes either fromfirstboot.env.
Media has to be in object storage./admin/serversshows each server's role and leaves out the services it
doesn't run, and updating a backend checks its app and database rather than its (absent) pages. See
docs/SERVERS.md. - Members' data exports are kept in PostgreSQL: rather than on the disk of the server whose queue processor
made them, so on a split site any frontend gives a member theirs, and old ones are cleared (the files on disk
never were). Exports made before still download. /admin/backupsworks on a split site: on a frontend its requests go through ZooKeeper to the backend's
tippr-backup, and it shows the backend's backups and progress, passed both ways every 10 seconds by
tippr-backup-relay.timeron the backend. Another server copying a split site's backups with a transfer key
can't go through a frontend (the files are on the backend), so the page says to copy the folder instead.- Preferences unlock once, like admin mode: with two-factor on, preferences ask for the code (or a passkey) when
you open them, rather than on each form: the security page and the password and email page always, and every
preferences page (options, privacy, friends, blocked, apps) when you choose "also ask for a code before opening
any of your preferences" on the security page, which replaces asking on each save. Once unlocked their forms need
no code, and they stay unlocked while you use them, locking again 15 minutes after you last open one; a form saved
after that says to reload the page and unlock them again. Turning two-factor off and deleting your account still
ask for a code then. - New report reasons, following the content policy: spam or vote manipulation, harassment or threats, hateful
content, someone's personal information, sexual content involving minors, other illegal content, impersonation,
malware, phishing or scams, breaking the site's rules (named for the site, rather than "breaking tippr"), and
other. A vault with its own rules lists those first and the site's in a menu, as before. Each reason is kept in
English on the report and shown to moderators in their own language; reports made before keep their wording.
Reporting from a vault's rules page no longer fails.
🐞 Bug fixes
- The report form was hard to read in night mode: its box stayed light yellow under night mode's light text. It
now uses night mode's dark notice colours, as does the list of reasons on a reported post. - A post or comment a moderator had reported broke the page for its moderators: the reports queue and the
vault's listings gave an error while showing who reported it and why. They show the moderators' reports again. - Deleting an account on /admin/users gave "forbidden": the form's "delete for good" checkbox is named
confirm,
which inside the form's own submit handler hid the browser'sconfirm(), so its "are you sure?" threw an error
and the browser sent the form as a plain page instead, which the site refused. It asks and deletes again. The
other admin forms that ask first (forgetting a server, updating, flushing the cache, payments) use the same
safer call, and the two that put translated text straight into their script (deleting an account, forgetting a
server) no longer break on a translation with an apostrophe.
Downloads
- Docker:
docker pull techidiotsllc/tippr:0.22.0, or unpacktippr-0.22.0-compose.tar.gz, copy
.env.exampleto.env, fill it in and rundocker compose up -d(docker/README.md). - Proxmox:
tippr-0.22.0-proxmox-amd64.tar.zstis an LXC template with the whole site installed;
create a container with the site's domain as its hostname and start it (docs/PROXMOX.md). - Installer (Ubuntu 24.04): unpack
tippr-0.22.0-installer.tar.gzinto/home/tippr/srcand
runsudo TIPPR_USER=tippr TIPPR_DOMAIN=example.com ./install-tippr.shintippr/; it doesn't need
to clone anything (docs/INSTALL_tippr.md).
SHA256SUMS lists the files' checksums.
tippr v0.21.0
✨ Features and improvements
- A browser test in the release workflow: after the smoke test, four ordinary members (not admins) use the site
in Chrome: one posts through the submit form, the others reply to each other down a thread, and they all vote on
the post and the comments, changing and undoing votes, with the arrows and scores checked. A fifth account,
moderator of the test vault only, handles a member's report from the queue, removes and approves a comment,
distinguishes its own, locks and unlocks the thread, and bans and unbans a member, each checked as the moderator,
the members and logged-out visitors see it, and in the moderation log. And support requests: two members write to
the admins from the contact page; an admin turns on admin mode with a two-factor code, takes one, notes and replies,
and gives an employee one category, who sees only that; the member gets the answer from the admin team, without the
admin's name or the staff note, and their reply reaches the ticket. Every page is checked
for JavaScript errors, failed requests, sideways scrolling on a phone and unreadable text, and saved as a
screenshot at desktop and phone width in both themes (the run'sscreenshots-VERSIONartifact). See
docs/RELEASING.md. - NSFW posts stay off the front page and /v/all unless a member asks for them: being over 18 used to put
every NSFW post in those listings, which also took the ads off those pages. A new preference, "show NSFW posts on
the front page and /v/all" (off by default, and only for members who said they're over 18), brings them back;
NSFW vaults and their posts are shown in the vault itself as before. - Markdown follows CommonMark now, in place of reddit's snudown: posts, comments, messages, sidebars and the
wiki use markdown-it-py, the standard most sites follow, with GitHub's tables,strikethroughand bare links,
and tippr's own super^script, ^(several words), >!spoilers!< and :emoji:. New: task lists (- [ ]/- [x]
show as ☐ / ☑),[words](example.com)links withouthttps://, and /v/vault links, which snudown never made
(it linked reddit's /r/ instead). A picture's address,, is a link to it outside the wiki,
not leftover syntax. Differences: a heading needs a space after its#s (#1stays as typed), and the wiki no
longer takes raw HTML tables (markdown tables do the same). Output is still checked against the same list of
safe tags, raw HTML is still never used, and long or odd text renders quickly. Installs no longer build snudown
or need gperf; linkify-it-py is new. - Formatting buttons and help for the new markdown: the toolbar over text boxes adds heading, code block,
numbered list, task list and table buttons (code on several lines now becomes a ``` block). The "formatting help"
table under the box shows every option, including strikethrough, superscript, headings, task lists, code blocks
and tables, and reads properly in night mode; /help/formatting is rewritten to match. - Scales: tip a post toward what it's like. Up and down votes rank posts; a post's new "scales" link (beside
"share") opens scales to tip instead: helpful ↔ unhelpful, human-made ↔ probably AI and beginner-friendly ↔
in-depth, and behind "more scales", practical ↔ just for fun, well-sourced ↔ opinion and calm ↔ heated (open
already when you've tipped one of those). Each member tips each scale once, and can change sides or take the tip
back. A scale's tally (how many tipped
each way, and a bar of the split) shows once you've tipped it, so the first tips don't steer everyone else, and
the poster sees all of theirs. Scales are opinions, not reports: they don't rank posts, don't go to moderators,
and "probably AI" sits beside the poster's own AI label without changing it; the panel points to "report" for
posts that break a rule. Posters, logged-out visitors (asked to log in), members in a timeout, and removed,
archived or sponsored posts can't be tipped. Tips are kept in PostgreSQL (scale_tips) and are in a member's
data export. - Updating from /admin/servers shows its progress: while an update runs, the page keeps itself up to date every
few seconds instead of needing reloads. Each server's card says what it's doing and for how long, with its log's
latest lines open, and the updater now refreshes those every 10 seconds while the backup and the installer run
(before, the page heard nothing from it until a step finished). While the site is down for the install, the page
says so and keeps checking, then catches up when it's back; it stops once every server has finished. Servers
that haven't started yet say they're waiting. (The updater that runs an update is the one already installed, so
the progress reports start with the update after this one.) - /traffic/adverts counts ads: it read tables reddit filled from its ad servers' logs, which nothing filled
here. The site counts them itself now: a sponsored post when it's shown in a listing (by post, and by campaign
and vault for its traffic page) and when it's clicked, and each AdSense unit it puts on a page (sidebar, in-feed,
or Auto ads pages). What Google filled the units with, and their clicks and earnings, stay in the AdSense
account. Bots aren't counted.
🐞 Bug fixes
- /admin/servers ran words together, and an update's log was one long paragraph: the page's space compression
joined lines without a space ("The newest release is0.20.2", a server's name and id, "3.54(1, 5 and 15 minutes")
and took the line breaks out of the log; both read properly now. - /traffic/languages and the "top vaults" table were empty: they listed last month, the newest reddit's batch
traffic pipeline had finished; tippr counts as pages are viewed, so they list this month, and say so. - The sitemap left out the front page: it listed vaults from the most subscribed down, so the first page it
gave search engines was the default /v/tippr ("Tippr Meta"), which Google then showed for a search for the site's
name. The front page is the sitemap's first entry now, followed by the vault directory (/vaults) and the help
pages and policies. - Clicking a sponsored post failed: its link goes through /click, served by reddit's separate click tracker,
which was never ported to Python 3 (every click was an error) and which Docker installs didn't have at all. /click
is part of the site now: it checks the link's signature, counts the click and sends the browser on. Updating
removes the old click server (gunicorn-click). - Updating could leave the queues and jobs stopped: the installer installs the pinned Python packages, but pip
kept a package already installed under the same name and version even when it came from elsewhere, and an older
formenergy-observability from PyPI then conflicted with the pinnedpackaging: the pages worked, but paster refused
to start the consumers and jobs. The packages pinned to a URL (the baseplate and formenergy-observability forks) are
now always reinstalled, and the installer checks that the packages fit together, as paster does, failing the install
(so an update rolls back) if they don't. - Clicking "reply" on a comment threw a JavaScript error ("e is not defined", from reddit's code): the reply
box still opened, but the comment's hidden replies weren't shown with it, and the error was reported on every
reply. - Search showed NSFW posts to everyone, and pages with NSFW posts had ads: search results included them for
people who hadn't said they're over 18, logged out too (hiding them was reddit's safe_search experiment, never
on); they're shown only to people who have now, as listings already did. And a page that shows any NSFW post
(the front page, /v/all, other listings, profiles, search) has no AdSense ads, which Google doesn't allow next to
adult content: before, only an NSFW vault's own pages and NSFW posts' pages dropped them. - Every page loaded a tracking pixel nothing used, and on Docker it was missing: reddit counted pageviews from
the pixel's log, which nothing reads now that tippr counts them as it serves them, and Caddy had no route for it,
so every page had a 404. Pages no longer load it (tracker_urlis blank), and Caddy answers the remaining pixels
(sponsored links, embeds) as the installer's nginx does. - A vault's NSFW setting was hard to find: it's labelled "NSFW: viewers must be 18 or older" on the vault form
now, instead of "viewers must be over eighteen years old" (and the /v/all option gains its missing "in"). - The support pages said "254 milliseconds ago": they say "just now" for the last minute, as the rest of the
site does. - Search results showed the wrong descriptions: a vault's page described the whole site (its link previews
already used the vault's own description), and a post's showed its markdown (* item,[link](https://...)).
A vault's page now has its own description, and a post's or comment's reads as plain text. - A comment a moderator removed stayed in front of logged-out visitors for up to 2 minutes: they get a thread's
comments from a short cache, which removing, approving, distinguishing or editing a comment didn't clear (it
follows the comment count). Those now change the thread's cache key, so the next view is built afresh. - Removed posts and comments were hard to read for moderators: their salmon background left the grey tagline and
buttons at 1.4:1. They're a pale red with a red edge now. - The unread message count was unreadable in night mode: night mode's link colour turned it teal on its orange
badge; it's white again.
Downloads
- Docker:
docker pull techidiotsllc/tippr:0.21.0, or unpacktippr-0.21.0-compose.tar.gz, copy
.env.exampleto.env, fill it in and rundocker compose up -d(docker/README.md). - Proxmox: `tippr-0.21....
tippr v0.20.2
Downloads
- Docker:
docker pull techidiotsllc/tippr:0.20.2, or unpacktippr-0.20.2-compose.tar.gz, copy
.env.exampleto.env, fill it in and rundocker compose up -d(docker/README.md). - Proxmox:
tippr-0.20.2-proxmox-amd64.tar.zstis an LXC template with the whole site installed;
create a container with the site's domain as its hostname and start it (docs/PROXMOX.md). - Installer (Ubuntu 24.04): unpack
tippr-0.20.2-installer.tar.gzinto/home/tippr/srcand
runsudo TIPPR_USER=tippr TIPPR_DOMAIN=example.com ./install-tippr.shintippr/; it doesn't need
to clone anything (docs/INSTALL_tippr.md).
SHA256SUMS lists the files' checksums.
tippr v0.20.1
✨ Features and improvements
- A browser test in the release workflow: after the smoke test, four ordinary members (not admins) use the site
in Chrome: one posts through the submit form, the others reply to each other down a thread, and they all vote on
the post and the comments, changing and undoing votes, with the arrows and scores checked. A fifth account,
moderator of the test vault only, handles a member's report from the queue, removes and approves a comment,
distinguishes its own, locks and unlocks the thread, and bans and unbans a member, each checked as the moderator,
the members and logged-out visitors see it, and in the moderation log. And support requests: two members write to
the admins from the contact page; an admin turns on admin mode with a two-factor code, takes one, notes and replies,
and gives an employee one category, who sees only that; the member gets the answer from the admin team, without the
admin's name or the staff note, and their reply reaches the ticket. Every page is checked
for JavaScript errors, failed requests, sideways scrolling on a phone and unreadable text, and saved as a
screenshot at desktop and phone width in both themes (the run'sscreenshots-VERSIONartifact). See
docs/RELEASING.md.
🐞 Bug fixes
- Updating could leave the queues and jobs stopped: the installer installs the pinned Python packages, but pip
kept a package already installed under the same name and version even when it came from elsewhere, and an older
formenergy-observability from PyPI then conflicted with the pinnedpackaging: the pages worked, but paster refused
to start the consumers and jobs. The packages pinned to a URL (the baseplate and formenergy-observability forks) are
now always reinstalled, and the installer checks that the packages fit together, as paster does, failing the install
(so an update rolls back) if they don't. - Clicking "reply" on a comment threw a JavaScript error ("e is not defined", from reddit's code): the reply
box still opened, but the comment's hidden replies weren't shown with it, and the error was reported on every
reply. - Every page loaded a tracking pixel nothing used, and on Docker it was missing: reddit counted pageviews from
the pixel's log, which nothing reads now that tippr counts them as it serves them, and Caddy had no route for it,
so every page had a 404. Pages no longer load it (tracker_urlis blank), and Caddy answers the remaining pixels
(sponsored links, embeds) as the installer's nginx does. - A vault's NSFW setting was hard to find: it's labelled "NSFW: viewers must be 18 or older" on the vault form
now, instead of "viewers must be over eighteen years old" (and the /v/all option gains its missing "in"). - The support pages said "254 milliseconds ago": they say "just now" for the last minute, as the rest of the
site does. - Search results showed the wrong descriptions: a vault's page described the whole site (its link previews
already used the vault's own description), and a post's showed its markdown (* item,[link](https://...)).
A vault's page now has its own description, and a post's or comment's reads as plain text. - A comment a moderator removed stayed in front of logged-out visitors for up to 2 minutes: they get a thread's
comments from a short cache, which removing, approving, distinguishing or editing a comment didn't clear (it
follows the comment count). Those now change the thread's cache key, so the next view is built afresh. - Removed posts and comments were hard to read for moderators: their salmon background left the grey tagline and
buttons at 1.4:1. They're a pale red with a red edge now. - The unread message count was unreadable in night mode: night mode's link colour turned it teal on its orange
badge; it's white again.
Downloads
- Docker:
docker pull techidiotsllc/tippr:0.20.1, or unpacktippr-0.20.1-compose.tar.gz, copy
.env.exampleto.env, fill it in and rundocker compose up -d(docker/README.md). - Proxmox:
tippr-0.20.1-proxmox-amd64.tar.zstis an LXC template with the whole site installed;
create a container with the site's domain as its hostname and start it (docs/PROXMOX.md). - Installer (Ubuntu 24.04): unpack
tippr-0.20.1-installer.tar.gzinto/home/tippr/srcand
runsudo TIPPR_USER=tippr TIPPR_DOMAIN=example.com ./install-tippr.shintippr/; it doesn't need
to clone anything (docs/INSTALL_tippr.md).
SHA256SUMS lists the files' checksums.
tippr v0.20.0
✨ Features and improvements
- Upgrades are much quicker: about 1½ minutes of downtime instead of 6½ on a test install. A release's installer
tarball already holds its built Cython modules, translations and static files, but upgrades threw them away and
built them again; now each build is fingerprinted (scripts/build-fingerprint: its inputs' contents, not file
dates) and skipped while its inputs are unchanged, by the release or by an earlier run. The translations a release
carries become a git checkout in place instead of being moved aside and cloned again (which also stops an
i18n.old-<date>folder being left on each update), r2 is reinstalled only when its packaging or Cython modules
change, and RabbitMQ restarts only when its settings do. - Every install runs the Python packages the release was tested with: the installer installs
install/requirements.txt(moved fromdocker/), the pinned list the Docker image uses, in one go, instead of
about 40 packages in groups at whatever versions were newest that day (and baseplate and formenergy-observability
from their branches' tips).TIPPR_BASEPLATE_PIP_URLandTIPPR_FORMENERGY_OBSERVABILITY_PIP_URLstill install
another on top, but are empty by default. The oldpsycopg2-binaryis replaced by the pinnedpsycopg2. - An account's status, from its /admin/users page: its staff permission (none, employee, sponsor or admin: the
same employees list as /admin/config, with its checks, so no one removes their own admin permission), and whether
it's one of the site's own accounts (a test account, a bot). The system user, AutoModerator and feed bots count as
the site's own by themselves. The status column on /admin/users shows sponsors and employees too, and labels the
site's own accounts, which don't take an Early Member place. - The consent banner asks about "optional analytics cookies" instead of naming Google Analytics; the privacy
policy it links to says what they are. "Optional" makes clear that declining doesn't turn off the cookies the site
needs. The preference says the same. - A clearer "Translating" help page (/help/translate): how to fix a translation as numbered steps, the file to
edit on its own line, links to Poedit and Lokalize, and what to put in an issue as a list. The trophies help page
lists Early Member among the awards the site gives. - Updates say the site is down for "a few minutes" (on /admin/servers and in the updater) instead of 5–10.
🐞 Bug fixes
- /admin/servers showed the event collector queues in red with no processor, as if stopped. They're for an
analytics event collector service, and without one (events_collector_url) the site queues nothing there and runs
no processor for them on purpose: they now say "off (no event collector)". - The trophy case was unreadable in the dark theme: award names were always black (and descriptions dark grey);
they follow the theme's text colors now. - The admin mode page on a remembered computer looked unfinished: "forget this computer" was a grey button with
its explanation wrapping beside it, and the heading still asked for a one-time code. It's now a link under the
main button with the explanation below it, and the heading asks for the password only. - Docker: a container could fail to start alongside the others ("No such file or directory:
/config/docker.update.tmp"): every container writes the shared config in /config as it starts, through one
temporary file name, so one could rename it away while another was still writing it. Each now uses a temporary
file of its own, created private.
Downloads
- Docker:
docker pull techidiotsllc/tippr:0.20.0, or unpacktippr-0.20.0-compose.tar.gz, copy
.env.exampleto.env, fill it in and rundocker compose up -d(docker/README.md). - Proxmox:
tippr-0.20.0-proxmox-amd64.tar.zstis an LXC template with the whole site installed;
create a container with the site's domain as its hostname and start it (docs/PROXMOX.md). - Installer (Ubuntu 24.04): unpack
tippr-0.20.0-installer.tar.gzinto/home/tippr/srcand
runsudo TIPPR_USER=tippr TIPPR_DOMAIN=example.com ./install-tippr.shintippr/; it doesn't need
to clone anything (docs/INSTALL_tippr.md).
SHA256SUMS lists the files' checksums.