Rune
Rune is a tool that combines different types of content (like YAML, HTML, Markdown, TSX, SVG, PNG, ZIP, JPG, and JSON) into one easy-to-use JSON format.
This output is designed to securely serve content through a REST API.
Rune is built for everyone on your team — developers, designers, and content creators. It simplifies collaboration by supporting familiar formats like HTML, YAML, Markdown, and TSX, making it easy to manage assets, translations, and views all in one place.
Metaphor: Rune and the Basket of Fruits
Think of Rune as a master basket weaver, skillfully crafting a basket to hold different kinds of fruits, each familiar to a specific audience:
- HTML files are like apples — crisp, structured, and familiar to frontend developers.
- YAML files are like oranges — layered, segmented, and a favorite of backend developers and system architects.
- JSON translation files are like bananas—rich in meaning, easy to peel apart, and familiar for localization experts.
- Markdown files are like grapes — small, simple, and versatile, perfect for documentation writers. Markdown is not yet implemented. See #22.
- Assets (images, downloadable content, etc.) are like cherries — vibrant, eye-catching, and ready to be included.
Rune carefully weaves a basket — a JSON file — that organizes and holds all these fruits together in a portable and structured way. This basket isn't just static; it can be used as-is or handed to a backend, where more fruits (additional data or assets) can be added later to enrich its contents.
The result is an adaptable basket ready for any use case, whether it's for a simple picnic (a static web content) or a grand feast (a dynamic API-driven application).
Key Features
1. Dynamic Content Processing
- Consolidates YAML (
*.yml) and HTML (*.html) files into a single JSON output, embedding any referenced assets as Base64-encoded data URLs. - Supports reusable components, nested children, and parameterized elements.
2. Multilingual Support
- Integrates translations from
translations/*.LANG.jsonfiles. - Outputs a flat
i18nstructure compatible with popular localization libraries.
3. Embedded Assets
- Automatically embeds image files and assets as Base64-encoded data URLs.
- Supports SVG and other image formats with MIME type detection.
4. Portability
- Outputs a self-contained JSON file that includes all views, translations, and assets.
- Ideal for static or dynamic web applications.
5. Extensibility
- Supports custom components and nested structures.
- Allows easy addition of new file types, assets, or features.
Getting Started
Prerequisites
To use Rune, ensure you have the following installed:
- Python 3.6 or later
- Required Python libraries:
pip install -r requirements.txt
Installation
You can install Rune using pip:
pip install hyperify-rune
Or clone the repository for development:
git clone https://github.com/hyperifyio/rune.git
cd rune
Usage
1. Using the Command Line Tool
After installing with pip, you can use the rune command directly:
rune <directory> <output_type>
For example:
rune views json
2. Prepare Your Project Directory
Structure your project directory as follows:
project/ # Contains YAML and HTML files
├── translations/ # Contains translation JSON files
│ ├── HelloWorld.en.json
│ └── HelloWorld.fi.json
├── assets/ # May contain images or other assets (or anywhere else on your system)
└── Makefile # Makefile for build automation. Optional, for easier rebuild.
3. Add YAML or HTML Views
Example YAML file (views/HelloWorld.yml):
- type: "View"
name: "HelloWorld"
body:
- type: div
classes:
- "hello-world-container"
body:
- type: h1
body:
- "app.title"
- type: p
body:
- "app.content"
Example HTML file (views/HelloWorld.html):
<View name="HelloWorld">
<div class="hello-world-container">
<h1>app.title</h1>
<p>app.content</p>
</div>
</View>
4. Add Translations
Create translation files in translations/ (e.g., HelloWorld.en.json):
{
"app.title": "Hello, World!",
"app.content": "Welcome to Rune!"
}
5. Build the Project
Run Rune to merge all YAML, HTML, and translation files into a single JSON:
python3 rune.py views json
The output will look like this:
[
{
"type": "View",
"name": "HelloWorld",
"body": [
{
"type": "div",
"classes": ["hello-world-container"],
"body": [
{"type": "h1", "body": ["app.title"]},
{"type": "p", "body": ["app.content"]}
]
}
]
},
{
"type": "i18n",
"data": {
"en": {
"app.title": "Hello, World!",
"app.content": "Welcome to Rune!"
}
}
}
]
Advanced Features
Reusable Components
Define components with parameters and children:
Example (views/UsageCard.html):
<Component name="UsageCard">
<div class="card">
<UnfoldableCard title="usageCard.title">
<Component.Children></Component.Children>
</UnfoldableCard>
</div>
</Component>
Embedded Assets
Embed files directly into the JSON output:
Example YAML asset (views/assets.yml):
- type: "Asset"
name: "logo"
body: "data:image/png;base64,xxxxx"
Image Handling
Automatically embed images referenced in properties like Image, src, or custom attributes.
Example HTML (views/Example.html):
<Foo heroImage="../assets/logo.png"></Foo>
CLI Options
python3 rune.py <directory> <output_type>
<directory>: The project directory containing*.yml,*.html, andtranslations/.<output_type>: Eitherjsonoryml.
License
Rune is licensed under [./LICENSE.md](the Functional Source License, Version 1.1, MIT Future License).
Contact
For questions, feedback, or commercial inquiries, contact us at info@hyperify.io.
Metadata
Release files for hyperify-rune 0.1.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| hyperify_rune-0.1.6.tar.gz | 30.6 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| hyperify_rune-0.1.6-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 30.6 MB
Release files / hyperify_rune-0.1.6.tar.gz
| Download URL | hyperify_rune-0.1.6.tar.gz |
|---|---|
| Size | 30.6 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6055b318cdcff523f56ef885602c96b1cb76d48857af5c67191a0904cb679c8f
|
|
BLAKE2b-256 checksum How to use checksums |
e1e7ae372c26cb98410d69f54a92e75436b82a351661641f46e74b046e1e33ac
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.11.6
|
Release files / hyperify_rune-0.1.6-py3-none-any.whl
| Download URL | hyperify_rune-0.1.6-py3-none-any.whl |
|---|---|
| Size | 10.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
18322c6077b65f313a80171c33f42559cceb5b5bc55bc3ba90417d5294fdb8c2
|
|
BLAKE2b-256 checksum How to use checksums |
44431c629a904d00dd015e4120dfcba918ae2937d80b014f29e173d67132c471
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.11.6
|