Sheety is an Excel-like spreadsheet application for Crystal that compiles spreadsheet definitions (YAML or Excel) into standalone, interactive TUI binaries.
⚠️ Note: This is experimental software. We're compiling spreadsheets into standalone binaries. It's ridiculous, it's probably unnecessary, and it absolutely works.
🌐 Check out the website: sheety.ralsina.me
Formula Parser: Parses a comprehensive subset of Excel formulas
+, -, *, /, ^=, <, >, <=, >=, <>& (concatenation)IF, AND, OR, NOT, IFS, SWITCHSUM, AVERAGE, MIN, MAX, COUNT, COUNTA, MEDIAN, STDEV, STDEV.P, VAR.S, VAR.P, ROUND, ROUNDUP, ROUNDDOWN, CEILING, FLOOR, INT, ABS, POWER, SQRT, MOD, RAND, RANDBETWEENCONCAT, LEFT, RIGHT, MID, LEN, UPPER, LOWER, TRIM, PROPER, FIND, SEARCH, SUBSTITUTE, TEXT, VALUE, CLEAN, EXACT, REPTTODAY, NOW, YEAR, MONTH, DAY, DATEDIF, EOMONTHCOUNTIF, SUMIFVLOOKUP, HLOOKUP, INDEXA1, Sheet2!B5A1:B5, Sheet1!A1:A10Format Support: Works with multiple spreadsheet formats
Hash-Based Build Caching: Content-based caching makes re-running unchanged spreadsheets ~400x faster
TUI Interface: Modern terminal UI with spreadsheet-style grid
Interactive Editing: Full cell editing with live recalculation
Mouse Support: Click to select, double-click to edit, wheel scrolling
State Persistence: Saves and restores UI state
In-Process Rebuilding: Formula edits rebuild the binary from within the TUI
Download pre-built static binaries from the GitHub Releases page. No dependencies required - just download and run!
Available platforms:
sheety-static-linux-amd64 (standard x86_64 systems)sheety-static-linux-arm64 (Raspberry Pi, AWS Graviton, etc.)# Download and make executable
wget https://github.com/ralsina/sheety/releases/download/v1.2.0/sheety-static-linux-amd64 -O sheety
chmod +x sheety
# Run
./sheety my_sheet.yaml
⚠️ Requirements: sheety itself is a single binary, but working with spreadsheets is not dependency-free. Launching the interactive TUI, editing formulas (each edit recompiles the program), and converting to
.cr/.sheetyrequire a Crystal toolchain (crystal+shards) on your PATH and network access on the first run (dependencies are fetched into~/.local/share/sheety). Converting between.yamland.xlsx, and viewing an already-compiled spreadsheet binary, need nothing extra.
git clone https://github.com/ralsina/sheety.git
cd sheety
shards install
shards build
# Compile and run a spreadsheet (auto-creates if doesn't exist)
./bin/sheety my_sheet.yaml
# Convert between formats
./bin/sheety data.yaml --save-to=data.xlsx # YAML to Excel
./bin/sheety data.xlsx --save-to=data.yaml # Excel to YAML
./bin/sheety data.yaml --save-to=data.cr # Generate Crystal source
./bin/sheety data.yaml --save-to=data.sheety # Compile to binary
# Works with Excel files directly
./bin/sheety workbook.xlsx
Sheet1:
A1:
value: 100
A2:
value: 200
A3:
formula: "=SUM(A1:A2)"
B1:
value: "Hello"
B2:
formula: "=CONCAT(B1, \" World\")"
Sheet2:
A1:
formula: "=Sheet1!A3*2"
Navigation:
Editing:
Value edits live in the recalculation store until you save: the status
bar shows [MODIFIED - S to save] while there are unsaved value edits.
Quitting without saving discards them (formula edits are auto-saved
because they trigger a rebuild).
#NAME? (the generator warns about this at build time).1:10) are not supported; formulas using them
produce #VALUE! with a warning. Whole-column ranges (A:B) work and
are clamped to the 1000-row grid.#DIV/0!, but
most other runtime failures show a generic #ERROR: ... rather than
Excel's specific error codes.# Run tests
crystal spec
# Build
shards build
# Format conversion
./bin/sheety examples/test.yaml --save-to=output.xlsx
MIT
Crystal
93.1%
HTML
6.7%
Sheety is an Excel-like spreadsheet application for Crystal that compiles spreadsheet definitions (YAML or Excel) into standalone, interactive TUI binaries.
⚠️ Note: This is experimental software. We're compiling spreadsheets into standalone binaries. It's ridiculous, it's probably unnecessary, and it absolutely works.
🌐 Check out the website: sheety.ralsina.me
Formula Parser: Parses a comprehensive subset of Excel formulas
+, -, *, /, ^=, <, >, <=, >=, <>& (concatenation)IF, AND, OR, NOT, IFS, SWITCHSUM, AVERAGE, MIN, MAX, COUNT, COUNTA, MEDIAN, STDEV, STDEV.P, VAR.S, VAR.P, ROUND, ROUNDUP, ROUNDDOWN, CEILING, FLOOR, INT, ABS, POWER, SQRT, MOD, RAND, RANDBETWEENCONCAT, LEFT, RIGHT, MID, LEN, UPPER, LOWER, TRIM, PROPER, FIND, SEARCH, SUBSTITUTE, TEXT, VALUE, CLEAN, EXACT, REPTTODAY, NOW, YEAR, MONTH, DAY, DATEDIF, EOMONTHCOUNTIF, SUMIFVLOOKUP, HLOOKUP, INDEXA1, Sheet2!B5A1:B5, Sheet1!A1:A10Format Support: Works with multiple spreadsheet formats
Hash-Based Build Caching: Content-based caching makes re-running unchanged spreadsheets ~400x faster
TUI Interface: Modern terminal UI with spreadsheet-style grid
Interactive Editing: Full cell editing with live recalculation
Mouse Support: Click to select, double-click to edit, wheel scrolling
State Persistence: Saves and restores UI state
In-Process Rebuilding: Formula edits rebuild the binary from within the TUI
Download pre-built static binaries from the GitHub Releases page. No dependencies required - just download and run!
Available platforms:
sheety-static-linux-amd64 (standard x86_64 systems)sheety-static-linux-arm64 (Raspberry Pi, AWS Graviton, etc.)# Download and make executable
wget https://github.com/ralsina/sheety/releases/download/v1.2.0/sheety-static-linux-amd64 -O sheety
chmod +x sheety
# Run
./sheety my_sheet.yaml
⚠️ Requirements: sheety itself is a single binary, but working with spreadsheets is not dependency-free. Launching the interactive TUI, editing formulas (each edit recompiles the program), and converting to
.cr/.sheetyrequire a Crystal toolchain (crystal+shards) on your PATH and network access on the first run (dependencies are fetched into~/.local/share/sheety). Converting between.yamland.xlsx, and viewing an already-compiled spreadsheet binary, need nothing extra.
git clone https://github.com/ralsina/sheety.git
cd sheety
shards install
shards build
# Compile and run a spreadsheet (auto-creates if doesn't exist)
./bin/sheety my_sheet.yaml
# Convert between formats
./bin/sheety data.yaml --save-to=data.xlsx # YAML to Excel
./bin/sheety data.xlsx --save-to=data.yaml # Excel to YAML
./bin/sheety data.yaml --save-to=data.cr # Generate Crystal source
./bin/sheety data.yaml --save-to=data.sheety # Compile to binary
# Works with Excel files directly
./bin/sheety workbook.xlsx
Sheet1:
A1:
value: 100
A2:
value: 200
A3:
formula: "=SUM(A1:A2)"
B1:
value: "Hello"
B2:
formula: "=CONCAT(B1, \" World\")"
Sheet2:
A1:
formula: "=Sheet1!A3*2"
Navigation:
Editing:
Value edits live in the recalculation store until you save: the status
bar shows [MODIFIED - S to save] while there are unsaved value edits.
Quitting without saving discards them (formula edits are auto-saved
because they trigger a rebuild).
#NAME? (the generator warns about this at build time).1:10) are not supported; formulas using them
produce #VALUE! with a warning. Whole-column ranges (A:B) work and
are clamped to the 1000-row grid.#DIV/0!, but
most other runtime failures show a generic #ERROR: ... rather than
Excel's specific error codes.# Run tests
crystal spec
# Build
shards build
# Format conversion
./bin/sheety examples/test.yaml --save-to=output.xlsx
MIT
Crystal
93.1%
HTML
6.7%