Jigsaw

Keith Damiani (Principal Programmer at Tighten) joins us this week to talk all about Jigsaw (what it does, what’s coming next, etc.) and what it’s like to manage an open source project at Tighten.

Transcript

Dave Hicking: Welcome to Twenty Percent Time, a podcast that takes you behind the scenes of Tighten, a web consultancy based out of Chicago, but entirely remote, and I used to say spread out all over North America, but that is no longer solely true, we are spread out in...We'll just say all over the place.

Keith Damiani: Worldwide.

Dave Hicking: That voice you hear is our guest who I'll be introducing you to in a second. Tighten specializes in Laravel, which is a PHP framework, but we're often pairing that with any number of Javascript frameworks, libraries, all sorts of fun, interesting stuff that we do. I'm your host, Dave Hicking, and this week I am joined, long overdue almost, by Keith Damiani...

Keith Damiani: Definitely.

Dave Hicking: Principal programming here at Tighten. Keith, how are you?

Keith Damiani: I'm doing great. How are you doing? Sorry to jump on your intro.

Dave Hicking: Oh no, that's fine.

Keith Damiani: Good to be here.

Dave Hicking: Keith and I have known each other for a very long time so this is not like our first conversation. Keith, for people who don't know you, who are you, what do you do?

Keith Damiani: I'm Keith Damiani, I'm principal programmer here at Tighten. I've been here six, seven years, depending on how you slice it. The best part of my day is when I get to hang out with you.

Dave Hicking: Oh, flattery won't get you...

Keith Damiani: I'm looking forward to this.

Dave Hicking: Everywhere on this podcast.

Keith Damiani: I know, but it's so true. But officially, what do I do? I do all sorts of things. I help clients with advising and consulting on high level architectural needs. I do code audits for them, I help our developers make sure they have whatever support they need to do their amazing work that they do for our clients every day. I help Matt and Dan stay as sane as I possibly can, I help drive you as insane as I possibly can.

Dave Hicking: That's right.

Keith Damiani: I do that as a crucial part of my role here.

Dave Hicking: It's a crucial aspect. That's right.

Keith Damiani: Little bit of everything.

Dave Hicking: Okay.

Keith Damiani: And sometimes, I write some code.

Dave Hicking: Sometimes.

Keith Damiani: Every now and then.

Dave Hicking: Every...

Keith Damiani: Sometimes.

Dave Hicking: It's when you get dangerous, is when you're writing code.

Keith Damiani: That's right.

Dave Hicking: Today we're talking about Jigsaw, which is something that has been... And you said Tighten for quite a long time. But for the folks who don't know, if they're tuning in, and they aren't familiar, or maybe they might have seen it once or twice bandied around on the internet, what is Jigsaw, Keith?

Keith Damiani: Jigsaw is a static site generator, which is basically a very simple tool to help you build a static website. And by static, a website that's just running simple HTML, it's not served from any server side language when it's put up on the internet. But the goal of Jigsaw is to help you build a HTML site quickly and easily without a whole lot of tooling on top of it. It uses Laravel's Blade templating underneath the hood. We are primarily Laravel developers at Tighten so we're quite familiar with Blade and that's what Jigsaw is built on top of.

Dave Hicking: And Jigsaw has been around in one form or another for quite a bit now. I'm trying to remember, do you know the rough history of Jigsaw? It dates back to, is it 2015?

Keith Damiani: Intimately well, yes. I think 2015. I think that sounds right. Adam Wathan built it when he was here at Tighten and he built it, as far as I know, as far as I remember, basically to scratch his own itch. That's a terrible idiom.

Dave Hicking: But it's true.

Keith Damiani: It's so canine. Built it to solve his own problem.

Dave Hicking: But that's a true thing, right, because that's something that-

Keith Damiani: Yes.

Dave Hicking: ... that devs often do.

Keith Damiani: Often do.

Dave Hicking: A lot of interesting things come because of some-

Keith Damiani: Absolutely.

