index.html 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367
  1. <!doctype html>
  2. <html lang="en-nz">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1">
  6. <title>Developer — Astrologue</title>
  7. <meta name="description" content="Astrologue builds its own foundations in Vala. The eleven libraries that power the operating system — collections, database, web stack, cryptography, intelligence, packaging — are free software, available to every developer.">
  8. <meta name="color-scheme" content="light dark">
  9. <meta name="theme-color" content="#f2ebda" media="(prefers-color-scheme: light)">
  10. <meta name="theme-color" content="#0a0a12" media="(prefers-color-scheme: dark)">
  11. <link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Ccircle cx='32' cy='32' r='27' fill='none' stroke='%23a8801f' stroke-width='4'/%3E%3Cpath d='M32 8l6 18 18 6-18 6-6 18-6-18-18-6 18-6z' fill='%23a8801f'/%3E%3Ccircle cx='32' cy='32' r='4' fill='%23003078'/%3E%3C/svg%3E">
  12. <meta property="og:title" content="Developer — Astrologue">
  13. <meta property="og:description" content="The libraries that raise Astrologue, offered to every developer: all Vala, meson-built, USM-packaged, free software.">
  14. <meta property="og:type" content="website">
  15. <link rel="stylesheet" href="../assets/css/style.css">
  16. </head>
  17. <body>
  18. <a class="skip-link" href="#main">Skip to content</a>
  19. <header class="masthead">
  20. <div class="container masthead__inner">
  21. <a class="brand" href="../">
  22. <img class="brand__logo brand__logo--light" src="../assets/img/astrologue-light.png" width="392" height="89" alt="Astrologue">
  23. <img class="brand__logo brand__logo--dark" src="../assets/img/astrologue-dark.png" width="392" height="89" alt="Astrologue">
  24. </a>
  25. <nav class="site-nav" aria-label="Primary">
  26. <ul class="site-nav__list">
  27. <li><a href="../">Home</a></li>
  28. <li><a href="../#news">News</a></li>
  29. <li><a href="../#download">Download</a></li>
  30. <li><a href="./" aria-current="page">Developer</a></li>
  31. <li><a class="nav-cta" href="../#download">Get Astrologue</a></li>
  32. </ul>
  33. </nav>
  34. </div>
  35. </header>
  36. <main id="main">
  37. <nav class="breadcrumb" aria-label="Breadcrumb">
  38. <div class="container">
  39. <ol>
  40. <li><a href="../">Astrologue</a></li>
  41. <li aria-current="page">Developer</li>
  42. </ol>
  43. </div>
  44. </nav>
  45. <section class="page-hero" id="top">
  46. <div class="container">
  47. <div class="hero__copy">
  48. <p class="kicker"><span>The developer's almanac</span></p>
  49. <h1 class="hero__title">
  50. Built in Vala, from the ground up.
  51. <span class="hero__accent">The libraries that raise Astrologue, offered to every developer.</span>
  52. </h1>
  53. <p class="lede">Astrologue builds its own foundations, and it builds them in Vala. The collections and the queries, the database layer, the web stack, the cryptography, the packaging — the eleven libraries that power the operating system are the same ones you can take into your own projects: free to run, study, share and improve.</p>
  54. <div class="hero__actions">
  55. <a class="btn btn--primary" href="#stack">Survey the Web-Stack</a>
  56. <a class="btn btn--ghost" href="#projects">Meet the eleven</a>
  57. </div>
  58. <p class="hero__note">Free software · LGPL-3.0-or-later for the libraries · built with meson, packaged with USM</p>
  59. </div>
  60. </div>
  61. </section>
  62. <section class="band band--plain" id="toolchain">
  63. <div class="container">
  64. <header class="section-head">
  65. <p class="kicker"><span>The working method</span></p>
  66. <h2>One language, one build, one package</h2>
  67. <p class="section-head__intro">Every project in the catalogue keeps the same discipline, so learning one teaches you the next.</p>
  68. </header>
  69. <div class="grid-pillars">
  70. <article class="pillar">
  71. <div class="pillar__body">
  72. <p class="pillar__num">I.</p>
  73. <h3>All Vala</h3>
  74. <p>Every library is written in Vala, from the Enumerable foundation to the HTTP server. Each compiles to C and the GObject ABI and ships its C header and Vala binding, and most add GIR introspection besides — open to other languages, not fenced in.</p>
  75. </div>
  76. </article>
  77. <article class="pillar">
  78. <div class="pillar__body">
  79. <p class="pillar__num">II.</p>
  80. <h3>Proven parts beneath</h3>
  81. <p>Where the ground is hard, the stack stands on battle-tested C: GLib, SQLite, libsodium, GnuTLS, GPGME, libssh, llama.cpp. The Vala libraries contribute the object model and the defaults — not fresh cryptography or a new database engine.</p>
  82. </div>
  83. </article>
  84. <article class="pillar">
  85. <div class="pillar__body">
  86. <p class="pillar__num">III.</p>
  87. <h3>One build, one package</h3>
  88. <p>Eleven projects, one shape: a <code>meson.build</code>, a <code>MANIFEST.usm</code> declaring what a project provides and needs down to individual files, and usm-scripts that build, test, install and package it the same way everywhere.</p>
  89. </div>
  90. </article>
  91. </div>
  92. </div>
  93. </section>
  94. <section class="band band--sky" id="stack">
  95. <div class="container">
  96. <header class="section-head">
  97. <p class="kicker"><span>The Web-Stack</span></p>
  98. <h2>How the pieces align</h2>
  99. <p class="section-head__intro">The request path of an Astrologue web application, as drawn in Spry's own README: each layer leans on the ones beneath it.</p>
  100. </header>
  101. <figure class="stack-map">
  102. <div class="stack-layer">
  103. <p class="stack-layer__name"><a href="astralis/">astralis</a></p>
  104. <p class="stack-layer__role">HTTP request handling</p>
  105. <div class="stack-layer stack-layer--child">
  106. <p class="stack-layer__name"><a href="statum/">Statum</a></p>
  107. <p class="stack-layer__role">pages, slots/state, directives, client JS</p>
  108. <div class="stack-layer stack-layer--child">
  109. <p class="stack-layer__name"><a href="spry/">Spry</a></p>
  110. <p class="stack-layer__role">users, auth slot, actions, guards</p>
  111. <div class="stack-branches">
  112. <div class="stack-layer stack-layer--branch">
  113. <p class="stack-layer__name"><a href="invercargill-sql/">Invercargill-Sql</a></p>
  114. <p class="stack-layer__role">spry_users / spry_user_permissions schema</p>
  115. </div>
  116. <div class="stack-layer stack-layer--branch">
  117. <p class="stack-layer__name"><a href="inversion/">Inversion</a></p>
  118. <p class="stack-layer__role">module + service wiring</p>
  119. </div>
  120. </div>
  121. </div>
  122. </div>
  123. </div>
  124. <figcaption>A request arrives at astralis, becomes a page and a state slot under Statum, and meets users and permissions through Spry — whose schema lives in Invercargill-Sql and whose wiring is done by Inversion.</figcaption>
  125. </figure>
  126. <h3 class="firmament-title">Around the stack</h3>
  127. <div class="firmament">
  128. <div class="firmament__item">
  129. <p class="firmament__name"><a href="invercargill/">Invercargill</a></p>
  130. <p>the collections and queries underneath every layer above</p>
  131. </div>
  132. <div class="firmament__item">
  133. <p class="firmament__name"><a href="locksmith/">Locksmith</a></p>
  134. <p>objects-not-byte-arrays cryptography, wire-compatible with the stack's signed slots</p>
  135. </div>
  136. <div class="firmament__item">
  137. <p class="firmament__name"><a href="vallama/">Vallama</a></p>
  138. <p>local LLM inference for the applications you build on it</p>
  139. </div>
  140. <div class="firmament__item">
  141. <p class="firmament__name"><a href="usm/">USM</a></p>
  142. <p>the source packaging that carries the stack — and your own projects too</p>
  143. </div>
  144. </div>
  145. </div>
  146. </section>
  147. <section class="band band--plain" id="projects">
  148. <div class="container">
  149. <header class="section-head">
  150. <p class="kicker"><span>The catalogue</span></p>
  151. <h2>Eleven libraries</h2>
  152. <p class="section-head__intro">Grouped by trade. Each card opens onto its documentation: what the library does, how to build and install it, and worked examples from its own source.</p>
  153. </header>
  154. <div class="group-head">
  155. <p class="group-head__num">I.</p>
  156. <h3>Foundations</h3>
  157. <p class="group-head__note">the ground the rest is built on</p>
  158. </div>
  159. <div class="grid-projects">
  160. <article class="project-card">
  161. <div class="project-card__top">
  162. <h3><a href="invercargill/">Invercargill</a></h3>
  163. <span class="project-card__tag">Foundation</span>
  164. </div>
  165. <p class="project-card__summary">The Enumerable library for Vala — LINQ-style querying plus the Vector, Dictionary, Series and buffer data structures the whole stack is written against.</p>
  166. <p class="project-card__meta">
  167. <span>LGPL-3.0-or-later</span>
  168. <a class="project-card__more" href="invercargill/">Documentation&nbsp;→</a>
  169. </p>
  170. </article>
  171. <article class="project-card">
  172. <div class="project-card__top">
  173. <h3><a href="invercargill-json/">Invercargill-Json</a></h3>
  174. <span class="project-card__tag">Foundation</span>
  175. </div>
  176. <p class="project-card__summary">JSON support for Invercargill: documents become Enumerable collections that query and transform like any other sequence.</p>
  177. <p class="project-card__meta">
  178. <span>LGPL-3.0-or-later</span>
  179. <a class="project-card__more" href="invercargill-json/">Documentation&nbsp;→</a>
  180. </p>
  181. </article>
  182. <article class="project-card">
  183. <div class="project-card__top">
  184. <h3><a href="inversion/">Inversion</a></h3>
  185. <span class="project-card__tag">Foundation</span>
  186. </div>
  187. <p class="project-card__summary">Inversion of control for the Web-Stack: a dependency-injection container with modules, scopes and three lifecycles, wired by field injection.</p>
  188. <p class="project-card__meta">
  189. <span>LGPL-3.0-or-later</span>
  190. <a class="project-card__more" href="inversion/">Documentation&nbsp;→</a>
  191. </p>
  192. </article>
  193. </div>
  194. <div class="group-head">
  195. <p class="group-head__num">II.</p>
  196. <h3>Data</h3>
  197. <p class="group-head__note">rows, schemas and migrations</p>
  198. </div>
  199. <div class="grid-projects">
  200. <article class="project-card">
  201. <div class="project-card__top">
  202. <h3><a href="invercargill-sql/">Invercargill-Sql</a></h3>
  203. <span class="project-card__tag">Data</span>
  204. </div>
  205. <p class="project-card__summary">A generic SQL abstraction built on Invercargill data structures — query results return as lazy Enumerable rows over a provider-neutral API, with SQLite beneath today.</p>
  206. <p class="project-card__meta">
  207. <span>LGPL-3.0-or-later</span>
  208. <a class="project-card__more" href="invercargill-sql/">Documentation&nbsp;→</a>
  209. </p>
  210. </article>
  211. <article class="project-card">
  212. <div class="project-card__top">
  213. <h3><a href="invercargill-sql-inversion/">Invercargill-Sql-Inversion</a></h3>
  214. <span class="project-card__tag">Data</span>
  215. </div>
  216. <p class="project-card__summary">The Inversion integrations for Invercargill-Sql: DatabaseConfigurator, MigrationStartupService and InversionTypeProvider wire the database into the container.</p>
  217. <p class="project-card__meta">
  218. <span>LGPL-3.0-or-later</span>
  219. <a class="project-card__more" href="invercargill-sql-inversion/">Documentation&nbsp;→</a>
  220. </p>
  221. </article>
  222. </div>
  223. <div class="group-head">
  224. <p class="group-head__num">III.</p>
  225. <h3>Web stack</h3>
  226. <p class="group-head__note">from socket to signed state</p>
  227. </div>
  228. <div class="grid-projects">
  229. <article class="project-card">
  230. <div class="project-card__top">
  231. <h3><a href="astralis/">Astralis</a></h3>
  232. <span class="project-card__tag">Web stack</span>
  233. </div>
  234. <p class="project-card__summary">The library for writing HTTP backends in Vala: routing, headers, cookies, form data, JSON APIs, server-sent events, and layered web-config.json settings.</p>
  235. <p class="project-card__meta">
  236. <span>LGPL-3.0-or-later</span>
  237. <a class="project-card__more" href="astralis/">Documentation&nbsp;→</a>
  238. </p>
  239. </article>
  240. <article class="project-card">
  241. <div class="project-card__top">
  242. <h3><a href="statum/">Statum</a></h3>
  243. <span class="project-card__tag">Web stack</span>
  244. </div>
  245. <p class="project-card__summary">Page rendering and state management for web applications: server-rendered pages, signed and encrypted state slots, directives and actions, bound by a small client script.</p>
  246. <p class="project-card__meta">
  247. <span>LGPL-3.0-or-later</span>
  248. <a class="project-card__more" href="statum/">Documentation&nbsp;→</a>
  249. </p>
  250. </article>
  251. <article class="project-card">
  252. <div class="project-card__top">
  253. <h3><a href="spry/">Spry</a></h3>
  254. <span class="project-card__tag">Web stack</span>
  255. </div>
  256. <p class="project-card__summary">Reusable authentication and user-management services for Statum — the signed auth slot, guards and subclassable actions — plus the spry CLI that scaffolds, keys and deploys an application.</p>
  257. <p class="project-card__meta">
  258. <span>LGPL-3.0-or-later</span>
  259. <a class="project-card__more" href="spry/">Documentation&nbsp;→</a>
  260. </p>
  261. </article>
  262. </div>
  263. <div class="group-head">
  264. <p class="group-head__num">IV.</p>
  265. <h3>Security</h3>
  266. <p class="group-head__note">keys, seals and signatures</p>
  267. </div>
  268. <div class="grid-projects">
  269. <article class="project-card">
  270. <div class="project-card__top">
  271. <h3><a href="locksmith/">Locksmith</a></h3>
  272. <span class="project-card__tag">Security</span>
  273. </div>
  274. <p class="project-card__summary">Developer-friendly cryptography in objects, not byte arrays: sodium boxes, X.509, SSH, OpenPGP and WebPush over libsodium, GnuTLS, GPGME and libssh. It implements no cryptography itself.</p>
  275. <p class="project-card__meta">
  276. <span>LGPL-3.0-or-later</span>
  277. <a class="project-card__more" href="locksmith/">Documentation&nbsp;→</a>
  278. </p>
  279. </article>
  280. </div>
  281. <div class="group-head">
  282. <p class="group-head__num">V.</p>
  283. <h3>Intelligence</h3>
  284. <p class="group-head__note">language models, locally</p>
  285. </div>
  286. <div class="grid-projects">
  287. <article class="project-card">
  288. <div class="project-card__top">
  289. <h3><a href="vallama/">Vallama</a></h3>
  290. <span class="project-card__tag">Intelligence</span>
  291. </div>
  292. <p class="project-card__summary">High-level Vala bindings for llama.cpp inference: chat sessions, grammar-constrained tool calling, embeddings and tokenizers — running on your own hardware.</p>
  293. <p class="project-card__meta">
  294. <span>LGPL-3.0-or-later</span>
  295. <a class="project-card__more" href="vallama/">Documentation&nbsp;→</a>
  296. </p>
  297. </article>
  298. </div>
  299. <div class="group-head">
  300. <p class="group-head__num">VI.</p>
  301. <h3>Packaging</h3>
  302. <p class="group-head__note">how it all ships</p>
  303. </div>
  304. <div class="grid-projects">
  305. <article class="project-card">
  306. <div class="project-card__top">
  307. <h3><a href="usm/">USM</a></h3>
  308. <span class="project-card__tag">Packaging</span>
  309. </div>
  310. <p class="project-card__summary">The Universal Source Manifest: a project declares what it provides and needs in a MANIFEST.usm, and usm acquires, builds, tests, packages and deploys it.</p>
  311. <p class="project-card__meta">
  312. <span>GPL-3.0-or-later</span>
  313. <a class="project-card__more" href="usm/">Documentation&nbsp;→</a>
  314. </p>
  315. </article>
  316. </div>
  317. </div>
  318. </section>
  319. </main>
  320. <footer class="site-footer">
  321. <div class="container">
  322. <div class="footer-grid">
  323. <div class="foot-brand">
  324. <img class="brand__logo brand__logo--dark" src="../assets/img/astrologue-dark.png" width="392" height="89" alt="Astrologue">
  325. <p>An operating system for change — kept for self sufficiency, resilience, and software freedom, so regular people can hold the power of general purpose computers in their own hands.</p>
  326. </div>
  327. <nav aria-label="The four freedoms">
  328. <p class="foot-title">The Four Freedoms</p>
  329. <ol class="freedoms">
  330. <li><strong>Run</strong> the software as you wish, for any purpose.</li>
  331. <li><strong>Study</strong> the source and change it to do your computing as you wish.</li>
  332. <li><strong>Share</strong> copies so you can help others.</li>
  333. <li><strong>Modify</strong> and publish your versions so everyone benefits.</li>
  334. </ol>
  335. </nav>
  336. <nav aria-label="Site">
  337. <p class="foot-title">Site</p>
  338. <ul class="foot-list">
  339. <li><a href="../">Home</a></li>
  340. <li><a href="../#news">News</a></li>
  341. <li><a href="../#download">Download</a></li>
  342. <li><a href="./">Developer</a></li>
  343. </ul>
  344. </nav>
  345. </div>
  346. <p class="colophon">Set in Cinzel and EB Garamond (SIL Open Font License). Astrologue is free software, licensed GPL-3.0-or-later: take it, tend it, pass it on. The libraries are LGPL-3.0-or-later, so they remain free to link.</p>
  347. </div>
  348. </footer>
  349. </body>
  350. </html>