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
Installation
# Add this to your shard.yml
dependencies:
CrystalWorld:
github: jamalrob/crystal-world
branch: mainmain is a branch, not a release, so this tracks it rather than pinning a version.
Then run:
shards installshard.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












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.
Documentation
Built from the current release. The first visit to a release nobody has asked for starts its build.
Links
This branch
- Branch
main- Seen
- Dec 22, 2025
- Indexed
- yes
Dependents
No indexed shard depends on this one yet.
Repository
github.com/jamalrob/crystal-world
Metadata
- Created
- Aug 12, 2026
- Updated
- Sep 7, 2026
- Synced
- Sep 7, 2026
- Versions
- 1