Name

Bigtop::Docs::About - A document explaining Bigtop's features and history

Features

Bigtop is a little language for describing the basic structure of web apps including their database layouts and the management of them.

By editing in a single description file (with your favorite text editor or the browser based 'tentmaker'), you can have a working web app by code generation. If your data model changes, you can regenerate without risk of loosing anything you wrote yourself. The pieces available include:

  • httpd.conf suitable for immediate inclusion in a mod_perl backed apache conf

  • a cgi dispatching script suitable for immediate deployment to your cgi-bin directory

  • a stand alone server suitable for immediate execution during development

  • schema.* (where * varies by database) with all the sql commands needed to build your app's database (including fixed or test data)

  • object relational mapping modules for use with Class::DBI or other similar tools

  • controllers for each table in the app

  • automated CRUD for tables where that makes sense

  • very flexible CRUD for more complicated situations

In all cases generated files are completely separated from stub files where you write your code. Once generated, stubs are never overwritten. This gives complete safety when regenerating.

Further, if you want to generate other things, it is not hard to alter or add them:

  • Altering what an existing backend generates is probably as simple as copying the template out of the backend, altering it, saving that on disk, then supplying that name like so:

    config {
        Type Backend { template `altered_template.tt`; }
    }
  • Making new backends, while not trivial, is not particularly hard (if you understand parse trees and recursion). The grammar even supports registration of new keywords (so long as you don't need new blocks or literals).

History

While working on the framework now called Gantry, I became convinced that I was still doing too much work on each app. I wanted a way to collect all the attributes of my data in one place including:

  • sql type

  • on screen appearance (how wide is the input box etc.)

  • whether the user updates it via a form or sees it in summary tables

  • etc.

From this I wanted the SQL statements that create the database, the models which make it easy for me to access that database, and the controllers which do the accessing, plus all the other bells and whistles needed for a complete attractive app.

Further Reading

To start using Bigtop, see Bigtop::Docs::Tutorial. If that goes too fast, try the Bigtop section of Gantry::Docs::Tutorial, which builds a smaller app. After those, try Bigtop::Docs::Cookbook.

Why the Name

Why did I call it Bigtop? I see it as a central place in the sometimes wild and always disparate world of a web application. It is where all the perfomers come together. But it's also about as discriminating as a circus tent, anyone and anything can easily come in and out. It's a big tent. Oh, and it's meant to be fun (cue the circus music).

AUTHOR

Phil Crow <philcrow2000@yahoo.com>