
Studio is also an application
One of the more complex WaveMaker applications is the Studio. That's right, Studio is itself an application built out of WaveMaker widgets and using the runtime and server. Being the large, complex application we use to build applications, it can sometimes be difficult to understand where the runtime ends and Studio begins. With that said, Studio remains a treasure trove of examples and ideas to explore.
Let's open a finder, explorer, shell, or however you prefer to view the file system of a WaveMaker Studio installation. Let's look in the studio
folder. If you've installed WaveMaker to c:\program files\WaveMaker\6.5.3.Release
, the default on Windows, we're looking at c:\program files\WaveMaker\6.5.3.Release\studio
. This is the webapproot of the Studio project:

For files, we've discussed index.html
in loading the client. The type definition for the project types is types.js
. The types.js
definition is how the client learns of the server's Java types.
Moving on to the directories alphabetically, we start with the app
folder. The app
folder can be considered a large utility folder these days. The branding
folder, http://dev.wavemaker.com/wiki/bin/wmdoc_6.5/Branding, is a sample of the branding feature for when you want to easily re-brand applications for different customers. The build
folder contains the optimized build files we discussed when loading our application in gzip mode. This build
folder is for the Studio itself. The images
folder is, as we would hope, where images are kept. The content of the doc in jsdoc
is pretty old. Use jsref
at the online wiki, http://dev.wavemaker.com/wiki/bin/wmjsref_6.5/WebHome, for a client API reference instead. Language
contains the National Language Support (NLS) files to localize Studio into other languages. In 6.5.X, there is a Japanese (ja
) and Spanish (es
) directory in addition to the English (en
) default thanks to the efforts of the WaveMaker community and a corporate partner. For more on internationalization applications with WaveMaker, navigate to http://dev.wavemaker.com/wiki/bin/wmdoc_6.5/Localization#HLocalizingtheClientLanguage.
The lib
folder is very interesting, so let's wrap up this top level before we dig into that one.
The META-INF
folder contains artifacts from the WaveMaker Maven build process that probably should be removed for 6.5.2.
The pages
folder contains the page definitions for Studio's pages. These pages can be opened in Studio. They also can be a treasure trove of tips and tricks if you see something when using Studio that you don't know how to do in your application. Be careful however, as some pages are old and use outdated classes or techniques. Other constructs are only used by Studio and aren't tooled. This means some pages use components that can only be created by code. The other major difference between a project's pages
folder is that Studio page
folders do not contain the same number of files. They do not have the optimized pageName.a.js
file, for example.
The services
folder contains the Service Method Definition (SMD) files for Studio's services. These are summaries of a projects exposed services, one file per service, used at runtime by the client. Each callable function, its input parameter, and its return types are defined.
Finally, WEB-INF
we have discussed already when we examined web.xml
. In Studio's case, replace project
with studio
in the file names. Also under WEB-INF
, we have classes
and lib
. The classes
folder contains Java class files and additional XML files. These files are on the classpath. WEB-INF
\lib
contains JAR files. Studio requires significantly more JAR files, which are automatically added to projects created by Studio.
Now let's get back to the lib
folder. Astute readers of our walk through of index.html
likely noticed the references to /wavemaker/lib
in src tags for things such as runtimeloader
. You might have also noticed that this folder was not present in the project and wondered how these tags could not fail. As a quick look at the URL of Studio running in a browser will demonstrate, /wavemaker
is the Studio's context. This means the JavaScript runtime is only copied in as part of generating the deployment package. The lib
folder is loaded directly from Studio's context when you test run an application from Studio using the Run or Test button. RuntimeLoader.js
we encountered following index.html
as it is the start of the loading of client modules. Manifest.js
is an entry point into the loading process. Boot
contains pre-initialization, such as the spinning loader image. Next we have another build
folder. This one is the one used by applications and contains all possible build files. Not every JavaScript module is packaged up into an optimized build file. Some modules are so specific or rarely used that they are best loaded individually. Otherwise, if there's a build package available to applications, these them. Dojo lives in the dojo
folder. I hope you don't find it surprising to find a dijit
, dojo
, and dojox
folder in there. The folder github
provides the library path github for JS Beautifier, http://jsbeautifier.org/. The images in the project images
folder include a copy of Silk Icons, http://www.famfamfam.com/lab/icons/silk/, a great Creative Common licensed PNG icon set.
This brings us to wm
. We definitely saved the most interesting folder for our last stop on this tour. For in lib/wm
, we have manifest.js
, the top level of module loading when using debug mode in the runtime loader. In wm/lib/base
, is the top level of the WaveMaker module space used at runtime. This means in wm/lib/base
we have the WaveMaker components
and widgets
folders. These two folders contain the most commonly used sets of classes by WaveMaker developers using any custom JavaScript in a project. This also means we will be back in these folders again too.