Repository navigation
oneloop 0.1.0-rc.4
Pre-release
Pre-release
·
43 commits
to main
since this release
The fourth release candidate. 0.1.0-rc.3 was tagged but never published,
because a browser test failed in its release checks; this release has
everything it would have had. It adds Undo for deletions, image thumbnails,
Roadmap scales, a system theme, optional password rules and more ways for AI
assistants to connect. It also fixes many bugs and security problems, so read
the upgrade notes before you upgrade.
Upgrade notes
- Stop oneloop, install the new version, and run
oneloop db migrate --backup-dir <directory>. It saves a backup first, then
upgrades the database to schema 6. Older versions refuse a schema 6
database. To go back to one, restore the backup thatdb migratemade. - If you installed from source with the rc.2 steps, create the backup folder
first, because those steps left it out:
sudo install -d -m 0700 -o oneloop -g oneloop /var/backups/oneloop. - Give the server at least 512 MB of memory. Making a thumbnail or an avatar
can briefly use about 200 MiB more. - oneloop now accepts only HTTP/1.1 and refuses HTTP/2 without TLS (h2c). If
your reverse proxy reaches oneloop over h2c, switch it to HTTP/1.1. - An unusable
ONELOOP_DATA_DIRis now an invalid setting:oneloop serve
and the other commands exit with code 2. - systemd: add
RestartPreventExitStatus=2to your unit, or copy the new
example, and runsudo systemctl daemon-reload. Invalid settings then stop
the service instead of restarting it every 5 seconds. The example also stops
after 10 starts in 10 minutes. - launchd (macOS): install the new
oneloop-launchd.sh, which stops the job
when a restart can't help, and addExitTimeOut35 to your plist, so that
open requests can finish when oneloop stops. If you copy the new example
plist instead, keep your own binary and data paths in it. Rotate the log
withnewsyslog -r, which works without root. - A
..after a symbolic link inONELOOP_DATA_DIRnow leads to the parent of
the folder that the link points to, as the operating system resolves it.
rc.2 removed the link and the..together. - If a project was deleted while an AI assistant had it selected together with
other projects, that connection still works for the other projects. Its
owner should revoke it in Profile > Connected apps. From this
version on, deleting a project ends such connections. - Some Knowledge section links change. A link copied from rc.2 to a heading
with emoji, underscores or some non-Latin scripts may no longer jump to the
heading, and AI assistants get new section targets for repeated headings,
such assetup-1. - Browser preflight requests to
/mcp,/oauth/registerand/mcp/files/*
from origins that aren't inONELOOP_MCP_ALLOWED_ORIGINSnow get 403. The
/mcporigin check now compares the port too: anOriginheader must match
ONELOOP_PUBLIC_URL, or a listed origin, exactly. - Changes made by other processes, such as
oneloop user passwd, now reach
open tabs within 5 seconds instead of half a second. - Avatars that need more than about 192 MiB of memory to decode are now
refused. Existing images get thumbnails when someone first views them. - Don't share a backup folder between computers with the same host name.
oneloop uses the host name to tell whether an interrupted backup or restore
has ended before it cleans up after it.
Added
- Undo after you delete a task, comment or file, in the message that
confirms the deletion, or with Ctrl+Z (Cmd+Z on macOS) when no text field
has focus and no dialog is open. oneloop keeps deleted files and comment
text for 5 minutes, then removes them for good. Deletions by AI assistants
can't be undone. - Image thumbnails: PNG, JPEG and WebP attachments show thumbnails of at most
256 × 256 px, so tasks with large photos load much less data. Storage
cleanup removes thumbnails first, and oneloop makes them again when someone
views the image. Backups don't include them. - Roadmap scales Weeks, Months and Quarters, also on the keys W, M
and Q. A new scale keeps the epic you last opened, or today, in view, and
close zoom shows each week. - Newest first in the Board's Done column lists the most recently
finished tasks first. Each browser remembers the choice. - Reload after updates in the account menu: when it is on, a tab reloads
by itself after an upgrade, once nothing you typed would be lost and the tab
is hidden or unused for a minute. - oneloop asks before you go to another page, also with Back and
Forward, or close a dialog while text you typed isn't sent or saved yet.
Most browsers also ask before a reload or before closing the tab. - If your session ends while you type, or while a comment is still being sent,
sign in again in the same tab to keep your text and get back to the project
you had open. Nobody else who signs in there sees the text. - A task title or description that can't be saved, for example while you are
offline, stays on the page marked Not saved and saves by itself when the
connection returns. - Optional password rules, all off by default: minimum lengths
(ONELOOP_PASSWORD_MIN_LENGTH,ONELOOP_ADMIN_PASSWORD_MIN_LENGTH) and a
list of refused passwords (ONELOOP_PASSWORD_BLOCKLIST), which sign-in
never checks, so existing passwords keep working; and a lifetime for
temporary passwords (ONELOOP_TEMPORARY_PASSWORD_LIFETIME), after which a
temporary password no longer signs in. - More AI assistants can connect, each with a setting that is off by default:
apps that receive the sign-in through their own link scheme, such as
cursor://(ONELOOP_MCP_REDIRECT_SCHEMES); tools that run in a web page,
such as MCP Inspector (ONELOOP_MCP_ALLOWED_ORIGINS); and clients that
identify themselves with a client ID metadata document
(ONELOOP_MCP_CLIENT_METADATA_DOCUMENTS). - MCP task results include
completedAtandcompletionOrderfor done tasks.
Changed
- The theme follows your device's light or dark setting until you pick one.
The menu offers Light, Dark and System. - Full times, the reason on a Blocked badge and cut-off names also show as
a tooltip when you tap them, and on keyboard focus where they can take focus.
The Blocked badge is easier to read in the light theme. - Zooming the Roadmap is smooth. It no longer rebuilds the Roadmap or stretches
text, the date under the pointer stays in place, and a touchpad pinch
follows your fingers, also in Safari. - Right-to-left text, such as Arabic, Hebrew or Persian, reads right to left
in descriptions, comments, block reasons, Pool notes, Markdown attachments
and Knowledge pages. - In a long Board column, Move to puts the card at the top unless the
column shows its last card, and the moved card stays in view. - Only the Roadmap loads epic statistics, which makes other pages faster. It
shows "…" until they arrive. - Notifications are delivered in batches: a burst of 300 Inbox updates now
arrives in about 0.1 seconds instead of 10 to 13 seconds. - Any web page may read oneloop's OAuth metadata and use its token and
revocation endpoints. They use no cookies, so a page needs a code or token
that it already has. - Deleting a file no longer waits for a backup or a download. Its space is
freed about 5 minutes later. Until then it counts as pending deletion, like
the files of a deleted task. oneloop backup create,backup restoreanddb migrate --backup-dir
remove what an interrupted run on the same computer left behind, so you can
simply run them again. A restore checks the backup before it removes
anything.- Knowledge needs less memory and time: downloads and previews are sent in
small pieces instead of whole files, and a folder of 5,000 files syncs in
about 6 seconds. - Time zone rules come from the server's time zone database when it is at
least as new as oneloop's own copy, which is now IANA 2026e instead of 2025b.
This brings the 2026 changes for British Columbia, Alberta, Morocco,
Manitoba and the Northwest Territories.
oneloop serve --checkshows which copy is in use. oneloop --versionalso shows the source revision. Setup and upgrade
messages and the help are clearer, anduser add --helpand
user passwd --helpsay that the password you set is temporary.- The Docker image starts oneloop under
tini, which cleans up Git helpers
that a stopped Knowledge sync leaves behind. Its SBOM now lists oneloop's
Rust crates, including the bundled SQLite, for image scanners. - The documentation site describes the newest release instead of unreleased
changes, and links to the deploy templates of that release.
Fixed
- oneloop no longer drops SQLite's lock on the live database. Without the lock,
an older SQLite program (before 3.51) that opened the database while oneloop
ran could delete the file that holds the newest changes (the write-ahead
log). Recent changes could then be missing from backups or lost after a
crash, or the database could be damaged. - A backup that is missing a file's bytes, or the Knowledge key while
encrypted Knowledge credentials exist, is now refused when it is made and
when it is restored. Before, it passed as verified. oneloop backup create,user passwdandserve --checkno longer fail
with "data lease is busy" while people keep downloading files.- Files deleted after a backup stopped halfway are removed from disk within a
minute, instead of staying until the next backup. - Retries now work for an upload that failed during a backup, for deleting a
file that storage cleanup already removed, and for changing a file's
Temporary setting. - An upload that finishes after its task was deleted gets "task not found"
instead of a server error. - Comments and block reasons of a deleted task can no longer be edited.
- Changing your avatar no longer shows an error when the change was saved.
- After the server clock steps back, editing a field no longer fails, and
background cleanup of expired data keeps running. Cleanup also catches up on
busy servers. - After someone is removed from a project and added back, an old change to
their membership can no longer apply to the new membership. - Comments no longer show one version's text with another version's mentions
while an edit is saved. - Archived Inbox items older than 90 days can no longer be restored, and they
no longer appear when the app loads. oneloopcommands no longer crash, and keep their exit code, when the
program that reads their output stops early, such asgrep -q.- A password can no longer be long enough to set but too long to sign in with.
- The history records a file deletion, with who asked and through which app,
even when removing the file takes more than a day. - Behind a reverse proxy named in
ONELOOP_TRUSTED_PROXIES, requests no longer
fail with 502 when the proxy reuses an idle connection: oneloop keeps such
connections open for 5 minutes instead of 15 seconds. - Current Codex versions can sign in: oneloop accepts a repeated
resource
parameter when every value is its MCP address, and the Codex steps in the
docs use~/.codex/config.toml. - AI assistants may write the
Bearerscheme in any letter case. - MCP:
create_attachment_uploadaccepts a task key, such asWEB-042;
finishing a sign-in for a project that was deleted meanwhile gets
invalid_grant; and a broken upload body is a client error. All three were
server errors. - Mentions inside inline code or a quote no longer notify anyone, as the user
guide says. - Editing a comment or block reason that keeps a mention of someone who left
the project works again. Editing someone else's comment no longer notifies
an unchanged mention again. - Editing a block reason updates the Inbox of the people it mentions, and
adding a member updates that person's project list. - Knowledge search results, copied section links and AI assistant section
reads use the reader's heading anchors, also for repeated headings and in
every script. Links to other headings in a document scroll there, and links
to the knowledge base root work. - A long Git history no longer fails a Knowledge sync as too large. A commit
that doesn't change the folder no longer counts as a sync, so the reader
keeps its place. Files with"in their names get their own Updated
dates. - A cancelled Knowledge sync stops all of Git's helper processes, a fast
download keeps within the 300 MiB limit, and on a disk that ignores letter
case, files whose names differ only in case show their own contents. - Knowledge syncs and uploads that run at the same time share one disk-space
reservation, so together they never go belowONELOOP_DISK_MIN_FREE. - Disconnecting a knowledge base can no longer remove one that was connected
again meanwhile, and open Knowledge pages update after a reconnect or a sync. - A
.mdfile with binary content is offered only as a download, not as a
Markdown preview. The AI assistant overview leaves out a README that isn't
text. - Diagrams show math in their labels as plain text, such as
$$x^2$$, instead
of empty labels, and they take the new colors when the theme changes. - Saving never replaces a newer change by someone else without asking: comment
edits, a field after Keep my changes on another field, and a dialog that
you save again now ask first. - Keep my changes in Edit epic, Edit milestone and Pool promotion
saves only the fields you changed, so a teammate's other changes stay. - Use latest shows the saved values in task fields, comments and dialogs.
- Saves no longer lose what you typed: a second edit of a field during its save
is saved too, two fields or two comment edits saved close together no longer
conflict, and a late save or conflict no longer clears newer text or closes
another dialog. - On a slow connection, text typed after sending a comment, reply or Pool item
no longer joins the one being sent or gets sent twice. - A conflict prompt on a task title or description stays open when a live
update redraws the page. - Losing Board permission or project membership while you type keeps your
text and says why. - A temporary password stays available after you close the New user or
Reset password dialog during the save. - An upload, deletion or Temporary change that the server accepted no
longer shows as failed during a live update, and a retried upload is no
longer added twice. - Live updates no longer cancel or undo what a page loaded: a task no longer
stays on the loading screen, a project switch sticks, also from a task page,
and Users, the Pool and the epic drawer keep the items they loaded. - The Inbox no longer stops working after a project refresh, and opening an
item whose task was deleted keeps you in the Inbox instead of showing
Page not found. - The Board shows live moves in the right card order, and search ignores
spaces around the words. - Open Pool rows show the latest title and description.
- An open epic drawer updates when a teammate changes one of its tasks, and it
names statuses as the Roadmap does, such as "Ongoing · Done". - Load more on the Board and in the epic drawer shows the next items after
a change. - Blocking and unblocking show on the task page as soon as the server accepts
them. - A first project replaces the empty page without a reload.
- Changing two members' permissions at once no longer fails, and
Add member finds accounts beyond the first page with Load more users. - Losing the admin role while on Users, Storage or Settings moves
you to the Board with a message, instead of leaving controls that do
nothing. - A refused avatar says why: its type, its data or its size.
- The Users header shows "50+" while more accounts can load, and a pasted
title is no longer cut in the middle of an emoji. - A late-starting epic with no end date stays on the Roadmap.
- Track menus open at their button from the keyboard and close with one
Escape, and tracks moved with the keyboard scroll into view. - Focus returns to the menu button when you cancel a dialog, and it stays on
the task heading during a slow load and on the epic drawer's close button. - Escape in Confirm your identity closes only that prompt, and whether the
prompt appears depends on the server's clock, not the computer's. - On phones and narrow windows, a dragged card reaches columns that are off
screen. - In Firefox, dropping a Board card no longer opens its task page.
- On a systemd server, the docs run
oneloopcommands as theoneloop
account with the unit's settings, so backups, test restores and upgrades
work as written, and the upgrade steps name a release tag that exists.
Troubleshooting covers uploads that fail because the server's disk is nearly
full. - The launchd example points to the binary and the data folder that the
source install creates, so a job set up from the guide starts.
Security
- A display name with markup shows as text in the Member has open work
dialog. Before, it could run app actions when an admin opened that dialog. - The app page uses only its own scripts and styles, and adds HTML only
through its own templates and HTML cleaner, which the browser enforces
(Trusted Types). Mermaid draws diagrams in a separate document. - A label in a Markdown attachment or Knowledge page can no longer click the
app's own controls. - HTML previews of attachments and Knowledge files no longer run scripts or
load anything from other sites. An interactive page shows as a static page;
download it to use it fully. - A tab that still shows someone who signed out no longer reads or saves data
as the next person to sign in on that browser, and signing out in that tab
no longer ends the newer session. The tab shows "Your session ended"
instead. - Automatic background requests, such as live updates, Knowledge refreshes and
previews, no longer keep an unused session alive past the 7-day idle limit. - A request that started just before its session was revoked can no longer
change the profile, end sessions or disconnect apps, and an AI assistant
approval sent at that moment creates no sign-in code. - A password change or reset also cancels AI assistant sign-ins that aren't
finished. - An AI assistant connection ends at once when its owner loses access to one
of its projects: when the project is deleted, when the owner is removed from
it, even if added back before the app's next request (admins keep access to
every project), and when an admin who isn't a member loses the admin role. - The upload and download links that AI assistants get stop working when
their connection loses access, like other MCP calls. - Slow or silent clients can no longer take all connections: request bodies
may pause for at most 60 seconds and must keep a minimum speed, clients that
stop reading are disconnected, and extra connections get 503 with
Retry-After. - One person can keep at most 16 live-update connections. Another one closes
their oldest, and that tab reconnects when it is shown or used again. Live
updates open only from oneloop's own pages. - Each person can have at most 10 AI assistant sign-ins waiting for approval,
and an app'sstatevalue may be at most 4,096 bytes, so nobody can fill the
database with them. - Images are decoded one at a time and within a memory limit, and at most 4
avatar uploads wait for their turn, so uploads can't use up the server's
memory. - AI assistant reads of large Markdown files in a knowledge base read only the
start of the file, one file at a time, and wait at most 5 seconds. Very long
lines and headings no longer cost extra memory. - Knowledge searches run one at a time, so other requests stay fast, with one
search per person and at most 5 seconds of waiting. Each project's search
index stays within 64 MiB; files past that limit are found by name only. - An error message no longer shows the server's data directory path. The
details stay in the server log. - A restore makes the
filesandkeysfolders readable only by the account
that runs oneloop. - Knowledge's Git commands ignore the settings of a Git checkout that contains
the data directory. - The Mermaid bundle now includes KaTeX 0.18.9 instead of 0.16.47, which fixes
a low-severity KaTeX advisory
(GHSA-238p-pmpm-9mq7).
Distribution
- Docker:
ghcr.io/code19m/oneloop:0.1.0-rc.4, for linux/amd64 and
linux/arm64 - From source:
cargo install --git https://github.com/code19m/oneloop --tag v0.1.0-rc.4 --locked