Cookie Consent by Technical Pursuit




Decisions, Decisions


JavaScript is here to stay. From server to desktop, from mobile to IoT, today's applications depend on JavaScript and JavaScript coders.

The problem? Demand for JavaScript skills consistently outpaces supply… a condition that's been true since the dawn of the web.

Ironically, modern frameworks often increase demand for solid JavaScript skills; some go further and require TypeScript, forcing you to hire from a smaller pool of coders.

The good news is there's a solution… the one that grew the web to over 6 Billion pages. The answer? Authoring in markup augmented by JS, not embedded in it.

The popularity of React JSX; Angular's tag-based design; Google Polymer; W3C WebComponents; all trends point to a future of applications written in markup.

TIBET lets you work top-down, markup-first, via Lama, a revolutionary web IDE.

With your current platform when you build your second, third, or fifth project will you still be doing all the work in code? If the answer is yes it's time to try TIBET.

The future is written in markup.

Is TIBET right for my project?

We built TIBET for business applications, applications users often run as their primary task, applications whose users tend to depend on the keyboard and disregard the mouse, applications typically in service for years, applications with dozens or sometimes hundreds of distinct screens.

TIBET is not a silver bullet; it's not right for every project, nothing is, but we think TIBET can make a significant difference for business-class projects.

If you're exclusively targeting phones we'd recommend you consider platforms that are focused specifically on mobile development.

How fast does TIBET load?

TIBET uses a unique two-phase loader. TIBET library code loads from cache in the background and your application-specific code loads on login success.

TIBET's unique design also means code loads and parses a single time during application startup regardless of how many times you redraw the UI frame.

To give you an answer that's as close to what you're probably asking though, TIBET's "base" package loads sub-second on Safari, Chrome, and Electron. These times happen in parallel with your user entering their login credentials and waiting for server authentication so user-perceived load time is often 0ms for the library, the user only sees load times for the application-specific code.

If you're working as a developer and loading the entire TIBET library, Lama, and test suite you will see startup times in the five-to-ten-second range. Keep in mind that in this scenario you're a) loading every available type and tag in the TIBET platform to support fully-dynamic development, b) loading a full IDE and all its code and resources, c) loading your application inside that IDE. In this case it's more apples-to-apples to compare TIBET startup times to those for other web development IDEs such as VSCode, not those of web applications.

How big is TIBET?

Why do you ask? :)

Questions about library size usually arise because accepted web dogma holds that the larger the library the worse the user experience. Bigger -> Slower -> Worse.

With TIBET we like to make sure we're solving the right problem though, so we dug a bit deeper and "questioned the question" as we like to say.

Instead of assuming TIBET had to be "as small as possible" we asked why small mattered. Not surprisingly "small" is shorthand for "the initial screen needs to load fast…"

Setting rational performance goals requires a follow-up analysis however. Simply saying "fast" doesn't provide a measurable value. We need to know what constitutes "fast".

In the consumer web "fast" translates to "fast enough the user won't hit the back button". Recent objective measurements put that time between 2 and 5 seconds. TIBET's target market, business intranet and Electron-based desktop applications, don't have the same constraints but we can use 5 seconds as our maximum with a sweet spot of 2 seconds or less.

With a rough goal of 2-5 seconds there are still a lot of follow-up questions…

First up, we're loading an application not just a library so shouldn't the question really be "By using this platform will my final deployment package load fast enough?"

That's a different question altogether…one that led us to ask the real question:

How might a platform's design help optimize perceived load times?

Since we're starting with deployment package size is it better to have a large library and less application-specific code or a tiny library that requires more application code? What mix?

Is deployment package size really the only factor in load performance? What about HTTP overhead? Smarter caching? Other factors?

What about applications with a login screen? Can you show a login screen while the bulk of the code is loading in the background? How might that work?

What about loading the library code separately from the application code? How does splitting the load between library and application impact our options?

We took all these implications into account when designing TIBET.

With TIBET we solved the real problem, the problem "smaller" is only one answer to, the problem of how to design a platform to balance perceived load time with all the other issues that impact whether a particular platform is right for you. We think you'll be pleased with the result.

What platforms does TIBET support?

The TIBET CLI, TIBET Data Server (TDS), TIBET Workflow System (TWS) and other server components run on supported NodeJS platforms including Windows, Mac OS, and common Linux variants.

TIBET Client:

Platform Runtime Zero Reload Lama
Electron ^12.x Yes Yes Preview
Google Chrome ^89 Yes Yes Preview
Microsoft Edge (Chromium) ^89 Yes Yes No
Mozilla Firefox ^87 Yes Yes No
Apple Safari ^14 Yes Yes No
Microsoft Edge (Legacy) No No No
Microsoft IE No No No

TIBET Docker Images

There are pre-built Docker images of TIBET at DockerHub technicalpursuit/tibet.

Does TIBET integrate with other libs?

Yes, but it's largely unnecessary.

TIBET includes hundreds of function primitives and object-oriented types which work together in a fully-integrated client-side stack, eliminating the need for reverting to a costly and time-consuming à la carte approach to your development.

In addition, TIBET already embeds jquery's Sizzle engine and several other leading libraries such as bluebird, d3, forge, sinon, and syn while maintaining API isolation so we can update, evolve, and integrate new modules without impacting your development APIs over time.

TIBET includes a React Bridge which makes it easy to leverage React-based UI components. Thanks to the React Bridge you can use React components directly from the TIBET Lama, editing and applying your changes in-situ, then saving your work when it's complete.

If you feel there's a missing feature we'd encourage you to file a feature request. That way the entire community can benefit from a fully-integrated and supported module.

Does TIBET run on mobile devices?

Yes, provided the device has a compliant HTML5 browser implementation.

That said, TIBET is designed primarily for desktops, laptops, and Chromebook-class hardware, hardware optimized for data entry, not data consumption.

Does TIBET require plugins (Flash etc)?

No. TIBET is 100% Pure JavaScript.

Do I have to use the TIBET Data Server (TDS)?

Production TIBET is 100% server-agnostic, so much so you can run it without any server.

During development the Lama™ and TIBET's live patching functionality require the TDS to be running. You can configure the TDS to proxy to your actual server during development or make use of the TDS's simple mock support to decouple frontend and backend development.

Getting Started

How do I install TIBET?

You can install TIBET via either npm or git. For support you should be using npm-based installs. Full instructions for installing TIBET can be found in the TIBET Install Guide.

Are there tutorials for TIBET?

The TIBET Quickstart Guide will get you up and running in minutes. You can follow that up with the TIBET Essentials Guide to dig deeper into TIBET.

Where are the API docs?

API documentation for TIBET is generated on-the-fly by the TIBET runtime system. This up-to-the-minute documentation is accessible via both the TIBET CLI and Lama. TIBET's tools will also generate API documentation for your application code provided you follow TIBET's coding standards with respect to comment placement and format.

The tibet apropos and :apropos commands let you query for functionality related to one or more terms. These are a good starting point.

tibet apropos <topic>

The tibet reflect and :reflect commands let you focus on a particular object or method, or reflect across the currently loaded code.

tibet reflect [<target>]


Why CouchDB? Why not {{xyz}}?

First, let's point out that TIBET is not limited to use with CouchDB.

You can use TIBET with any HTTP or WebDAV server, and couple that server to any database backend you like. If you're running the TDS it's relatively easy to leverage a number of LevelUP-compatible storage backends for example.

As to why we started out leveraging CouchDB? REST and Replication.

CouchDB has native HTTP support and native JSON data transport. That makes it a perfect high-performance REST data server, the kind of server optimized for a solution like TIBET.

Native HTTP support lets us access CouchDB directly from the client, from the TDS, from the TIBET CLI, from curl, or other HTTP-compatible tools without extra overhead.

CouchDB's replication protocol lets us easily sync data between the client (via pouchdb), the TDS, CouchDB instances, or any other server implementing that protocol.

The CouchDB changes feed lets us support collaborative real-time applications through TIBET's built-in signaling and data binding features and helped us create the TIBET Workflow System.

Can I use TIBET with {{xyz}} instead of CouchDB?


You can use TIBET with any HTTP or WebDAV server, and couple that server to any database backend you like. LevelUP support is easy to integrate to help make with other storage servers easier to manage.

How do I create a TIBET+CouchDB project?

Type the following, replacing {{appname}} with your desired project name:

tibet clone {{appname}} --dna couch

See the TIBET+CouchDB guide for a complete overview of TIBET+CouchDB.


What license does TIBET use?

TIBET is Open Source under the OSI-approved Reciprocal Public License (RPL).

Our decision to use the RPL is based on a common business model in today's Open Source world where your decision to keep source code private comes with a fee.

GitHub, Travis-CI, Sauce Labs, npm; the Open Source market has numerous pay-for-privacy services. TIBET offers the same choice: public or private? With TIBET you can open source your code or purchase a privacy waiver.

No waiver is required until you 'Deploy' your code as that term is defined in the RPL. Research and Personal Use are also exempt. You're free to explore or prototype without concern. You only have to start sharing your code when you start deploying your code.

Is TIBET Open Source?

Yes. TIBET's license is approved by the Open Source Initiative (OSI), the organization responsible for maintaining the official definition of the term "Open Source".

Is TIBET free (as in beer) ?

That depends on you. If you open source your code then TIBET is free of cost. If you want to keep source code for a particular application private you can purchase a privacy waiver.

How do I file a support ticket?

We no longer offer SLA-backed support for TIBET, however we continue to update TIBET on a regular basis and address any known bugs or issues we find.

Visit our issue list on GitHub to search the existing list or to log a new issue.


Why did you call it TIBET?

While discussing names for what would eventually become TIBET, Bill Edney, TIBET's co-author and evangelist, mentioned that China didn't call the region traditionally known as 'Tibet' by that name. He suggested we call our library TIBET in the hope that if our framework became popular it would continue to bring awareness to the ongoing situation in Tibet.

Note that the product name is always presented in full-caps, e.g. TIBET.

We recommend visiting the sites below for more information on how you can help Tibet and the Tibetan people:

The TIBET logo is the word 'Tibet' in Tibetan script: