We have a new #blog to replace the constantly-out-of-date News and Updates section of our homepage! Now you can follow us on #RSS and find all of our updates in one centralized place instead of scattered all over social media!
The early Web had a quality that has been lost ever since: it was simple
Download #httpd , #netscape write some #html by hand and boom, the concept of a networked digital society is born.
It first started going pear shaped with #LAMP . The complexity of a full blown database was not justified for most use cases. As proven decades later by the popularity of #sqlite and #ssg approaches.
The final blow was when #bigtech got into the act. Immense complexity for the simplest things became a moat
@openrisk This is why I bit the bullet and started on Kitten instead of just building a peer-to-peer social web app and some means of deploying it… if we want a different web, we’re going to have to simplify the stack (at least those parts that are feasible to).
🥳 JavaScript Database (JSDB)¹ version 7.0.0 released
Breaking change JSTable.PERSIST event now uses a parameter object with properties for type, keypath, value, change, and table. This should make listening for events on your databases much nicer to author. e.g., a snippet from Catalyst² I’m working on:
const settingsTable = db.settings['__table__']
const JSTable = settingsTable.constructor
settingsTable.addListener(JSTable.PERSIST, ({ keypath, value }) => {
switch (keypath) {
case 'servers.serverPoolSize':
console.info('New server pool size requested', value)
this.updateServerPool()
break
// etc.
}
})
This new version of JSDB is not in the latest Kitten³ yet as it is a breaking change and I want to make sure I update my sites/apps first if needed. I should have it integrated tomorrow.
To see the simple use case for JSDB in Kitten (the default untyped database that’s easy to get started with and perfect for quick experiments, little sites, etc.), see: https://kitten.small-web.org/tutorials/persistence/
> "Many personal website owners
deliberately choose inefficient methods
for updating their sites. They write
HTML by hand, upload files directly
via FTP, or maintain static sites that
require manual intervention for even
simple changes. These choices would
be considered backwards in a
professional context, but they serve
important psychological and creative
functions"
so i'd love an open discussion about something that i don't have much vocabulary for, if only because there are so few examples of it on the world wide web. anyone/everyone is welcome to chime in.
back in the mid/late 90s there were some attempts at turning web forums and chat interfaces into virtual worlds. beyond all of the 3d chat rooms and telnet muds, there were some 2d graphical sites like moo.ca. The Canada SchoolNet moo was a mud/moo that allowed users to add/remove/modify rooms in real time, in-browser.
Furcadia went a hundred steps further and integrated a 2d tile-based world with a world editor and script editor, so you could build your own "dreams" (multiplayer instances) within the shared game world. the entire game was built around socialization.
both of the above games are not just fancy web chat terminals. building and decorating the game world is a critical part of the social experience. you create a dining room, put chairs in it, program the chairs to allow players to use the 'sit' command, and then invite people into your dining room for a make-believe dinner party.
we now have reddit and various web forums. they're effectively the same threaded conversation that has been around since the usenet days.
what i don't see anymore are graphical WWW virtual worlds built around socialization. we either lock down everything and only allow chat. are there web-based MUDs/MUSHes/MOOs that allow for both world building and conversation?
A screenshot from the Furcadia client for Windows 95. It shows a furry character walking through a tile-based world composed of trees and roads.
Below there is a MUD-style status window showing text describing the world and its rules. To the left is the character's portrait, as well as buttons for navigating through menus.
The built-in database backup and restore feature in Kitten¹ (that actually works and is in the Kitten Settings section of every Kitten app) just saved my ass (again) :)
This will restore your Small Web place from a full backup of your data. That includes your internal database (so your identity, secret, etc.) as well as the app database and uploads (if any).
Label: Data backup file (.kitten.data.tar.gz)
File upload control: [Choose file] button. No file chosen
Restore button
Just a reminder! If you are looking RSS starter packs, The RSS Review has downloadable OPML files for each category. They can be imported directly into your feed reader to subscribe to the entire category at once.
Added information on HTML, CSS, and Markdown Fragments to the Kitten Components and Fragments tutorial, including a little TypeScript type declarations file you can add to your projects so you don’t get type warnings for them when you import them in your projects:
Hah… just noticed something interesting that looks like it’s going to be another advantage to Web Numbers¹… look at these Kitten² screenshots and tell me if you can spot something unexpected.
Hint: it’s what’s missing.
There are no 404 errors for common hack attempts trying to exploit WordPress vulnerabilities, etc. In fact, it’s entirely quiet. Because those folks watch DNS :)
A talk I gave six years ago that I’d highly urge you to watch. Still entirely relevant today, if not more so (sadly).
(What I call the Indienet in the talk is what I now call the Small Web; a peer-to-peer Web owned and controlled by people not corporations or governments.)
Here’s me talking about why I’m building what I’m building from back then (“Ethical Technology or Feudalism?”), back when I was calling the Small Web the Indienet (and we were Ind.ie, before we were Small Technology Foundation):
• Auto Encrypt 5.1.0: Moves automatic IP address detection from top-level await to asynchronous createServer() method to enable servers that import to run offline when they’re running on localhost) and exports IPAddresses class so servers can carry out their own automatic IP address detection (IPv4 and IPv6) if they want full control over exactly which domains and IP addresses are included in provisioned TLS certificates.¹
• @small-tech/https: Re-exports IPAddresses class so servers (like Kitten²) can have full control over exactly which domains and IP addresses are included in provisioned TLS certificates.³
These releases bring short-lived certificates, IP Address (IPv4 and IPv6) support, and ACME Renewal Information (ARI) support to Auto Encrypt and @small-tech/https, implement a consistent asynchronous API across all three packages, and include loads of little fixes and code quality improvements.
This brings us very close to getting Web Numbers¹ support implemented natively in Kitten².
OCSP support is removed from Auto Encrypt and Windows support is dropped from all three packages as Microsoft is complicit in Israel’s genocide of the Palestinian people³ and Small Technology Foundation⁴ stands in solidarity with the Boycott, Divestment, and Sanctions (BDS) movement. Furthermore, Windows is an ad-infested and surveillance-ridden dumpster fire of an operating system and, alongside supporting genocide, you are putting both yourself and others at risk by using it.
So, going forward, Auto Encrypt¹, Kitten², and Catalyst³ will be seamlessly (automatically; with zero config) supporting Web Numbers⁴ (IPv4, IPv6), and, of course, should you want to point one at your server for old time’s sake, legacy domain names too.
I still have some dev to do on this on the Kitten side of things but I’m hugely excited about being able to remove another centralised component – DNS – from the Small Web⁵ (peer-to-peer, personal web) as we inch nearer to making it available this year to everyday people who use technology as an everyday thing.
The release of version 1.1.0 deprecates and removes support for this small module that normalised hostname reporting between Linux/macOS and Windows.
We no longer support Windows as Microsoft is complicit in Israel’s genocide of the Palestinian people¹ and Small Technology Foundation² stands in solidarity with the Boycott, Divestment, and Sanctions (BDS) movement³.
Windows is an ad-infested and surveillance-ridden dumpster fire of an operating system and, alongside supporting genocide, you are putting both yourself and others at risk by using it.
When supporting Linux/macOS, just use the built-in os.hostname() method which works the same way on both platforms.
🥳 @small-tech/auto-encrypt-localhost version 9.0.1 released
Automatically provisions and installs locally-trusted TLS certificates for Node.js https servers (including Polka, Express.js, etc.) Unlike mkcert, 100% written in JavaScript with no external/binary dependencies. As used in Kitten¹
• Windows is no longer supported as Microsoft is complicit in Israel’s genocide of the Palestinian people¹ and Small Technology Foundation² stands in solidarity with the Boycott, Divestment, and Sanctions (BDS) movement³. Windows is an ad-infested and surveillance-ridden dumpster fire of an operating system and, alongside supporting genocide, you are putting both yourself and others at risk by using it.
Auto Encrypt Localhost is similar to the Go utility mkcert but with the following important differences:
It’s written in pure JavaScript for Node.js.
It does not require certutil to be installed.
It uses a different technique to install its certificate authority in the system trust store of macOS.
It uses enterprise policies on all platforms to get Firefox to include its certificate authority from the system trust store.
In addition to its Command-Line Interface, it can be used programmatically to automatically handle local development certificate provisioning while creating your server.
Auto-Encrypt Localhost is licensed under AGPL version 3.0.
The weirdest part of self-hosting isn't the control, it's the silence.
I logged into my dashboard tonight via the tunnel. No banner ads. No
"suggested content" algorithms designed to doomscroll me. No tracking pixels firing off to a data broker in Utah, lol.
Just my tools, sitting there, waiting.
We really forgot what the internet feels like when it isn't trying to extract value from us every single second. It’s quiet here. I like it. #digital#minimalism#selfhosted#SmallWeb#AdFree
Just added Web Reachability API (at least that’s what I’m calling it) support to https://ip.small-web.org.
It’s for testing the reachability of your Small Web servers (using a domain or, more importantly, an IPv4/IPv6 address). I’m using it to implement Web Numbers¹ support in Auto Encrypt² and Kitten³.
Protocol:
• At https://ip.small-web.org/reach/an empty HTTP 200 response that includes the following custom header: 'web-reachability-id': ‘<uuid>'
• Hit: https://ip.small-web.org/reach/<endpoint>/<uuid>/
• If you get a 200 response back, your endpoint is reachable. Anything else signals an error.