Dave Hicking: ... weird thing that just drove you crazy.

Keith Damiani: Exactly. And there were a couple weird things that I think drove Adam crazy. He built it to serve the Tighten website and the Tighten website is a fairly simple website. He didn't really want to fight with any heavy tooling, didn't want to fight with a CMS. He wanted to write content and markdown and end up with a site that runs quickly. The original idea was his, and it was really brilliant. And like most of Adam's ideas, brilliantly simple to just use Blade, which again, as Laravel developers, we were already really comfortable with. Use that under the hood to service the templating engine and add markdown support to it. And the other, I think, one of the big foundational elements of it is that the file structure for your site's content very closely mimics your site's tree. When you build it, your site tree basically looks like your source code in its structure. So, that was the original idea. Eventually, Adam left Tighten, as people do. I don't know what he ended up doing, I don't think anybody's heard from him since.

Dave Hicking: No, Adam hasn't done anything.

Keith Damiani: No.

Dave Hicking: No, we're joking.

Keith Damiani: No, Adam...

Dave Hicking: Adam is fantastically successful.

Keith Damiani: Adam left to start his own empire.

Dave Hicking: That's right.

Keith Damiani: And I became the custodian of it. I took his brilliantly simple idea and then bastardized it over the years.

Dave Hicking: Oh, come on, Keith.

Keith Damiani: No. Before he left, he had started adding a really important feature called Collections, which basically allows you to deal with groups of content, things like blog posts, things that share common features, common templates, things that can be sorted and filtered and grouped and all of that. I took up the reins and finished adding that support, and then, have continued its development over the years since then. And since then, we've added a whole lot of features to it. We've added support for remote collections so that you can connect to a headless CMS, which a lot of people had interest in. We built some beautiful starter templates to make it really easy to get up and running with a great site very quickly. We've built the ability to extend it a little bit, hook into some events. It's grown over the years and developed further along. And then, most recently, one of our talented lead programmers, Jacob Baker-Kretzmar has joined in the effort to help keep it maintained, help it develop, help improve it, and to help strategize how it can continue to grow in the future.

Dave Hicking: You talked about how obviously Jigsaws for a static sites. I'm sure most people listening to this have probably, if not totally familiar, a passing familiarity with static sites. Why would I, as a dev or somebody else, why would I really need a static site generator for a simple site? Is it the simplicity, is it the speed, is it just you don't want to deal with the cruft of having to do everything in a CMS? For you, what do you think is the greatest appeal there?

Keith Damiani: Well, it's not terribly useful for you, as you've said in the past, because it is to be clear, it's really targeted at developers.

Dave Hicking: Sure.

Keith Damiani: You don't need to be a very experienced developer to use it, but it is definitely targeted at people who are comfortable working on the command line and working close to the metal, as they say. But the benefits of it and the reason why somebody would be interested in it is basically what you mentioned, it takes your site and converts it to plain old HTML. Just like an old traditional site, so your site loads very quickly. That's definitely a huge benefit of a static site, it's not backed up by any server language. That also makes it very simple to serve. You can host it anywhere you can serve plain HTML from, so you don't need a backend language like PHP running on your server. That means you can use things like GitHub pages, you can use Netlify, services like Netlify, and often just host your site for free. Makes it easier to host, makes your site really fast, and then I think developers like it because the tooling is so similar to what we work in day after day. The site is built using a CLI, command line interface, there's no interface to it, there's no CMS so it just feels a little bit more streamlined, a little more familiar of a workflow from a developer's point of view to what we do day in, day out. Plus you get to write and Markdown, developers love writing and Markdowns.

Dave Hicking: I was going to ask you, because we pitched Jigsaw as static sites for Laravel developers and I was going to ask you, do you think that, if you're coming from the Laravel ecosystem, is it that you're working in Blade that's the biggest win, is it the tooling, is it just all the above, you feel like it fits in, is there one particular aspect of it that you think it makes it such a no brainer?

