A powerful terminal-based spreadsheet application built with Go
Features • Installation • Usage • Functions • File Formats • Contributing

GoSheet is a feature-rich, lightweight spreadsheet application that runs entirely in your terminal. Built with Go and powered by tview, it offers a modern alternative to traditional spreadsheet software with an emphasis on performance, simplicity, and powerful formula capabilities.
# Clone the repository
git clone https://github.com/drclcomputers/gosheet.git
cd gosheet
# Build the application
go build -o gosheet
# Run GoSheet
./gosheet
# Create a new spreadsheet
./gosheet
# Open an existing file
./gosheet -file path/to/workbook.gsheet
# Open from start menu
./gosheet
# Then select file from recent files or browse
| Key Combination | Action |
|---|---|
| Arrow Keys | Navigate cells |
| Shift + Arrows | Select range |
| Enter | Edit selected cell |
| Escape | Save menu / Exit dialog |
| Alt + G | Go to cell |
| Key Combination | Action |
|---|---|
| Alt + C | Copy selection |
| Alt + V | Paste |
| Alt + X | Cut |
| Alt + Delete | Clear cells |
| Alt + Z | Undo |
| Alt + Y | Redo |
| Key Combination | Action |
|---|---|
| Alt + R | Copy cell format |
| Alt + I | Paste cell format |
| Alt + N | Edit cell comment |
| Key Combination | Action |
|---|---|
| Alt + M | Open Sheet Manager |
| Alt + T | Quick Sheet Menu |
| Alt + PageUp | Previous sheet |
| Alt + PageDown | Next sheet |
| Alt + 1-9 | Quick switch to sheet |
| Key Combination | Action |
|---|---|
| Alt + O | Sort dialog |
| Alt + A | AutoFill |
| Alt + F | Find |
| Alt + H | Replace |
| F3 / F4 | Find previous/next |
| Alt + = | Insert row/column |
| Alt + - | Delete row/column |
| Alt + / | Show help |
GoSheet includes 104 built-in functions organized into 22 categories:
SIN, COS, TAN, CTAN
ASIN, ACOS, ATAN, ATAN2, ACTAN
SEC, CSEC, ASEC, ACSC
RAD, DEG
SINH, COSH, TANH, CTANH
SECH, CSCH, ASINH, ACOSH, ATANH, ASECH, ACSCH, ACOTH
EXP, LOG, LOG10, LOG2
SQRT, CBRT, POW
ABS, CEIL, FLOOR, ROUND, MIN, MAX, AVG
SIGN, CLAMP, LERP
IF, IFS, AND, OR, NOT, XOR
LEFT, RIGHT, MID, UPPER, LOWER, PROPER, TRIM, FIND, SUBSTITUTE, LEN, CONCAT
NOW, TODAY, DATE, TIME, YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, WEEKDAY, DATEDIFF, DATEADD
CHOOSE, ISNUMBER, ISTEXT, ISBLANK
COUNT, SUM, PRODUCT
PI, E, PHI, INF, NAN
ERF, ERFC, GAMMA, J0, J1, YN
TRUNC, ROUNDTO
HYPOT, MOD, REMAINDER
BITAND, BITOR, BITXOR, BITSHIFTLEFT, BITSHIFTRIGHT
FACTORIAL, GCD, LCM
# Basic arithmetic
$= 10 + 20 * 3
# Cell references
$= A1 + B2
# Functions
$= SUM(A1, B1, C1)
$= IF(A1 > 100, "High", "Low")
$= AVERAGE(A1, A2, A3, A4, A5)
# Nested functions
$= ROUND(AVG(A1, A2, A3), 2)
# Date calculations
$= DATEDIFF(TODAY(), "2024-01-01")
# String manipulation
$= CONCAT(UPPER(A1), " - ", LOWER(B1))
# Complex formulas
$= IF(SUM(A1, A2) > 100, MAX(B1, B2), MIN(C1, C2))
# Cell ranges
$=SUM(A1:A10) // Single column range
$=SUM(A1:C1) // Single row range
$=SUM(A1:C10) // Multi-cell range
$=AVG(B2:B20) // Works with any function
$=MAX(A1:A5, C1:C5) // Multiple ranges
$=SUM(A1:A10) + AVG(B1:B10) // Ranges in expressions
Cell A1: 10
Cell A2: 20
Cell A3: 30
Cell B1: $=SUM(A1:A3) → Result: 60
Cell C1: 5
Cell C2: 15
Cell C3: 25
Cell D1: $=AVG(A1:A3, C1:C3) → Result: 17.5
| Format | Extension | Read | Write | Description |
|---|---|---|---|---|
| GSheet | .gsheet |
✅ | ✅ | Native format (gzipped JSON) |
| JSON | .json |
✅ | ✅ | Human-readable JSON |
| Excel | .xlsx |
✅ | ✅ | Microsoft Excel format |
| CSV | .csv |
✅ | ✅ | Comma-separated values |
.pdf |
❌ | ✅ | Portable Document Format | |
| TXT | .txt |
✅ | ✅ | Tab-delimited text |
| HTML | .html |
❌ | ✅ | Styled HTML table |
GoSheet provides comprehensive Excel import/export capabilities with the following features:
Import Features: - ✅ Multiple sheets with names preserved - ✅ Cell values and formulas (auto-evaluated on load) - ✅ Text formatting: bold, italic, underline, strikethrough - ✅ Font colors (RGB/hex) - ✅ Background colors (including empty cells with formatting) - ✅ Text alignment (left, center, right) - ✅ Cell comments and notes - ✅ Number formats with decimal places - ✅ Column widths - ⚠️ Complex Excel-specific formulas may need adjustment - ❌ Charts, images, pivot tables, macros not supported
Export Features: - ✅ All sheets with original names - ✅ Formulas (converted to Excel format) - ✅ All cell formatting preserved - ✅ Font and background colors - ✅ Comments and notes - ✅ Number formatting - ✅ Column widths - ✅ Text alignment
Known Excel Compatibility Notes - The @ Symbol Issue When opening GoSheet-exported Excel files in newer versions of Excel (2019/365), you may see an @ symbol automatically inserted before some formulas:
# Original formula in GoSheet
$=SUM(A1:A10)
# How Excel 2019+ may display it
=@SUM(A1:A10)
This is normal Excel behavior, not a bug in GoSheet. The @ is Excel's "implicit intersection operator" and doesn't affect functionality. Excel adds it automatically when loading the file. Users can manually remove it if desired, but it's not necessary.
Formula Conversion
Tips for Best Compatibility
GoSheet uses an optimized viewport system that renders only visible cells:
.gsheet for best performanceGoSheet includes Excel-like data validation with 14 preset types:
# Value must be even
THIS % 2 == 0
# Value must be between 0 and 100
THIS >= 0 && THIS <= 100
# Text must start with "ID-"
FIND("ID-", THIS) == 1
# Must be valid email format
CONTAINS(THIS, "@") && CONTAINS(THIS, ".")
gosheet/
├── internal/
│ ├── services/
│ │ ├── cell/ # Cell data structures and operations
│ │ ├── fileop/ # File I/O operations and format handlers
│ │ ├── table/ # Table management, sheets, forumula engine and viewport
│ │ └── ui/ # User interface components
│ │ ├── cell/ # Cell editing and formatting UI
│ │ ├── datavalidation/ # Validation rules and dialogs
│ │ ├── file/ # File browser and start menu
│ │ ├── navigation/ # Find, replace, and go-to dialogs
│ │ └── sheetmanager/ # Sheet management UI
│ └── utils/ # Utility functions
│ └── evaluatefuncs/ # Formula evaluation functions
├── demo_imgs/ # Demo screenshots and GIFs
├── go.mod
├── go.sum
├── LICENSE.md
├── README.md
└── main.go
$ claude mcp add GoSheet \
-- python -m otcore.mcp_server <graph>