Asopitech With · Project management
Trello boards with Alopex DB & Alopex Chirps
Trello is a project management tool where cards move from list to list on a board to make a team's workflow visible. What if we rebuilt it with Alopex DB and Alopex Chirps?
Updated: Oct 13, 2026
What the service does
The basic parts of Trello are boards, lists and cards. Lists form a workflow, and cards move across each step. A card is the smallest and most detailed unit of a board. This page rebuilds boards and cards.
Where the data lives
- Alopex DB SQL tables: boards, lists, cards, members and card comments live in SQL tables. Card order is a list column plus a position column.
- Alopex Chirps messages: changes such as a card being moved or edited are carried between server nodes by Chirps.
- Consensus: the order of changes to the same card is settled by Raft consensus in Chirps.
Reflecting changes on screen is the job of the app code.
Deployment
Alopex DB and Chirps are embedded in the server nodes. Board data sits in an Alopex DB cluster, and the list of nodes and their liveness come from Chirps gossip membership.
Why Alopex DB and Alopex Chirps fit
Board data is the relationship between lists and cards and their order. Alopex DB keeps that relationship in SQL, and Chirps carries changes directly between nodes. No separate messaging server is needed.
See it in code
Boards, lists and cards live in Alopex DB (change delivery via Chirps). Just the core of moving a card and re-ordering.
import alopex
# ボード・リスト・カードは Alopex DB(変更の配送は Chirps)
db = alopex.Database.open("trello.alopex")
db.execute_sql("CREATE TABLE IF NOT EXISTS lists (id INTEGER PRIMARY KEY, name TEXT)")
db.execute_sql("""
CREATE TABLE IF NOT EXISTS cards (
id INTEGER PRIMARY KEY,
list_id INTEGER,
pos INTEGER,
title TEXT
)
""")
for lid, name in [(1, "ToDo"), (2, "Doing")]:
db.execute_sql("INSERT INTO lists (id, name) VALUES (?, ?)", [lid, name])
for cid, list_id, pos, title in [(1, 1, 0, "仕様を書く"), (2, 1, 1, "レビュー依頼"), (3, 2, 0, "実装")]:
db.execute_sql("INSERT INTO cards (id, list_id, pos, title) VALUES (?, ?, ?, ?)", [cid, list_id, pos, title])
# カードを別のリストへ動かす(list_id と pos を書き換える)
db.execute_sql("UPDATE cards SET list_id = ?, pos = ? WHERE id = ?", [2, 1, 2])
# 「Doing」リストのカードを順番に並べる
for row in db.execute_sql("""
SELECT c.pos, c.title
FROM cards AS c
JOIN lists AS l ON l.id = c.list_id
WHERE l.name = ?
ORDER BY c.pos
""", ["Doing"]):
print(row["pos"], row["title"])Moving a card is rewriting list_id and pos. Delivering that change between nodes and agreeing on the order is handled by Chirps.
Board relationships in Alopex DB, change delivery in Alopex Chirps. We recommend the pair for collaboration services.