# Reference: packages > Neutral, exhaustive description of what turbo-core holds. Eighteen packages. Dependencies run strictly downwards; there are no cycles and no interface indirection to prevent one. ``` app → {editor, ui, lsp, buffer, terminal, filetree, settings, snippets, tools, syntax, theme, profile, version} editor → {buffer, syntax, ui, theme} terminal → {ui, theme, tcell, golang.org/x/sys} filetree → {ui, theme, tcell} snippets → {toml, projectfile, profile} settings → {toml, projectfile, profile} tools → {toml, projectfile, profile} syntax → theme ui → theme theme → {profile-free; takes a directory}, tcell, toml lsp → profile ``` | Package | What it holds | Depends on | | --- | --- | --- | | `profile` | The editor's identity: name, slug, language server, starter templates, and the paths derived from them | **stdlib only** | | `buffer` | The text of one file: lines of runes, cursor, selection, undo, search, load and save | **stdlib only** | | `projectfile` | Atomic writes of the TOML files a project keeps in the editor's own directory | **stdlib only** | | `version` | What build of itself a binary is: linker stamp, then Go build info | **stdlib only** | | `jsonrpc` | JSON-RPC 2.0 over a framed stream: calls, notifications, inbound requests answerable later | **stdlib only** | | `lsp` | LSP framing, the methods, and the child process | `jsonrpc`, `profile` | | `theme` | TOML into tcell styles; eleven embedded themes plus the user's own; two kinds of inheritance | `tcell`, `toml` | | `syntax` | Colouring: eight built-in languages, the registry an editor adds its own to, and the scanner toolkit | `theme` | | `settings` | A project's `settings.toml`: load, create, rewrite one key in place | `toml`, `projectfile`, `profile` | | `snippets` | Reusable text from a project's and a user's `snippets.toml`, grouped for a menu | `toml`, `projectfile`, `profile` | | `tools` | The commands a project runs on itself, and which menu each is in | `toml`, `projectfile`, `profile` | | `ui` | Turbo Vision widgets: painter, desktop, window, menu, dialog, controls, status bar | `theme`, `tcell` | | `editor` | The editing widget: viewport, scrolling, keys, mouse, snippet insertion | `buffer`, `syntax`, `theme`, `ui` | | `terminal` | A shell in a window: pseudo-terminal, VT/ANSI emulator, screen grid, the widget | `theme`, `ui`, `tcell`, `golang.org/x/sys` | | `filetree` | A project's files as an expandable tree, and the window showing it | `theme`, `ui`, `tcell` | | `acp` | A coding agent in a window: the Agent Client Protocol, the conversation, the widget | `jsonrpc`, `profile`, `projectfile`, `syntax`, `theme`, `ui`, `tcell`, `toml` | | `app` | Assembly: menus, dialogs, event routing, completion popup, language-server lifecycle | all of the above | ## Third-party dependencies Three, and only three: | Module | Why | | --- | --- | | `github.com/gdamore/tcell/v2` | the terminal | | `github.com/BurntSushi/toml` | every configuration file the editor reads | | `golang.org/x/sys` | the pseudo-terminal ioctls on Linux and macOS; the pseudo-console, process and job-object calls on Windows | The tokeniser, the JSON-RPC client, the LSP framing and the VT/ANSI emulator are hand-written. ## The diagram `docs/diagrams/packages.drawio` holds the same graph in draw.io format, checked against `go list -deps`. ## See also - Why the graph is shaped this way: [architecture](../explanation/architecture.md)