No description
  • TypeScript 51.2%
  • Python 45.8%
  • Shell 0.8%
  • Jinja 0.7%
  • Just 0.4%
  • Other 1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-11-01 15:13:37 +01:00
.claude M5 (part 2): SP-parity client features, export/import, attachments backend, workspaces API 2026-09-30 10:58:52 +02:00
automations M8 (3/3): Settings → Automations and → Bundles, docs; spec 0.20 2026-09-30 13:48:48 +02:00
deploy Version 0.15.1 2026-11-01 15:06:44 +01:00
docs Random picks: even turns or pure chance 2026-11-01 14:24:25 +01:00
handbook Version 0.15.1 2026-11-01 15:06:44 +01:00
installer Installer: an absolute data directory should name its instance; version 0.2.1 2026-10-23 06:56:51 +02:00
integrations Not before: start dates, snooze and minimum gap keep tasks out until their time; spec 0.26 2026-10-01 07:50:05 +02:00
plugins Spanish as a third UI language: full es catalogue, server texts, quick-add words, profile language; ADR 0017; spec 0.47 2026-10-02 12:47:36 +02:00
runner M8 (2/n): runner isolation (S7, ADR 0007), bundles, propsets 2026-09-30 13:28:17 +02:00
scripts Random picks: even turns or pure chance 2026-11-01 14:24:25 +01:00
sdk Version 0.15.1 2026-11-01 15:06:44 +01:00
server Version 0.15.1 2026-11-01 15:06:44 +01:00
tests/vectors Random picks: even turns or pure chance 2026-11-01 14:24:25 +01:00
web e2e: repeat waits for the unit too, not only for the days (it was flaky) 2026-11-01 15:13:37 +01:00
.dockerignore Demo stacks: just demo-solo and just demo-circle load showcase data, … down unloads 2026-10-24 21:16:00 +02:00
.env.example Several Drang instances on one server, behind one reverse proxy 2026-10-23 06:28:34 +02:00
.gitattributes M0: scaffold — compose stack, Django+Channels sync peer, Vite app with design kit, i18n, install.sh 2026-09-30 07:52:40 +02:00
.gitignore Demo stacks: just demo-solo and just demo-circle load showcase data, … down unloads 2026-10-24 21:16:00 +02:00
CLAUDE.md U0: bugs and settings that promise more than they do (ADR 0028, spec 0.93) 2026-10-25 18:03:38 +01:00
compose.keycloak.yml OIDC with a user group and an admin group; single sign-on works in circle mode; spec 0.80, ADR 0023 2026-10-11 00:02:59 +02:00
compose.runner-egress.yml M8 (2/n): runner isolation (S7, ADR 0007), bundles, propsets 2026-09-30 13:28:17 +02:00
compose.s3.yml M0: scaffold — compose stack, Django+Channels sync peer, Vite app with design kit, i18n, install.sh 2026-09-30 07:52:40 +02:00
compose.yaml Several Drang instances on one server, behind one reverse proxy 2026-10-23 06:28:34 +02:00
debug.log Graph widget: Cytoscape or React Flow, changes in place, toolbar; spec 0.25 2026-10-01 05:40:27 +02:00
docker-compose.dev.yml M1: core ops, list widget with quick-add, materializer, convergence tests 2026-09-30 08:07:09 +02:00
DRANG_DESIGN_SPEC.md Random picks: even turns or pure chance 2026-11-01 14:24:25 +01:00
FRONTEND_DESIGN-kit.zip One word for a workspace: "workspace" in English, "Arbeitsbereich" in German; spec 0.78 2026-10-10 00:19:46 +02:00
install.sh install.sh fetches from the Drang repository on fj16.bastler.space, not an unrelated codeberg address 2026-10-20 17:56:48 +02:00
justfile Version 0.15.1 2026-11-01 15:06:44 +01:00
justfile.snippet Installer rebuilt after the app-installer playbook: Python + Jinja in a throwaway container, twelve proxy modes 2026-10-20 17:41:49 +02:00
LICENSE M0: scaffold — compose stack, Django+Channels sync peer, Vite app with design kit, i18n, install.sh 2026-09-30 07:52:40 +02:00
package.json M0: scaffold — compose stack, Django+Channels sync peer, Vite app with design kit, i18n, install.sh 2026-09-30 07:52:40 +02:00
pnpm-lock.yaml Version 0.8.0 2026-10-25 19:13:08 +01:00
pnpm-workspace.yaml The handbook: Drang's user and admin documentation in English, German and Spanish; ADR 0021, spec 0.77 2026-10-09 23:51:15 +02:00
README.md install.sh fetches from the Drang repository on fj16.bastler.space, not an unrelated codeberg address 2026-10-20 17:56:48 +02:00
RUN.md Demo stacks: just demo-solo and just demo-circle load showcase data, … down unloads 2026-10-24 21:16:00 +02:00
UI_ANALYSIS.md UI analysis: "Not now" with a return point, growing want and one question when it repeats; keep "Later" on the pill 2026-10-25 09:17:18 +01:00
VERIFIED.md Meta places: "near any pharmacy", looked up in a person's search areas; ADR 0025, spec 0.85 2026-10-11 02:20:26 +02:00

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 want value 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.