Est. 1995 Beginner

Tango

Tango is the visual, action-based Web application language built by EveryWare Development in Mississauga, Ontario in 1995 to put a Macintosh SQL database on the Web without writing SQL or CGI code. Developers drew an application as a tree of icons - Search, If, Loop, Results - and glued it together with a tag language of <@ASSIGN>, <@CALC> and <@VAR> meta tags embedded in HTML. It passed through Pervasive Software, an Australian owner who renamed it Witango, and a Californian one who renamed it TeraScript, and its last announced release was in January 2017

Created by EveryWare Development Corp. (later EveryWare Development Inc.) of Mississauga, Ontario, Canada - a publicly traded Canadian software company whose other product was the classic Mac OS database server Butler SQL. Tango was a corporate product rather than one person's language, and no individual is credited as its designer in any surviving documentation. Its later custodians each rewrote and renamed parts of it: Pervasive Software Inc. of Austin, Texas (1998-2001), With Enterprise Pty Ltd of North Sydney, Australia, trading as Witango Technologies (2001-2010), and Tronics Software LLC of El Dorado, California (2010 to the present)

Paradigm Visual and action-based, with an embedded template/tag language. An application is a top-to-bottom tree of named icon actions - the manuals group them as business logic (Assign, Group, If/Else If/Else, While Loop, For Loop, Break, Branch, Return), database acquisition (Search, Insert, Update, Delete, Direct DBMS, Begin/End Transaction), presentation (Results, Presentation) and external acquisition (Mail, File, Script, External, Create Object Instance, Call Method). Each action carries blocks of HTML - Results HTML, No Results HTML, Error HTML - into which meta tags of the form <@TAG ATTRIBUTE="value"> are interpolated by the server. The tag language is imperative and expression-oriented, so the whole is best described as visual dataflow-ish control flow wrapped around a server-side templating language
Typing Dynamic and effectively untyped at the tag level: variables hold text, and arrays of text, and are coerced by whatever tag consumes them. <@ASSIGN> takes no type. There is an explicit <@DEFINE> with a TYPE attribute for declaring variables, and the array system distinguishes rows and columns, but everything ultimately round-trips through strings. Numeric behaviour lives inside <@CALC>, which parses its own expression grammar with its own calculation variables A-Z
First Appeared 1995, as Tango 1.0 for classic Mac OS, bundled with and working only against EveryWare's Butler SQL. Contemporary coverage described the ODBC version as due in January 1996; Apple bundled a test-drive version of Tango and Butler SQL with its Internet Server Solution 2.0 in May 1996. The current owner's own About Us page says "originally developed by Everyware Corporation in 1996 as 'Tango'", which is a year later than the press record and may be dating the ODBC release rather than the first shipment - the 1995 date is used here because it is what the contemporary reporting supports
Latest Version TeraScript 8, announced by Tronics Software on 12 January 2017. That is the most recent release announcement on the vendor's site as of September 2026; the terascript.com pages themselves are served by "TeraScript Server (64-bit) Standard 7.1.6 on Windows (64-bit)", per the footer the server writes into every page it returns

Tango is a visual Web application development language and server, built in 1995 by EveryWare Development Corp. of Mississauga, Ontario. Its premise was that connecting a SQL database to a Web page should not require knowing SQL, HTML or CGI. You drew the application as a vertical tree of icons - search this table, if that condition, loop over these rows, return this HTML - and the pieces of HTML hanging off each icon were filled in by a tag language of <@ASSIGN>, <@CALC> and <@VAR> meta tags. It is one of the earliest examples of what would later be called low-code Web development, and it arrived a year before Active Server Pages and in the same year as the first release of Allaire’s Cold Fusion.

It is also, as programming-language history goes, an unusually well-travelled artefact. It was sold three times, renamed three times, and is still commercially available in 2026 under its fourth name. The encyclopedia lists it as TANGO; the product’s own manuals spell it Tango, then Witango, then TeraScript.

What a Tango application actually is

A Tango application file - extension .taf, stored as XML from Tango 2000 onwards - is not a script. It is an ordered tree of actions, each with a name, an icon and a set of parameters, executed top to bottom unless a control action says otherwise. The Studio’s action palette is small enough to list in full:

