- TypeScript 51.2%
- Python 45.8%
- Shell 0.8%
- Jinja 0.7%
- Just 0.4%
- Other 1%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
|
||
| .claude | ||
| automations | ||
| deploy | ||
| docs | ||
| handbook | ||
| installer | ||
| integrations | ||
| plugins | ||
| runner | ||
| scripts | ||
| sdk | ||
| server | ||
| tests/vectors | ||
| web | ||
| .dockerignore | ||
| .env.example | ||
| .gitattributes | ||
| .gitignore | ||
| CLAUDE.md | ||
| compose.keycloak.yml | ||
| compose.runner-egress.yml | ||
| compose.s3.yml | ||
| compose.yaml | ||
| debug.log | ||
| docker-compose.dev.yml | ||
| DRANG_DESIGN_SPEC.md | ||
| FRONTEND_DESIGN-kit.zip | ||
| install.sh | ||
| justfile | ||
| justfile.snippet | ||
| LICENSE | ||
| package.json | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| README.md | ||
| RUN.md | ||
| UI_ANALYSIS.md | ||
| VERIFIED.md | ||
Drang
Drang (German: urge, drive — tasks that "want" to be done) is a self-hosted, local-first task and time-management system for one person or one household: Loro CRDT documents in the browser, a Python server that is itself a Loro peer, live sync across every open browser, and soft scheduling for recurring tasks built for ADHD brains — nothing nags, things simply want doing more the longer they wait.
- Local-first. Works offline; every browser converges on the same data when it reconnects.
- Soft scheduling. Recurring tasks have a
wantvalue instead of a deadline:(age / period) ^ elasticity. - Dashboards per device. A wall screen, a phone and a workstation each show their own layout of the same data.
- Plugins, bundles, API, MCP, SDKs, automations, assistant — all behind one door, all off until you turn them on.
- Painless by default. The first screen is a task list with one empty field.
Design: DRANG_DESIGN_SPEC.md · Visual language: docs/FRONTEND_DESIGN.md · Running it: RUN.md · Wording: docs/language.md
Install
curl -fsSL https://fj16.bastler.space/markusw/drang/raw/branch/main/install.sh | sh
or from a checkout: ./install.sh. All it needs on the host is Docker: the installer itself runs in a
throwaway container. It asks a handful of questions (each with a default), sets up the bundled Caddy or writes
the configuration for your own reverse proxy (Caddy, Traefik, nginx, Apache, HAProxy, Nginx Proxy Manager,
Envoy, Kong, Cloudflare Tunnel, lighttpd), starts docker compose, and prints the URL. Run it again at any
time: your current settings are the defaults. Details: the handbook's Installation page.
Develop
just setup # uv sync + pnpm install
just dev # db + server (autoreload) on http://127.0.0.1:8420
just web # Vite on http://localhost:5180 (proxies /api and /ws)
just ci # lint (ruff, mypy, eslint, prettier, copy lint, i18n check) + tests
just up # the production-shaped stack behind Caddy: https://localhost:8443
License
AGPL-3.0-or-later. Fonts: Manrope and JetBrains Mono under the SIL Open Font License.