LassoScript
The scripting-syntax form of Lasso, the FileMaker-born web application language of 1995 - a <?LassoScript ... ?> block syntax introduced with Lasso 5 in 2002 that let one tag-based database language be written like a conventional scripting language
Created by Blue World Communications (Lasso lineage founded on Vince Bonfanti's 1995 CGI; Kyle Jessup was lead programmer); later OmniPilot Software and LassoSoft
LassoScript is the scripting-syntax form of Lasso, the web application language that grew out of a 1995 CGI tool for publishing FileMaker Pro databases on the web. Where classic Lasso embedded individual tags in HTML inside square brackets - [Field: 'Name'] - LassoScript wraps a whole block of Lasso code in a single <?LassoScript ... ?> container, with each tag terminated by a semicolon, so that programming logic could be written the way a programmer would write it rather than the way a page designer would mark it up. The syntax arrived with Lasso 5 on February 26, 2002, and by the Lasso 8 era the vendor described LassoScript as the platform’s one language, “which functions as both a scripting language and a tag-based language.” The master catalog dates the entry to 1995 and calls it dormant; both are fair - the lineage is from 1995, the name and syntax from 2002, and nothing new has shipped in over a decade.
From FileMaker tags to a script language
Lasso was born a tag language. In the fall of 1995 Vince Bonfanti wrote a CGI, reportedly in C/C++, that let FileMaker Pro answer web requests; Blue World Communications of Bellevue, Washington bought the code and shipped Lasso 1.0 in September 1996 for Mac OS 8, FileMaker Pro 3.x, and the WebSTAR web server. Lasso pages were HTML with bracketed tags like [Field] and [Records] ... [/Records] that the server replaced with database values, and database operations were driven by command tags in HTML form inputs and URLs (-Search, -Response, -Database). The model was influential enough that Claris licensed it in 1997 and built it into FileMaker Pro 4.0 as CDML.
That model - which LassoSoft’s later documentation calls “Classic Lasso” - was fine for pasting a record list into a page and awful for writing a real program. By the late 1990s, competitors were pulling in the other direction: PHP, ASP, and Server-Side JavaScript were scripting languages that happened to emit HTML. Lasso’s 3.x line (3.0 in October 1998 through 3.6.5 in October 2000) extended the tag vocabulary but did not change its shape.
Lasso 5, released February 26, 2002, did. Blue World skipped the version number 4 entirely and shipped a rewritten, cross-platform product for Mac OS X, Windows, and Linux, with an embedded MySQL database, a native Apache connector, sessions, file manipulation - and LassoScript, which the release notes summarized as adding a “scripting methodology” to the language. The company’s own framing was that there are two kinds of web-server languages, scripting and tag-based, and Lasso would henceforth be both at once.
What LassoScript looks like
The Lasso 8.5 Language Guide lays the syntax out precisely. A LassoScript begins with <?LassoScript and ends with ?>. Inside, each Lasso tag is written in its bracket-free form and terminated with a semicolon; whitespace is ignored; // starts a line comment and /* ... */ a block comment; and all text must be either a tag or a comment - no stray prose is allowed. The whole block is replaced by the concatenated output of its tags, with no inter-tag whitespace. The classic five-line demonstration from the guide:
<?LassoScript
Loop: 5;
Loop_Count + ' ';
/Loop;
?>
which outputs 1 2 3 4 5. Container tags such as Loop, If, Iterate, and Records open with a semicolon-terminated tag and close with a slash-prefixed one (/Loop;), mirroring the [Loop] ... [/Loop] pairing of the bracket syntax. Variables are page-scoped with $ and declared via [Variable], and Lasso 8 supported compound expressions - blocks of code in braces stored in a variable and evaluated later:
<?LassoScript
Variable: 'myVariable' = 5;
Variable: 'myExpression' = { Return: ($myVariable + 6); };
// ... later:
$myExpression->Invoke; // -> 11
?>
Database access, the language’s reason for existing, went through the Inline container tag, which expressed a full database action in one place:
<?LassoScript
Inline: -Database='Contacts', -Table='People',
-KeyField='ID', 'Last_Name'='Smith', -Search;
Records;
Field: 'First_Name'; ' '; Field: 'Last_Name'; '<br>';
/Records;
/Inline;
?>
Interchangeable with square brackets
The two syntaxes were designed to be completely interchangeable, and the guide is explicit on the point: a single tag can be written as <?LassoScript Math_Add: 1, 2, 3, 4, 5 ?> (the semicolon is optional for a lone tag), and multiple semicolon-separated tags can be placed inside square brackets as [Tag_Name(Parameters); Tag_Name(Parameters)]. A container tag could even be opened in one LassoScript block and closed in a later one, with plain HTML and bracketed tags in between:
<?LassoScript Loop: 5; ?>
[Loop_Count]
<?LassoScript /Loop; ?>
Two rules separated the forms. Square brackets are not allowed inside a LassoScript - though the <?LassoScript ... ?> delimiters themselves can be swapped for [ ... ]. And encoding differs: bracketed tags apply HTML encoding to their output by default, whereas a LassoScript’s overall output is not encoded, with normal encoding rules still applying tag by tag (so Encode_HTML: '<br>'; yields <br>). [Output_None] suppresses a block’s output entirely and [Encode_Set] changes the encoding for a whole block.
Why a second syntax?
The Language Guide lists the case for LassoScript, and it reads as a diagnosis of the tag-language’s weaknesses:
- Comments, so code could be self-documenting - bracket syntax had no room for them.
- Indentation and formatting of long code segments, free of the noise of a bracket pair per tag.
- Visual authoring tools such as Dreamweaver and GoLive treated a
<? ... ?>block as a single object, so logic could be separated from presentation and hidden from designers working on the page’s look. - Compatibility with the HTML and XML convention for embedded server-side code:
<?LassoScript ... ?>is syntactically an XML processing instruction, the same trick as<?php ... ?>. - A “scripting-like method of coding for programmers who prefer this method” - an acknowledgement that Lasso’s audience now included programmers, not just FileMaker developers.
Under the surface nothing changed: tags inside a LassoScript “execute exactly as they would if they were specified within square brackets.” LassoScript was a syntax, not a new runtime.
The Lasso Professional 8 years
LassoScript’s mature form is Lasso Professional 8. After Lasso 6 (September 17, 2002) added imaging, PDF, XML, and FTP, and Lasso 7 (August 30, 2004) externalized MySQL over licensing concerns, Blue World’s Bill Doerrfeld sold the product line to OmniPilot Software of Florida on August 1, 2004. OmniPilot shipped Lasso 8 on October 25, 2004 with sandboxing for multiple sites and connectors for MySQL, SQLite, Microsoft SQL Server, Sybase, Oracle, PostgreSQL, and ODBC - the moment Lasso became a general database web language rather than a FileMaker accessory. Lasso 8.5 (June 9, 2006) added AJAX support and connectors for FileMaker Server Advanced, Oracle, and Apple’s Spotlight.
The Lasso 8 language included a great deal beyond the syntax: custom tags defined with [Define_Tag], custom data types with member tags, the -> member-call operator, arrays, maps, and pairs, sessions, compound expressions, a compiled-page cache (according to the documentation, Lasso cached the compiled form of each page rather than its output), and the LassoScript API for writing LassoApps, data source connectors, and custom types in the language itself. The community’s TagSwap library collected user-contributed custom tags.
In 2007 the original developer Kyle Jessup, with Fletcher Sandbeck and Kerry Adams, formed LassoSoft LLC and bought Lasso back from OmniPilot; in December 2010 the company was reorganized as LassoSoft Inc. in partnership with Treefrog Interactive. Their answer to the platform’s slide against free competitors was the ground-up Lasso 9.0 rewrite (January 29, 2010), which replaced the tag-and-semicolon grammar with a modern expression language - methods defined with =>, #local and $thread variables, types and traits. LassoScript did not vanish: Lasso 9 reportedly accepts <?LassoScript ... ?> as one of four delimiter styles (with [ ... ], <?lasso ... ?>, and <?= ... ?>), and much Lasso 8 code carried over with adjustments. But the language written inside the delimiters was new. The last release of the LassoScript-era line was Lasso 8.6 on April 20, 2011, a speed and stability update for existing customers.
Current status
LassoScript is dormant in the plainest sense. Lasso Professional 8 is no longer developed; the 9.x line that absorbed its syntax last shipped 9.3.1 in October 2015; and LassoSoft’s website, documentation, and downloads remain online without any documented new development. A small community of long-time Lasso shops still maintains production applications, and archived copies of the Lasso 8.5 Language Guide and Reference remain the authoritative description of the syntax. There is no Docker image, no open-source implementation, and no standard.
Why it matters
LassoScript is a small but clear specimen of a pattern that shaped the early server-side web: a tag language growing a script syntax to survive. Cold Fusion’s CFML, FileMaker’s CDML, and Lasso’s LDML all began as tags that designers could sprinkle into HTML; all of them eventually confronted programmers who wanted comments, loops, and functions without a bracket pair on every line. Lasso’s answer - keep the same tags, drop the brackets, add semicolons, wrap it in an XML processing instruction - was pragmatic and, unusually, fully bidirectional: the same tag could be written either way, and the documentation guaranteed identical behavior.
It also marks the point where Lasso stopped being FileMaker middleware. The 2002 release that introduced LassoScript is the one that added Windows, Linux, MySQL, and Apache; the syntax and the platform shift were the same bet, that a Macintosh database-publishing tool could become a general web language. That bet held for the better part of a decade, produced Lasso 8’s surprisingly broad database and API story, and ended in the Lasso 9 rewrite that superseded it. Anyone reading a .lasso file from the 2000s - and there are still such files in production - is reading LassoScript.
Timeline
Notable Uses & Legacy
Claris / FileMaker (Apple)
Claris licensed the Lasso engine in 1997 and shipped it in FileMaker Pro 4.0 as CDML, putting Lasso's tag-based web publishing model in front of the entire FileMaker installed base - the developer community that later adopted LassoScript
Treefrog Interactive
The Canadian web agency built client sites and applications on Lasso through the Lasso 8 era and in December 2010 partnered to form LassoSoft Inc., acquiring the language's code and intellectual property to keep it alive
LassoSoft
Ran its own website, documentation system, and the TagSwap community library of custom tags on the Lasso platform, and continues to host the archived Lasso 8.5 Language Guide (originally published by OmniPilot in 2006) that remains the definitive description of LassoScript syntax