Releases: jsavin/Frontier
Release list
v1.0.0-alpha.7: Threading, Protocol & Test Reliability
What's New in v1.0.0-alpha.7
Zero Integration Test Failures
The full integration test suite now passes with 0 failures -- 1,881 tests across 50 test files, running in ~40 seconds with 8 parallel workers. Two weeks ago there were 755 failures.
Key fixes:
- langerrordisable leak: A bug in the headless EFP fast-path made ALL verb errors uncatchable by
try/else. Fixed by restoringenablelangerror()before early returns inlanggethandlercode(). - Per-worker database isolation: Parallel test workers now get their own copy of the database, eliminating flaky failures from concurrent write access.
NDJSON Protocol Mode
New --protocol flag for persistent subprocess communication via NDJSON (newline-delimited JSON) over stdin/stdout. This eliminates ~210ms startup cost per evaluation and is the foundation for future GUI communication.
echo '{"id":1,"op":"script/eval","params":{"expression":"1+1"}}' | \
frontier-cli --protocol --skip-startup --system-root Frontier.root
# {"id":1,"result":{"value":"2","type":"long"},"success":true}GIL-Based Threading
Real POSIX threads with a Global Interpreter Lock (GIL). The runtime uses real threads serialized by a single mutex, with cooperative yield points at langbackgroundtask() and thread.sleepTicks(). All thread verbs operational: evaluate, callscript, getCurrentID, getCount, exists, kill, sleep, wake, getNthID.
Per-Component Logging
Fine-grained log control via environment variable or CLI flag:
# Environment variable
FRONTIER_LOG=lang:debug,tcp:warn frontier-cli ...
# CLI flag
frontier-cli --log lang:debug,tcp:warn ...REPL & UX Improvements
- Ranger-style file browser for
file.getFileDialogwith arrow key navigation - Guest database navigation in REPL with prompt display
[n]index syntax and relative paths in/listand/jump- Real
wp.getText()andwp.setText()for headless mode filemenu.newimplemented
Stability Fixes
- Migration segfault fix for v6 guest databases
- Startup segfault from context guard and tmp stack bugs
- Stack overflow in portable file verbs dispatcher
- Startup bootstrap fixes (random() params, log corruption)
- Suppress verb error logging inside UserTalk try blocks
- Script path now included in error log messages
Quality Metrics
| Metric | Value |
|---|---|
| Integration Tests | 1,881 (0 failures, 189 skipped) |
| Unit Tests | 6/6 passing |
| Test Execution | 8 workers, ~40s |
| PRs Merged Since alpha.6 | 27 |
| Commits Since alpha.6 | 38 |
Download
frontier-v1.0.0-alpha.7-macos.tar.gz-- macOS arm64 binary with Frontier.root database and guest databases
Full Changelog: v1.0.0-alpha.6...v1.0.0-alpha.7
v1.0.0-alpha.6: Threading, Guest DB Navigation, and Index Syntax
Frontier CLI v1.0.0-alpha.6
What's New
Cooperative Threading (#404, #410)
Frontier's fire-and-forget thread model is now available in headless mode:
- GIL-based cooperative threading with real POSIX threads — threads run one at a time, yielding at
langbackgroundtask()andthread.sleepTicks() - Full thread verb suite:
thread.evaluate(),thread.callscript(),thread.getCurrentID(),thread.getCount(),thread.exists(),thread.kill(),thread.sleep(),thread.wake(),thread.getNthID() - Error containment:
scriptError()in a spawned thread stops that thread without propagating to the caller - Thread ID allocation: Main thread gets ID 2 (
idapplicationthread), spawned threads start at 3+ - C globals (fllangerror, flreturn, flbreak, etc.) are properly saved/restored on each thread switch
Guest Database Navigation (#411)
Browse guest databases interactively in the REPL, just like system tables:
/jump mainResponder→ navigates into a guest DB table:[mainResponder.root::mainResponder]>/jump mainResponder.root→ navigates to the guest DB root:[mainResponder.root::]>- Relative paths work inside guest databases:
/list adminSite,/jump adminSite ..navigation goes up within the guest DB; from the DB root level, exits back to system root/jump,/jump root,/jump @rootall return to system root from anywhere- Runtime handle validation — if a guest DB is closed while you're navigated into it, the REPL detects the stale handle and resets to root instead of crashing
REPL Index Syntax (#409)
Navigate the object database by position:
[n]index syntax for/listand/jump(1-based):/jump system[1],/list [3]- Relative paths from focused tables:
/list verbswhen focused onsystem - Index syntax works inside guest databases too
Guest Databases Included in Release
This is the first release to ship with all guest databases:
| Database | Path | Description |
|---|---|---|
| Frontier.root | (system root) | System root database |
| mainResponder.root | Guest Databases/apps/ | Main web application framework |
| manila.root | Guest Databases/apps/ | Manila content management system |
| radioCommunityServer.root | Guest Databases/apps/Tools/ | Radio Community Server |
| serverMonitor.root | Guest Databases/apps/Tools/ | Server monitoring tool |
| TheXmlFiles.root | Guest Databases/apps/Tools/ | XML utilities |
| prefs.root | Guest Databases/www/ | Web preferences |
All databases are pre-migrated to v7 format with .root extensions. The installer now places guest databases in ~/Library/Application Support/Frontier/Guest Databases/.
Stability Fixes
- Fix startup segfault from context guard and tmp stack bugs (#408)
- Fix startup hang caused by wrong BIGSTRING length prefixes (#403)
- Fix callback infrastructure segfault and test failures (#402)
- Fix dist startup crashes — second-run segfault and log spew (#401)
- Fix database context — use variable database context in
getoutlinefromtarget()(#400) - Fix database block lookup — use actual
headerLengthinstead of compile-time constant - Suppress false errors during wp text extraction fallback in migration
- Port stringerrorlist (resource 263) to YAML resource system with test coverage
Installation
Quick Install
# Download and extract
curl -L https://github.com/jsavin/Frontier/releases/download/v1.0.0-alpha.6/frontier-cli-1.0.0-alpha.6-macos.zip -o frontier-cli.zip
unzip frontier-cli.zip
cd frontier-cli-1.0.0-alpha.6-macos
# Run installer
./install.sh
# Verify
frontier-cli --versionSystem Requirements
- macOS 11.0 (Big Sur) or later
- Apple Silicon (arm64) or Intel (x86_64) Mac
Files in this release
frontier-cli-1.0.0-alpha.6-macos.zip- Complete package with binary, all databases, and installerFrontier.root.gz- Compressed system root database (optional separate download).sha256files - SHA-256 checksums for verification
Documentation
Verification
shasum -a 256 -c frontier-cli-1.0.0-alpha.6-macos.zip.sha256v1.0.0-alpha.5
What's New in v1.0.0-alpha.5
Startup Scripts & Guest Database Lifecycle
The full startup sequence now executes in headless mode. Guest databases can be opened, saved, and managed from scripts and the REPL.
- Startup scripts execute on launch —
system.startup.startupScriptruns just like in classic Frontier (#378) - fileMenu verbs:
open,close,closeAll,save,saveAs,saveCopy— full guest database lifecycle with v7 save format (#391, #394) window.isOpen()for headless mode — checks whether a database is open by address or file path (#398, #399)- Portable
fileloop— POSIXopendir/readdir/closedirreplacing stubs, enabling startup script completion (#396)
Compiler Warning Elimination
Zero compiler warnings achieved across the entire codebase.
Build & Distribution
make disttarget for creating legacy-compatible distribution packages (#381)--migrateflag for standalone v6 → v7 database migration (#377)- Auto-rebuild Paige library in new worktrees and fresh clones
Menu System Stabilization
- Menubar (
mbar) value copying for headless mode (#390) - V6 menu loading during migration and byte-swap linkage fixes (#385)
- Proper
menubarTypedata access (#383) - Menu loading diagnostics demoted from ERROR to DEBUG
- Comprehensive menu integration tests (#384)
REPL Improvements
/clearcommand to reset REPL state (#3a260228)/jumpresolves relative to focused table — navigate more naturally- Slash commands in up-arrow history — previously excluded
- Mac Roman → UTF-8 conversion in terminal output
- 255-byte result truncation removed — full output for all expressions
Stability Fixes
op.outlineToXmlfor headless mode via window verb stubs (#388)- Startup warning fixes for menupack and startup scripts (#389)
int32_tfor disk struct fields to ensure 4-byte size on 64-bit (#387)- Error logging suppressed for caught
tryblock errors - UserTalk line numbers added to error log output
GUI Planning (Documentation Only)
Complete planning documents for the future native GUI application:
- Architecture, protocol specification, and all editor specs documented
- Table browser, script editor, outline editor, menu editor, wptext editor
Quality Metrics
| Metric | Value |
|---|---|
| Compiler Warnings | 0 |
| PRs Merged Since alpha.4 | 25+ |
| fileMenu Verbs | 6/10 implemented |
Download
frontier-cli-1.0.0-alpha.5-macos.zip— macOS universal binary with Frontier.root7 database
Full Changelog: v1.0.0-alpha.4...v1.0.0-alpha.5
v1.0.0-alpha.4: Working Webserver, REPL Persistent Variables & Navigation
Frontier CLI v1.0.0-alpha.4
The webserver works! Full web application layer now functional in headless mode, plus major REPL enhancements.
Highlights
- Working Webserver & inetd - Build and serve web applications from the CLI
- Persistent REPL Variables - Variables now persist across evaluations
- Navigation Commands -
/jumpand/listfor exploring the database - Event Loop Architecture - Non-blocking REPL with concurrent callback processing
- 100% TCP Verb Coverage - Complete TCP/IP networking support
Webserver & inetd Support
The Webserver Works! (#366, #363)
This is the biggest feature in alpha.4: the full web application layer is now functional in headless mode. You can build and serve dynamic web applications directly from the Frontier CLI.
REPL Quick Start:
- Start the REPL:
./frontier-cli --system-root Frontier.root - Simple expression:
1 + 1 - Call a built-in verb:
string.mid ("Hello World!", 1, 5) - Addresses:
local (adr = @user.prefs.initials); parentOf (adr^)
Webserver Quick Start:
[root]> user.webserver.responders.helloWorld.enabled = true
true
[root]> user.inetd.config.http.port = 8080
8080
[root]> inetd.startOne (@user.inetd.config.http)
true
Then visit http://localhost:8080/helloworld in your browser.
To stop the webserver:
[root]> inetd.stopOne (@user.inetd.config.http)
What's working:
- HTTP request/response handling
- UserTalk callback scripts for dynamic content
- Multiple concurrent connections
- Full inetd service management
- All the classic Frontier web framework verbs
This unlocks the entire Frontier web development ecosystem in the CLI - you can now develop, test, and run Frontier web applications without the GUI.
REPL Improvements
Persistent Variables (#371)
Variables assigned in the REPL now persist across evaluations:
[root]> x = 42
42
[root]> y = "hello"
hello
[root]> x + 10
52
- Stored in
system.temp.FrontierREPL.variables - Survives syntax and runtime errors
- Note: Function definitions don't persist yet (coming in future release)
Navigation Commands (#370)
New commands for exploring the object database:
/jump [path] - Navigate to a table (like cd in a shell)
[root]> /jump user
[user]> /jump system.verbs
[system.verbs]> /jump ..
[system]> /jump
[root]>
/list [path] - List table contents (like ls)
[root]> /list user
user (table, 5 items):
data table
inetd table
prefs table
scripts table
startup script
Focus Tracking (#371)
- Current
/jumplocation tracked insystem.temp.FrontierREPL.focus - Accessible from UserTalk scripts for custom tooling
- Tab completion prioritizes entries from focused table
Tab Completion Enhancements (#370, #371)
/listcommand now supports tab completion for paths- Completion prioritizes current focus table
- Slash commands have full tab completion
Event Loop Architecture (#368)
- Non-blocking REPL using linenoise async API
- TCP callbacks process while waiting for input
- Agent scheduler runs concurrently
- Ctrl-C handling at prompt and during script execution
- Clean terminal restoration on exit
Display Improvements (#368)
msg()output prefixed with "msg: " to distinguish from results- Cleaner output formatting
- Better error message display
TCP Networking
100% Verb Coverage (#361)
All TCP verbs now implemented:
tcp.openStream,tcp.closeStreamtcp.readStream,tcp.writeStreamtcp.listenStream,tcp.acceptStreamtcp.countStream,tcp.statusStreamtcp.myAddress,tcp.addressDecode,tcp.addressEncode
Migrated from Legacy API
- Replaced deprecated
fwsNetEventwith moderntcp_*functions - Cleaner callback infrastructure
- Better error handling
Bug Fixes
- Double-free crash in REPL variable sync (#371)
- Function definition crash - now gracefully skipped (#371)
- Webserver threading -
grabthreadglobals()returns success in headless (#366) - Frontier verbs initialization in headless mode (#366)
- Error suppression respected in
langerrormessage()(#359) - Database context passed explicitly to verbinmemory functions (#360)
Installation
- Download
frontier-cli-v1.0.0-alpha.4-macos-universal.zip - Unzip to get
frontier-cliandFrontier.root - Run:
./frontier-cli --system-root Frontier.root
Requirements:
- macOS 11+ (Big Sur or later)
- Works on both Apple Silicon (M1/M2/M3) and Intel Macs
What's Next
- Function persistence in REPL
- Thread-safe callback registration
Full Changelog
PRs merged since v1.0.0-alpha.3:
- #371: REPL improvements - persistent variables, focus tracking, tab completion
- #370: REPL navigation and table listing commands
- #368: REPL event loop architecture and display improvements
- #366: Enable webserver Hello World in headless mode
- #363: Webserver Hello World initial implementation
- #361: 100% TCP verbs coverage and legacy API migration
- #360: Pass explicit db_context to verbinmemory functions
- #359: Respect error suppression in langerrormessage()
See commits since v1.0.0-alpha.3 for full details.
v1.0.0-alpha.3: REPL Enhancements, Runtime Fixes, and Intel Mac Support
Frontier CLI v1.0.0-alpha.3
Major improvements to the REPL experience, critical runtime fixes, and expanded platform support.
🎯 Highlights
- Enhanced REPL with Option+Arrow word navigation and cleaner startup
- Intel Mac Support via universal binary (arm64 + x86_64)
- Critical Runtime Fixes for nested function calls and introspection
- Expanded TCP Support with Phase 1A/1B implementation
- Thread Safety Foundation for future multi-threading support
✨ REPL Enhancements
Word Navigation (#356)
- Option+Left/Right for UserTalk-aware word navigation
- Recognizes dotted paths (
system.verbs.apps), address operators (@workspace), and array indexing (mylist[n]) - Works seamlessly with existing editing commands (Ctrl+A/E, Home/End, etc.)
- See:
third_party/linenoise/FRONTIER_MODIFICATIONS.md
Clean Startup (#358)
- Eliminated verbose migration log spew during REPL initialization
- New
LOG_COMP_MIGRATIONcomponent (disabled by default) - Enable diagnostics with:
FRONTIER_LOG_LEVEL=trace FRONTIER_LOG_COMPONENT=migration
Previous Alpha.2 Features
- Command history (Up/Down arrows, Ctrl+R search)
- Tab completion for database paths and built-in functions
- Multi-line editing support
🐛 Critical Runtime Fixes
Nested parentOf() Calls (#354)
Fixed: Nested parentOf() function calls now work correctly
// Now works: find great-grandparent of a table
parentOf(parentOf(parentOf(@workspace)))
Impact: Enables complex table navigation and introspection patterns
Introspection Functions (#352, #342)
Fixed: typeOf(), defined(), parentOf() now resolve correctly without spurious EFP table searches
- Removed duplicate search logic causing incorrect behavior
- Prioritized built-in functions over external function processor stubs
- Fixed dot-path resolution to check builtins first
Impact: Core introspection functions now behave as documented
Path Entry Matching (#337)
Fixed: system.paths migration and path entry name matching
- Corrected string comparison in
langsearchpathvisit() - Fixed path entry initialization
Runtime Error Handling (#335)
Fixed: Table index operations now properly halt on runtime errors
- Corrects error propagation in
getarrayval(),setarrayval()
Database Hydration (#348)
Fixed: Database remains open after successful hydration
- Prevents premature closure of loaded databases
🖥️ Platform Support
Intel Mac Compatibility (#353)
- Universal binary support (arm64 + x86_64)
- Fixed CMake installation to work on both Apple Silicon and Intel Macs
- CLI now runs natively on all modern macOS systems
🌐 TCP Networking Support
Phase 1A: Core Socket Operations (#327)
Implemented 12 fundamental TCP verbs:
tcp.open(),tcp.close(),tcp.listen(),tcp.accept()tcp.send(),tcp.receive(),tcp.connect()tcp.status(),tcp.getaddress(),tcp.endlisten()tcp.setnagle(),tcp.settimeouts()
Phase 1B: Address Verbs (#330)
Implemented 8 address resolution and server verbs:
tcp.iptostring(),tcp.stringtoip(),tcp.getlocaladdress()tcp.getremoteaddress(),tcp.getmyaddress()tcp.servicetoport(),tcp.porttoservice()tcp.dnsresolver()
Testing
- 93 comprehensive integration tests covering all Phase 1 functionality
- Tests validate socket lifecycle, data transfer, error handling, and address resolution
🧵 Thread Safety Foundation (#318, #317)
Thread Registry Infrastructure:
- Foundation for future POSIX thread safety
- Deterministic thread testing framework
- Resolves non-deterministic test ordering issues
- Prepares codebase for concurrent operations
Status: Foundation complete, multi-threading deferred to Phase 4
📊 Verb Coverage Progress
482 of 710 verbs implemented (68%)
Processors at 100% coverage:
op,script,table,lang,clock,date,dialog,kb,point,rectangle,rgb,semaphore,base64,tcp,string,file,sys,db,xml,html,math,crypt(22 of 51 processors)
Recent additions:
- TCP: 23/23 verbs (100%)
- Dialog: 19/19 verbs (100%)
- Sys: 16/16 verbs (100%)
📚 Documentation Improvements
New Guides
- Getting Started Guide - Complete newcomer guide with build/run/test instructions
- CLI Usage Guide - Comprehensive frontier-cli reference
- Verb Implementation Guide - How to implement kernel verbs in C
- Debugging Guide - LLDB, git bisect, investigation patterns
Enhanced Documentation
- Verb Resolution Architecture - Complete call chain documentation
- Architectural Anti-Patterns - Known pitfalls and how to avoid them
- Testing Guide - CLI usage, testing patterns, database migration
- Logging Standards - Structured logging requirements
Planning Documentation
- TCP implementation strategy and phase breakdown
- Thread safety roadmap
- Modular context architecture for AI coding assistance
🔧 Developer Experience
Integration Test Infrastructure (#326)
- Hierarchical OPML export structure for test reports
- 400+ integration tests organized by category
- Deterministic thread testing foundation
Build System
- Improved Makefile structure
- Better error messages and diagnostics
- Faster incremental builds
Code Quality
- Comprehensive PR review automation
- Structured logging throughout codebase
- Better error propagation patterns
📦 Installation
macOS (Universal Binary)
# Download and extract release
tar -xzf frontier-cli-v1.0.0-alpha.3-macos.tar.gz
cd frontier-cli
# Run the CLI
./frontier-cli -e "dialog.alert(\"Hello from Frontier!\")"Build from Source
git clone https://github.com/jsavin/Frontier.git
cd Frontier
git checkout v1.0.0-alpha.3
make -C frontier-cli
./frontier-cli/frontier-cliSee docs/GETTING_STARTED.md for detailed instructions.
🔄 Upgrading from Alpha.2
Breaking Changes: None
New Features:
- Option+Arrow word navigation in REPL
- Intel Mac support (universal binary)
- TCP networking verbs (Phase 1A/1B)
Fixes:
- Nested
parentOf()calls work correctly - Introspection functions (
typeOf,defined,parentOf) resolve properly - Table index operations halt on runtime errors
- Clean REPL startup (no migration log spew)
Migration: Drop-in replacement, no database or script changes needed
🙏 Acknowledgments
This release represents 11 days of intensive development (Jan 16-27, 2026) with:
- 76 commits
- 13 merged pull requests
- Major REPL improvements
- Critical runtime bug fixes
- Expanded platform and networking support
Special thanks to the Claude Code AI assistant for pair programming support throughout this sprint.
📝 Full Changelog
Commits: v1.0.0-alpha.2...v1.0.0-alpha.3
All Changes Since Alpha.2:
- docs: Document LOG_COMP_MIGRATION in logging standards
- fix: Suppress v6→v7 migration log spew during REPL startup (#358)
- docs: Document linenoise modifications for Frontier
- feat: Add Option+Arrow word navigation to REPL (#356)
- test: Document known limitations in nested_parentof tests
- fix: Enable nested parentOf() function calls (#354)
- Fix Intel Mac compatibility with universal cmake binary (#353)
- docs: Capture PR #352 lessons in debugging guides
- fix: Remove explicit EFP table search to fix introspection bugs (#352)
- fix: Exclude script-only processors from EFP whitelist (#351)
- docs: Add Getting Started guide and improve Quick Start (#350)
- fix: Keep database open after successful hydration (#348)
- feat: Support positional .root/.root7 arguments in CLI (#345)
- docs: Improve documentation navigation and organization (#343, #344)
- Fix: Prioritize builtins over EFP stubs in dot-path resolution (#342)
- feat: Integrate global /doit workflow and agent selection (#340)
- Refactor CLAUDE.md using Modular Context Architecture (#338)
- fix: Correct path entry name matching in langsearchpathvisit() (#337)
- Fix system.paths migration and address value initialization (#336)
- Fix: Runtime Error Halting for Table Index Operations (#335)
- TCP Phase 1B + Phase 3: Address verbs and server operations (#330)
- test: Add comprehensive test suite for TCP Phase 1A (93 tests) (#329)
- feat: Implement P0a general-purpose parameterized callback infrastructure (#328)
- feat: TCP Phase 1A - Core socket operations (POSIX) (#327)
- feat: Hierarchical OPML export structure for integration tests (#326)
- feat: Phase 1 - Deterministic Thread Testing Foundation (#318)
- fix: Resolve compilation errors and test dependencies (#324)
- fix: Initialize file descriptor table in portable file layer (#321)
- feat: Thread registry foundation for POSIX thread safety (Phase 1) (#317)
- feat: REPL enhancements - command history and tab completion (#315)
- Plus 40+ documentation, testing, and infrastructure improvements
🐛 Known Issues
- Migration diagnostics verbose at TRACE level (use sparingly)
- Some TCP operations require proper error handling in UserTalk scripts
- Thread registry is foundation-only (no multi-threading yet)
🚀 What's Next (Alpha.4)
Planned for next release:
- Additional REPL enhancements (syntax highlighting, better error display)
- XML/HTML verb improvements
- Database performance optimizations
- More comprehensive testing
Download: See Assets below
Documentation: https://github.com/jsavin/Frontier/tree/v1.0.0-alpha.3/docs
Report Issues: https://github.com/jsavin/Frontier/issues
🤖 Release notes generated with Claude Code assistance
v1.0.0-alpha.2
Hotfix: Preserve User Data on Upgrade
- Critical fix: Installation script now checks if system root database already exists and prompts before overwriting (default: preserve existing). This prevents data loss when upgrading from alpha.1.
If you installed v1.0.0-alpha.1, upgrade to get the safe installer.
Full Changelog: v1.0.0-alpha.1...v1.0.0-alpha.2
v1.0.0-alpha.1
First Public Release
The first pre-release of Frontier's headless CLI. This is the result of modernizing the classic Frontier/UserTalk scripting environment from its original Mac OS codebase into a cross-platform command-line tool.
What's Included
- Headless CLI — Evaluate UserTalk expressions, run scripts, and explore the object database from the terminal
- Interactive REPL — Read-eval-print loop with command history and tab completion
- v6 → v7 Database Migration — Automatic migration from legacy big-endian format to modern little-endian with 64-bit timestamps
- Frontier.root System Database — The full system root with all built-in scripts and verb tables
Verb Coverage: 68% (482/710)
22 processors at 100% coverage:
- Core:
lang(61/61),op(45/45),string(60/60),table(18/18),file(86/86),date(30/30),db(13/13) - Networking:
tcp(23/23) - Formats:
xml(13/13),html(20/20) - Utilities:
sys(16/16),dialog(19/19),math,crypt,base64,semaphore,kb,point,rectangle,rgb,clock,script
Integration Tests
400+ integration tests organized by verb category, exported as OPML for review.
How to Use
# Evaluate an expression
./frontier-cli -e "1 + 1"
# Launch the REPL
./frontier-cli --system-root Frontier.root
# Migrate a v6 database
./frontier-cli --system-root databases/Frontier.root -e "1"Platform
- macOS (arm64) — Apple Silicon only in this release
Full Changelog: https://github.com/jsavin/Frontier/commits/v1.0.0-alpha.1