Offending Commit 9cc8637dc7 fix(dashboard): use primitive deps in onMetrics effect to break render loop
Using a metrics object as a useEffect dep causes the loop:
  onMetrics → setMetricsById → Dashboard re-renders → ServerWorkspaceRows
  re-renders → useQueries runs → TanStack Query cache subscriber fires
  (Sidebar's setNow) → query result objects are new references → metrics
  useMemo returns new object → effect dep changed → onMetrics again → ∞

Fix: depend on the five primitive values (workspaceCount, conclusionCount,
queueActive, queuePending, health) directly. React compares primitives by
value, so the effect only fires when actual data changes, not on reference
churn from re-renders.

Also adds server-workspace-rows.test.tsx with three focused unit tests:
correct health:ok report, stability after load (no re-fire), and health
transition coverage.
2026-06-03 17:48:21 -05:00
2026-04-24 21:30:48 -05:00
2026-04-24 21:30:48 -05:00
2026-06-03 21:37:08 +00:00
2026-06-03 21:37:08 +00:00

OpenConcho

OpenConcho

A fast, privacy-first desktop & web UI for self-hosted Honcho instances.

CI Latest release Downloads Platforms License


Browse memories, peers, sessions, and conclusions — or chat with full memory context — directly against your own Honcho instance. All connection details stay in your browser; nothing leaves except requests to the URL you configure.

Features

Dashboard Workspace count and queue status, auto-refreshes every 10 s
Multiple instances Add and switch between several Honcho connections
Fleet dashboard Cross-instance observability — workspaces/sessions/queue side-by-side with per-instance badges
Workspaces Paginated list with per-workspace navigation
Peers Browse peers, view representations, context, and peer cards
Peer display names Set a friendly display_name (metadata) to replace raw peer ids
Peer Card Seed Kits Author reusable peer-card kits and apply them across instances
Sessions Paginated message history with summaries and context
Conclusions Semantic search across conclusions with observer/subject display
Dream viewer Browse dream/consolidation bursts with a recursive premise tree
Dialectic playground Fan one query across all reasoning levels side-by-side
Webhooks Manage and trigger webhooks per workspace
Chat Conversational interface through Honcho's chat endpoint with memory context
Schedule Dream Trigger Honcho's dream/consolidation pass on demand
Demo mode Mask identifiers/content for screenshots and screen-sharing
Dark / light mode Persisted per device, instant toggle
Optional auth Token field is optional; connection health check auto-detects auth requirement

Download

Pre-built binaries are attached to every GitHub Release:

Platform File
macOS (Apple Silicon) OpenConcho_*_aarch64.dmg
macOS (Intel) OpenConcho_*_x64.dmg
Linux openconcho_*_amd64.deb / openconcho_*_amd64.AppImage / OpenConcho-*.x86_64.rpm
Windows OpenConcho_*_x64-setup.exe / OpenConcho_*_x64_en-US.msi

Quick Start

Prerequisites

  • Node.js ≥ 22
  • pnpm 10 (pinned via packageManager; corepack enable picks it up)
  • A running Honcho instance (local or remote)

Web app

git clone https://github.com/offendingcommit/openconcho.git
cd openconcho
pnpm install
pnpm dev

Open http://localhost:5173 and enter your Honcho URL when prompted.

Desktop app (Tauri)

Additional prerequisites: Rust stable + Tauri system dependencies for your OS.

git clone https://github.com/offendingcommit/openconcho.git
cd openconcho
pnpm install
pnpm --filter @openconcho/desktop dev

Docker (web app)

The container serves the SPA and reverse-proxies the Honcho API under its own origin: the browser calls /api same-origin and names the upstream in an X-Honcho-Upstream header, so there's no browser CORS to configure.

Two Compose modes (the published image is ghcr.io/offendingcommit/openconcho-web):

# Dev-forward — build from this repo and run your local changes:
OPENCONCHO_DEFAULT_HONCHO_URL=https://honcho.example.net make up

# Production — pull the latest published image instead of building:
OPENCONCHO_DEFAULT_HONCHO_URL=https://honcho.example.net make prod

make down    # stop + remove (dev or prod)
make clean   # down + drop the locally built image
# → http://localhost:8080

Both modes live in one docker-compose.yml as Compose profiles: make up runs the dev profile (build: .), make prod runs the prod profile (pulls ghcr…:latest). OPENCONCHO_DEFAULT_HONCHO_URL seeds the first instance (absolute URL); OPENCONCHO_UPSTREAM_ALLOWLIST is an optional SSRF guard (comma-separated host globs) for when you expose the proxy. Full details and env vars are in docs/docker.md.

Kubernetes (Helm)

The chart is published as an OCI artifact to GHCR on every tagged release.

helm install openconcho oci://ghcr.io/offendingcommit/charts/openconcho \
  --version 0.14.0 \
  --create-namespace --namespace openconcho \
  --set honcho.defaultUrl=https://honcho.example.com

Enable an Ingress and TLS:

helm install openconcho oci://ghcr.io/offendingcommit/charts/openconcho \
  --version 0.14.0 \
  --create-namespace --namespace openconcho \
  --set honcho.defaultUrl=https://honcho.example.com \
  --set ingress.enabled=true \
  --set ingress.className=nginx \
  --set 'ingress.hosts[0].host=openconcho.example.com' \
  --set 'ingress.hosts[0].paths[0].path=/' \
  --set 'ingress.tls[0].secretName=openconcho-tls' \
  --set 'ingress.tls[0].hosts[0]=openconcho.example.com'

Full chart documentation, configuration reference, and an ArgoCD Application example are in charts/openconcho/README.md.

Connecting to your instance

  1. Enter the base URL of your Honcho instance (e.g. http://localhost:8000)
  2. Optionally enter an API token if your instance requires auth
  3. Click Test connection — the UI reports whether auth is needed
  4. Click Save — you're in

Production build

pnpm build                                    # web only → packages/web/dist/
pnpm --filter @openconcho/desktop build       # desktop → packages/desktop/src-tauri/target/release/bundle/

Stack

Layer Library
Desktop shell Tauri v2
Framework React 19 + Vite 8
Routing TanStack Router v1 (file-based)
Data fetching TanStack Query v5
API client openapi-fetch (typed from openapi.json)
Styling Tailwind CSS v4 + CSS custom properties
Animation framer-motion
Icons lucide-react
Lint / format Biome 2
Tests Vitest 4 + Testing Library
Releases semantic-release (conventional commits)

Development

pnpm dev              # Vite dev server (web, http://localhost:5173)
pnpm test             # Vitest test suite
pnpm lint:fix         # Biome lint + format
pnpm typecheck        # TypeScript strict check
pnpm generate:api     # Regenerate src/api/schema.d.ts from openapi.json

Regenerating API types

When your Honcho instance is updated, pull a fresh schema and regenerate:

curl http://your-honcho-url/openapi.json -o packages/web/openapi.json
pnpm --filter @openconcho/web generate:api

Privacy

  • Connection details (base URL + token, one or more instances) stored in localStorage under openconcho:instances
  • Theme preference stored in localStorage under openconcho:theme
  • No telemetry, no analytics, no external requests beyond your configured Honcho instance

Contributing

Open an issue first for significant changes. PRs welcome.

License

MIT

Description
No description provided
Readme MIT 7.3 MiB
Languages
TypeScript 92.8%
Shell 2.8%
JavaScript 1.3%
CSS 1.2%
Rust 0.7%
Other 1.2%