vigo

module
v0.2.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 8, 2026 License: MIT

README

vigo

CI Go Reference

A Turbo Vision style IDE for Go, written in Go, run in a terminal.

vigo brings back the Borland Turbo Pascal 6.0 / Borland C++ 3.x look: blue desktop, double-line window borders, drop shadows, F-key shortcuts, pull-down menus, modal dialogs. Underneath it uses gopls for code intelligence and dlv for debugging. One static binary, no CGO.

+--[=]--File--Edit--Search--Run--Compile--Debug--Project--Options--Window--Help--+
|                                                                                |
|   ##[*]= main.go ====================================================== 1 ##   |
|   #  package main                                                          #   |
|   #                                                                        #   |
|   #  import "fmt"                                                          #   |
|   #                                                                        #   |
|   #  func main() {                                                         #   |
|   #      fmt.Println("hello, vigo")                                        #   |
|   #  }                                                                     #   |
|   #                                                                        #   |
|   ##======================================== 6:1 =============== INS =====##   |
|                                                                                |
+--F1 Help--F2 Save--F3 Open--F5 Zoom--F6 Switch--F9 Make--F10 Menu--Alt-X Exit--+

Status

Pre-alpha. The project is being bootstrapped toward v0.1 (foundation). The full plan, version by version, is in docs/roadmap.md and in the matching specs at ~/notes/Spec/1500/1597..1607.

Version Theme Status
0.1 Foundation in progress
0.2 TUI core planned
0.3 Editor planned
0.4 Project & toolchain planned
0.5 gopls / LSP planned
0.6 Delve / DAP planned
0.7 Polish planned
1.0 Release planned

Why

There is no Go port of Turbo Vision. There are good Rust and C++ ports, and there are good Go terminal UI libraries (tcell, tview, bubbletea), but nothing combines the Turbo Vision object model with Go's editor tooling. vigo is that combination, scoped narrowly to a Go IDE that fits in a terminal.

Goals:

  • Reproduce the Turbo Vision look and feel honestly. Same palette, same glyphs, same keys, same modal dialogs, same drop shadows.
  • Stay in pure Go. No CGO, one binary per platform, fast cold start.
  • Use gopls and dlv as supervised subprocesses. Don't reimplement parsers, type checkers, or debuggers.
  • Keep the UI single-threaded. Background work posts events back to the loop on a channel, never mutates view state directly.

Non-goals:

  • Not a clone of VS Code, GoLand, or Neovim. Mouse is supported but the keyboard is the point.
  • Not a multi-language IDE. Go is the supported target. Other languages may work via gopls's neighbours, but they are not on the roadmap.
  • No bundled package manager and no AI features in 1.0. Both are reasonable plugin candidates after 1.0.

Quickstart

Once published:

go install github.com/tamnd/vigo/cmd/vigo@latest
vigo .

For now, build from source:

git clone https://github.com/tamnd/vigo
cd vigo
go run ./cmd/vigo

Press Alt-X (or F10, then File, then Exit) to quit.

Project layout

vigo/
  cmd/vigo/        binary entrypoint
  vio/             tcell-backed screen, palette, surface, glyphs
  event/           typed events, keyboard, mouse, commands
  view/            View, Group, focus, palette indirection
  app/             Application, Desktop, Background, main loop
  menu/            MenuBar, StatusLine
  docs/            roadmap, architecture, overview
  .github/         CI, release workflows
  CHANGELOG.md
  LICENSE          MIT
  README.md

Architecture

vigo is a thin layer over gdamore/tcell/v2 that implements Turbo Vision's object model in Go. The translation uses composition with embedded *View and small interfaces (Drawable, Eventer, Sizer) instead of class-based inheritance. Drawing happens once per frame onto an in-memory Surface; tcell handles the diff to the terminal. The event loop is single-threaded for UI; gopls and dlv run as subprocesses and post results back through a channel that the main loop reads with select.

Long version: docs/architecture.md.

References

Contributing

Patches and issues are welcome. Discuss bigger design changes in an issue first; the framework is small and opinionated, and a wrong move in the foundation propagates everywhere. CONTRIBUTING.md will land with v0.2.

License

MIT, Copyright (c) 2026 Duc-Tam Nguyen.

Directories

Path Synopsis
Package app wires the view tree to a backend Screen and runs the main event loop: read events, dispatch them down the tree, draw, flush.
Package app wires the view tree to a backend Screen and runs the main event loop: read events, dispatch them down the tree, draw, flush.
Package assets exposes the static files vigo ships in-binary: the default menu tree and any future palette or shortcut config.
Package assets exposes the static files vigo ships in-binary: the default menu tree and any future palette or shortcut config.
cmd
Package cmd implements vigo's command bus: a CommandSet for grouping command IDs, an Enabler that tracks which commands are currently active, and a key-binding table that maps KeyEvents to commands.
Package cmd implements vigo's command bus: a CommandSet for grouping command IDs, an Enabler that tracks which commands are currently active, and a key-binding table that maps KeyEvents to commands.
vigo command
Command vigo launches the Vigo terminal IDE.
Command vigo launches the Vigo terminal IDE.
vigo-demos command
Command vigo-demos boots the vigo desktop with the four classic Turbo Vision sample tools (Calculator, Calendar, ASCIITable, Puzzle) reachable from the menu bar.
Command vigo-demos boots the vigo desktop with the four classic Turbo Vision sample tools (Calculator, Calendar, ASCIITable, Puzzle) reachable from the menu bar.
Package demos collects the classic Turbo Vision sample tools the IDE shipped with: Calculator, Calendar, AsciiTable, and Puzzle.
Package demos collects the classic Turbo Vision sample tools the IDE shipped with: Calculator, Calendar, AsciiTable, and Puzzle.
Package dialog ships the modal Dialog view: a Window dressed in the gray dialog palette, with helpers for laying out a row of buttons along the bottom edge.
Package dialog ships the modal Dialog view: a Window dressed in the gray dialog palette, with helpers for laying out a row of buttons along the bottom edge.
Package event defines the typed events that flow through the vigo view tree: keyboard, mouse, commands, broadcasts, idle ticks, and resize.
Package event defines the typed events that flow through the vigo view tree: keyboard, mouse, commands, broadcasts, idle ticks, and resize.
Package help is vigo's contextual-help slot.
Package help is vigo's contextual-help slot.
Package menu implements vigo's top-of-screen menu bar and bottom-of-screen status line.
Package menu implements vigo's top-of-screen menu bar and bottom-of-screen status line.
Package view defines vigo's base view types: View (the visual primitive) and Group (a container of views that owns event dispatch and composition).
Package view defines vigo's base view types: View (the visual primitive) and Group (a container of views that owns event dispatch and composition).
Package vio provides Vigo's terminal screen abstraction: cells, attributes, surfaces, palettes, glyph sets, and a Screen interface backed by tcell or a fake screen for tests.
Package vio provides Vigo's terminal screen abstraction: cells, attributes, surfaces, palettes, glyph sets, and a Screen interface backed by tcell or a fake screen for tests.
Package widget collects the small leaf views that live inside a Window or Dialog: static text, labels, buttons, input lines, clusters, scrollbars, and so on.
Package widget collects the small leaf views that live inside a Window or Dialog: static text, labels, buttons, input lines, clusters, scrollbars, and so on.
Package window implements the framed Window view that hosts content on the desktop.
Package window implements the framed Window view that hosts content on the desktop.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL