Thanks

What Quillo is built on

Quillo is one binary, but not one piece of work. It speaks the web's protocols and formats, which people thought of and wrote down over fifty years; the way its routes, groups, patterns and pipelines are written was seen in other languages and frameworks first; the whole idea, one language for a web app, was tried before by others, who are named here too; inside it are 40 Rust crates, each written and kept by people who share it; around it, databases, a code generator, a browser and a runtime for its tools; and on this site, fonts and a map. This page names them. The list of crates is made from Quillo's own Cargo.toml, so it follows the code.

The web itself

Before any crate, the ideas: the protocols, formats and standards Quillo speaks, and the people who thought of them and wrote them down.

IdeaByIn QuilloWritten down at
The web, HTTP and URLsTim Berners-Lee at CERN, 1989 to 1991; HTTP/1.1 by Roy Fielding, Henrik Frystyk Nielsen and others at the IETFwhat a Quillo program speaks: requests, answers, addresses, keep-alive, chunked bodiesIETF RFC 9110 and RFC 3986
HTMLTim Berners-Lee; the living standard by the WHATWG, Ian Hickson and otherswhat pages are made of; Quillo's HTML literals are HTMLWHATWG HTML
CSSHåkon Wium Lie and Bert Bos, 1994 to 1996; the W3C CSS working groupa component's style, scoped, and the sheets a page getsW3C CSS
JavaScriptBrendan Eich at Netscape, 1995; ECMAScript by Ecma TC39what components compile to, and run as in the browserECMA-262
JavaScript engines and the DOMV8 by Lars Bak and the team at Google; SpiderMonkey by Brendan Eich and Mozilla; JavaScriptCore at Apple; the DOM by the W3C and the WHATWGwhat runs a component in the browser, and the document it changesWHATWG DOM
JSONDouglas Crockford, who wrote it down in 2001every API answer, every call to the server, the island's stateECMA-404 and RFC 8259
CookiesLou Montulli at Netscape, 1994sessions, signedIETF RFC 6265
WebSocketsIan Hickson at the WHATWG; Ian Fette and Alexey Melnikov at the IETFlive data and --watch reloads reaching open pagesIETF RFC 6455
Server-sent eventsIan Hickson at the WHATWGevents(), a stream of updates a page listens toWHATWG HTML, section 9.2
QUIC, HTTP/3 and WebTransportJim Roskind at Google, then the IETF QUIC working group; WebTransport by Victor Vasiliev and the W3Cchannels and media over datagrams and streamsIETF RFC 9000 and RFC 9114; W3C WebTransport
TLSSSL by Taher Elgamal and Kipp Hickman at Netscape; TLS by Tim Dierks, Christopher Allen and Eric Rescorla at the IETFevery connection Quillo makes to a database or another serverIETF RFC 8446
SQLDonald D. Chamberlin and Raymond F. Boyce at IBM, 1974what db.query and the rest speakISO/IEC 9075
TCP and UDPVint Cerf and Bob Kahn, 1974; UDP by David P. Reed, 1980the server's connections, and udp.listen and udp.sendIETF RFC 9293 and RFC 768
Unicode and UTF-8Joe Becker, Lee Collins and Mark Davis for Unicode; UTF-8 by Ken Thompson and Rob Pike, 1992every string, counted in charactersThe Unicode Standard; IETF RFC 3629
DEFLATE and gzipPhil Katz; gzip and zlib by Jean-loup Gailly and Mark Adlertext answers, compressedIETF RFC 1951 and RFC 1952
SHA-2 and HMACSHA-2 by the NSA, published by NIST; HMAC by Mihir Bellare, Ran Canetti and Hugo Krawczyk, 1996crypto.sha256, crypto.hmac, and the signatures on sessions and calls between servicesFIPS 180-4; IETF RFC 2104
Argon2Alex Biryukov, Daniel Dinu and Dmitry Khovratovich, 2015, winner of the Password Hashing Competitioncrypto.hash_passwordIETF RFC 9106
Regular expressionsStephen Cole Kleene, 1951; in software by Ken Thompson, 1968; JavaScript's dialect by Ecma TC39re.test and the rest, the same on the server and in the browserECMA-262, RegExp
MarkdownJohn Gruber with Aaron Swartz, 2004; CommonMark by John MacFarlane and others, 2014markdown(), and the docs you are readingCommonMark
cronKen Thompson in Version 7 Unix, 1979; the five fields as most know them by Paul Vixie, 1987schedule("@daily", ...) and the fields it readsVixie cron's crontab(5)
kqueue, epoll and inotifykqueue by Jonathan Lemon for FreeBSD, 2000; epoll by Davide Libenzi for Linux, 2002; inotify by John McCutchan, 2005the event loop over every connection, and the watcher told of a saved fileFreeBSD and Linux manual pages
Source mapsJohn Lenz at Google and Nick Fitzgerald at Mozilla, the version 3 proposal, 2011a breakpoint in a .qwe file, set from the browser or an editorThe Source Map specification, now at TC39
The Language Server and Debug Adapter ProtocolsMicrosoft, with Red Hat and Codenvy, 2016quillo lsp and quillo dap: completion, diagnostics, breakpoints and stepping in any editorLSP and DAP specifications
OpenAPITony Tam, as Swagger, 2011; the OpenAPI Initiative under the Linux Foundationquillo docs and --describe: a program's API, written downOpenAPI 3
JSXJordan Walke and the React team at Facebook, 2013the shape of Quillo's HTML literals: markup in code, expressions in bracesThe JSX specification
IslandsKatie Sylor-Miller, who named them, and Jason Miller, who wrote them up, 2019 to 2020how a page is served whole and its components wake where they standJason Miller's essay

Ideas, and where they were seen before

How a route, a group, a pattern or a pipeline is written in Quillo did not start here. Each line names the people who wrote it that way first, and where to read it.

In QuilloSeen before inWhat it looks like here
A route as a line of the programSinatra, by Blake Mizerany, 2007: get '/hi' do ... endroute GET /hi = ..., the method and the path as syntax, the body as the answer
Typed path parametersRuby on Rails, by David Heinemeier Hansson, 2004, with constraints on a segment; Sinatra's :name:id(int) in a route, converted and refused before the body runs
Request patternsPattern matching in function heads, from Erlang by Joe Armstrong, Robert Virding and Mike Williams, and Elixir by José Valim; Phoenix's router and Plug, by Chris McCord{ query, form, json, headers } after a route's path: the request's shape decides which route answers, and binds its names
Middleware as a chain the request passes throughRack, by Christian Neukirchen, 2007; Connect and Express, by TJ Holowaychuk, 2010request | auth.required | ..., and a group's | signed_in | admins: each stage gives the request back or answers in the route's place
Route groups with a prefix, middleware and a hostLaravel, by Taylor Otwell, 2011: Route::prefix()->middleware()->group() and Route::domain()routes /admin | signed_in { ... } and routes /api { headers: { host: ... } } { ... }, nested
Ending the request from anywhereSinatra's halt; Rails' render ... and returnreply 404 { error: ... } in a helper, a pipeline stage or a ?? fallback
PipelinesUnix pipes, by Doug McIlroy, 1973; the |> of F#, by Don Syme, and of Elixir, by José Valimxs | map(f) | filter(g): the value on the left goes in as the first argument
Errors as values, passed on with ?Rust's ? and Result, by the Rust Project, 2016; Go's errors as values, by Rob Pike, Robert Griesemer and Ken Thompsonerr(...), is_err, and ? after a call that returns the error from the function it is in
Fine-grained reactivitySolidJS, by Ryan Carniato, 2018; Svelte 5's runes, by Rich Harris; Knockout's observables, by Steve Sanderson, 2010state, and the lets, views and elements that follow what they read, each updated on its own
Effects a function declaresKoka's effect types, by Daan Leijen, 2014; Unison's abilitiesfn load(id) with db = ...: what a function may do besides compute, checked where it is called
Records with defaults, checked at the edgesTypeScript, by Anders Hejlsberg and Microsoft, 2012; Zod, by Colin McDonnell, 2020; pydantic, by Samuel Colvin, 2017type User = { ... } and User(request.json): the shape of the data said once, checked on the way in
Calling the server like a functionMeteor's methods, by the Meteor Development Group, 2012; Server Functions in React and Next.js, by Meta and Vercelserver fn, called from a component as if it were local, awaited by the compiler

Those who tried it before

Quillo's bet, one language for the whole of a web app, is not new. These people made it before: some as research, some as companies, some still going and some stopped. Each showed a part of what the idea can be, and what it costs. Quillo tries it again on their work.

ProjectByWhat they tried
PHPRasmus Lerdorf, 1994 to 1995, as Personal Home Page Toolsthe page and the code in one file, the server's answer written where the HTML is
ColdFusionJ.J. and Jeremy Allaire, at Allaire Corporation, 1995a language of the page's own tags, with the database query in the page
HopManuel Serrano, Erick Gallesio and Florian Loitsch at Inria, 2006; later with Gérard Berryone language and one platform for the server and the browser: multitier programming
LinksEzra Cooper, Sam Lindley, Philip Wadler and Jeremy Yallop at the University of Edinburgh, 2006web programming without tiers: one source for the server, the browser's JavaScript and the database's SQL
Google Web ToolkitBruce Johnson and Joel Webber at Google, 2006one language on both sides: the browser's code compiled from Java, and calls to the server as typed interfaces
WebDSLDanny Groenewegen, Zef Hemel, Lennart Kats and Eelco Visser at TU Delft, 2008data, pages, access control and validation in one language, with a checker that holds them to each other
ArcPaul Graham and Robert Morris, 2008a Lisp with a web server inside, small enough to write Hacker News in
Ur/WebAdam Chlipala at MIT, 2010one statically typed program for the server, the browser and SQL, checked whole, so that a link, a form or a query cannot go wrong at run time
OpaHenri Binsztok and MLstate in Paris, open source in 2011a language that was also its own web server and database
ElmEvan Czaplicki, 2012a language made for the browser, with no runtime exceptions and compiler messages written to teach
EveChris Granger, Rob Attorri, Jamie Brandon, Corey Montella, Josh Cole and Eric Hoffman, 2014 to 2018programming rethought from the ground up, the language and its environment as one; the team stopped in 2018, and wrote down what it learned
ImbaSindre Aarsaether, public in 2015a full-stack language for the web, with markup as syntax, compiled to JavaScript
EliomVincent Balat, Jérôme Vouillon, Gabriel Radanne and the Ocsigen project at Université Paris Diderot, as a core language in 2016tierless OCaml: the server's and the browser's code in one file, typed together
MintGusztáv Szikszai, from 2018components, styles, routes and state as parts of the language, not of a framework
DarklangEllen Chisa and Paul Biggar, unveiled in 2019the language, the editor and the hosting as one, with no deploy step to think about
WaspMatija and Martin Šošić, 2020a small language that says what a full-stack app is (its routes, pages, auth and data), beside the code that does it

Foundations

ProjectByWhat it does for QuilloLicence
Rustthe Rust Project and its contributorsthe language Quillo is written in, and the compiler and cargo that build itMIT OR Apache-2.0
SQLiteD. Richard Hipp and the SQLite teamthe database a Quillo program starts with, bundled in every buildPublic domain
PostgreSQLthe PostgreSQL Global Development Groupthe database for programs that outgrow one machinePostgreSQL License
MySQL and MariaDBOracle, and the MariaDB Foundationthe other databases `db` speaks toGPL-2.0
mimallocDaan Leijen and Microsoft Researchthe allocator on Quillo's loop and waiting threadsMIT
Craneliftthe Bytecode Alliancethe code generator behind compiled numbersApache-2.0 WITH LLVM-exception
CommonMarkJohn MacFarlane and the CommonMark groupthe Markdown `markdown` readsCC-BY-SA 4.0
The IANA time zone databasePaul Eggert and its contributorsevery time zone `date` knowsPublic domain
Chromiumthe Chromium authorsthe browser Quillo's tests and this site's checks drive, headlessBSD-3-Clause
Node.jsthe OpenJS Foundation and its contributorsthe tools beside Quillo: the reference's harness, the repros' runnerMIT

Inside Quillo 0.6.0

Every crate Quillo depends on directly, as cargo metadata reports it. The crates these bring in turn, a few hundred, are listed in Quillo's Cargo.lock.

CrateByWhat it does for QuilloLicence
argon2 0.5.3RustCrypto Developerscrypto.hash_passwordMIT OR Apache-2.0
bytes 1.12.1Carl Lerche, Sean McArthurbuffers shared between the loop and the waiting threadsMIT
corosensei 0.3.4Amanieu d'Antrasa coroutine for each request, with a stack of its ownMIT OR Apache-2.0
cranelift-codegen 0.134.4The Cranelift Project Developersnumeric functions compiled to machine codeApache-2.0 WITH LLVM-exception
cranelift-frontend 0.134.4The Cranelift Project Developersthe same: building the codeApache-2.0 WITH LLVM-exception
cranelift-jit 0.134.4The Cranelift Project Developersthe same: running itApache-2.0 WITH LLVM-exception
cranelift-module 0.134.4The Cranelift Project Developersthe same: its modulesApache-2.0 WITH LLVM-exception
cranelift-native 0.134.4The Cranelift Project Developersthe same: for the machine it runs onApache-2.0 WITH LLVM-exception
ctrlc 3.5.2Antti Keränenstopping cleanly on Ctrl-C and on a signalMIT/Apache-2.0
fastrand 2.5.0Stjepan Glavinarandom, random_int and uuidApache-2.0 OR MIT
flate2 1.1.10Alex Crichton, Josh Triplettgzip for text answersMIT OR Apache-2.0
getrandom 0.4.3The Rand Project Developersrandomness from the system, for keys and tokensMIT OR Apache-2.0
httparse 1.10.1Sean McArthurreading HTTP requestsMIT OR Apache-2.0
image 0.25.10The image-rs Developersimage.info and image.convertMIT OR Apache-2.0
indexmap 2.14.2maps that keep their keys in the order writtenApache-2.0 OR MIT
jiff 0.2.38Andrew Gallantdates and time zones, with the IANA database bundled where the system has noneUnlicense OR MIT
libc 0.2.190the system's own calls where Rust's library has none: file events, waiting on a slow clientMIT OR Apache-2.0
libloading 0.8.9Simonas Kazlauskasloading the Rust a program writes in .qwer filesISC
libmimalloc-sys 0.1.49Octavian Oncescumimalloc, the allocator on the loop and the waiting threadsMIT
mio 1.2.4Carl Lerche, Thomas de Zeeuw, Tokio Contributorsthe event loop: one thread over every connection, with kqueue on macOS and epoll on LinuxMIT
muda 0.21.2the macOS menu bar, for copy and paste in the windowApache-2.0 OR MIT
mysql_async 0.37.1blackbeamMySQL and MariaDB for dbMIT OR Apache-2.0
postgres 0.19.14Steven FacklerPostgreSQL from scripts and jobsMIT OR Apache-2.0
psm 0.1.32Simonas Kazlauskasswitching stacks for those coroutinesMIT OR Apache-2.0
pulldown-cmark 0.12.2Raph Levien, Marcus Klaas de Vriesmarkdown, CommonMark with tables and task listsMIT
regex 1.13.1The Rust Project Developers, Andrew Gallantre, with patterns that match as JavaScript's doMIT OR Apache-2.0
rusqlite 0.32.1The rusqlite developersSQLite, bundled, the database a program starts withMIT
rustls 0.23.46TLS, in RustApache-2.0 OR ISC OR MIT
rustls-native-certs 0.8.5the operating system's own root certificates, when askedApache-2.0 OR ISC OR MIT
serde_json 1.0.154JSON, read and written exactlyMIT OR Apache-2.0
sha2 0.11.1RustCrypto Developerscrypto.sha256 and crypto.hmacMIT OR Apache-2.0
stacker 0.1.25Alex Crichton, Simonas Kazlauskasroom on the stack for deep recursionMIT OR Apache-2.0
tao 0.37.1Tauri Programme within The Commons Conservancy, The winit contributorsthe window itselfApache-2.0
tokio 1.53.3Tokio Contributorsthe threads that wait on databases and the network while the loop goes onMIT
tokio-postgres 0.7.18Steven FacklerPostgreSQL, with queries pipelined on shared connectionsMIT OR Apache-2.0
tokio-postgres-rustls 0.13.0Jasper HugoTLS to PostgreSQLMIT
ureq 2.12.1Martin Algesten, Jacob Hoffman-Andrewsthe HTTP client behind http.* and servicesMIT OR Apache-2.0
webpki-roots 1.0.11the root certificates browsers trust, for connections Quillo makesCDLA-Permissive-2.0
wry 0.57.0Tauri Programme within The Commons Conservancyquillo app: the program in a native windowApache-2.0 OR MIT
wtransport 0.7.2Biagio Festachannels and media over WebTransportMIT OR Apache-2.0

And for the tests only:

CrateByWhat it doesLicence
rcgen 0.14.10certificates for the tests of TLS to databasesMIT OR Apache-2.0

On this site

ProjectByWhereLicence
Instrument SerifRodrigo Fuenzalida and Jordan Egstadthe headingsOFL-1.1
InterRasmus Anderssonthe textOFL-1.1
JetBrains MonoJetBrainsthe codeOFL-1.1
LeafletVolodymyr Agafonkin and contributorsthe map in the MapView component, loaded on its pageBSD-2-Clause
OpenStreetMapthe OpenStreetMap contributorsthe map tiles MapView showsODbL
cdnjsCloudflare and the cdnjs communitywhere that page fetches Leaflet fromMIT
GitHubGitHub, Inc.where Quillo, the components, the plugins and this site are kept, and sign-in for comments and samples

Quillo itself is MIT licensed. If you made something here and want it named differently, or something is missing, say so on Discord or in an issue on GitHub.