93 lines
3.9 KiB
Markdown
93 lines
3.9 KiB
Markdown
---
|
|
title: ClickClack
|
|
description: A self-hostable chat server with Slack-style threads, an OpenAPI-first surface, embedded SQLite, and a TypeScript SDK. One Go binary. Bring your own pincers.
|
|
permalink: /
|
|
---
|
|
|
|
# Tiny chat. Big claws.
|
|
|
|
ClickClack is a self-hostable chat server that fits in a single Go binary. SQLite by
|
|
default, an embedded Svelte SPA, Slack-style threads, durable realtime over a
|
|
WebSocket pipe, and a framework-neutral TypeScript SDK so the bots feel at home.
|
|
|
|
It's built for small teams, internal tools, communities, and anyone who would
|
|
rather host their own.
|
|
|
|
Product domain: [clickclack.chat](https://clickclack.chat). App domain:
|
|
[app.clickclack.chat](https://app.clickclack.chat), with `/app` as the local
|
|
path. Docs domain: [docs.clickclack.chat](https://docs.clickclack.chat).
|
|
|
|
## Why ClickClack
|
|
|
|
- **One binary, zero ceremony.** Drop it on a box, point at a data directory,
|
|
reverse-proxy if you want TLS. SQLite ships inside.
|
|
- **Realtime that recovers.** WebSocket is a pipe; SQLite is the truth. Reconnect
|
|
with a cursor and you're back, even after a long offline.
|
|
- **Threads that don't nest.** One level deep, on purpose. Discussion stays
|
|
scannable.
|
|
- **Bots that aren't second-class.** Same auth surface as humans, a typed
|
|
TypeScript SDK, a scriptable CLI client, and a Mattermost-shaped webhook for
|
|
drop-in scripts.
|
|
- **Crustacean, lightly.** Lobster mascot, claw reactions, `:molting:` status.
|
|
Normal controls stay normal.
|
|
|
|
## Five-minute test drive
|
|
|
|
```sh
|
|
pnpm install
|
|
pnpm build
|
|
go run ./apps/api/cmd/clickclack serve
|
|
# open http://localhost:8080
|
|
```
|
|
|
|
The dev fallback boots a default user, workspace, and channel so the SPA loads
|
|
into something useful at `/app`. The root path is the product website. Disable
|
|
it for anything that isn't a local clone.
|
|
|
|
[Get the full quickstart →](quickstart.html)
|
|
|
|
## What's in the box
|
|
|
|
| Feature | Doc |
|
|
| --- | --- |
|
|
| Channels, messages, edits, soft-delete | [Messages](features/messages.md) |
|
|
| Slack-style threads, one level deep | [Threads](features/threads.md) |
|
|
| Reactions on every message | [Reactions](features/reactions.md) |
|
|
| Realtime over WebSocket with cursor recovery | [Realtime](features/realtime.md) |
|
|
| SQLite FTS5 full-text search | [Search](features/search.md) |
|
|
| Local file uploads + message attachments | [Uploads](features/uploads.md) |
|
|
| Workspace-scoped direct messages | [Direct messages](features/dms.md) |
|
|
| Profile settings, handles, avatars | [Profiles](features/profiles.md) |
|
|
| Magic-link auth, GitHub OAuth, dev fallback | [Auth](features/auth.md) |
|
|
| Mattermost-shaped webhooks and slash commands | [Integrations](features/integrations.md) |
|
|
| TypeScript SDK + bot example | [SDK](sdk.md) |
|
|
|
|
## Operate it
|
|
|
|
- [CLI](cli.md) — server, admin, backup/export, and remote chat client
|
|
commands.
|
|
- [Agent-friendly CLI](agent-friendly-cli.md) — scriptable chat client commands
|
|
for humans, agents, and CI jobs.
|
|
- [Configuration](configuration.md) — flag/env/file precedence.
|
|
- [Deployment](deployment.md) — single binary, Docker, data layout, OAuth.
|
|
- [Development](development.md) — pnpm scripts, monorepo layout, gates.
|
|
- [Releasing](releasing.md) — GoReleaser targets, artifacts, and tag flow.
|
|
|
|
## Look under the hood
|
|
|
|
- [Architecture](architecture/overview.md) — durable vs realtime, where each
|
|
layer lives.
|
|
- [API overview](api/overview.md) — REST/WebSocket surface, auth headers.
|
|
- [Data model](data-model.md) — tables, IDs, thread invariants.
|
|
- [SPEC.md](https://github.com/openclaw/clickclack/blob/main/SPEC.md) — locked
|
|
V1 decisions, milestones, open questions.
|
|
|
|
## Status
|
|
|
|
V1 is in flight. The vertical slice — workspaces, channels, Markdown messages,
|
|
threads, realtime, reactions, search, uploads, DMs, magic-link auth, GitHub
|
|
OAuth, Docker — is implemented. Multi-node websocket fanout, Postgres, federation,
|
|
voice/video, and full Mattermost compatibility are intentionally out of scope.
|
|
|
|
Made with ✦ and a little brine. The lobster is on duty.
|