---
title: 'Flitter Framework: Cohesive Express.js'
slug: Flitter-Framework-Cohesive-Express-js
date: 2019-03-19 00:01:00
tags:
    - flitter
    - webdev
---

My take on a Node.js framework, based on Express.

![](https://cdn-images-1.medium.com/max/2350/1*bN1D4mCPcNWi632p2wSxBw.png)

*This is the first part in my series on Flitter, my Express-based web app framework. This first post is an introduction to Flitter and the motivation behind it. There will be more parts to come, but for a crash-course, [check out the documentation.](https://flitter.garrettmills.dev/tutorial-getting-started-0.html)*

**I love Express.** I think it’s wonderfully extensible, modular, and dynamic. However, when building Express-based apps, I’ve noticed that there are quite a few things that I find myself repeating. Enough, that I decided to standardize the steps into my own framework: *Flitter*.

![The Bigger Flitter](https://cdn-images-1.medium.com/max/2000/1*5H4606sXT4glCl-ZOgsAJQ.png)*The Bigger Flitter*

Flitter is a full-stack model-view-controller framework built using various Express packages. It is designed to provide a more cohesive environment for developing with Express. However, unlike some other frameworks, Flitter isn’t supposed to *replace *Express in your app, but rather complement it.

Flitter includes a Unit-based startup system so various underlying functionality in Flitter is broken into manageable, extensible chunks. These chunks provide commonly used things like sessions, MongoDB access, database models, controllers, the Pug view engine, middleware, and an interactive shell.

This means that Flitter does a lot of the initial hard work for you — it provides a simple way to define structures like models, routes, controllers, middleware, etc. These structures are imported by Flitter and are passed to their respective sub-components (Mongoose, Express, Pug).

### All you have to do is write the logic for your app.

Flitter also provides a coherent system for add-on packages. These packages can be created by 3rd parties (or myself) to enable additional functionality in Flitter. Because Flitter’s functionality is already broken up into chunks, creating these packages is trivial — simply add their units.

### I developed Flitter for a number of reasons:

First, I didn’t like how hard to understand other frameworks like AdonisJS and Sails are. Not necessarily their functionality, but how they work under the hood. Flitter is broken up into parts so it can be easily understood and modified.

Second, I use the functionality provided by Flitter a *lot. *So, Flitter is a generic implementation of how I would start every Node.js application I write. This is useful for me. I decided to spin if off as a framework so it will hopefully be useful for you, too.

Third, let’s be honest — I wanted to learn how to build a framework. I think it has been a good opportunity to expand my ES6 skills, and it has taught me how Express and Node.js work at a much deeper level. Plus, it’s just fun.

### Flitter is free as in freedom.

It’s also open-source and developed [over on my Git server.](https://code.garrettmills.dev/flitter) Contributions/suggestions/bug reports are welcome! I also dog-food Flitter — it runs [my website](https://glmdev.tech/) and several other projects I use.

### How do I get started?

Interested? Great! In the subsequent parts in this series, I’ll walk through creating a sample app using Flitter. But, Flitter is fully-documented, so you can check out the [documentation here to get started.](https://flitter.garrettmills.dev/)
