Over my time as a web developer, I’ve jumped between many frameworks and languages, attempting to find ones that work well for me. This seems to be pretty typical for developers who always have a take on the latest trend, either to quickly adopt or criticise it.

I really wanted to be a member of the Ruby crew for a time and ended up buying multiple copies of “Agile Web Development with Rails”, before having the opportunity to really apply it to a project and disposing of them because the material was outdated. (As always happens with technical example based books). Other languages (such as Java) I’ve used regularly at my workplace and then promptly moved on from as I didn’t like the language.

Over the last few years, things have settled down somewhat. I’ve got less time to spare and so I tend to be a little more selective over the tools I use. I seem to always pick up libraries that are familiar to me, where in the past I may have been a bit more adventurous. I thought I’d write down my web stack I have now in 2018 and explain why I use each tool. This is based on my now self identifying as a Python/JavaScript web developer.

Direnv

Direnv is a really useful tool for activating shell based .envrc files based on the directory you’re within. I find them a useful way to store project specific settings which I don’t want to commit and can easily ignore from source control.

Docker

Docker is the way I isolate my host machine from the app I’m developing. This is done through use of containers (which broadly are similar to virtual machines but use less host resource and are more performant).

Docker is available on multiple platforms which makes taking something I’ve written on my Mac dev machine and getting it working in a cloud based linux environment much simpler than manually installing a host of libraries. As docker is driven by Dockerfiles, it means that much of that configuration is now captured as code and stored in source control.

Where a project has requirements more complex than a single machine, docker has a command docker-compose which allows me to run a more complex setup. I can specify links between each of a projects required containers and keep the entire thing shielded from my machine.

Pipenv

Pipenv is a Python environment management library which builds on top of other libraries such as pip and virtualenv. It allows for easy installation of libraries for a project and is easier to use and more secure by default than pip. It is written by Kenneth Reitz who is also the creator of the popular Requests library.

It took me some time to move over to pipenv due to the different workflow involved and being used to pip, but now saves me a lot of time with hunting for the location of virtual environments or remembering the location of my Python 3 install.

Django

Django is my go to framework for most of my larger web based projects. It gives me everything I need to get a project off of the ground quickly, without having to immediately worry about building common core elements. Out of the box it includes authentication, models, database storage, migrations and somewhat uniquely from other frameworks - a dynamic admin interface.

It also has a thriving open source community who develop a wide number of extension apps. If you’re looking to do something custom, it’s likely it’s already been built.

Flask

Flask is a micro framework I typically use for web projects with a small list of requirements.

There are a long list of extensions available for it which can be easily installed, such as those for database storage or authentication. By only installing extensions you need, this results in a much smaller overall app which can be deployed and started more easily.

Typically I might use flask as a simple api endpoint that doesn’t require any auth.

Vue.js

Vue.js is the JavaScript framework I use to create single page applications. It allows me to easily break a complex set of behaviours into a more structured and well thought out application.

I originally opted for Vue.js over react simply because I found it easier to understand. It also is simpler to migrate a existing js app over to Vue, or enhance a existing static page with Vue based components.

I particularly like Vue’s cli. It makes it very easy to quickly scaffold an entire application and write end to end tests for it.

Semantic UI

Semantic UI is a UI library I use when working on my own projects. This saves me a bunch of time when rapidly prototyping an application. I can build responsive pages and need not worry too much about browser differences for every element.

Although I’ve used twitter’s bootstrap a lot in the past, I find the components in Semantic easier on the eye and their semantic naming makes more sense. It also helps that Semantic isn’t the most oft used library in my circles so in some small way contributes to it seeming different.

Semantic also has an official ui react integration, meaning if I ever did choose to make the move to react it would hopefully be simpler than manually creating them myself.

Summary

So, that’s my current web stack in 2018. I could have gone in to far more detail on the extensions I use in each framework, but I may well save that for a future post. No doubt it will change over time, but hopefully more slowly than it has done previously. If you’re interested in hiring me to use any of the above give me a shout at hi@niftydigits.com