Keith Damiani: Yeah, Blade is definitely a big part of it. To be clear....

Dave Hicking: We love Blade around Tighten.

Keith Damiani: We love Blade and it's a brilliant templating language and it's super, super powerful. So, it means that, Jigsaw takes advantage of all the power that Blade offers, including things like slots and components and... It's very robust, very easy to work with. And as a Laravel developer you're probably very familiar with the Blade language. But to be clear, you don't need to be a Laravel user to use Jigsaw, and I think that's really important. The goal all along with Jigsaw has been to keep it as simple to use out of the box as possible for any developer. Certainly some background in Laravel will help you get the most out of it. Some background PHPs as well uses things like Composer, so you would need to have PHP on your system and be a little bit familiar with Composer. But for a Laravel developer, the biggest win I think is that you are comfortable with Blade as a templating language. The other benefit, I think, if you want to dig a little bit deeper and you have Laravel background, you can extend it or customize it a lot more because Jigsaw itself is built on a handful of Illuminate packages, basically the same core that Laravel's built on. If you want to do something custom, a Laravel background will help you do that. It uses Laravel's collection methods when it's working with groups of content, it has the service containers so you can hack into that if you need to, it has event listeners, so it borrows a lot of components and a lot of concepts from Laravel.

Dave Hicking: You've been talking a bit about all the ways it seems like that you could customize or do something maybe out of the box with Jigsaw. Is there anything in particular that comes to mind that's really unique or interesting that you've seen somebody do with Jigsaw that you would've never expected?

Keith Damiani: Oh my, that's one of the most amazing things about a tool like this or open source, in general, is that people take this and just take it to places that you absolutely never expected. That can be a little bit of a curse, because then that leads to all sorts of feature requests that are really unique to people's individual problems, but people have built amazing things with it. At a basic level, we put together a site called builtwithjigsaw.com to just showcase what people do with it. Most of those are just straight up HTML marketing style sites or personal sites or blogs or whatever. But there's some beautiful stuff there that people have created. But people have taken it in all sorts of directions. There was somebody who built, it was basically an educational site that had, I think, 8,000 pages to it, which was really fascinating because that stretched us to focus a little bit on improving performance for large sites. People have connected to Jigsaw in interesting ways, like I mentioned before, with the remote collections, a lot of people have figured out interesting ways to connect to headless CMSs, Contentful, which is a headless CMS wrote up a great article about it. Most recently, what are their name, Hammerstone, this is Aaron Francis over there, who's an incredible developer, built something called Torchlight, torchlight.dev I think is the URL, for syntax highlighting, which is just brilliant, it's an incredible tool and Aaron wrote a plugin to have it connect to Jigsaw. He has a Jigsaw site, I believe...

Dave Hicking: Okay, cool.

Keith Damiani: And built a plugin to help Jigsaw sites connect to that easily, things like that. In terms of the really out there stuff, we've seen somebody build a CMS on top of Jigsaw, which is just intense. I think it's out there available, it's called Bind. I think it's at getbind.io is the URL, it's really mind blowing and incredible and innovative and fascinating. Somebody also built a framework called Maizzle, I don't think it's built on Jigsaw anymore, but in its early days, Maizzle is a framework for prototyping HTML emails...

Dave Hicking: Oh, interesting.

Keith Damiani: And they used Jigsaw as the engine underneath it. People have built things on top of it that really have just taken it to places we had had no idea it could possibly be used for. And that's so much fun. It's so much fun to see that happen and see how creative people can get.

Dave Hicking: You mentioned earlier that right now, Jigsaw at Tighten is mostly maintained, I think, by you and Jacob. Can you talk a little bit about what it's like to maintain an open source project like Jigsaw at Tighten? Because we are a client service agency, we work on client projects, how do we find time to do this?

Keith Damiani: At Tighten, we have a handful of great open source initiatives, it's definitely not our primary focus, but we do have a few great packages. We've got Ziggy, we've got Takeout. Ziggy is a really fascinating open source package that allows you to use your Laravel named routes in JavaScript. We've got Takeout, which is a easy to use docker dependency manager, we've got Jigsaw. We work on these during what we call 20% time, that's typically every Friday of the week.

Dave Hicking: It's the name of this podcast.

Keith Damiani: It's the name of this podcast, you might have heard of it. 20% time is when we devote our energy to this, and that is... The concept behind 20% time is, every Friday is not devoted to client work, but to either building our own skills to continue to grow as developers or to working on internal projects, and some of those internal projects are these open source projects. In terms of the open source part of it, it's a really wonderful way to be your own client. You get to play around with some new ideas, you get to take a break from your day to day projects. I think one of the biggest benefits of it internally is you get to collaborate with other developers who you may not have worked with before or...

Dave Hicking: Maybe it's been a while.

Keith Damiani: Maybe, it's been a while. And it just gives you a different environment to collaborate with other people, to learn from other people. It's a really great platform for that. And then, open source, in general, is just a really rewarding undertaking, because of that whole community that you get to interact with and learn from and help and get amazing ideas from, just being able to do some really fun and exciting things. And then, like I said before, see where people take it and learn from directions that they take it in and contributions that they make to the code base and things like that.

Dave Hicking: We haven't really talked about that as much, or at least, I haven't really thought about it in terms of that, but not only are folks using this and coming up maybe with suggestions or ideas, but I presume, folks are contributing back to the code base?

Keith Damiani: Yeah, absolutely. They contribute in a couple ways, they contribute ideas. Obviously, they contribute issues whenever there's a bug...

Dave Hicking: Sure.

Keith Damiani: And so, we try to deal with those, fortunately there's not too many of those at this point in Jigsaw. But they contribute ideas and then they contribute code. The ideas are often really interesting and innovative, and the code is often really helpful. One of the challenges with Jigsaw, and something that we're going to be working to improve is, it's a pretty difficult code base to work with, and that's definitely one thing we want to work on in future development to help facilitate those community contributions a little bit more. But people are super helpful and contribute all sorts of wonderful ideas.

Dave Hicking: Can you think of any maybe ideas specifically that come to mind that we've either added to our future list of things to do or features we've already implemented that came out of feedback like this?

Keith Damiani: Things that are already in there? Well, tons of little ones, tons of little edge case features that people uncover a need for. But some big ones, I think the whole concept of remote collections came out of the community. That wasn't something we had really thought about at all, or I certainly hadn't thought about early on, but that came up as a frequent need from the community that they wanted to use this to connect to a headless CMS. That was definitely a community driven effort. And then I think, like I mentioned, the push for improving performance for very large sites. We had no idea that people would be building such large sites with Jigsaw and that their help and the community was really the impetus to focus on where could we eek out a little bit more performance so that for folks with very large... For small site performance it's great, it's super fast. But when you're churning through six, seven, 8,000 pages, it can drag a little bit. That pushed us to look into ways where we could accommodate larger sites with a much better build performance. Those definitely have already been incorporated. In terms of the roadmap, there's tons. There's tons of great ideas, and internationalization, is definitely one of them that's been cited as a frequent need. And that is absolutely on our roadmap for the next version. Nested collections, which is a wonky way of saying, items that have children items, child items. And then I think the push towards better extensibility. People really want the ability, not everybody, but some people really want the ability to tinker and add and extend and install packages that they use in their Laravel apps and things like that. These sorts of ideas have made it onto the roadmap for the next version.

Dave Hicking: Speaking of the roadmap, I wanted to ask you. So, it sounds like one of the things that might be... I don't want to say challenging, we'll say interesting and fun to navigate maybe with maintaining an open source project like this is, how to plan for the future while also having this community that has their own interest and needs. And I don't know if we have a name for it or if it's even... Hopefully I'm not breaking any news here, but I think you and Jacob are starting to think about, we can call it next generation Jigsaw, Jigsaw V2. We can brainstorm names, but you are thinking about...