GroupActions
Business logicAssign, Group, If / Else If / Else, While Loop, For Loop, Break, Branch, Return
DatabaseSearch, Insert, Update, Delete, Direct DBMS, Begin Transaction, End Transaction
PresentationResults, Presentation
ExternalMail, File, Script, External, Create Object Instance, Call Method

That is the whole language of control flow. Notably there is a Branch action - a jump to another named action or action group, which the Studio helpfully keeps pointing at the right target when you rename or move things, and which makes non-trivial Tango applications read rather like a flowchart with gotos.

Each action can carry three blocks of HTML as attributes:

  • Results HTML - appended to the accumulated output after the action runs.
  • No Results HTML - substituted instead, when a Search, Direct DBMS, Script, File or External action returns nothing. The manual is explicit that you get one or the other, never both.
  • Error HTML - returned immediately if the action fails.

A fourth attribute, Push, flushes everything accumulated so far to the browser when that action completes and then continues - streaming output, in 1990s clothing.

The result-accumulation model is the whole execution model. There is no page being rendered; there is a buffer that actions append to, and a Return action that ships it. A Search action’s Results HTML is implicitly repeated per row, which is how the language does iteration over query results without a loop construct.

The meta tags

Inside those HTML blocks lives the part of Tango that is recognisably a programming language. The syntax is deliberately HTML-shaped:

<@TAG ATTRIBUTENAME="ATTRIBUTEVALUE">

The @ after the opening angle bracket is the only thing distinguishing a meta tag from an HTML tag, and the manual’s rules are pleasantly precise about the rest: attributes are always named so their order never matters; line breaks are allowed anywhere a space is; no space is permitted around the =; and tags are case-insensitive, so <@CALC EXPR="3+7">, <@Calc expr="3+7"> and <@calc Expr="3+7"> are all the same tag. The vendor’s current marketing describes the language as “a rich script language of around 200 tags”.

Assignment is a tag:

<@ASSIGN NAME="foo" VALUE="123456" SCOPE="user">

and so is reading:

<@VAR NAME="foo" SCOPE="user">

Scopes and the @@ shorthand

Variables are not lexically scoped; they live in named, server-managed scopes. The Programmer’s Guide documents request, user, application, domain, system and cookie scopes, with abbreviations (usr, sys) and a precedence order used when you omit the scope. An <@ASSIGN> without a SCOPE attribute searches request, user, application, domain and system in that order for an existing variable of that name and assigns to the first one it finds - creating it in the default scope only if none exists. That is dynamic scoping with a session store bolted on, and it is exactly as much of a footgun as it sounds.

Because <@VAR NAME="homer" SCOPE="domain"> is unbearable to type inside an attribute value, the language provides a shorthand:

<@VAR NAME="homer">          @@homer
<@VAR NAME="homer" SCOPE="domain">   @@domain$homer

@@scope$name is the idiom you see in essentially all real Tango code, and it is the closest thing the language has to a distinctive visual signature. Sessions were first class from early on: the Witango_UserReference token that identified a user scope is the same parameter that turns up in the 2003 buffer-overrun advisory.

Calculation

Arithmetic is walled off inside <@CALC>, which has its own expression parser:

<@CALC EXPR="3+7">

returns 10. It supports six arithmetic operations - *, /, %, ^, +, - - parentheses, mathematical and string functions, logical and comparison operations, sub-expressions, and a PRECISION attribute controlling decimal places. It also has its own private variables, single letters A through Z, which the manual warns are “only applicable to <@CALC> and do not work with <@ASSIGN> or <@VAR>” - a second, tiny variable namespace living inside the expression language. A num() function converts hexadecimal (0x), octal (0) and binary literals, and the manual notes drily that passing it a decimal number “either yields an error or an incorrect result”.

Conditionals outside the action tree use the same expression grammar:

<@IF EXPR="@@fred > @@barney" TRUE="true!" FALSE="alas">

Arrays

For a tag language, Tango’s array support is surprisingly complete. Arrays are two-dimensional and are ordinary variable values:

<@ASSIGN NAME="initValue" VALUE="1,2,3;4,5,6;7,8,9;a,b,c;d,e,f;g,h,i">
<@ASSIGN NAME="array2" VALUE="<@ARRAY ROWS='6' COLS='3' VALUE=@@initValue CDELIM=',' RDELIM=';'>">

They slice with a wildcard subscript - @@array2[*,2] is a one-column array of every value in column 2 - and there is a family of set-like tags to go with them: <@ADDROWS>, <@DELROWS>, <@DISTINCT>, <@FILTER>, <@SORT>, <@INTERSECT> and <@UNION>. Query results are arrays, so the same operators work on data pulled from a database. Later versions added DOM manipulation tags (<@DOM>, <@DOMDELETE> and relatives) for the XML work Tango 2000 introduced.

Note the nesting in the example above: a meta tag inside an attribute value inside another meta tag, with the inner tag’s attributes switched to single quotes. Real Tango code nests three or four deep routinely, and the guide’s own cookie example runs <@TOGMT> around <@SECSTOTS> around <@CALC> around <@TSTOSECS> around <@CURRENTTIMESTAMP> to express “expires in one week”. This is the language’s least defensible property, and everyone who used it knew it.

The architecture

Tango was always three programs rather than one, and the split survived every rename:

  • Studio (originally Tango Editor) - the visual development environment, which queries the database schema so tables and columns can be dragged into actions, and which ships Builders: wizards that generate a complete search, list, detail, add, update or delete form with its HTML.
  • Application Server - the runtime, sitting between the Web server and the databases, executing .taf files.
  • A Web Analyzer (formerly Bolero) on Windows, for traffic reporting.

The server connected to the Web server however the platform allowed. On classic Mac OS it was either Tango2000.acgi, talking to the Web server over Apple Events, or a WebSTAR API plug-in; on Windows and UNIX it was NSAPI, ISAPI or CGI. Databases were reached through ODBC, or by native connections to Oracle, the Mac Data Access Manager and FileMaker Pro - the last of which the Tango 2000 manual singles out as the point of the whole action abstraction, since “the abstraction of the database action from its database language (normally SQL) allows Tango to deal with desktop database systems that do not support a standard relational language”.

Extensibility went through the External and Object actions, which were frankly platform-specific: COM objects on Windows, JavaBeans everywhere, Apple Events on the Mac, DLLs on Windows, and shell-out to Perl or shell scripts via stdin/stdout on Windows and UNIX. Tango Class Files (.tcf), introduced in Tango 2000, let you write objects in Tango itself and reuse them - the language’s one concession to code organisation before Witango 6 turned a TCF into a multi-class library.

Because application files were plain XML, a Tango application built on a Mac ran unmodified on a Solaris server. In 1999 that was a real selling point, and it is why Bank of Montreal could develop mbanx on Windows NT and deploy on UNIX with, in their project manager’s words, no need “to write any additional code”.

History: four owners, three names

EveryWare, 1995-1998

Tango began as an accessory to another product. EveryWare’s business was Butler SQL, a relational database for classic Mac OS, and Tango 1.0 was the CGI plus editor that let WebSTAR talk to it - bundled with Butler and working only with Butler. The ODBC release, announced as due in January 1996, cut it loose and made it a product in its own right. Apple’s decision in May 1996 to put a test-drive copy in the Internet Server Solution 2.0 box gave it distribution, and by the 1997 Tango Enterprise releases it had grown a Windows version, direct Oracle access, server plug-ins and a customer list that ran from a national online bank to a record label to a medical school.

The positioning of that era is worth preserving because it is so recognisably modern: EveryWare called Tango an IRAD tool, intranet rapid application development, and sold it on the claim that a bank’s product managers could edit a prototype. What is now called low-code was, in 1997, called not having to hire programmers.

Pervasive, 1998-2001

Pervasive Software’s October 1998 acquisition of EveryWare - about C$16.2 million all in - bought a Web development tool for a company whose business was the Btrieve/Pervasive.SQL database engine. For a while the fit looked good: Tango 3.5 reached Solaris in February 1999 at US$6,995 a server, Tango 2000 reached Linux that December and was announced for the Mac at Macworld Expo on 5 January 2000, and Tango 2000 brought XML data types and Tango Class Files.

