Canvas - Publishing on your own terms

by
Canvas is an open-source package that adds a modern publishing layer to any Laravel app. It gives you a distraction-free editor, a full media library, SEO tools, and audience analytics — all while staying lightweight and easy to drop in.

Add a comment

Replies

Best
Hey everyone, Todd here. I started Canvas a little over 10 years ago. I'd just been introduced to Laravel. Everyone had blogs, but I couldn’t find a simple drop-in package that felt right, so I built one. It’s evolved with every major release since. Last year I left software engineering altogether to open a gymnastics gym. Canvas has always been the recurring side project for me — I took it to interviews, even gave a talk on it once. It still is. It’s still fun to work on and still fun to iterate. v7 is a ground-up rewrite of the entire experience. The goal was simple: make the writing and publishing process feel calm instead of cluttered. That meant an overhaul to the editor, a modern media library, even some AI and webhook integrations and more. It’s still the same core idea — drop Canvas into an existing Laravel app and get a clean publishing surface — but the experience is very different, and I think you'll like it. I’d love any feedback, especially from people who’ve used older versions of Canvas or who write technical content regularly. Thanks for taking a look.

Dug into Canvas over the weekend and the editor feel is genuinely impressive, really clean and distraction free like they promise. Setup took maybe ten minutes and the media library just worked without any fiddling.

 Thanks for the feedback Brooklee, glad the setup was smooth!

Would love to see a built-in revision history so I can compare and roll back changes without leaving the editor. Bonus points if it shows diffs side by side.

 Great idea. I'll see what I can do!

Finally a publishing tool that doesn't fight Laravel's conventions. Dropped it into a side project and the media library just worked, no weird config rabbit holes.

 Glad it was a simple setup for you. And you're right, I tried to stay as close to Laravel norms as possible.