CrystalWorld

Version, currently main branch1 version
  • main branchlatestDec 22, 2025

github.com/jamalrob/crystal-world

Frameworkless Crystal blog engine with server-driven UI using HTMX

0 stars
0 dependents
License: not declared

Installation

# Add this to your shard.yml
dependencies:
  CrystalWorld:
    github: jamalrob/crystal-world
    branch: main

main is a branch, not a release, so this tracks it rather than pinning a version.

Then run:

shards install

shard.yml

Crystal
no constraint declared

Dependencies

Runtime Dependencies

  • crest*github: mamantoha/crest
  • email*github: arcage/crystal-email
  • markd*github: icyleaf/markd
  • crinja*github: straight-shoota/crinja
  • poncho*github: icyleaf/poncho
  • sqlite3*github: crystal-lang/crystal-sqlite3
  • sanitize*github: straight-shoota/sanitize
  • front_matter*github: chris-huxtable/front_matter.cr
  • crystal-argon2*github: sushichain/crystal-argon2

README

the-crystal-world

A small blog engine written in Crystal, built without a front-end or back-end framework, and intended as a learning and consolidation project rather than a general-purpose platform.

Although the application is server-centric and dynamically rendered, it aims to provide a fast, fluid user experience through selective use of HTMX and Hyperscript, avoiding full page reloads and heavy client-side state.

Goals

  • Understand and implement core web application concerns without a framework
  • Explore a server-driven architecture with a modern interaction model
  • Learn and evaluate Crystal as a production language
  • Build a usable foundation for small, real-world projects
  • Keep the system readable, explicit, and enjoyable to work with

Context

This project was deliberately “reinvented from first principles” as a way to test assumptions about contemporary web stacks. Rather than reproducing a full SPA architecture, it explores how far a traditional server-rendered application can be taken using incremental enhancement. The result is a thin-client system that behaves more like a static-site-style application in use, while remaining operationally simple.

Structure

At a high level, the system is organised as follows:

HTTP requests → Crystal application (routing, auth, rendering) → HTML responses with incremental updates → static assets and client-side enhancement

All application logic lives on the server. Client-side code is used only to support interaction, not to manage application state.

Implementation notes

The application implements core concerns explicitly, including:

  • routing and request handling
  • authentication and session management
  • template rendering
  • database access
  • CSRF and XSS mitigation
  • image upload and hosting

Content is authored in Markdown and rendered server-side. The admin interface acts as a small CMS, intended for single-user or low-friction use rather than multi-tenant deployment.

The emphasis throughout is on clarity and control rather than abstraction.

Features

  • Admin interface for managing content
  • Markdown-based article editing with live previews
  • CRUD operations for articles, authors, pages, and settings
  • Image management via a cloud API
  • Reactive UI behaviour without full page reloads

Screenshots

Home page

Article page

Glassmorphism

Admin: articles

Admin: articles 2

Admin: edit article

Admin: article preview

Admin: article properties

Admin: article properties 2

Admin: article properties 3

Admin: image gallery

Admin: authors

Status

This project is exploratory. It is complete enough to be used, but primarily serves as a reference point for architectural and language-level experimentation.