Repository navigation
Releases
oneloop 0.1.0-rc.9
The ninth release candidate. A task's comments now read as a chat: comments
and replies show in one list in the order they were written, and each reply
shows the comment it answers. The Board's Done column no longer has the
Newest first button, because Done already lists finished tasks newest
first. This release also updates ctutils, tokio and DOMPurify for security
advisories. Read the upgrade notes before you upgrade; if you upgrade from an
older release candidate, read the upgrade notes of each release after yours
too.
Upgrade notes
- From 0.1.0-rc.8, the database doesn't change: it stays at schema 10. Stop
oneloop, install the new version and start it. If you run
oneloop db migrate --backup-dir <directory>as usual, it prints
database in <data folder> is current (schema 10)and changes nothing. - Browser tabs that are open during the upgrade reload themselves at a safe
moment, as before: when nothing typed would be lost and the tab is hidden or
unused for five minutes. Until then they keep working. - Existing comments and replies need nothing. They show in the chat in the
order they were written. - From 0.1.0-rc.7 or older, read the upgrade notes of each release after yours
too.
Changed
- A task's comments read as a chat. Comments and replies show in one list in
the order they were written, the newest last, so a reply to an older comment
no longer waits behind a closed N replies button further up the page.
Your own comments sit on the right. Every reply shows the comment it answers,
its author and first line, at the top of its bubble; choose that line to go
to the comment. While older comments aren't loaded, a comment that a reply
answers shows above a line that says so. Reply now writes in the box at
the bottom of the activity, and new comments keep arriving while you write a
reply; the box stays where it is on the screen. Comment text is a little
smaller.
Removed
- The Newest first button at the top of the Board's Done column. Since
0.1.0-rc.6, a task moved to Done with Move to, its Status,
Unblock and complete or an AI assistant goes to the top of the column,
so Done already lists finished tasks newest first by itself, and the button
only switched between two orders that looked the same. A card you drag into
Done still stays where you drop it. A browser that had the button on now
shows Done's own order. To put a finished task elsewhere, drag it or use
Move up and Move down.
Security
- Updated ctutils to 0.4.4 (RUSTSEC-2026-0385). The password hashing that
checks sign-ins uses it to compare values in constant time. - Updated tokio to 1.53.3 (RUSTSEC-2026-0386). Neither oneloop nor the
libraries it uses call the affected functions. - Updated DOMPurify to 3.4.17 in the browser's Markdown previews and in
Mermaid diagrams
(GHSA-cg2g-xh64-v4q7,
GHSA-mrv2-3pqr-j5jr,
GHSA-c6gr-qvv4-5v3f).
Each advisory needs a DOMPurify setting that neither oneloop nor Mermaid
uses (SAFE_FOR_TEMPLATES,IN_PLACEor the XHTMLPARSER_MEDIA_TYPE), so
oneloop was not affected.
Distribution
- Docker:
ghcr.io/code19m/oneloop:0.1.0-rc.9, for linux/amd64 and
linux/arm64 - From source:
cargo install --git https://github.com/code19m/oneloop --tag v0.1.0-rc.9 --locked
oneloop 0.1.0-rc.8
The eighth release candidate. HTML previews of attachments and Knowledge files
now show files up to 10 MiB, such as reports with many screenshots inside, and
a preview that can't be shown says why. Opening a preview again usually shows
the browser's copy instead of downloading it again. This release also updates
rustls-webpki for a security advisory. Read the upgrade notes before you
upgrade; if you upgrade from an older release candidate, read the upgrade
notes of each release after yours too.
Upgrade notes
- From 0.1.0-rc.7, the database doesn't change: it stays at schema 10. Stop
oneloop, install the new version and start it. If you run
oneloop db migrate --backup-dir <directory>as usual, it prints
database in <data folder> is current (schema 10)and changes nothing. - From 0.1.0-rc.6 or older, read the upgrade notes of 0.1.0-rc.7 too. 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 10. - HTML previews now use temporary disk space in the data folder while they are
sent, about the size of the file, and need free disk space above
ONELOOP_DISK_MIN_FREE, as uploads do. A preview that would leave less says
that the server is low on disk space. If the data folder is often near that
limit, free some space or give it more. Production setup says what previews
cost in memory and disk space.
Changed
- HTML previews of attachments and Knowledge files now show files up to
10 MiB instead of 1 MiB, such as reports with many screenshots inside the
file. Files uploaded or synced before preview at once. While a preview is
sent, its prepared page waits in a temporary file in the data folder
instead of in memory. Previews now need free disk space above
ONELOOP_DISK_MIN_FREE, as uploads do, and each person can have three
attachment pages and three Knowledge pages being sent at once. Production
setup says what previews cost in memory and disk space. - Opening an HTML preview again usually shows the browser's copy when the file
hasn't changed, instead of downloading it again. Reload preview still
gets a new copy from the server.
Fixed
- An HTML preview that can't be shown, such as one of a deleted file, one the
server is too busy to prepare, or one whose session ended, now says why in
its frame and points to Reload preview. Before, the frame stayed empty. - A file you just uploaded, deleted, reordered or marked temporary or
permanent no longer goes back to how it was for a moment when a read of the
task's files that started earlier comes back, and an open preview of the new
file no longer closes.
Security
- Updated rustls-webpki to 0.103.16 (RUSTSEC-2026-0382). oneloop uses it when
it fetches the metadata document of an AI assistant that connects.
Distribution
- Docker:
ghcr.io/code19m/oneloop:0.1.0-rc.8, for linux/amd64 and
linux/arm64 - From source:
cargo install --git https://github.com/code19m/oneloop --tag v0.1.0-rc.8 --locked
oneloop 0.1.0-rc.7
The seventh release candidate. Every task is now on a track, and an epic is
optional. The Roadmap shows each track's work on its timeline: done work,
work in progress and plans with a deadline. The Roadmap keeps its scale in
the address, Sign out signs out every open tab, and many bugs are fixed.
Read the upgrade notes before you upgrade; if you upgrade from an older
release candidate, read the upgrade notes of each release after yours too.
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 10: from schema 8, which 0.1.0-rc.6 uses,
and in the same run from older schemas, such as schema 6 of 0.1.0-rc.4 and
0.1.0-rc.5. Older versions refuse a schema 10 database. To go back to one,
restore the backup thatdb migratemade. - Every task is now on a track, and an epic is optional. The upgrade puts
each task on its epic's track and keeps every task, epic and track. If you
made epics only to hold a track's tasks, you can delete them afterwards:
their tasks stay on their tracks, without an epic. - The upgrade also records when work started on each task in progress, in
review or done, from its history. A task in progress or in review whose
history doesn't show it takes the time of its last change. - Track descriptions are gone. The web app no longer showed them. In MCP,
track.createandtrack.updateno longer take adescription, and a call
that still sends one fails withvalidation_failed; track reads, such as
read_roadmap, no longer return one. - In MCP,
task.updatewith anepicIdon another track than the task's now
fails withvalidation_failed. Before, it moved the task to that epic and
its track. To do that now, send the epic'strackIdtoo. - The other MCP changes add to what clients send and read, so connected AI
assistants keep working. Tasks have atrackIdand astartedAt, and
epicIdis null for a task without an epic; existing tasks keep their
epics. A task created with only anepicIdstill goes on the epic's track.
epic.deletenow works on an epic with tasks, andtrack.deleteon a track
without tasks or epics. The new fields and filters are under Added.
Added
- In MCP,
list_projectsnames the task prefixes that each project had
before, inearlierPrefixes. Older tasks keep their keys with them. - A task can be on a track without an epic. In MCP,
task.createand
pool.promotetake atrackId, andtask.updatecan move a task to
another track or take it out of its epic withepicId: null. Task reads
havetrackId, andepicIdis null for a task without an epic. - The Board's epic filter offers No epic, and
search_tasksin MCP takes
epicIds: ["none"]. - Each task records when work on it started:
startedAtin MCP reads, the
time it first entered In Progress or In Review since it was last in
Planning. - Undo right after deleting an epic brings it back, with the tasks that
are still on its track without an epic. - New task, and Create task from the Pool, ask for a Track, and
their Epic is optional. Track starts filled in when oneloop can tell
where the task goes: the project's only track, the track the Board is
filtered to, or the track of the last task you created in the project in
that tab. Epic offers the open epics of that track, and choosing an epic
also chooses its track. A project without tracks offers Create track.
Before, New task asked for an epic. - A task's page shows its Track beside its Epic. Moving the task to
another track takes it out of its epic, and a note under Epic says why.
No epic takes a task out of its epic. - An epic's details on the Roadmap offer New task to people with the
Board permission, with the epic and its track filled in.
Changed
- The Roadmap now shows each track's tasks on its timeline instead of
epic bars: done work as dots on the day it was finished, work in progress
as thin bars from when it started to its deadline, and plans with a
deadline as rings. Late work shows in red with an error icon and blocked
work in amber. Each lane shows three tasks in progress at most, the late
and blocked first, and +N in progress lists the rest. Epics are boxes
around their work, milestones are cards above the lanes, and a track's name
says how many tasks it has in progress and planned. Overdue with a
number shows when tasks are late, and steps through them. Every task, epic
and milestone has the same details on hover and keyboard focus, and the
arrow keys move through a lane. Back from a task opened there puts focus
back where it was opened. Plans without a deadline stay on the Board. - The Roadmap opens at the scale that fits the recent work, and another
project opens at its own fit. Once you choose a scale, the address keeps it,
as the Board keeps its filters: a refresh, a bookmark, a link, Back and
Forward open the Roadmap at Weeks, Months or Quarters as it was.
After a free zoom, the address keeps the nearest scale. Changing the scale
adds no step to the browser's history, and signing out drops it. - The Roadmap loads the days around what it shows, and more days as you
scroll to them, and draws only what is near the view. Each day shows all of
its done work and plans at any scale. Where they are too close to tell
apart, the work of a few days becomes a number, whose list shows 50 tasks,
so steady work reads as a row of numbers across time. A plan's title that couldn't load says so, and
loads again by itself a little later, or at once when the connection comes
back. Overdue steps through the 20 longest overdue. A change made
elsewhere reads only what it changed, and a change to a track or milestone
reads no tasks. Its header no longer counts tracks, epics and milestones. - On a phone, each track's name on the Roadmap sits above its lane.
- An epic's details no longer say Ongoing: an epic without an end date
shows from when it runs. - Deleting an epic keeps its tasks on its track, without an epic. Before, an
epic with tasks couldn't be deleted. Delete epic says how many tasks
stay on its track, or that the epic just goes when it has none. - Moving an epic to another track moves its tasks with it, and Edit epic
says so. - A track can be deleted only when it has no tasks and no epics. Delete
track on the Roadmap now says so first, with how many tasks and epics
to move or delete, in the words the server uses when it refuses. Before, it
asked to confirm a delete that then failed. - A task's Epic offers the epics of the task's track. Choosing an epic on
a task's page puts the task on the epic's track, also when the epic moved
to another track meanwhile. In MCP, an epic on another track than the
task's is refused. - A Board card names the task's epic, or its track when it has no epic.
- The activity of a task says where it went: "moved the task to iOS", "added
the task to Payments v2" or "removed the task from Payments v2", instead of
"updated the epic". - Restoring a deleted task whose epic was deleted meanwhile brings it back on
its track without the epic. Before, it couldn't be restored. A task whose
track was deleted meanwhile can't be restored. - A track's ⋮ menu on the Roadmap now offers only Rename track and
Delete track. To move a track, drag its grip, or focus the grip and use
the arrow keys, Home and End. A dragged track now shows its name and a line
where it will land, as a checklist item or a file does. - A Board address with filters, as after a refresh or from a bookmark, now
loads with one request instead of two, so its cards show sooner. - A change to a task now loads only what it can change on the task's open
pages. Before, every change loaded the task's comments, activity and files
again. A change to its checklist loads only the task, and nothing in the tab
that made it. A new title, status or other field loads the task and its
activity. A comment loads the comments, and a change to the files loads the
files.
Fixed
- A busy server that turns some reads away no longer looks like a lost
connection. Before, the page then checked the connection, loaded everything
again and read once more, about every second, also in a hidden tab. Now the
page says it couldn't load or refresh, and tries again by itself after 5
seconds, then 15, then every minute, while the tab shows. A connection that
keeps coming back only to go again is checked less and less often. - The Board and the Roadmap load faster in a project with many
deleted tasks. - On a task's page, a Status that couldn't be saved, such as while
offline, now shows the saved status again. Before, it kept showing the
status you chose until the page was drawn again. - On a task's page, choosing a Status or Assignees after a change made
elsewhere, such as by a teammate, no longer says the task changed elsewhere
when the page already shows that change. When the task really did change
elsewhere, the question names the latest status, such as "In Progress",
instead of "progress", and the latest assignees, or "Nobody", instead of
their IDs. - A change made elsewhere while a task's Status list was open now shows
once the list closes. Before, it showed only after focus left the page. - Mark as done on an epic now counts all of its open tasks, not only those
the page had loaded. - On the Roadmap, today's label no longer shows over the column of track
names when you scroll past today. Milestone lines and today's line no longer
leave small marks on the column of track names either. - A change made elsewhere, such as in another tab, no longer takes focus off a
track's grip or ⋮ ...
oneloop 0.1.0-rc.6
The sixth release candidate. It adds task checklists, shows descriptions as
formatted Markdown, keeps the project and the Board's filters in the address,
and puts moved and new tasks at the top of their column. It also makes the web
app faster on slow networks and fixes many bugs. Read the upgrade notes before
you upgrade; if you upgrade from 0.1.0-rc.4, read those of 0.1.0-rc.5 too.
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 from schema 6, which 0.1.0-rc.4 and 0.1.0-rc.5 use,
to schema 8. Older versions refuse a schema 8 database. To go back to one,
restore the backup thatdb migratemade. - If you upgrade from 0.1.0-rc.4, also follow the upgrade notes of
0.1.0-rc.5: Knowledge folders have size limits now, and some MCP errors and
read_poolcursors changed. - Browser tabs that are open during the upgrade still run the old version.
They show oneloop was updated, but reload by themselves only where
Reload after updates was on, so ask people to reload them. From this
version on, every tab reloads by itself at a safe moment, and the setting is
gone from the account menu. - The addresses of the Board, the Roadmap, Knowledge and
Settings now name the project, and the Board's address holds its
filters. Older bookmarks and links still work: they open the project you
last switched to in that browser, or else your first project. Links to a
task don't change. - In MCP,
task.movewithoutposition,beforeTaskIdorafterTaskIdnow
puts the task at the top of its new column, and new tasks, also from
pool.promote, start at the top of Planning. Before, most went to the
bottom. Pass a place to put a task anywhere else. A task'spositionin
reads can now be below zero; use it only to order a column. - In MCP,
read_activitywith a task that doesn't exist now fails with
not_found. Before, it returned an empty page. - AI assistants that are already connected don't need to connect again. The
new checklist operations need Create and manage tasks and Pool items, and
task.checklist.deletealso needs delete access, astask.deletedoes.
Added
- A task's description now shows as formatted Markdown, as people and AI
assistants write it: headings, lists, tables, code and more. Task keys of
your projects, such asWEB-042, link to their tasks. Click the text, or
choose Edit, to change it; leaving the field, Esc or Ctrl+Enter
(Cmd+Enter on macOS) saves it and shows it formatted again. An epic's
description shows formatted too. - Ctrl+S (Cmd+S on macOS) now saves the field you are typing in at once and
keeps you there. In a dialog, or while you edit a comment, it does what the
main button does. It never sends a new comment, and it no longer downloads
the page. - In MCP,
create_attachment_uploadcan replace a file that you uploaded:
pass its ID asreplacesAttachmentId. When the upload completes, the new
file takes the old one's place, and the old one is deleted as
delete_attachmentdeletes it. This needs no destructive access, so an
assistant can update its own documents without asking you to delete the old
version. If the upload fails, the old file stays. - Tasks have a Checklist: short steps that you add, tick, rename, move and
remove on the task's page. A Board card shows how many steps are done, such
as 2/5, in green once all are. In MCP,task.createtakes the steps in
checklist,read_taskreturns them,search_tasksandread_epiccount
them, andtask.checklist.add,task.checklist.update,
task.checklist.moveandtask.checklist.deletechange them.
Changed
- oneloop now compresses the web app's files with gzip, so a first visit
downloads about 60% less and the app opens faster on slow networks. A
reverse proxy no longer needs to compress them, and the nginx example no
longer does. - The app asks for all of its start-up scripts at once, instead of one level
of imports at a time, so it opens faster on slow networks. - The app reads your workspace while it checks your session, instead of
after, so every visit opens one round trip sooner. - When a Board tab shows again, reconnects, or hears of a change to an epic,
track, milestone or member, it now reads the Board once instead of twice. - A tab no longer checks your access every 30 seconds while it is hidden or
gets live updates. Live updates already report lost access, and a hidden
tab refreshes when it shows again. - The web app does less work on slow computers and phones. Turning off a
Board filter or emptying the search no longer draws the whole page again,
so the cards move smoothly into place. A change to one card, a drop or a
filter no longer redraws every loaded card, and dragging a card is
smoother. Opening a task draws its page two times instead of three, and a
change from another tab to the open task reads its comments and activity
once instead of twice. - A Board search, a Board filter or a project switch that takes more than a
moment now dims the page until the result arrives. Before, a slow search
looked as if nothing happened. - The Board, its counts and, in MCP,
search_taskswithout a status no
longer slow down on an instance with many tasks where no task was ever
blocked. Before, counting the blocked tasks could read every task of the
instance, which took tens of milliseconds at 100,000 tasks. - An open connection, such as the one each browser tab keeps for live
updates, now uses about 20 KB of server memory. Before, each one kept its
own copy of the routes, about 300 KB, so 100 open tabs took 30 MB. - After many writes in a short time, such as an import through MCP, the first
write a day later no longer holds up all other writes while it removes the
expired retry keys. Database maintenance now removes them, a batch at a
time. Before, 50,000 expired keys held up writes for a few hundred
milliseconds. - Uploads, and the storage check that runs every minute, now count stored
files and unfinished uploads but not image thumbnails, so they no longer
slow down as an instance collects images. Thumbnails go when files and
unfinished uploads reach 80% of the storage limit. Clean up now still
counts them, as the Storage page does. - oneloop now looks for files that nothing refers to, such as files that a
crash left behind, once an hour instead of every minute. - Image thumbnails, and files and avatars that the browser already has, no
longer wait for other changes to finish, such as a Knowledge sync. An
attachment'slastAccessedAtnow changes only while the attachment is
temporary, and the 24 hours of a temporary attachment start again when
someone marks it temporary. - Large Knowledge files download faster.
- The address now names the project on the Board, the Roadmap,
Knowledge and Settings, and the Board's address also holds its
filters and search. A refresh, a bookmark or a link opens the same project
and filters, switching projects is a step in the browser's history, and
Back leaves the Board instead of undoing filters. An address without a
project, such as an older bookmark, opens the project you last switched to in
this browser. Signing out clears the project and filters from the tab's
address, so the next person to sign in there starts from their own. Before, a
refresh opened the first project by name and lost the filters. - Every open tab now reloads by itself after an upgrade, when nothing you typed
would be lost, nothing such as a dialog, a menu or an Undo offer is open,
and the tab is hidden or unused for five minutes. Reload after updates is
gone from the account menu. The bar says that the page reloads by itself and
offers Reload now, and after such a reload the page says "oneloop was
updated". - Markdown previews and the Knowledge base now load the math renderer, about
80 KB, only for text with math. Before, any$, such as in a price or a
shell variable, loaded it. - A task that changes status without a place now goes to the top of its new
column, Done too: with Move to, the task's Status, Unblock and
complete, ortask.movein MCP withoutposition,beforeTaskIdor
afterTaskId. New tasks, also ones made from a Pool idea, start at the top
of Planning. Before, most of these went to the bottom, where a long
column hid them until Load more, and Done mixed both orders. A drag,
Move up and Move down still put a task exactly there, and
Newest first still lists Done by completion time. A task at the top
takes a position above the first one, which leaves the other tasks where
they are, so a task'spositionin MCP reads can be below zero. Undo
puts a deleted task back at the same place in its column, also when a new
task took its place; before, it went to the end. - In MCP, every tool that names a task now also accepts its key, such as
WEB-042:read_comments,read_activity,discussion.comment.create,
task.deleteand every othertask.*operation, also inbeforeTaskIdand
afterTaskId. Moving a blocked task to Done now fails with a message that
namestask.unblock-and-complete, andset_attachment_temporaryis marked
as safe to repeat. - Newest first is now a small sort button at the top of Done, so
Done's header is as tall as the others and its cards line up with theirs.
The button shows your choice at once, and the page dims while a slow Board
read loads the new order.
Fixed
- In MCP,
read_activitywith a task key, or with a task that doesn't exist,
returned an empty page. It now returns the task's activity, or fails with
not_found. - A Mermaid diagram in a Markdown preview no longer fails when its renderer
takes more tha...
oneloop 0.1.0-rc.5
The fifth release candidate. It fixes many bugs in the web app, in MCP and in
the commands, limits the size of Knowledge folders, and updates rustls for a
security fix. Read the upgrade notes before you upgrade.
Upgrade notes
- A Knowledge folder now stops syncing, and shows that it is too large, when
it has more than 5,000 subfolders, or more than 5,000 files counting links
and other files that the sync leaves out. A knowledge base that synced in
0.1.0-rc.4 can reach these limits: choose a smaller folder, or remove files
or subfolders from it. Before, such a folder could fill the disk with
folders or left-out files, and many deep subfolders could make search use
gigabytes of memory. - In MCP, the command tools now answer every edit and deletion without
expectedRevisionwithprecondition_failed, as the documentation says.
Before,discussion.comment.editfailed withvalidation_failed, and
execute_destructive_commandrefused the call as invalid arguments.
discussion.comment.createand theinbox.*operations now refuse an
expectedRevisionwithvalidation_failed, as creating a task does.
Before, they ignored it. - In MCP, a
read_poolnextCursorfrom an earlier version now fails with
validation_failed, because Pool cursors have a new form. Start again from
the first page.
Changed
ONELOOP_TRUSTED_PROXIESnow ignores empty items, such as a trailing
comma, like the other lists. Before, oneloop refused to start.- An MCP download now names the file in its
Content-Dispositionheader, as
a browser download does. - In MCP,
list_attachmentsandreorder_attachmentnow accept a task key,
such asWEB-042, intaskId, ascreate_attachment_uploaddoes.
Fixed
oneloop serve,oneloop backupand the other commands no longer fail
when nothing reads their standard error and they have a warning or notice
to print, such as a copy left by an interrupted backup. Theservewarning
about an emptyONELOOP_TRUSTED_PROXIESis now a log line like the others.- Times such as "5m ago" on comments, activity and the Inbox now count from
the server's clock. Before, a computer clock that ran fast or slow made a
new comment read "5m ago", or stay "just now" too long. - The Inbox's counts, activity feeds, a block's history and, in MCP,
search_taskswithout a status now show the data of one moment. Before, a
change that landed while they were read could show twice, not at all, or
with counts that didn't match the items. - When a person opens more than 16 tabs, the oldest one now always says that
its live updates are paused, with Resume. Before, it could look
connected and show no new changes until you used it, or reconnect at once
and close another tab. - One person's slow avatar uploads can no longer hold up avatar changes for
everyone. Each person now has one avatar upload at a time; another one
gets "try again" at once. When the server is busy, a refused avatar upload
now gets that answer instead of a network error. - After you change a task's status on its page, the status in the page header,
the Status icon and Block task now change at once. Before, they changed
only after you left the task's fields. Overdue also follows a changed
deadline at once. - Choosing Done in the Status of a blocked task now asks you to unblock and
complete it, as the Board does. Before, the change failed with an error. - Saving a changed block reason now says "Block reason updated", and unblocking
and completing a task says "Task unblocked and completed". Before, they said
"Task blocked" and "Task unblocked". - A block reason with several spaces in a row before a mention keeps the
mention. Before, the mention was dropped and the person was not notified. - oneloop asks before you leave a task whose new deadline could not be saved
because the connection was lost, also after you left the deadline field. A
link to the page you are on no longer asks to discard your changes. - When you press Back or Forward with text you haven't sent and then
Cancel, the browser history stays as it was. Before, the next Back
skipped a page. - When someone else renamed a milestone while you edited its name, the
question about the change now shows their name. Before, it showed no saved
value. - The Temporary switch in a file preview works. Before, it did nothing.
- After you add a Pool item with a description, the description field closes,
so the next item starts with its title. Before, it stayed open and empty. - Dropping a track back in its own place on the Roadmap no longer shows an
error. - On a 320-pixel-wide screen, the Roadmap header shows the whole Epic
button. Before, part of it was cut off. Screen readers still read the
Roadmap heading there. - An epic's activity now comes in pages of up to 100 items, like all other
activity, as the limits in the documentation say. It stopped at 50. - With a very large
ONELOOP_STORAGE_LIMIT, above about 200 PiB, the storage
page for administrators shows the right cleanup points of 80% and 70%.
Before, it showed wrong values. - When a Knowledge folder is too large to sync, oneloop now says to remove
files or subfolders. Before, it said to remove large files, which doesn't
help a folder with too many files or subfolders. - Knowledge search now says when some files are searched by name only,
because their text doesn't fit in the search index. Before, a word in such
a file gave "No results" without a reason. In MCP,search_knowledgeand
read_knowledge_overviewreplies then include"partial": true. - Markdown in Knowledge shows at the reader's own width and spacing.
Before, it used the wider layout of file previews. - A Knowledge file download now always sends the file, as an attachment
download does. Before, a download request withIf-None-Matchcould get an
empty "not modified" answer. - The page where you connect an AI app lists projects in the same order as
the app, without regard to upper and lower case.
Security
- Updated rustls to 0.23.46 (RUSTSEC-2026-0349). oneloop uses it when it
fetches the metadata document of an AI assistant that connects.
Distribution
- Docker:
ghcr.io/code19m/oneloop:0.1.0-rc.5, for linux/amd64 and
linux/arm64 - From source:
cargo install --git https://github.com/code19m/oneloop --tag v0.1.0-rc.5 --locked
oneloop 0.1.0-rc.4
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 ...
oneloop 0.1.0-rc.2
The second release candidate. It adds a read-only knowledge base to each
project and fixes several interface bugs.
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 2. - Knowledge needs Git 2.31 or later and an SSH client on the server. The Docker
image now includes both.
Added
- Knowledge: each project can show one folder of a Git repository as a
read-only knowledge base, with README files, inline previews and one search
over names and text. Admins connect it in the project's Settings, from any
Git host, over HTTPS with an access token or over SSH with a deploy key.
oneloop checks the branch every minute. - MCP tools
read_knowledge_overview,read_knowledge_fileand
search_knowledgelet assistants read the knowledge base.
Changed
- The documentation has fewer, shorter pages. Links to the old pages redirect
to the new ones.
Fixed
- A sidebar click is no longer lost when the page redraws at the same moment,
for example while a task from another project is loading. - On narrow screens, the Board's filters no longer sit against the top edge,
and its first column no longer touches the left edge. - Page titles no longer show a focus ring after a refresh or a page change.
- A card dropped in another column now settles there directly, instead of
flying back to its old place first. - "Try again in … seconds" after too many sign-in attempts now counts down,
and says when you can try again. - Exact times, such as a task's creation time, no longer end with the time
zone name. They are still shown in the instance time zone. - Inbox items have a small gap between them, so highlighted items no longer
touch. - A long comment's "Show more" preview now fades out smoothly, like a long
description, instead of ending at a hard edge. - Clicking "Load older activity" is no longer lost when a new comment or
change arrives at the same moment.
Distribution
- Docker:
ghcr.io/code19m/oneloop:0.1.0-rc.2, for linux/amd64 and
linux/arm64 - From source:
cargo install --git https://github.com/code19m/oneloop --tag v0.1.0-rc.2 --locked
oneloop 0.1.0-rc.1
The first public release candidate. It's ready for small teams to try; please
report what you find.
Highlights
- Roadmap: plan tracks, epics and milestones on a timeline. Epics can be
ongoing, start by themselves when work begins, and close when you say so. - Board: move tasks through Planning, In Progress, In Review and Done by
drag and drop or from the keyboard, filter by track, epic, assignee or
blocked state, and keep loose ideas in a private or shared Pool. - Task pages: assignees, deadlines, blocking with a reason, comments with
replies, mentions and@everyone, and a history of every change. - Attachments: up to 25 files of any type per task, with previews for
images, PDF, Markdown (with math and Mermaid diagrams), text and sandboxed
HTML. Temporary files make room automatically when storage runs low. - Inbox: a private list of mentions, replies, assignments and unblocked
tasks across all your projects. - Live updates: changes appear for everyone without a refresh.
- Accounts and access: admins create accounts and choose, per project, who
can change the Roadmap or the Board. Everyone can see and end their sessions. - AI assistants: a built-in MCP server lets Claude Code, Codex and other
MCP clients work in the projects and with the capabilities you pick, never
with more rights than you have. - Simple to run: one binary with SQLite and the web app built in,
configured with environment variables.oneloop db migratebacks up before
every upgrade, andoneloop backupcreates and restores complete backups. - Light and dark themes.
Distribution
- Docker:
ghcr.io/code19m/oneloop:0.1.0-rc.1, for linux/amd64 and
linux/arm64 - From source:
cargo install --git https://github.com/code19m/oneloop --tag v0.1.0-rc.1 --locked.
oneloop is not published to crates.io. - A database created by a build from before this release upgrades with
oneloop db migrate --backup-dir <directory>.
Known limitations
- The interface is in English only.
- oneloop runs as one server with SQLite on a local disk. There is no
clustering, and network filesystems such as NFS and SMB aren't supported. - oneloop sends no email. Notifications stay in the Inbox, and an admin resets
forgotten passwords. - There is no single sign-on or two-factor authentication.
- There are no custom statuses, workflow automation, sprints or time tracking.
- Linux and macOS hosts only; Windows isn't supported.
- The bundled timezone database is IANA 2025b. Regions whose rules changed
since may need a fixed offset until an update. - Browser testing covers current Chromium, Firefox and WebKit. Phones and
tablets have had less testing than desktop browsers.