Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
111 commits
Select commit Hold shift + click to select a range
ed49dc4
fix: clear selection and close panels on view navigation; create element
Mertcikla Apr 27, 2026
75001bb
feat: add stacked node visuals, type-branded borders, canvas shadow and
Mertcikla Apr 27, 2026
ecdad19
refactor: replace per-type colors with default gray for node borders and
Mertcikla Apr 27, 2026
132add3
feat: add edit/delete controls to proxy connector panel and wire
Mertcikla Apr 27, 2026
a6bb29a
feat: optimize viewsgrid fetching
Mertcikla Apr 28, 2026
e0cc36e
feat: make proxy badge clickable and aggregate hidden proxy details
Mertcikla Apr 28, 2026
3ed8260
feat(vite): add optional local proto alias via TLD_LOCAL_PROTO_GEN
Mertcikla Apr 28, 2026
83847c9
chore(vite): set tsconfigPaths projects and preserve dist on rebuild
Mertcikla Apr 28, 2026
063977a
feat: add hidden proxy badge support and update proxy
Mertcikla Apr 28, 2026
ddc2f9f
feat: tld-watch v1
Mertcikla Apr 29, 2026
584e51d
feat: add text embedding support
Mertcikla Apr 29, 2026
12f23f5
feat: improve embedding, add openai sdk, multiprocess scanning
Mertcikla Apr 30, 2026
7694a2f
feat: add pagination support and improve data fetching
Mertcikla Apr 30, 2026
a41de91
Merge pull request #18 from Mertcikla/tld-watch
Mertcikla Apr 30, 2026
fec5009
Merge remote-tracking branch 'origin/dev' into stacked-elements-in-ed…
Mertcikla Apr 30, 2026
295b7cd
Merge pull request #19 from Mertcikla/stacked-elements-in-editor
Mertcikla Apr 30, 2026
3195e56
Merge pull request #21 from Mertcikla/fix-new-diag
Mertcikla Apr 30, 2026
a8661b1
fix: ignore native captured wheel events and only zoom when pointer is
Mertcikla Apr 30, 2026
d59ad88
feat: add workspace version preview UI and version diff support
Mertcikla Apr 30, 2026
0f99994
test: add watch tests for JSON output, settings precedence, and filters
Mertcikla Apr 30, 2026
7f9019f
feat: add open-in-editor API, source editor preference, UI integration
Mertcikla Apr 30, 2026
d3df099
refactor: centralize global config with defaults and env overrides
Mertcikla Apr 30, 2026
d85c12e
feat: add term UI helpers and use them in CLI; add WorkspacePanel
Mertcikla Apr 30, 2026
3df2494
feat(watch): record and surface line-level diff counts; add organic
Mertcikla Apr 30, 2026
d7345c3
feat: display version and line-change badges and add watch diff summary
Mertcikla Apr 30, 2026
6e56133
feat: add baseline-only flag to createVersionForHead to skip building
Mertcikla Apr 30, 2026
5132e2d
feat(watch): store and display commit messages for watch versions
Mertcikla Apr 30, 2026
aab22d8
fix: use lightweight spinner and handle missing diffs
Mertcikla Apr 30, 2026
79bdeed
refactor: remove WatchRuntimePanel and WorkspaceVersionPanel components
Mertcikla Apr 30, 2026
5f7b37a
refactor: remove WatchHistory, simplify workspace panel and watch
Mertcikla Apr 30, 2026
59edaf6
chore: add .claude/skills/impeccable and skills-lock.json to .gitignore
Mertcikla Apr 30, 2026
1bdf2a1
feat: meaningful tagging
Mertcikla May 1, 2026
c1d874d
refactor: standardize connector alpha/line width and normalize edge type
Mertcikla May 1, 2026
bf01ba2
refactor: centralize anchor point calculations
Mertcikla May 1, 2026
498f4fc
fix: increase CHILD_PAD from 1 to 4 to improve child node padding
Mertcikla May 1, 2026
931247a
feat: add max expanded connectors per group threshold and cross-branch
Mertcikla May 1, 2026
497672a
fix: apply depth filter after capping proxy connector groups
Mertcikla May 1, 2026
0ade833
fix: respect minConnectorAnchorAlpha when computing visible anchors
Mertcikla May 1, 2026
beed9f6
feat: add connector budget and priority controls and viewport-aware
Mertcikla May 1, 2026
b700d84
chore: switch air to build/watch tlddebug and add Makefile dev-stop
Mertcikla May 1, 2026
077097a
feat(zui): use accent CSS variable and restyle proxy connectors
Mertcikla May 1, 2026
f62e075
refactor: remove portal visuals and squiggly edges; reduce node size and
Mertcikla May 1, 2026
fa9f8ee
refactor: compute node label and badge fonts from node height to match
Mertcikla May 1, 2026
4a464c6
feat: add codeowners support, respect gitignore in analyze and watch
Mertcikla May 1, 2026
9a090aa
feat: remove e2e tests
Mertcikla May 1, 2026
e972656
feat: add toggleable WorkspacePanel and update panel controls and icons
Mertcikla May 1, 2026
dbb5870
feat(workspace-panel): enable native touch scrolling and rename Clear
Mertcikla May 1, 2026
4e68e06
feat: add diff visibility toggle and simplify versions loading
Mertcikla May 1, 2026
ddaa5b5
Restore diff badges and limit border highlights to panel navigation
Mertcikla May 1, 2026
3f9dcf7
feat: add navigation and summary UI for workspace diffs
Mertcikla May 1, 2026
e9eea23
feat: add element focus support in ZUI, InfiniteZoom, Views search, and
Mertcikla May 2, 2026
c8c085e
refactor: remove provenance stub drawing from proxy connectors
Mertcikla May 2, 2026
a709d30
fix(layout): use 100dvh/100% and root CSS to prevent viewport overflow
Mertcikla May 2, 2026
eaf7b4c
feat: add rust support to analyze and watch
Mertcikla May 2, 2026
ff53c81
feat: add element focus/navigation and viewport centering for ZUI
Mertcikla May 2, 2026
89a6ac4
feat: add jump search for views and elements with explore data loading
Mertcikla May 2, 2026
7d244d5
refactor: extract views jump search logic and split focus viewport
Mertcikla May 2, 2026
7d7d1c8
feat: prune materialized resources, add parent commit detection, update
Mertcikla May 2, 2026
9c649ba
Merge pull request #22 from Mertcikla/rust-support
Mertcikla May 2, 2026
77ba290
chore: promote github.com/fsnotify/fsnotify to direct dependency
Mertcikla May 2, 2026
1d4e7f6
chore: bump generated buf.build diagram modules to 20260503
Mertcikla May 3, 2026
74e17d8
feat: add collapsed cluster nodes and compact display to views grid
Mertcikla May 3, 2026
998a049
feat: add smooth layout transitions and stable positioning in ViewsGrid
Mertcikla May 3, 2026
2a97aaa
feat: detect and clear stale watch locks by checking process liveness
Mertcikla May 3, 2026
9687a78
feat: add git line diffs and changed files/symbols to watch diffs
Mertcikla May 3, 2026
424b272
chore: bump @buf deps, update client typing, remove shadow
Mertcikla May 3, 2026
91b79bc
feat: add watch --dry-run and introduce 'initialized' change type for
Mertcikla May 3, 2026
fd92994
feat(watch): group diffs in watch diff/dry-run JSON output
Mertcikla May 3, 2026
8f64ae8
feat: register C parser and re-enable Rust in watch settings
Mertcikla May 3, 2026
53aa514
feat: improve cpp+go analyzer
Mertcikla May 3, 2026
d6c89b1
feat: implement camera rebase on zuicanvas
Mertcikla May 4, 2026
691a4b7
feat: squash db migrations
Mertcikla May 4, 2026
2771691
feat: refactor god file store into multiple files
Mertcikla May 4, 2026
8a0b84c
feat: implement additional tests
Mertcikla May 4, 2026
3f6ec1a
fix: empty technology primary icon parsing
Mertcikla May 4, 2026
d73006c
Update README with configuration options and edits
Mertcikla May 4, 2026
ff395e3
docs: add logo
Mertcikla May 4, 2026
4d5aab3
feat: export workspace context
Mertcikla May 4, 2026
c79e2b0
style: adjust sizing, spacing, and typography in WorkspacePanel and
Mertcikla May 4, 2026
b3b89b7
refactor: replace workspace header with repo/version selects and
Mertcikla May 4, 2026
e05c8b1
feat: add view origin, world/screen conversion helpers, and camera
Mertcikla May 4, 2026
92aeea6
feat: add slotScale to getHandlePos and use handle slot offsets
Mertcikla May 4, 2026
b378e69
feat: add git hunk parsing and attribute line diffs to symbol ranges
Mertcikla May 5, 2026
fdcecb9
feat: show connected watch clients in watch status, CLI and UI
Mertcikla May 5, 2026
aa1f05e
feat: force neighbour visibility on changed symbols
Mertcikla May 5, 2026
20073ad
feat: add hide/show context flows
Mertcikla May 5, 2026
be29a33
test: improve watch test coverage
Mertcikla May 5, 2026
a5c631f
chore(deps): bump github.com/viant/vec to v0.2.3
Mertcikla May 5, 2026
8f55c77
refactor: centralize HTTP error parsing with responseError helper
Mertcikla May 5, 2026
2e03c3d
feat: track materialization dirty state and add apply locks and resource
Mertcikla May 5, 2026
6dedbb9
fix: prefer .tld over tld for workspace default and fallback to empty
Mertcikla May 5, 2026
28e9114
fix: ZUI cross-branch interaction guard.
Mertcikla May 5, 2026
b8c1cab
test: add TestResolveEditorPath for absolute path handling
Mertcikla May 5, 2026
4e80e8d
refactor: cache repository rules to avoid redundant analysis
Mertcikla May 5, 2026
8074dfc
fix: validate absolute editor paths are inside watched repositories
Mertcikla May 5, 2026
beec5f6
feat: add watch RunOnce and export YAML, update CI test reporting
Mertcikla May 5, 2026
2a185da
ci: add checks write permission to test workflow
Mertcikla May 5, 2026
7cc492d
feat: Unified TLD Config Management
Mertcikla May 5, 2026
dcf3b15
feat: infer architecture from runtime artifacts and add progress
Mertcikla May 6, 2026
42d94a8
feat: implement enricher regsitry
Mertcikla May 6, 2026
532418b
feat: add fact object/relationship and visibility hints; add context
Mertcikla May 6, 2026
2912f59
Merge branch 'dev' into enricher-registry
Mertcikla May 6, 2026
24f1a81
feat: modularize enrichers, add architecture facts extraction and
Mertcikla May 6, 2026
255ebe7
feat(enrich): add pattern framework, generic architecture glue, and
Mertcikla May 6, 2026
7953fca
feat: add enrichers
Mertcikla May 7, 2026
9489618
feat: canonicalize and prune architecture models and merge connector
Mertcikla May 7, 2026
77b5207
fix: tag coloring
Mertcikla May 7, 2026
77586ed
fix: tag reusing first after exhaustion
Mertcikla May 7, 2026
a0011b4
feat: add crossview architecture-structural connectivity
Mertcikla May 7, 2026
d821ed0
fix: missing grpc fold
Mertcikla May 7, 2026
2565db3
Merge pull request #24 from Mertcikla/enricher-registry
Mertcikla May 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .air.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ testdata_dir = "testdata"
tmp_dir = "tmp"

[build]
args_bin = ["serve"]
bin = "./tmp/main"
cmd = "go build -o ./tmp/main ./cmd/tld"
args_bin = ["watch"]
bin = "./tmp/tlddebug"
cmd = "go build -o ./tmp/tlddebug ./cmd/tld"
delay = 1000
exclude_dir = ["assets", "tmp", "vendor", "frontend", "data"]
exclude_file = []
Expand Down
18 changes: 12 additions & 6 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ on:

permissions:
contents: read
checks: write

jobs:
test:
Expand Down Expand Up @@ -49,11 +50,16 @@ jobs:
git diff --exit-code

- name: Run unit tests with race detection
run: go test -race -shuffle=on -coverprofile=coverage.txt ./...
run: |
go install gotest.tools/gotestsum@latest
gotestsum \
--junitfile results.xml \
--format testdox \
./...

- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v5
- name: Publish Test Results
uses: dorny/test-reporter@v1
with:
token: ${{ secrets.CODECOV_TOKEN }}
file: ./coverage.txt
fail_ci_if_error: false
name: Go Tests
path: results.xml
reporter: java-junit
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,5 @@ frontend/public
tmp
frontend/*.tgz
.agents
.claude/skills/impeccable
skills-lock.json
6 changes: 5 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
.PHONY: frontend-deps frontend-build lint-be lint-fe build run clean dev test-backend build-go setup-hooks make-be make-fe
.PHONY: frontend-deps frontend-build lint-be lint-fe build run clean dev dev-stop test-backend build-go setup-hooks make-be make-fe

setup-hooks:
chmod +x scripts/pre-commit.sh
Expand Down Expand Up @@ -28,6 +28,10 @@ dev:
@echo "Starting development stack..."
@$(MAKE) -j 2 be fe

dev-stop:
@echo "Stopping development backend..."
-pkill -x tlddebug

proto: ## Update go.mod to latest BSR-published proto versions (run after buf push in proto/)
go get buf.build/gen/go/tldiagramcom/diagram/protocolbuffers/go@$(shell buf registry sdk version --module=buf.build/tldiagramcom/diagram --plugin=buf.build/protocolbuffers/go)
go get buf.build/gen/go/tldiagramcom/diagram/connectrpc/go@$(shell buf registry sdk version --module=buf.build/tldiagramcom/diagram --plugin=buf.build/connectrpc/go)
Expand Down
26 changes: 7 additions & 19 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# tld
[![Logo](./frontend/logo/tld.svg)](https://tldiagram.com)

[![Go Version](https://img.shields.io/github/go-mod/go-version/mertcikla/tld)](https://go.dev/) [![License](https://img.shields.io/github/license/mertcikla/tld)](./LICENSE) [![Build Status](https://img.shields.io/github/actions/workflow/status/mertcikla/tld/test.yml?branch=main)](https://github.com/mertcikla/tld/actions) [![Go Report Card](https://goreportcard.com/badge/github.com/mertcikla/tld)](https://goreportcard.com/report/github.com/mertcikla/tld)

`tld` provides a complete software architecture management platform that bundles a high-performance Go backend with an interactive React frontend into a single, standalone binary. Includes a CLI to enable managing diagrams from the shell or in CI.
`tld` provides a complete software architecture management platform that bundles a high-performance Go backend with an interactive React frontend into a single, standalone binary. Includes a CLI to enable managing diagrams from the shell or in CI.

Designed for local-first development and private self-hosting, `tld` allows teams to visualize, document, and manage their system architecture using a combination of a rich web UI and "Diagrams as Code" workflows.

Expand All @@ -11,6 +11,7 @@ Designed for local-first development and private self-hosting, `tld` allows team
## Key Features

- **Full-Featured Web UI**: A React frontend designed, polished and optimized to handle complex architectures while attempting to intelligently show and hide details.
- **Git diff visualization**: Seamlessly sync and visualize the changes you or your agent are making live in diagram form. Inspect the dependencies and intervene when necessary.
- **Bi-directional Sync**: Seamlessly sync changes between your local YAML files, the self-hosted web UI, and the cloud version at tlDiagram.com.
- **Standalone Distribution**: A single, dependency-free binary containing both the server and the web application.
- **CLI built that speaks agent**: Use the [agent skill](./skills/create-diagram/SKILL.md) and teach your agent how to create a diagram of your codebase with the exact detail level you need. You can prompt your agent to add/remove details as needed.
Expand All @@ -29,20 +30,6 @@ Here are some examples that were generated using the agent skill.

---

## Table of Contents

1. [Quick Start](#quick-start)
2. [Deployment & Self-Hosting](#deployment--self-hosting)
3. [The tlDiagram Workflow](#the-tldiagram-workflow)
4. [Tech Stack](#tech-stack)
5. [Development Setup](#development-setup)
6. [Commands Reference](#commands-reference)
7. [Workspace Structure](#workspace-structure)
8. [Environment Variables](#environment-variables)
9. [Troubleshooting](#troubleshooting)

---

## Quick Start
### Single line install and start
```bash
Expand Down Expand Up @@ -86,6 +73,9 @@ Run `tld serve` in any directory to start a local instance that uses your curren
1. Provide a persistent volume for the `.tld/` directory (where YAMLs and the SQLite cache are stored).
2. Set `TLD_ADDR=0.0.0.0` and `PORT=8060`.

### Configuration
Various configuration options are available in `~/.config/tldiagram/tld.yaml`

---

## The tlDiagram Workflow
Expand All @@ -98,8 +88,6 @@ Run `tld serve` in any directory to start a local instance that uses your curren

---

## Tech Stack

- **Backend**: Go 1.26+
- *CLI*: Cobra
- *API*: Connect RPC (gRPC compatible)
Expand Down Expand Up @@ -178,7 +166,7 @@ Flags:
--format string output format: text or json (default "text")
-h, --help help for tld
-v, --version version for tld
-w, --workspace string workspace directory (default "tld")
-w, --workspace string workspace directory (prefers .tld, then tld; empty when neither exists)

Use "tld [command] --help" for more information about a command

Expand Down
5 changes: 3 additions & 2 deletions cmd/add/add.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (

"github.com/mertcikla/tld/internal/cmdutil"
"github.com/mertcikla/tld/internal/completion"
"github.com/mertcikla/tld/internal/term"
"github.com/mertcikla/tld/internal/workspace"
"github.com/spf13/cobra"
)
Expand Down Expand Up @@ -71,8 +72,8 @@ func NewAddCmd(wdir, format *string, compact *bool) *cobra.Command {
if cmdutil.WantsJSON(*format) {
return cmdutil.WriteMutation(cmd.OutOrStdout(), *compact, "add", "add", r)
}
_, _ = fmt.Fprintf(cmd.OutOrStdout(), "Updated elements.yaml (upserted %s)\n", r)
_, _ = fmt.Fprintln(cmd.OutOrStdout(), "Change recorded locally in elements.yaml. Run 'tld apply' to push to cloud.")
term.Successf(cmd.OutOrStdout(), "Added element %s to elements.yaml", r)
term.Hint(cmd.OutOrStdout(), "Run 'tld apply' to push to cloud.")
return nil
},
}
Expand Down
Loading
Loading