Storage

Choose where tasks and discussions are stored. Bud is the interface, not the database.

View Markdown

Bud doesn't store tasks or comments itself. A work adapter supplies tasks and a thread adapter supplies discussions: canvas pins, code comments and task discussions. The built-in Beads adapter supplies both, so with no configuration everything lives in your project's Beads workspace.

Plugins choose other stores. This keeps tasks in Beads and discussions on Git:

bud.config.ts

import { defineConfig } from '@bud.sh/app'
import { beads, gitComments } from '@bud.sh/app/plugins'

export default defineConfig({
  routes: ['/'],
  plugins: [beads({ only: 'work' }), gitComments()],
})
PluginStores
beads()Tasks and discussions in the project's Beads workspace
gitComments()Discussions on the bud/comments Git branch
memory()Tasks and discussions in memory, gone when Bud stops
Your ownSee Your own store

Only one plugin may store tasks and one discussions. storage: { work: false } or { threads: false } turns one off, and Bud never falls back to another store.

An adapter declares its fields, statuses, actions and extra sections, and Bud's interface follows: a different tracker shows its own properties in the same task pages.

Your own store

A store is a plugin whose work or threads is an Effect layer providing WorkAdapter or ThreadAdapter from @bud.sh/app/server, or a function making one for the project. It runs only in Bud's server, so credentials come from environment variables and never reach the browser. Bud checks the services when it starts.

bud.config.ts

import { defineConfig } from '@bud.sh/app'
import { definePlugin, memory } from '@bud.sh/app/plugins'

// A tracker of your own would build its layer from WorkAdapter in @bud.sh/app/server.
const tracker = memory().work

export default defineConfig({
  routes: ['/'],
  plugins: [definePlugin({ name: 'tracker', label: 'Tracker', work: tracker })],
})

Comments in Beads

Each discussion is a Beads message issue: hidden from bd list and bd ready, so agents' work queues stay clean, and synced with the rest of the workspace. Replies are Beads comments, resolving closes the issue and linked tasks are related dependencies. You can delete your own messages; a discussion's first message goes only while it's the only one, and deleting it removes the discussion.

Moving older comments

Projects that used Bud's earlier Git storage can copy their comments into the configured discussion store:

Terminal

npx bud comments migrate --dry-run
npx bud comments migrate

Migration keeps authors, times, statuses and anchors, skips threads it already copied and never changes the bud/comments branch. Keep gitComments() in plugins if you'd rather stay on Git.