Caffeine is a livecoding environment for web browsers, Deno, and WebAssembly. After adding it to a webpage, you can use it to make live persistent changes to that page and other pages running Caffeine, without reloading.
You can interact with Caffeine from JavaScript in several ways:
- as a headless Web Worker, with which you post and receive messages (you are responsible for all DOM manipulation).
- as an IDE in a headful IFrame, with Caffeine able to manipulate the DOM directly.
- on a headless Deno server, with which you also exchange messages (over a WebSocket).
- through a headful DevTools panel IDE, using the Chrome Debugging Protocol to manipulate every page your browser is running.
Caffeine's underlying computation engine is SqueakJS, an open-source Smalltalk, assisted by dynamically-generated WebAssembly. It features a bi-directional JavaScript bridge, enabling Smalltalk methods to send messages to JavaScript objects, and provide Smalltalk block closures as JavaScript promises or callback functions. Caffeine includes the Epigram parser and compiler framework, with which I have written compilers for Smalltalk, SVG, Protocol Buffers, and WebAssembly.
Caffeine has support for Squeak, Pharo, Cuis, 3D VR (via A-Frame and OSC), zooming 3D presentations (via impress.js), VueJS, WebMIDI, Observable, Web Workers, DevTools and many other JS frameworks.
You can read more about the design of Caffeine, and new features, at my blog, https://thiscontext.com. Check out the teaser trailer on YouTube.
This repository is the content for the Caffeine website, caffeine.js.org. It provides these endpoints:
| ------------------------------------------------- | ---------------------------- |
| / | this page |
| /spa | Caffeine on a single-page-application site |
| /worldly | Worldly, an A-Frame-powered in-world virtual reality livecoding space |
| /minimal | a minimal object memory |
| /talk | an impress-powered presentation about Caffeine and livecoding |
| /developer | a developer-oriented overview of Caffeine, with a tutorial for developing with it |
| /beatshifting | Beatshifting :: Play Music in Sync and Out of Phase |
| /pharo | a demo of Pharo 7 |
| /cuis | a demo of Cuis |
| /tabulator | a tabs-management app, with a VueJS user interface |
| /files | a listing of the files Caffeine has stored in your web browser's cache. You can download files from it, and drop new files into it. |
There are issues and projects to follow; please do! Current activity is focused on making Caffeine a productive in-world VR livecoding environment, and deploying livecoded WebComponent-based web apps.
Craig Latta
[Black Page Digital](http://blackpagedigital.com)
Amsterdam :: San Francisco
[@[email protected]](https://mastodon.social/ccrraaiigg)