Keith Damiani: Jigsaw 2 electric boogaloo. We are.

Dave Hicking: That joke works for a very small percentage of... No, I'm just kidding.

Keith Damiani: I know. I don't care. It works every time for me.

Dave Hicking: You're starting to think about that, right?

Keith Damiani: We are.

Dave Hicking: You talked about some ideas, internationalization and things like that already, but anything in particular that might be on the agenda for, call it V2?

Keith Damiani: Yeah, absolutely. We are calling it V2 and there's several features. Well, there's some specific features and then just some underlying general updates we want to make. I think the biggest goal for me is, like I alluded to before, is to really enable more innovative community contributions. And there's two ways to do that. One is just revamping the code base at a fundamental level to make it easier to work with. Right now, for developers who are not me or Jacob who live in it, it's a little tricky to dig into and know how to work with. Even though under the hood, Jigsaw is a really simple concept, it's going to spin through a bunch of files and process them with Blade. There's a lot of complexity to some of the features involved and the code base has gotten a little bit complicated, maybe needlessly. Making just refactoring improvements to the underlying code base so that it's easier for the community to work with. The other way to do that we are focusing on in V2 is developing some sort of plugin architecture to improve that extensibility, to basically allow people to build some of the kinds of things that they wanted to build to solve their own problems, their own unique problems that don't necessarily need to make it into the core Jigsaw app, but would allow people to continue to do innovative and interesting things with it. That is definitely high on the list of what we're looking at for V2. In terms of features themselves, a couple of them I mentioned, internationalization is one of them, nested collections, basically, a middleware concept that would allow you to hook into the build process at a more granular level than you can do right now. Allow you to basically modify or inject content at build time...

Dave Hicking: Interesting...

Keith Damiani: To make your source content a little bit more dynamic than it currently is. And then, just a bunch of ease of use kind of user experience improvements, some commands for scaffolding, new pages quickly, again, we're going to continue to work on improving the compiling speed. So, lots of just little improvements that you would expect out of a V2, but yeah, really exciting stuff. I think the challenge with building a V2 or the challenge, in general, with developing software like this is trying to stay close to your core principles, which, for Jigsaw, at least for me, is to keep it simple to use with almost no configuration, right? We all sorts of great feature ideas come up and the there's a risk of piling too much on so that you sort of lose sight of the original goal, which was to keep it simple.

Dave Hicking: You get feature one.

Keith Damiani: That to me... You get... Yeah, absolutely. Absolutely. And it just gets massive and you lose that sort of spark that ignited in the first place. So, we really want to make sure that we keep true to Jigsaw's origins. Keep it simple to use out of the box. Almost no configuration if you, if you want just a basic site.

Dave Hicking: Right.

Keith Damiani: But at the same time, enable a bunch of powerful things that people have needs for.

Dave Hicking: Sounds like a fun challenge. Is this the kind of thing... So, are these the kind of changes where you feel like you'll be able to introduce them kind of like rolling over time? Or is this the kind of changes where... Actually, no, there will eventually, at someday be, no, no, no, you got to switch, there's a new Jigsaw.

Keith Damiani: Yeah.

Dave Hicking: You know?

Keith Damiani: No, it will be a switch. It will be a V2. You know, obviously, we will try to minimize breaking changes as much as possible and provide a migration path for people who have V1 sites. And that's important as well. We're keeping that in mind to make sure that if you do have an existing V1 site and V2 comes out, it's straightforward to kind of jump between the two major versions. But no, there's so many... I think the code itself is going to change so much that it's going to be a whole new version, even bigger and better.

Dave Hicking: That's what we want to hear now.

Keith Damiani: Yeah.

Dave Hicking: So, this is my last question. What's the one thing you wished I had asked about Jigsaw that we haven't talked about yet?

Keith Damiani: One thing you wish I asked that we haven't talked about...

Dave Hicking: Is there some particular aspect that you think is super interesting to talk about or important to talk about?

Keith Damiani: That's a really good question I hadn't thought about. I think, maybe why don't we build a CMS? That's probably what.

Dave Hicking: Well...

Keith Damiani: That's what I expected you ask. When is Jigsaw going to turn into a CMS? Cause I know you want Tighten to build a CMS.

Dave Hicking: Well, I mean, with, between the idea of remote collections and between a goal having a more extensible architecture, I don't know, you could see down the road, whether it comes from community...

Keith Damiani: It's getting close.

Dave Hicking: Whether it comes from the community or it's an official, or semiofficial sort of add-on or whatever, like, sure, you got Jigsaw or jig... Keith, we'll call it Jigsaw plus. it's 9.99 a month after a seven day free trial. I'm just kidding.

Keith Damiani: But that is something I've legitimately thought about.

Dave Hicking: Yeah.

Keith Damiani: Because the engine is there.

Dave Hicking: Right,

Keith Damiani: We could easily, fairly easily, build a UI on top of it right? Build a user interface, so that folks who maybe don't want to work on the command line or who want to manage content in a more traditional CMS way, can do it with Jigsaw. I don't see that happening, but it's also not a huge leap...

Dave Hicking: Yeah.

Keith Damiani: I think to get there. And like I said, there is already a CMS that's built on top of it, but by a third party. But, I think that my hope with it, is it just continues to grow and that people... And again, it's part of my hope if we are able to come up with a really robust way to enable plugins...

Dave Hicking: Yeah.

Keith Damiani: That the ideas that are out there in the community can continue to improve it and take it in directions that we didn't anticipate so that maybe we don't have to build it a Jigsaw CMS, but somebody else will take that and do it for us.

Dave Hicking: We're going to call it puzzle. It's going to pair perfect.

Keith Damiani: That's right.

Dave Hicking: It's going to just be designed to pair perfectly with Jigsaw. Dan is sweating right now as I'm coming up with product that on the spot.

Keith Damiani: I know.

Dave Hicking: No, I'm kidding. No, that's really good. I was going to ask about a theme as I was, but then, it's true that, at its core, what Jigsaw is about is really... It's simple, but it's capable and it's easy to work with, and every bit that we add on top, potentially, kind of gets in the way of that. So, I think...

Keith Damiani: Yeah.

Dave Hicking: I think having it be extensible or having it be maybe that capability come in some other way, that's not tied to the core thing so that, if people still just want to use Jigsaw, the way that Jigsaw is used right now, they can still do that. I think that's a great Goal.

Keith Damiani: Yeah, absolutely.

Dave Hicking: Well right, Keith, I think that might be it for today. So, there's going to be so many links to things that I'm going to have to put in the show notes of this, which are great. We talked about a ton of different stuff. Keith, where can the wonderful people listening to this show find you on the internet?

Keith Damiani: Where can they find me? Probably easy place to find me on Twitter...

Dave Hicking: Okay.

Keith Damiani: @KeithDamiani, you can find Jigsaw, right?

Dave Hicking: Yeah.

Keith Damiani: You'll put this all in the notes.

Dave Hicking: Oh, yeah.

Keith Damiani: Go to jigsaw.tighten.co is the doc site for Jigsaw. Tells you how to install it and get up and running really fast. And then the repository, if you want contribute to it or, or have an issue you want to want some help with, that's at github.com/Tighten/Jigsaw. And there's, like I said, we absolutely welcome people to propose ideas for the next upcoming version. We've got a discussion section on the repo with some... Where you can, you can launch some ideas for V2. If you've got some of those that you want to share and talk about.

Dave Hicking: All right. Well, thank you so much, Keith. Great having you on the show.

Keith Damiani: Happy to be here. Thanks so much.

Dave Hicking: Thanks.

Get our latest insights in your inbox:

By submitting this form, you acknowledge our Privacy Notice.

Hey, let’s talk.

By submitting this form, you acknowledge our Privacy Notice.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Thank you!

We appreciate your interest. We will get right back to you.