Now supporting - Node.js

Build a typescript enterprise web app for node.js and IIS

Vcl.js is a typeScript open-source framework for building an enterprise web apps in a fraction of the time, whether you’re an expert developer or just getting started.
Vcl.js takes the Delphi/VB approach into the HTML5 world,providing a full stack for a true web RAD development


Rich Component Library

vcl20Vcl.js components cover controls like pages (TPage class), controls (e.g., TButton, TCombo, TLabel classes) as well as database access (e.g., TQuery components).The component approach allows programmers to extend the VCL with many visual and non-visual additional components.

100% Bootstrap

tweetBootstrap is an open source framework that provides designers and developers with a straightforward way to create web interfaces that employ responsive design. Bootstrap utilizes JavaScript (including jQuery), CSS, and HTML and includes support for CSS3 and HTML5.

100% TypeScript

tsLogo80TypeScript offers classes, modules, and interfaces to help you build robust components. These features are available at development time for high-confidence application development, but are compiled into simple JavaScript.

Visual Studio Integration

vs35 Visual Studio 2012 Developers can install the Vcl.js plugin to get project and item templates.Add page,modal or backend method in no time.

100% Open Source

Vcl.js is free,open source and always will be!


Experience the future of the web platform with Vcl.js components framework.Components allow you to create web application, using html to describe their markup and typeScript to implement custom behavior.

//Simple dbgrid bounded to a query
import V = require("VCL/VCL");
export class PageHome extends V.TPage {
constructor() {

   //create a backend query
   var qur = new V.TQueryRemote(this);
   qur.QueryID = "allCustomers"; //this is actually run the statement "SELECT CustomerKey, FirstName, LastName FROM Customers";; //asynchronous call to the query 

   //create a grid component on the screen
   var grd = new V.TDBGrid(this, "grd"); //the "grd" is the id of the div
   grd.Dataset = qur; //bind the grid to the query
   grd.PageSize = 15; 
   //create columns to the grid
   var col = grd.createColumn(“FirstName”);
   var col = grd.createColumn(“Lastname”,”Last Name”);

<div class="row-fluid"><div id="grd" class="span12"/></div>


Build a scalable typeScript apps ! Vcl.js makes it easy to create sophisticated, multi-page typeScript app with great URL support, in a fraction of the code you’d write in any other frameworks.

//Simple routing example
import V = require("VCL/VCL");

export class PageHome extends V.TPage {
   constructor() {

     //create a backend query
     var btn = new V.TButton(this);
     btn.onClicked = ()=>({
	 //This method will call the class "Page2" and will pass "George Clooney" to page2 constructor
     V.Application.navigateToPage("Page2",["George Clooney"]);
import V = require("VCL/VCL");

export class Page2 extends V.TPage {
    constructor(customerName : string) {

       //create a backend query
       var txt = new V.TText(thism,"custName");
       txt.Text = customerName


Vcl.js come with over 50 components ready to use

  • Forms
    • TPage
    • TModal
    • TButton
    • TInput
    • TDBInput
    • TLabel
    • TDBLabel
    • TBadge
    • TDBBadge
    • TText
    • TDBText
    • TTextArea
    • TDBTextArea
    • TInputNumeric
    • TDBInputNumeric
    • TCombobox
    • TDBCombobox
    • TDBGrid
    • TListBox
    • TImage
    • TIcon
    • TToggleSwitch
    • TInputTypeaHead

  • Widgets
    • TWizardButtons
    • TTagCloud
    • TPillBox
    • TBreadCrumb
    • TPagination
    • TTree
    • TSideBar
    • TNavBar
    • TGravatarImage
    • TFacebookButton
    • TGoogleMap
    • TTimer
  • Visual containers
    • TPanel
    • TTabSheet
    • TAccordion
    • TCarousel
    • TWell
    • TContainer
    • TBootstrapRow
    • TBootstrapRowFluid
    • TBootstrapSpan

  • Datasets
    • TQuery
    • TQueryRemote
    • TCollection
    • TList
    • TDataset
    • TClientDataset

  • littlehouse

    Could you provide a ajax post example with the following create or update or delete operation?

  • vcljs support

    Hope this will give u some ideas on how to devlop server side

  • tcrever

    It looks impressive! great idea to use the Delphi approach.

  • Paolo Marino

    That’s a wonderful RAD: I wonder why nobody knows it. But it’s really the future…

  • Gary Miller

    Since this software appears to accept JavaScript (TypeScript compiles to JavaScript) database commands from the front end. How are users prevented from transmitting their own JavaScript commands that they’ve tailored with their own SQL injected? (similar to a SQL injection attack).

    In a Framework like Angular you still have to develop server side components to push your data to the front end instead of the front end directly requesting it in database fashion.

  • vcl

    hi gary
    the sql injection is for inhouse small apllication. a more generic approch you can use TQueryremote or write your own server side

  • vcl


  • Paolo Marino

    Hi everybody

    I have installed the VCL plugin on Microsoft Visual Studio 2013: when you create a new VCL project e recompile there are a lot of errors on d3.v3.ts library. Dropping the d3.v3.ts lib from the project and recompiling it seems to work fine. It is right?


  • Nati Krisi


    yes u r correct
    r u sure u used the latest version?
    we removed it from last version

  • Paolo Marino

    I downloaded the last version but it has the same size of that I installed.. At any rate Can I install over the old without problems?

  • Paolo Marino

    I noticed that the menu doesn’t close after you select a item. That’s a problem on mobile as it’s seems that non jump is made unless you scroll the screen..

  • vcl


  • Nati Krisi

    can u send us a sample code?

  • Paolo Marino

    If you resize the browser up to a smartphone screen you can see what I mean

  • Nati Krisi

    if you talking about the top menu this is bootstrap default behavior.

  • Paolo Marino

    Thank , I’ll find the way to modify this behavior

  • dfqsd