Skip to content

Releases

oneloop 0.1.0-rc.9

oneloop 0.1.0-rc.9 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 29 Oct 10:03
d4c6a8a

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_PLACE or the XHTML PARSER_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

oneloop 0.1.0-rc.8 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 22 Oct 05:55
111e4e9

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

oneloop 0.1.0-rc.7 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 19 Oct 06:31
f35d325

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 that db migrate made.
  • 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.create and track.update no longer take a description, and a call
    that still sends one fails with validation_failed; track reads, such as
    read_roadmap, no longer return one.
  • In MCP, task.update with an epicId on another track than the task's now
    fails with validation_failed. Before, it moved the task to that epic and
    its track. To do that now, send the epic's trackId too.
  • The other MCP changes add to what clients send and read, so connected AI
    assistants keep working. Tasks have a trackId and a startedAt, and
    epicId is null for a task without an epic; existing tasks keep their
    epics. A task created with only an epicId still goes on the epic's track.
    epic.delete now works on an epic with tasks, and track.delete on a track
    without tasks or epics. The new fields and filters are under Added.

Added

  • In MCP, list_projects names the task prefixes that each project had
    before, in earlierPrefixes. Older tasks keep their keys with them.
  • A task can be on a track without an epic. In MCP, task.create and
    pool.promote take a trackId, and task.update can move a task to
    another track or take it out of its epic with epicId: null. Task reads
    have trackId, and epicId is null for a task without an epic.
  • The Board's epic filter offers No epic, and search_tasks in MCP takes
    epicIds: ["none"].
  • Each task records when work on it started: startedAt in 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 ⋮ ...
Read more

oneloop 0.1.0-rc.6

oneloop 0.1.0-rc.6 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 16 Oct 19:43
72c2d6b

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 that db migrate made.
  • 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_pool cursors 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.move without position, beforeTaskId or afterTaskId now
    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's position in
    reads can now be below zero; use it only to order a column.
  • In MCP, read_activity with 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.delete also needs delete access, as task.delete does.

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 as WEB-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_upload can replace a file that you uploaded:
    pass its ID as replacesAttachmentId. When the upload completes, the new
    file takes the old one's place, and the old one is deleted as
    delete_attachment deletes 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.create takes the steps in
    checklist, read_task returns them, search_tasks and read_epic count
    them, and task.checklist.add, task.checklist.update,
    task.checklist.move and task.checklist.delete change 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_tasks without 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's lastAccessedAt now 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
    , or task.move in MCP without position, beforeTaskId or
    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's position in 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.delete and every other task.* operation, also in beforeTaskId and
    afterTaskId. Moving a blocked task to Done now fails with a message that
    names task.unblock-and-complete, and set_attachment_temporary is 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_activity with 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...
Read more

oneloop 0.1.0-rc.5

oneloop 0.1.0-rc.5 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 16 Oct 02:40
a40171b

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
    expectedRevision with precondition_failed, as the documentation says.
    Before, discussion.comment.edit failed with validation_failed, and
    execute_destructive_command refused the call as invalid arguments.
    discussion.comment.create and the inbox.* operations now refuse an
    expectedRevision with validation_failed, as creating a task does.
    Before, they ignored it.
  • In MCP, a read_pool nextCursor from an earlier version now fails with
    validation_failed, because Pool cursors have a new form. Start again from
    the first page.

Changed

  • ONELOOP_TRUSTED_PROXIES now 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-Disposition header, as
    a browser download does.
  • In MCP, list_attachments and reorder_attachment now accept a task key,
    such as WEB-042, in taskId, as create_attachment_upload does.

Fixed

  • oneloop serve, oneloop backup and 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. The serve warning
    about an empty ONELOOP_TRUSTED_PROXIES is 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_tasks without 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_knowledge and
    read_knowledge_overview replies 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 with If-None-Match could 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

oneloop 0.1.0-rc.4 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 07 Oct 07:26
5cee201

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 that db migrate made.
  • 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_DIR is now an invalid setting: oneloop serve
    and the other commands exit with code 2.
  • systemd: add RestartPreventExitStatus=2 to your unit, or copy the new
    example, and run sudo 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 add ExitTimeOut 35 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
    with newsyslog -r, which works without root.
  • A .. after a symbolic link in ONELOOP_DATA_DIR now 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 as setup-1.
  • Browser preflight requests to /mcp, /oauth/register and /mcp/files/*
    from origins that aren't in ONELOOP_MCP_ALLOWED_ORIGINS now get 403. The
    /mcp origin check now compares the port too: an Origin header 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 completedAt and completionOrder for 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 restore and db 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 --check shows which copy is in use.
  • oneloop --version also shows the source revision. Setup and upgrade
    messages and the help are clearer, and user add --help and
    user passwd --help say 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 passwd and serve --check no 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 ...
Read more

oneloop 0.1.0-rc.2

oneloop 0.1.0-rc.2 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 04 Oct 11:48

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_file and
    search_knowledge let 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

oneloop 0.1.0-rc.1 Pre-release
Pre-release

Choose a tag to compare

@code19m code19m released this 03 Oct 09:09

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 migrate backs up before
    every upgrade, and oneloop backup creates 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.