Est. 1995 Beginner

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

Paradigm Multi-paradigm: Tag-based template language, Procedural, Scripting, Object-Oriented (custom types from Lasso 5/6 onward)
Typing Dynamic, with runtime data types (string, integer, decimal, array, map, pair, custom types)
First Appeared 1995 (Lasso lineage; the LassoScript syntax itself arrived with Lasso 5 on February 26, 2002)
Latest Version Lasso 8.6 (April 20, 2011) is the last release of the LassoScript-era language; the syntax survives in Lasso 9.3.1 (October 2015) as one of several delimiter styles

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 &lt;br&gt;). [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

1995
In the fall, independent developer Vince Bonfanti writes a C/C++ CGI that lets FileMaker Pro databases answer web requests; Blue World Communications buys the source code
1996
Blue World ships Lasso 1.0 in September for Mac OS 8, FileMaker Pro 3.x, and the WebSTAR web server - reportedly one of the earliest commercial web application servers
1997
Claris licenses the Lasso engine and ships it inside FileMaker Pro 4.0 as CDML (Claris Dynamic Markup Language)
1998
Lasso 3.0 released on October 7; the 3.x line continues through 3.5 (April 1999), 3.6 (January 2000), and 3.6.5 (October 2000)
2002
Lasso 5 released on February 26 - a rewritten cross-platform product for Mac OS X, Windows, and Linux with an embedded MySQL database, native Apache support, and the new LassoScript syntax adding a scripting methodology to the tag language (there was no Lasso 4)
2002
Lasso 6 follows on September 17, adding image and PDF manipulation, native XML handling, and FTP integration
2004
Lasso 7 (August 30) externalizes MySQL over licensing concerns; on August 1 Blue World sells the product line to OmniPilot Software of Florida, which ships Lasso 8 on October 25 with multi-site sandboxing and connectors for MySQL, SQLite, SQL Server, Sybase, Oracle, PostgreSQL, and ODBC
2006
Lasso 8.5 released on June 9 with AJAX integration and pre-installed connectors for FileMaker Server Advanced, Oracle, and Apple's Spotlight; its Language Guide describes LassoScript as the single language of Lasso Professional 8, usable in both scripting and tag-based forms
2007
Kyle Jessup, Fletcher Sandbeck, and Kerry Adams form LassoSoft LLC and acquire Lasso from OmniPilot
2010
Lasso 9.0 (January 29) rewrites the language with new syntax; <?LassoScript ... ?> is retained as one of several delimiter styles alongside [ ... ], <?lasso ... ?>, and <?= ... ?>
2010
In December, LassoSoft Inc. is formed in partnership with the Canadian web agency Treefrog Interactive, which acquires the Lasso code and intellectual property
2011
Lasso 8.6 released on April 20 - a speed-and-stability release that is the final version of the LassoScript-era 8.x language line
2026
Status today: dormant. Lasso Professional 8 is no longer developed, and no Lasso release of any kind has been documented since Lasso 9.3.1 in October 2015; LassoScript code survives in maintained legacy deployments and in Lasso 9's compatibility syntax

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

Language Influence

Influenced By

Lasso (LDML square-bracket tags) CDML PHP XML

Running Today

Run examples using the official Docker image:

docker pull
Last updated: