-
Notifications
You must be signed in to change notification settings - Fork 29
Home
Welcome to the Scarpe wiki!
Scarpe is a reimplementation of Shoes using Webview and a modular backend. Shoes is a friendly little Ruby-based API. It's designed to make UI apps, full of windows and lists and text, in the same way that Ruby on Rails is designed to make web applications that run on a server and use a browser.
- Nick Schwaderer gave a great introduction to Shoes and Scarpe at Brighton Ruby 2023
"Where do I start? What's a good first issue?" Glad you asked!
Some eternal good first issues:
- Write tests!
- Write applications!
- Get examples to work!
- Write documentation!
- Fix bugs! - for this you can jump right in or check the good first issue tag
Eventually you can get into all kinds of interesting things. Make progress on getting Hackety-Hack running? Write a new display service? Get a new platform working? Make progress in a major direction? Up to you.
Video walkthrough of the Scarpe code, Sept 2023
There are lots of pieces of Scarpe, including Scarpe, Lacci and Scarpe-Components. What are those?
Scarpe is a project to reimplement Shoes, and also a Webview-based display service. Lacci is the name of the display-independent Shoes DSL that was created as part of all this. There's also Scarpe-Wasm, a Webassembly-based display service that relies on Lacci, but not on Scarpe-the-Webview-display-service. Frankly, we need a better name for Scarpe overall, or else for the Webview display service.
There are a lot of common, reusable components in Scarpe. For instance, there's no reason another display service couldn't use the same modular logger as in Scarpe-Webview, or the same simple printout logger from Scarpe-Wasm. Scarpe-Webview and Scarpe-Wasm share a lot of common pieces, such as the Ruby-based HTML-rendering DSL and the YAML-based segmented file format. These common reusable components are included in Scarpe-Components. That way a display service can include Scarpe-Components, choose which pieces to use and require the appropriate gems to make them work. Lacci and Scarpe-Components are kept intentionally very low in dependencies so that a display service can use just a few pieces from them without depending on gems with native extensions or library dependencies like Nokogiri or Bloops.
"Scarpe" means "shoes" in Italian, while "lacci" means "laces" or "shoelaces." "Scarpe-Components" is ancient Etruscan for "spiders" (no, not really.)
While most Scarpe-Components are fairly small and straightforward, Calzini is a complex HTML renderer with more interesting pluggability.
Why Shoes? Why Scarpe? Why _why?
Local Scarpe-Webview has CatsCradle, a testing method based on using Fibers, so we get what looks like linear control flow, but actually it constantly stops to run the Webview event loop so that it can dispatch Javascript. This is much easier to use. It's also the basis of the Webview implementation of Shoes-Spec.
Scarpe-Wasm also has a local test implementation, but it's mostly testing the packaging code, not so much the actual GUI-app functionality.
We're working on Shoes-Spec, a testing API suitable for any display service. It currently runs just a few tests in both Scarpe-Webview and Scarpe-Wasm.
Scarpe-Webview had an older evented testing library. People couldn't use it. It didn't work well. It wasn't very stable. It's gone now.
This includes older Shoes API research, things that are true in some Shoes implementations but not others, and of course also things that are broadly true including in Scarpe.
-
The Shoes API as we understand it
-
Shoes Classic contained Bloopsaphone and various other not-visual-UX APIs
- Possible Libraries/Platforms
- For underlying libraries: Layout and Vector APIs
- We probably need a Display Server eventually - some notes on why and what that would mean
Some features are going to require a ton of infrastructure and build-up. We're not supporting them yet, and probably won't for some time. Here's where we can dump design notes, research, early work toward them, etc. as we build in that direction.
- Packaging - including for multiple platforms