Then in July 2000 Pervasive restructured “to focus on its core database business”. Development and marketing support for Tango was cut, no new features were planned, and the Mac OS X port was shelved. The product had ten months left at Austin.

With Enterprise / Witango Technologies, 2001-2010

On 29 June 2001 the technology passed to With Enterprise Pty Ltd of North Sydney - hence WiTango, a rebrand the new owner attributed to trademark issues. This was the most productive phase of the language’s post-EveryWare life. Version 5.0 in January 2002 gave the server pre-emptive multitasking, a plug-in client architecture and a proper debugging story. Version 5 for Mac OS X shipped on 27 January 2003 - the port Pervasive had cancelled - at US$593 for the Studio, alongside Windows, Solaris and Linux, with POP3/IMAP4/SMTP mail integration. Version 5.5 followed, its manuals dated August 2003 and its Mac OS X installation guide February 2004.

July 2003 brought the product’s most public embarrassment: NGSSoftware’s Mark Litchfield found that a sufficiently long cookie in the Witango_UserReference parameter overwrote the saved return address, and since the Windows server installed as LocalSystem, “any arbitrary code execution will run as SYSTEM”. The vendor, notified on 13 July, shipped a fix within days.

Tronics Software, 2010-present

Tronics Software LLC of El Dorado, California acquired the suite on 1 August 2010. Witango 6 was a serious engineering effort: the Studio was rewritten from scratch as a standalone Java application for cross-platform longevity, the project file became XML, and Witango Class Files became multi-class libraries. It also cut things - COM support out of the Studio (the vendor’s reasoning: “COM has been superseded by .NET and although Microsoft has not officially removed support for COM, it is widely believed to be a deprecated technology”), native Oracle OCI data sources, and J2EE compilation, described as temporarily removed. The rollout took four months and finished on 31 March 2011, with the developer blog assessing it fairly: “In many ways, the 6.0 release is closer to Witango’s past, than its future.”

Seven weeks later, on 19 May 2011, the product was renamed a third time. Witango became TeraScript; the server became TeraScript Server and the Studio became TeraScribe. Version 7 arrived on 27 November 2013, point releases through 2016, and TeraScript 8 on 12 January 2017 - the last release announcement the vendor has posted.

Where it stands

TeraScript is dormant rather than dead, and the distinction matters. There have been no announced releases since January 2017, no new documentation, and no visible community beyond the TeraScript-Talk mailing list - whose predecessor, the WitangoTalk and TangoTalk archive, covers “over 8 years” of a user base that has long since dispersed to PHP and elsewhere. But terascript.com is up, licences are still for sale, the manuals are still downloadable, and the site is itself a live Tango application: every page ends with a footer the server writes into its own output, naming its version and reporting the request time in milliseconds.

That footer is the most eloquent thing about the language’s current state. A .taf file written in a visual editor descended from a 1995 Macintosh CGI is still, in 2026, assembling HTML row by row and pushing it to a browser.

Why it matters

Tango is the clearest surviving example of a design that the industry abandoned and then spent twenty-five years rediscovering.

Its central bet was that the hard part of Web development was not expressing logic but connecting a database to a page, and that this connection should be drawn rather than written. Every part of the product followed from that: the action tree instead of a script, the Builders that generated whole CRUD forms, the schema browser feeding drag-and-drop, the abstraction of Search/Insert/Update/Delete over data sources that had no SQL at all. The manual’s own framing - “You can create simple applications in minutes - without ever writing any code” - is the sales copy of every low-code platform sold today.

The bet lost, for reasons that are visible in the language itself. Meta tags nested four deep inside attribute values are unmaintainable; a scope system that searches five namespaces for a name is unpredictable; a visual tree does not diff, merge or code-review; and the whole thing was a licensed commercial server at US$6,995 competing against PHP, which was free. When the Web’s centre of gravity moved to open-source scripting languages, a proprietary visual tool with a proprietary file format had nowhere to stand.

