Source & license
Upstream license: MIT
License TL;DR
You can use it, change it, self-host it and sell it. Keep the original copyright and license notice with copies of the code. You don’t have to publish your changes. The authors don’t promise it will work.
Explain MIT in plain English →Summary of the main license. Separate packages and assets can have different terms.
Inspect repository ↗Read this project’s actual license ↗Repository owner
See the upstream repository for the original creator and contributors.
Maintain this project? Maintainer verification →Cloudflare hosting
Paid services required
The committed cpu_ms=30000 explicitly targets Workers Paid, starting at $5 USD/account/month plus D1/R2 usage beyond included amounts. Supply an owner email, auth secret and production URL. Do not reuse the maintainer resource IDs present in the example configuration.
Hosting requirements
- Create your own database and uploads bucket, apply migrations and set BETTER_AUTH_SECRET and the intended owner before opening registration.
- The config notes ordinary SSR renders can take tens of milliseconds; a free-hosting claim is not defensible for this committed path.
- Source and configuration review establishes a deployment path and conditional costs; this candidate was not executed or load-tested.
Sources checked 01/10/2026
Repository snapshot: 0268c44. Hosting eligibility reflects the deployment documentation and listed assumptions.
- trello ↗
A foundational project manager for small teams — simple to run, and yours to fork. Runs on **Cloudflare Workers** (D1 + R2) or a
- workers ↗
{ "$schema": "node_modules/wrangler/config-schema.json", "main": ".open-next/worker.js", "name": "seeder", "compatibility_date": "2026-04-30", "compatibility_flags": ["nodejs_compat"], "workers_dev": true, "observability": { "enabled": true }, // Per-request CPU ceiling (Workers Paid). Caps worst-case compute per request // so a runaway invocation can't rack up CPU-time cost — it's killed
- d1 ↗
quest origin when unset. "assets": { "directory": ".open-next/assets", "binding": "ASSETS" }, "d1_databases": [ { "binding": "PM_DB", "database_name": "seeder", "database_id": "b9596b56-bb58-41be-bcf1-17e30426ec29", "preview_database_id": "b9596b56-bb58-41be-bcf1-17e30426ec29", "migrations_dir": "migrations" } ], "r2_buckets": [ { "binding": "UPLOADS", "bucket_name": "seeder-uploads", "preview_bucket_name": "seeder-uploads"
- r2 ↗
eview_database_id": "b9596b56-bb58-41be-bcf1-17e30426ec29", "migrations_dir": "migrations" } ], "r2_buckets": [ { "binding": "UPLOADS", "bucket_name": "seeder-uploads", "preview_bucket_name": "seeder-uploads" } ] }
- paid ↗
{ "$schema": "node_modules/wrangler/config-schema.json", "main": ".open-next/worker.js", "name": "seeder", "compatibility_date": "2026-04-30", "compatibility_flags": ["nodejs_compat"], "workers_dev": true, "observability": { "enabled": true }, // Per-request CPU ceiling (Workers Paid). Caps worst-case compute per request // so a runaway invocation can't rack up CPU-time cost — it's killed instead. // 30s is the Paid default; well above normal page renders (tens of ms). "limits": { "cpu_ms": 30000 }, // App config is provided at runtime, never committed here: // - locally via `.dev.vars` (copy `.dev.vars.example`) // - in production via Worker vars/secrets (e.g. `wrangler secret put ...`) // Required: OWNER_EMAIL, BETTER_AUTH_SECRET. BETTER_AUTH
- paid ↗
The Workers Paid plan includes Workers, Pages Functions, Workers KV, Hyperdrive, and Durable Objects usage for a minimum charge of $5 USD per month for an account. The plan includes increased initial usage allotments, with clear charges for usage that exceeds the base plan. There are no additional charges for data transfer (egress) or throughput (bandwidth).
- paid ↗
| Rows read | 5 million / day | First 25 billion / month included + $0.001 / million rows |
- paid ↗
| Storage | 10 GB-month / month |
- paid ↗
| Class A Operations | 1 million requests / month |
- paid ↗
| Class B Operations | 10 million requests / month |
- paid ↗
| Rows written | 100,000 / day | First 50 million / month included + $1.00 / million rows |
- MIT ↗
MIT License Copyright (c) 2026 Daniel Syauqi and Thaqif Rosdi Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, O
- architecture ↗
{ "$schema": "node_modules/wrangler/config-schema.json", "main": ".open-next/worker.js", "name": "seeder", "compatibility_date": "2026-04-30", "compatibility_flags": ["nodejs_compat"], "workers_dev": true, "observability": { "enabled": true }, // Per-request CPU ceiling (Workers Paid). Caps worst-case compute per request // so a runaway invocation can't rack up CPU-time cost — it's killed instead. // 30s is the Paid default; well above normal page renders (tens of ms). "limits": { "cpu_ms": 30000 }, // App config is provided at runtime, never committed here: // - locally via `.dev.vars` (copy `.dev.vars.example`) // - in production via Worker vars/secrets (e.g. `wrangler secret put ...`) // Required: OWNER_EMAIL, BETTER_AUTH_SECRET. BETTER_AUTH
- architecture ↗
{ "$schema": "node_modules/wrangler/config-schema.json", "main": ".open-next/worker.js", "name": "seeder", "compatibility_date": "2026-04-30", "compatibility_flags": ["nodejs_compat"], "workers_dev": true, "observability": { "enabled": true }, // Per-request CPU ceiling (Workers Paid). Caps worst-case compute per request // so a runaway invocation can't rack up CPU-time cost — it's killed
- architecture ↗
quest origin when unset. "assets": { "directory": ".open-next/assets", "binding": "ASSETS" }, "d1_databases": [ { "binding": "PM_DB", "database_name": "seeder", "database_id": "b9596b56-bb58-41be-bcf1-17e30426ec29", "preview_database_id": "b9596b56-bb58-41be-bcf1-17e30426ec29", "migrations_dir": "migrations" } ], "r2_buckets": [ { "binding": "UPLOADS", "bucket_name": "seeder-uploads", "preview_bucket_name": "seeder-uploads"
- architecture ↗
eview_database_id": "b9596b56-bb58-41be-bcf1-17e30426ec29", "migrations_dir": "migrations" } ], "r2_buckets": [ { "binding": "UPLOADS", "bucket_name": "seeder-uploads", "preview_bucket_name": "seeder-uploads" } ] }
Upstream screenshot · danielsyauqi/Seeder repository contributors ↗. Depicts the upstream project. We have not deployed and tested a fresh installation here.
What it can replace
Compare the workflow you need. These mappings describe overlap; full feature parity requires a separate comparison.
Small-team project/task organization and boards; no automation marketplace, power-up ecosystem or complete Trello parity.
See supporting source ↗How it works
The shape of Seeder on Cloudflare, and how it stacks up against the rented tools it replaces.
Architecture
Diagram of deployment declarations at the reviewed commit. Each app has its own entrypoint; declared resources do not prove runtime calls. Follow file and line sources below.
View upstream source ↗Configuration and workflow sources
Reviewed commit 0268c44dd565. Files were read as data; upstream applications and CI jobs were not executed.
Deployment configuration · 2 files
Cloudflare Workers · compatibility 2026-04-30
seeder · default
Entrypoint: .open-next/worker.js
Static assets: .open-next/assets
PM_DB→ D1UPLOADS→ R2ASSETS→ Static assets
Cloudflare Workers · compatibility 2026-04-30
seeder · default
PM_DB→ D1UPLOADS→ R2
Named environments are separate deployments. Bindings are shown only where declared. Configured routes are URL patterns, not verified application endpoints.
Runtime source · handlers, binding usage and workflow steps
Observed TypeScript/JavaScript declarations from Worker entrypoints and resolved relative imports. Calls and workflow steps may run conditionally; their listed order is not a proven end-to-end request flow. Router declarations may be mounted under a prefix or may not be registered. This shows code wiring, not a successful deployment or runtime test. Dynamic wiring, aliases and generated code may not resolve.
No direct runtime declarations resolved from this snapshot. Generated framework bundles or dynamic entrypoints need manual tracing.
Build and deployment pipeline · 2 GitHub Actions workflows
Repository CI declarations, separate from runtime request processing. Job dependencies and conditions are shown as written; long commands are shortened with an ellipsis; a workflow file does not prove a recent successful run.
Triggers: push, pull_request
check · no job dependencies declared
- actions/checkout@v4
actions/checkout@v4 - actions/setup-node@v4
actions/setup-node@v4 - Shell command
npm ci - Lint
npm run lint - Typecheck
npx tsc --noEmit - Test
npm test - Build
npm run build
Triggers: push, workflow_dispatch
publish · no job dependencies declared
- Check out repository
actions/checkout@v6 - Set up QEMU
docker/setup-qemu-action@96fe6ef7f33517b61c61be40b68a1882f3264fb8 - Set up Docker Buildx
docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c - Log in to Docker Hub
docker/login-action@dbcb813823bdd20940b903addbd779551569679f - Log in to GitHub Container Registry
docker/login-action@dbcb813823bdd20940b903addbd779551569679f - Generate image metadata
docker/metadata-action@dc802804100637a589fabce1cb79ff13a1411302 - Build and push image
docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a
build: next build --webpackbuild:node: cross-env RUNTIME=node next build --webpackdeploy: opennextjs-cloudflare build && opennextjs-cloudflare deploy -- --keep-varsdeploy:ci: wrangler d1 migrations apply PM_DB --remote && opennextjs-cloudflare deploy -- --keep-vars
Repository README
View original on GitHub ↗Full upstream document by @danielsyauqi · README.md · snapshot 0268c44

Seeder: Your Personal Project Manager
A foundational project manager for small teams — simple to run, and yours to fork. Runs on Cloudflare Workers (D1 + R2) or a single Node VM, built with Next.js, Drizzle ORM, Better Auth, and Tailwind.
📖 Full documentation: seederpm.xyz/docs
Philosophy
Project tools tend toward two extremes: the heavyweight complexity of Jira, or lightweight boards small teams outgrow in a month. Seeder takes the opposite stance:
- Foundational, not heavy. The essentials a small team needs to run projects, client requests, and day-to-day execution — productive immediately.
- Yours to fork. It's open source. Customization is a change to your own copy — add the field, view, or workflow you need without waiting on a roadmap, a plan upgrade, or any lock-in.
- A small core, on purpose. Keep the core minimal and solid; the rest is yours to build on.
Features
- Projects & Kanban — tasks with categories, multi-tag labels, phases, priorities, assignees, due dates, and per-project code numbers.
- Client requests — a separate inbound queue (new → reviewed → converted → closed) that converts into tasks.
- Public client board — an opt-in, token-gated read-only view to share progress with clients without giving them an account.
- Daily planner — an adhoc/project daily task queue with drag-to-reorder.
- Rich text & comments — TipTap-powered descriptions, notes, and comments (Markdown-aware) with images and tables.
- Activity feed — every change is logged with before→after diffs, whether it comes from the UI or an AI assistant.
- Roles, invites & notifications — owner/admin/member roles, invite-only onboarding with a first-owner bootstrap, and in-app notifications.
- White-labeling — customizable system name, logo, favicon, and accent color.
- Built-in MCP server — let AI assistants read and edit your data over the Model Context Protocol (docs).
Quick start
Seeder 2.1: GitHub/GitLab integration, commit details on task cards, guided MCP client setup, and smoother navigation. See the release notes for features and required upgrade steps.
npm install
npm run setup # interactive wizard: dev / production (node) / production (cloudflare)
npm run dev # local dev — Miniflare simulates D1 + R2, no Cloudflare account
npm run setup generates the env + config (and, for the node target, the
PM2/systemd/Docker + reverse-proxy artifacts). On first run, create the owner
account at /sign-in — sign-up is permitted only for the configured
OWNER_EMAIL and only while the instance has no users; after that, onboarding is
invite-only.
Prefer to wire it up by hand? See the manual setup guide.
Documentation
Everything lives at seederpm.xyz/docs:
- Quickstart — running locally in under a minute
- Choosing a target · Deploy to Cloudflare · Self-host on a Node VM
- Configuration — every environment variable and binding
- MCP server — connect Claude, Cursor, or ChatGPT to your workspace
- Operations — backup/restore, upgrading, troubleshooting
- Architecture — how it's built, end to end
All documentation lives on the docs site — this README stays intentionally short.
MCP server
Seeder ships a built-in Model Context Protocol
server at /api/mcp, so AI assistants can read and edit your projects,
tasks, requests, comments, and settings — it deploys with the app, so every
instance gets it for free. Mint a token at Settings → API tokens (read, or
read & write), then point your client at https://<your-domain>/api/mcp with the
token as a Bearer header. A token can never do more than the user who created
it, and every change shows in the Activity feed. Full tool list and setup:
seederpm.xyz/docs/mcp.
Forks in the wild
Seeder is yours to fork — and people do. Community variants built on top of it:
- goutou by @jhfnetboy — a Seeder variant that adds multi-repo Claude Code coordination skills (狗头军师): a "commander" dispatches work to a central board and per-repo "soldiers" pick it up over the MCP bus.
Built your own variant? Open an issue or a PR adding it here.
Support
Hit a bug or have an idea? Open an issue on GitHub, or email seeder.admin@gmail.com.
Contributing
Contributions are welcome! See CONTRIBUTING.md for local setup, the pre-PR checks (lint, type-check, tests, build), and conventions — CI runs the same gates on every pull request.
Security
Please report vulnerabilities privately via the process in SECURITY.md. Don't open public issues for security problems.
Acknowledgements
A massive thank you to Thaqif Rosdi (@takippu) — Seeder grew out of his original idea, first built as northstar-pm, and it wouldn't exist without it. 🙏
Contributors
Manuele J. Sarfatti (@mjsarfatti) — contributed the responsive Kanban layout fix and the navigation progress experience.
License
MIT © 2026 Daniel Syauqi (@danielsyauqi) and Thaqif Rosdi (@takippu)
The code is free to use, fork, and modify under MIT — just keep the copyright notice and license intact (see NOTICE). The Seeder name and logo are trademarks and are not covered by the MIT License: you can fork the code, but not the brand. See TRADEMARK.md.
Made by @danielsyauqi and @takippu.
Frequently asked about Seeder
What is Seeder?+
Seeder is a self-hosted Trello alternative built on the Cloudflare developer platform. A self-hosted project workspace and task boards for small teams
What does Seeder replace?+
Seeder is listed as an alternative to Trello. Compare the features and tradeoffs before migrating.
What Cloudflare primitives does Seeder use?+
Seeder is built on D1, R2, Workers.
How much does Seeder cost to run?+
The committed cpu_ms=30000 explicitly targets Workers Paid, starting at $5 USD/account/month plus D1/R2 usage beyond included amounts. Supply an owner email, auth secret and production URL. Do not reuse the maintainer resource IDs present in the example configuration. Create your own database and uploads bucket, apply migrations and set BETTER_AUTH_SECRET and the intended owner before opening registration. The config notes ordinary SSR renders can take tens of milliseconds; a free-hosting claim is not defensible for this committed path. Source and configuration review establishes a deployment path and conditional costs; this candidate was not executed or load-tested. Check current Cloudflare pricing before deploying.
Is Seeder open source?+
The upstream repository declares the MIT license. Read its terms at https://raw.githubusercontent.com/danielsyauqi/Seeder/0268c44dd565257f4ff5074e03bb9b3ac285ef5f/LICENSE. Source code and contributor credit are available at https://github.com/danielsyauqi/Seeder.


Discussion · 0
sign in to comment →