TIBET Troubleshooting


If you're having problems with TIBET this guide may help. If you don't see an answer to your problem here, you can also take advantage of the following support resources:

We'll try to get you an answer as quickly as possible.







Installing From Git

A common issue when deciding to install TIBET via Git is that the Git-based installation and npm installation can conflict. The solution is to be sure to uninstall any npm version of TIBET you've installed, then install following the instructions for Git installation.


Custom Tag Rule Does Not Apply

If you're using custom tags in TIBET there are two variations to deal with: leaving the tag in XML form, and converting it to an XHTML tag with a tibet:tag attribute. Each requires a specific syntax for CSS rules to apply correctly

XHTML tags must include a [tibet|tag=""] qualifier:

In the sample here we assume a project name of hello. This rule will apply to a div element containing the tibet:tag value identifying it as the hello:app tag:

div[tibet|tag="hello:app"] {
XML tags must have an associated @namespace declaration:

For tags you leave in their XML form your style sheet(s) must include a matching @namespace CSS directive. For example, if you have tags in the hello namespace you need a directive similar to:

@namespace hello url(urn:app:hello);

Note that you can use any valid URI here at long as it's consistent with any other registrations you may use for that particular namespace. TIBET defaults to using a simple URN of the form urn:app: at project creation.

Custom Tag Does Not Display

XML tags require a 'display' declaration

By default your XML tags do not have a default display value such as block, inline, etc. like XHTML tags do. To get your tags to display correctly be sure that each tag has at least one related rule that will assign a display value:

hello|app {
    display: block;

Custom Tag Ignoring Class

Use [class~=classname] for XML tag class rules

XML tags treat class as just another attribute so use attribute selector syntax rather than the standard HTML sugar. NOTE that it's best to use the "contains" syntax via ~=:

hello|button[class~="active"] {
    border: 1px solid red;


Packager Fails To Complete

The current TIBET packager doesn't like '%%' and rewrites them into strange combinations, so break up sequences using a '+' such as:

Change this:


To this:

"%" + "%"


TypeError: undefined is not a constructor

This error is a favorite way for PhantomJS to report that you tried to invoke a function that doesn't exist. A common example is using the wrong method name for an assertion in unit tests:

function() {
    var router;
    this.before(function() {
        router = TP.sys.getRouter();

    this.it('compiles simple strings', function(test, options) {
        var result;
        result = router.compilePattern('fluffy');

        //  NOTE: isEqual isn't the right one...it's isEqualTo
        test.assert.isEqual(result.first(), /fluffy/.toString());

not ok - compiles simple strings error: TypeError: undefined is not a constructor (evaluating 'test.assert.isEqual(result.first(), /fluffy/.toString())').

Execution stopped with status: 127

Sometimes the tibet build or tibet test command can fail with an error:

Execution stopped with status: 127

This is due to the fact that these two commands use PhantomJS under the covers to perform their task. This error is typically due to the fact that TIBET is being run on a Linux server that doesn't have libfontconfig and libfreetype6 installed. These are required by PhantomJS. For Linux systems that use apt-get, these packages can be installed by executing:

sudo apt-get install libfreetype6
sudo apt-get install libfontconfig

If your system uses a different package manager, then use that package manager to install these two packages.