What remains worth noting is the timing. Tango’s action-based server was doing session scopes, database abstraction over heterogeneous back ends, server-side XML data types, streaming partial output and reusable server-side classes before most of those were common vocabulary. It got to the right problem early, chose a visual answer, and was outlived by the text-based answers - but it was outlived while still running, which is more than most languages of its generation can say.

Timeline

1995
EveryWare Development Corp. of Mississauga, Ontario ships Tango 1.0 for classic Mac OS. It is a CGI that sits between a Macintosh Web server - typically StarNine's WebSTAR - and EveryWare's own Butler SQL database, paired with a graphical editor. The pitch from the first announcements is the one the product kept for twenty years: it "combines a CGI for communicating with the Web server with a graphical editor that enables Web administrators to create Web pages quickly and without using SQL or HTML code." Version 1.0 is bundled with Butler SQL and works only with it; an ODBC version is announced as due in January 1996
1996
9 May: Apple Computer agrees to include a test-drive version of Tango and Butler SQL in its Internet Server Solution 2.0. Tech Monitor's item describes the pair as "one of the leading tools for integrating Web servers with database servers, using a visual development environment to allow for the rapid creation of dynamic online systems that require database communications." The ODBC release breaks Tango's dependence on Butler and opens it to Oracle, Sybase, Informix and FoxPro, which is what turns a Macintosh database accessory into a cross-platform product
1997
3 June: EveryWare announces Tango Enterprise 2.1 for Windows, described as an "IRAD" tool - intranet rapid application development. It adds direct Oracle access alongside ODBC, NSAPI and ISAPI plug-in support so the server no longer has to run as a CGI, and a batch of new meta tags. By this point the product has split into the two halves it kept for the rest of its life: Tango Enterprise Development Studio and Tango Enterprise Application Server. EveryWare's own success-story page from this year documents Bank of Montreal's mbanx, Sony's Epic Records and the UCLA School of Medicine as Tango Enterprise customers
1998
1 October: Pervasive Software Inc. of Austin, Texas announces an agreement to acquire all outstanding common shares of EveryWare Development Inc. at C$1.20 per share - roughly C$14.6 million for the shares and about C$16.2 million including options and warrants. Pervasive's press release calls Tango "a rapid development environment for creating dynamic Web-based business applications." Butler SQL, the Mac-only database Tango was built to talk to, is discontinued; Tango and the Bolero traffic-analysis tool continue
1999
17 February: Pervasive ships the Tango 3.5 Application Server for the Solaris operating environment at US$6,995, deployable from the Windows and Mac development studios, with ODBC drivers and integration for JavaScript, Perl scripts, Java classes and JavaBeans. On 28 December Pervasive introduces the Tango 2000 Application Server for Linux, and customer shipments of Tango 2000 for Mac OS begin in late December. Tango is now a genuinely cross-platform application server - Mac OS, Windows NT, Solaris and Linux - in an era when that was rare
2000
5 January: Pervasive announces the availability of Tango 2000 for the Mac at Macworld Expo in San Francisco. Its headline additions are full XML integration, with XML treated as a data type inside the application, and Tango Class Files (TCFs), which let developers write reusable objects in Tango itself. Application files are stored in an XML format that moves between operating systems without recompiling. Then in July Pervasive announces a restructuring "to focus on its core database business": development and marketing support for Tango is significantly reduced, no new features are planned, and the promised Mac OS X port is shelved
2001
29 June: the Tango 2000 technology becomes the property of With Enterprise Pty Ltd of North Sydney, Australia. Pervasive stops fulfilling orders and stops supporting the product line. The new owner rebrands it WiTango - later just Witango - for trademark reasons, and posts a notably candid message to the community: "We understand that there are many users out there who simply did not wish to migrate to another platform (we are among you) and we look forward to an exciting future together." A survey of the user base is the new owner's first public act
2002
8 January: the "What's New" document for Witango Application Server 5.0 is issued from North Sydney. The major changes are structural rather than syntactic - a pre-emptive multitasking mode for the server, a plug-in architecture and cross-platform connections for the Witango Client, reworked logging and error handling, a meta stack report for debugging, and a set of new meta tags. This is the first release under Australian ownership and the first substantive engineering work on the product in about two years
2003
27 January: Witango 5 is released for Mac OS X, the port Pervasive had abandoned, running alongside Windows, Solaris and Linux; Witango 5 Studio is priced at US$593. Mail integration over POP3, IMAP4 and SMTP arrives with it. On 18 July, Mark Litchfield of NGSSoftware publishes an advisory for a remote stack buffer overrun reachable by sending an oversized cookie in the Witango_UserReference parameter; because the server installs as LocalSystem on Windows, exploitation runs as SYSTEM. The vendor, notified on 13 July, patches it within days, and users are told to move to 5.0.1.062 or later. The Programmer's Guide and the 5.5 Studio User Guide are both dated August of this year
2010
1 August: Tronics Software LLC, based in California, announces that it has acquired the Witango product suite. Work begins immediately on Witango 6, whose Development Studio is a complete rewrite as a standalone Java application. The rewrite has costs the vendor states plainly: COM object support is removed from the Studio, native Oracle OCI data sources are dropped in favour of JDBC and ODBC, and J2EE compilation is "temporarily removed". Witango Class Files gain the ability to hold multiple classes per file, so a TCF becomes a library, and the project file moves to XML
2011
31 March: the Witango 6.0 rollout completes across all three supported platforms after four months, with 6.0.5 and 6.0.7 released along the way. The developer blog is honest about what the release was: "In many ways, the 6.0 release is closer to Witango's past, than its future." Then on 19 May the product is renamed for the third time - Witango becomes TeraScript, the Witango Application Server becomes TeraScript Server, and the Witango Development Studio becomes TeraScribe
2013
27 November: TeraScript Server 7 and TeraScribe 7 are released for all platforms. Server 7.1.1 and TeraScribe 7.0.3 follow on 4 January 2016 and Server 7.1.3 on 30 August 2016
2017
12 January: TeraScript 8 is announced. As of September 2026 this remains the most recent release announcement on the vendor's site, though terascript.com is still online, still selling licences, and still - by its own page footer - running on TeraScript Server 7.1.6

Notable Uses & Legacy

mbanx, Bank of Montreal

Canada's first national online bank, launched October 1996, was built on Tango Enterprise. Project manager John Errington is quoted in EveryWare's own case study explaining the choice in exactly the terms the product was sold on: "Tango's visual drag and drop editor generates the code so internal people with no programming expertise can develop the site." The applications were developed with Tango Enterprise for Windows NT and deployed on the bank's UNIX servers without recompilation, and modularity let one prototype serve as the template for the English retail, French retail and business versions

Epic Records (Sony Music)

Epic used Tango Enterprise to replace per-artist static Web sites with a single database-driven template at epiccenter.com, where selecting an artist and a category - biography, audio clips, tour dates, press - pulled the content from an Oracle database, and categories with no data simply switched off. Development was on Windows PCs and Macs, deployment on UNIX. EveryWare's case study records the site as live for about a year and receiving as many as 50,000 visitors a day

UCLA School of Medicine

According to EveryWare's own case study, the Instructional Design and Technology Unit at the UCLA School of Medicine used Tango Enterprise to give over 600 medical students database access to teaching resources and a way to enter patient-care information, and to route information between students and faculty - an early intranet application of exactly the kind the "IRAD" positioning was aimed at

Apple Internet Server Solution 2.0

In May 1996 Apple agreed to bundle a test-drive version of Tango and Butler SQL with its Internet Server Solution 2.0, putting the visual database-to-Web toolkit in the box with Apple's server hardware offering. For a period in the mid-1990s, Tango was effectively the default answer to "how do I put a database on a Macintosh Web server?"

terascript.com

The vendor's own site is the most easily verified production deployment still running: every page it serves ends with a line the server generates itself - "Served by: TeraScript Server (64-bit) Standard 7.1.6 on Windows (64-bit)" followed by the elapsed request time - and pages such as its product guide are still served from `.taf` application files

Language Influence

Influenced By

SQL HTML

Running Today

Run examples using the official Docker image:

docker pull
Last updated: