Will McGugan has brought a lot of color to CLIs within Python due to Rich. Then Textual started rethinking full command line applications, including layout with CSS. And now Textualize, a new startup, is bringing CLI apps to the web.

Transcript for episode 188 of the Test & Code Podcast

This transcript starts as an auto generated transcript.
PRs welcome if you want to help fix any errors.

Will McGugan has brought a lot of color to CLI’s within Python due to rich. Then Textual started rethinking full command line applications, including layout with CSS. And now textualize, a new startup, is bringing CLI apps to the web.

This episode is sponsored by Rollbar. Rollbar is the leading platform that enables developers to proactively, discover and resolve issues in their code, allowing them to work on continuous code improvements throughout the software development lifecycle. Rollbar has plans for all situations, from free to large enterprise. With Rollbar, developers deployed better software faster and can quickly recover from critical errors as they happen. Learn more at rollbar.com welcome to test and code.

Well, I am super excited today to have Will McGugan. You started textualize. Actually tell me what the timeline was.


Okay. So I guess last year at some point I decided to take a year off. I’m going to take a year off and I had some savings. I was prepared to work through those savings. And then I would build Textual and I’ll build this web service alongside it that use Textual. And then at the end of that year, I would approach these and see if I can enter business or worst case scenario, I would just go back like a regular day job like everyone else.


And then I treat this. I find it quite cathartic to just tweet things and get feedback. And I somehow managed to inadvertently attract some interest from BC company.

Yeah. So it didn’t take long. You do a little bit of negotiation and you can agree on what the plan is, and then you’re running a tech start up very.

Quick is like relative because you’ve done everything faster than everybody else seems to. Or maybe I’m just the one not understanding how things are going, but I don’t think the normal course of events is tweet something and then VCs chase after you.

No, everything.

When I started looking into it and I hadn’t looked into it previously, it said you’ll approach many VCs, you’ll get used to being not back and you have to work on your elevator pitch. And most people aren’t successful, but it seems to happen very quick for me.


I think because the company, the busy company, they specialize in taking open source projects and then building companies around them and also been some other companies in a similar kind of space.

So they saw a potential niche and they were quite keen to go ahead.


I guess let’s just get the big news out of the way.

Probably everybody knows already, but textualize is the thing now. It’s your company, right?

Yeah. I’ve been running it since January and got some employees. We’re a very small tech company, but it’s going well. I love the fact that I can continue to work on the open source because the open source is a big part of the business.

So we’re building something that’s open source, fixing bugs, taking contributions, and everyone can use it. I love that.

Yeah, it’s really cool. So on the Opensource side, you’ve got a few projects, you’ve got started with rich, and then I can’t remember what came next, rich textural or rich CLI, but around the same time, textual came next.


Textual and textual is what it’s not just rich, it’s for, like, what is textual ad.

So it’s building a text user interface, which is basically when the application takes over the whole area of your terminal, and it can render lists and text Editors and dialogs and such. So it’s kind of like a Gui or a web application, but within your terminal.

Yeah. And it looks way better than way back when I was a youngster, like Dos apps were that. I mean, the old Dos apps were text based user interfaces.

Yeah. They’re not new. No, they go way back.

They predate the desktop.

So it’s definitely not the new cool thing. I think it’s an old thing, but it’s become cool again.

So one of the big holes was that there wasn’t a lot or maybe there was innovation, but I didn’t see it.

I don’t think there was a lot of innovative things, both on capabilities, but also on the developer experience in the CLI.


I think the reason for that is that the web came along and everyone saw the web as the platform, and maybe they were just terminals were old and archaic, and we didn’t need to develop for them. So people are using very old APIs like purses that’s been around for literally decades to build these things. And we haven’t benefited from all the work that’s been done in the web space, because in the web, people are constantly trying to innovate and try to make better ways of making user interfaces.

But the terminal hasn’t really benefited from that.

One of the things you’ve done with textual, then, is to bring in a layout scheme similar to CSS then, right?

Yeah. So we’re actually using CSS.

It’s a dialect of CSS as a subset of the declarations, but we got the same kind of rules.

So you can apply rules to a particular widget or a descendant of a particular widget or a child, that kind of thing. And you can apply various declarations that affect how it looks. And the syntax is very similar to CSS from the web, but it applies to the terminal.

And then textualize, you’re bringing it back to the web. Right. Is that what’s going on.

Full circle.

The thing is, I think for many developers, particularly Python developers, texture will hopefully be one of the fastest ways of building a user interface of any kind, which is fantastic. I think that’s great. I’m hoping that people will distribute these applications to other developers, but I don’t want it to be exclusively for the domain of developers because that kind of limits it to developer tool, and the only way to bring it to everyone else is to put it on the web. So that’s what the service. Textual is the open source project.


So Textualizes the service, but Textual is the open source project.

Am I going to be able to do these textual applications running in the Web, running in a web browser with the open source project or just through.

Yeah. So there’ll be a very generous free tier, a tier for open source and also the first tier. So if you want distribute your application to a certain number of users, you probably come under the free tier to be able to use that for free.

If you want more scalability and you want extra features, then that would be the commercial side. So you’d sign up.

It’s kind of a software service model.


Well, I sure can’t imagine anybody complaining about you finally making money off of this because you’ve given I mean, Rich and Textual already have given so much to the community. We’ve got a lot of other open source tools now look a lot better because of these tools. So it’s pretty cool.

Even Pip has Rich in it, right? Or a vendor version.

Yeah, that’s right. For the progress bars. I was very excited when I first saw the Tip install and I saw Rich progress bar.

Yeah, that’s one of the interesting things is Rich is not that big of a library.

I mean, there’s a lot of features in there, but it’s not a big ass to have that as a dependency.

So even something like, I don’t know, I’m using it for an application just for the tables. Just because I like the way Rich handles tables better than any other table solution, I came across the default coloring. Also, sometimes decisions are also a problem. Making decisions is hard, especially when you’re just doing a quick application. So having the default colors be different and reasonable to start with is awesome. I like it.

Yeah. I tried to make things work reasonably well out of the box.

There’s loads of parameters to Tweak, and the table class in particular has so many options that you can define how it looks.

But the defaults generally work quite well.

Yeah, I think the only tweaking I did last.

So I did it for the application. I wrote the little application I wrote for the Pipeline book, and one of the things was the default divider between the titles of the column headers and the columns themselves.

There’s just a line. There no big deal. But the default was like dash lines or something. And when it got translated to Mobi or EPUB for digital books, the layout was messed up. It’s fine in the PDF, but it was messed up in the other one. So I just switched to the solid line and it looked fine. So minor things. But anyway, just having fun with I actually have a couple of ideas for textualize, so I was curious. One of the things I was holding back for was character input, so that wasn’t there at first. Is there a character input solution now?

Someone has written one.

We’re building up this CSS branch, and before we’ve finished all that API, we can’t really start working on widgets. Okay. So unfortunately paused the. 0.1 branch, but someone else has stepped in. I can’t remember who developed it, but they built a text input widget for the old API.

But fairly soon, hopefully in a couple of months we’ll have proper text input and we’ll start adding on various widgets and even a multi line, multi page editor.


That would be cool.

So I can go out and as just an exercise, I can try to reimplement them or something like that in Textual.

Yeah, well, it’s pretty massive, but I’m sure you could have an editor that you’re very familiar to, you could use the app.

I’m not going to. That just seems like too much work.

But it’d be a fun exercise actually for, I don’t know, College level sort of stuff to be able to just say not everything but a handful of the operators for either a Max or Vim handle that.

I could totally see this happening in an education setting.

One of the things I like about Textual enriched so far is to be able to do command line interfaces quick. Okay. This in combination with other innovations that have happened, like typer, is great for having the commands to a command line application. So combining those two is incredibly powerful. And then being able to just have something that looks kind of like a Gui. There’s a lot of quick things like a make system or something, or you’ve got like a handful of developers that use it. There’s not that many questions, but there’s a few like which platform you’re building for or something like that to have that be a nice graphic interface and at the same time a nice command line option for people that know what they’re doing sort of thing. But if you don’t remember the options to just run the thing and pop up a few dialogues and stuff. Being able to do that in textual is so cool and it looks so much better than it looks good. It’s really cool. And having it be not very much work is really important.

And I think that’s one of the things you’ve added, because I would never like if I was doing a make system and I was thinking maybe I’ll do a Gui or something, I would not grab Curses.

Yeah, I’m amazed there are so many Curses projects out there because you have to be really quite motivated to work your way through courses.

So I’m hoping in the future I’ll have integration with Gigantic or something. So you could create a Pedantic model that would turn into a form and then it pop up a twoyear fill in the form and then that return the Identic model.

Oh, so you could integrate it with anything we needed to get some field from the user.

Maybe your CLI could have a Hyphen two E option. You add that and then it doesn’t get things in the command line. It just asks for the input in the form.

Yeah, or maybe an Adder’s object or something.

That’d be cool.

So now you’re a full fledged company of how many people now?

Four people in total. We’ve got two developers and a part time bookkeeperpa. He’s also my wife.

Okay. So she’s totally on board with this crazy plan of years as well, I guess. Not so crazy.

No, it felt crazy right at the start. I mean, she was on board with me taking a year off.

It was partially to distress, to be honest.

It’s to destress. You’ve started a company.

I know it was actually quite stressful to begin with. Seems to be quiet down now, but there’s a lot to take on board. A lot of things I’ve never thought about. I’ve got my head in code. The last 25 years.

I hadn’t thought about running a company and what’s involved, so I had to learn quite quickly.

Okay, well, I guess that’s one of the interesting.

Another question.

Are your VC backers helping with that part of it or are you having to learn the running a company on your own?

They are helping. They’re quite hands on, but it’s complicated by the fact that the funding comes from the US and I’m running a company in the UK.


So there was some complications there, which I had to work through. The US side can’t help me a great deal because they didn’t have much experience with the UK side. So there’s lots of regulation issues and legal issues and accounting issues, but I think I’ve just figured that out.

Nice. Okay, very cool. Well, normally it hasn’t even been a year since you decided to take a year off. Has it? Or has it been about a year?

No, much less than a year. I think it was November.

No, October.

It hasn’t been very long at all.

Okay. Yeah. So normally I would think it’s a startup. Just starting out this last weekend, you finally told everybody what you were doing.

Do you know when we’ll have services available?

Hard to say for certain.

But the kind of web service would probably be the end of the year.

We have the free tier and accounts running because in order to get there, we’ve got to get textual working and it’s got to be slick, easy to use and well documented.

That would be the first month doing, which we’re hoping to get in the second half of the year, maybe from August. We’ll have like 1.0 and then alongside that, work on the web service, then hopefully be tier by the end of the year.

That’s awesome. Okay. And the reason to go public, you said on Twitter that you don’t really like keeping secrets and working in the secret. Is that mostly why?

That’s certainly partially, but I don’t think there’s much benefit in keeping it a secret. And all this time got a whole year, which I could be tweeting about it and blogging about it and getting more interest in it.

I think that is way more beneficial than keeping it secret for entire year. And I don’t think if anyone watching now thought, oh, that’s a great idea. I’ll try replicating that. I don’t think they would catch up.

I don’t think so either. Knowing the pace at which you develop stuff, man, of course you might be slowing down.

If we can get you in more administrative roles and away from the keyboard, the project project might slow down a little bit.

Yeah, I’m trying to avoid that.

I do still love writing code and talking to people that have been in the same position. They do say in a few years you might expect to move away from writing code into more of a kind of a managering position, which I’m not looking forward to. I actually suspect when we get to that position that I would be a CTO, someone else would be the COO chief operating officer and I would be responsible for the code because I think that’s my strengths.

Yeah, well, I don’t know if you have weaknesses, but I think if I were you, you already do ignore everything when people say that’s not the way you do things, because it seems like your way works so far, I guess I don’t know how long, but the last bit of time you guys have been working on CSS, Izing Textile lines. Is that true?

