The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

Name

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

Guide to Docs

For a complete and annotated list of Bigtop docs, see Bigtop::Docs::TOC.

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 a single description file (with your favorite text editor or the browser based 'tentmaker'), you can have a working web app by code generation. There are good defaults to get you started. If your data model changes, you can regenerate without risk of loosing anything you wrote yourself. Some of 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 DBIx::Class 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 usually 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). When you register them, you provide enough information for them to appear in tentmaker as if they were native.

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

With Bigtop's kickstart syntax, you can now build a complete CRUD app from the command line alone. Similarly, if you have a postgres 8 database, you can build a CRUD app for it from the command line. See Bigtop::Docs::QuickStart for details.

To start using Bigtop, see Bigtop::Docs::TentTut or Bigtop::Docs::Tutorial. If those go too fast, try the Bigtop section of Gantry::Docs::Tutorial, which builds a smaller app. After those, try Bigtop::Docs::Cookbook. For a complete doc list, see Bigtop::Docs::TOC.

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 <crow.phil@gmail.com>