Yeah, we got a solid CSS parser which builds the interface that’s kind of working at the moment, and on top of that it’s got really nice errors.

So if you’ve got some broken syntax or logical error, it will do a rich style and show you the code and the column that’s wrong. And I’ll give you some nice error message and some suggestions on how to fix it because what we’re really building is something that’s super easy to use and helpful.

That’s where we’re focusing our time on. I think if we wanted to get features quickly, we could probably be much further ahead.

But what we’re really aiming for is to make it just super easy to use.

Right. You announced not too long ago about the logging back end so that you can kind of pay attention to the events that are happening. So there’s a log channel to pay attention to if you’re debugging.

That’s right. So it’s kind of strange because when I was building Textile, of course I want to use rich to write out data structures.

I tend to like the kind of style debugging, but you can’t do that in a two because if you write the standard output when you’re rendering interface, then it just messes up the interface and then the next frame, you don’t see the output anymore.

Which always felt really weird because I spent two years working on rich and I couldn’t use it for textual.

So we built this tool called Dev Tools. Basically you run a server in one terminal and then textual talks to it via WebSocket, so you can have a nice log that’s rendering pretty rich style data structures in one window whilst the actual app is rendering another.

Okay, that’s pretty neat. And I like the way that you’re working with this with focusing on the developer experience because you’re using it, your dog Fooding it while you’re building it, and that’s pretty cool. I’d much rather have this be solid and usable than moving faster, I guess. Not that you asked me, but it’s nice to see that the command line gets some attention and also the developer experience. So it’s pretty neat. I think that is something that other people can replicate.

I think a lot of other companies would benefit by slowing down a little bit and focusing on the developer experience.

And I think there are companies doing that and projects and the projects that do that, I think are benefiting because US Nerdy types are the early adopters.

And even if we might not be your cash flow later, we’ll be your advocates, I guess.

Yeah. I think a lot of companies assume that developers are smart and therefore they can put up with interfaces which are a bit clunky and tricky to use and require pouring through documentation.

And I think sometimes that they forget that developers are human beings and they value their time.

If the command line interface can spend a little bit, if you can put a little bit in the face, a little bit time to render nice errors, or to make it elegant to use, I think developers would appreciate that.

Save them time. If you multiply that by all your users, you’ve saved a lot of time for a lot of people.


One of the big benefits of pytest is when an assert happens, it tells you exactly where in the line the problem is.

I think it was Python 310 that had better trace backs with telling you not only in the what line the problem is, but where in the line. And I know that was a lot of work to put in, but there’s a lot of other cool stuff in Python 310. But for developers that’s one of the most exciting things is just helping me just shaving off seconds or minutes of me debugging.

And it’s huge.

I think it adds up when you’re working. You’ve got iteration cycles. You write some code and then you run it, and then you write some code and run it.

If the error message tells you where to fix your code, it can save you like seconds per iteration. But how many iterations do you do in a day can add up depending on what you’re working on to tens of minutes, which might not seem like a lot, but think of it over the course of a year is that a week of time you’ve been given back.

The other thing that really saves, and I think it saves a lot more than that is because I don’t really know where the problem is until I see the first trace back. But when I see the trace back or a lot error message or logging or something, I kind of think I know where the problem might be. And if the error message is clear enough to tell me that it’s not there, it’s somewhere else, then I’ve saved an entire branch of debugging. That would have been fruitless because like print debugging. I’m guilty of that, too. I like it, actually.

It’s mostly because I do a lot of real time stuff that debugging would completely slow down the process. So I want to be able to see things happening in multiple threads and multiple things at a time. So that’s really hard to do with debugging. You kind of have to let it run and then examine the logs after.

But anyway, I might go off and add a bunch of log statements to a part of the code to try to isolate the problem. And that’s not even where the problem is. It’s somewhere else. So that sort of stuff. That was a tangent, though, but I don’t know what else to add, other than I’m Super excited to see where this goes, and I’m excited to see I’m glad that there’s something that’s going to build money around this so that you can keep making textual awesome for all of us open source people.

Yeah, I don’t think I could really do it nearly as well without funding.

I built Rich just as a hobby.

It was like evenings and weekends textual thinking it’s going to need a lot more time to do it justice.

This is a fantastic marriage of open source and commercial interest, and they don’t work, I think.

And that’s great on the commercial side, or just the textual in a web browser Where’s a model or that works. Well, I mean, why would I do that other than just do an application like a regular web application?

Well, it kind of is a regular web application when you build a textile app that’s running in the browser, just like a little bit retro, perhaps because it’s not a grid of characters, but you’ll be super comfortable with it. You don’t have roll bars and menu items. So I see it as just an alternative way of creating web applications that also happen to be and we can also make them installable to the desktop as you can build them as a progressive web application.

You click an icon in the title bar, then it installs into your home screen, effectively making a desktop application as well. So that you got like three classes of application. You’ve got three Web application and desktop application, and that’s a single source based.


There’s a lot of places within coding where the retro look or something is not even a downside. It’s a benefit.

But like, I’m thinking dashboards or monitoring whatever.

Yeah, it worked fine for places like things like that.

But is that mostly the target or do you know? I guess you don’t really know.

Can’t be certain what people are going to use it for, but I think it’s very good for stuff that updates in real time.

Tables and numbers is very good at log files, is very good at it’s very good for editing data.

If you imagine on a Web server, you might have a bunch of configuration files and you run a few commands on them previously, you might SSH into that box, navigate to the path, run Bi on the editor, save it, and then launch command.

If you imagine a textile app which has all those figuration files listed, you click on it brings up the editor, you can edit it, and then you got a button to lint it and a button to restart process or something.

That’s one use case. It’s like figuring boxes.

Okay, so the sysadmin stuff with a lot of that.

Yeah. And you can install it on multiple servers.

So you could have essentially a cluster of textual apps. And we’re going to build a UI that allows you to list multiple textile apps. You can even put on a map and show you where they are physically.

You click on one of those boxes, it brings up the text lap, and then you can interact with it and restart a server and then click on next one.


There’s quite a lot of applications around that kind of like DevOps admin kind of thing.


Now, so if anybody is curious for following along with what’s going on with textual enrich, I encourage people to follow Python bites because we cover it a lot.

But actually, you’ve got your new website just textualize IO. Is that correct?


That’s right. Yeah. It’s kind of a jumping off point for our projects.

It links the docks and got a Gallery for rich and textual.

Because one of the things I noticed was I was losing track of all the projects which used rich in particular.

So on our website, we’ve got a Gallery which lists them all, and you can tag them for particular topics.

Okay. And with all the excitement around rich and textual, I think getting in the Gallery is a pretty decent way to get noticed by everybody else.

If you guys are working on a rich project and they can submit a PR, once a merge, it gets built automatically, and then your content is on the Gallery.

Nice. Cool.

Well, anything else you want to shout out before we wrap it up?

Nothing off the top of my head.

Okay. Well, I’m excited to keep up.

Thanks for talking with us. And we’ll keep watching to see what cool things you’re up to.

Thanks again. Well and also I probably have called you rich occasionally on the podcast.

I did once. I forgive you. I can see how you.

But also you often hang out.

I don’t know if you’ll do this in the future because you’re probably busy but you often show up in the chat on Python Bites.

I do. Yeah. I mean, it’s on just after dinner in the UK time I sit down to Python bites.

Nice. Well, you’ve noticed other people may have not noticed yet. We’ve kind of shifted to Tuesday nights in the US. It’s afternoon but we do at noon Pacific.

But anyway, so textualize IO and then also on there there’s links to your Twitter account and actually Textualized Twitter account and other things.

Cool. Well, I guess. Good luck. Thanks a lot.

Thank you. It’s been a pleasure.

Thank you, Will, I’m excited to see where you take Textual and textualize. Thank you, Rollbar with rollbar developers deploy better software faster learn more at rollbar.com and thank you for listening. Links to everything we talked about today are in the show notes at testandcode.com. Now go out and remember to have some fun while coding.