heroforge-core
| Resource | Link |
|---|---|
| Crate | crates.io/crates/heroforge-core |
| Documentation | docs.rs/heroforge-core |
| Repository | github.com/herocode/heroforge-core |
Overview
heroforge-core is the core database library for Heroforge, providing a complete API for interacting with Fossil SCM repositories programmatically, without requiring the Fossil CLI to be installed. It supports both reading from existing repositories and creating new ones from scratch.
Features
Read Operations
- Open and read existing Fossil repositories
- Browse repository history and check-ins
- List and read files at any check-in
- Find files using glob patterns
- Navigate directory structures
- Access branch and tag information
Write Operations
- Create new repositories from scratch
- Commit files with full manifest generation
- Create and manage branches
- Add tags to check-ins
- Manage users and permissions
Filesystem Operations
- Copy, move, rename files and directories
- Delete files and directories
- Change permissions (chmod)
- Create symbolic links
- Advanced find with ignore patterns
Synchronization
- QUIC sync - Modern UDP-based protocol with TLS 1.3 (requires
sync-quicfeature)
Rhai Scripting
- Interactive REPL with tab completion and syntax highlighting
- Socket-based daemon for fast script execution
- Full API access from Rhai scripts
Installation
Add heroforge-core to your project:
Or add to your Cargo.toml:
[]
= "0.2.2"
Optional Features
Enable QUIC sync for remote repository synchronization:
[]
= { = "0.2.2", = ["sync-quic"] }
CLI Usage
The heroforge-core binary provides both an interactive REPL and daemon mode for script execution.
Interactive REPL
# Start interactive shell (default)
# Or explicitly with --ui flag
The REPL provides:
- Tab completion for all functions
- Syntax highlighting
- Command history
- Multi-line input support
Running Scripts
# Run a script file
# Execute inline script
# Read script from stdin
|
# Run locally without daemon
Daemon Mode
# Start daemon in background
# Check daemon status
# Stop daemon
REPL Commands
| Command | Description |
|---|---|
/help |
Show help |
/functions |
List all available functions |
/repo |
Show repository functions |
/fs |
Show filesystem functions |
/files |
Show file functions |
/branches |
Show branch/tag functions |
/modify |
Show modify builder functions |
/find |
Show find builder functions |
/utils |
Show utility functions |
/scope |
Show current scope variables |
/load <file> |
Load and execute a .rhai script |
/clear |
Clear screen |
/quit |
Exit REPL |
Quick Start
Reading from an Existing Repository
use Repository;
Creating a New Repository
use Repository;
Using the Rhai API
// Open a repository
let repo = repo_open("project.fossil");
// List branches
let branches = branches_list(repo);
for b in branches {
print("Branch: " + b);
}
// List files
let files = files_list(repo);
for f in files {
print(" " + f.name() + " (" + f.size() + " bytes)");
}
// Read a file
let content = files_read(repo, "README.md");
print("Content:\n" + content);
// Use the filesystem interface for modifications
let repo_rw = repo_open_rw("project.fossil");
let fs = fs_new(repo_rw, "developer@example.com");
fs_write(fs, "newfile.txt", "Hello, World!");
fs_commit(fs);
Finding Files with Glob Patterns
use Repository;
Browsing History
use Repository;
Filesystem Operations
use Repository;
Builder API Overview
The library uses a fluent builder pattern for all operations:
| Builder | Entry Point | Purpose |
|---|---|---|
FilesBuilder |
repo.files() |
Read files, list directories, find with glob patterns |
CommitBuilder |
repo.commit_builder() |
Create new check-ins with files |
BranchesBuilder |
repo.branches() |
List and create branches |
TagsBuilder |
repo.tags() |
List, create, and resolve tags |
HistoryBuilder |
repo.history() |
Browse commits and history |
UsersBuilder |
repo.users() |
Manage repository users |
SyncBuilder |
repo.sync() |
Synchronize with remote repositories (QUIC) |
FsOpsBuilder |
repo.fs() |
Filesystem operations (copy, move, delete, chmod, find, symlinks) |
Rhai API Functions
Repository
| Function | Return | Description |
|---|---|---|
repo_open(path) |
Repository | Open repository read-only |
repo_open_rw(path) |
Repository | Open repository read-write |
repo_init(path) |
Repository | Create new repository |
repo_project_name(repo) |
string | Get project name |
Filesystem
| Function | Return | Description |
|---|---|---|
fs_new(repo, author) |
FsHandle | Create filesystem interface |
fs_read(fs, path) |
string | Read file as string |
fs_write(fs, path, content) |
void | Write file |
fs_delete(fs, path) |
void | Delete file |
fs_exists(fs, path) |
bool | Check if file exists |
fs_list(fs, dir) |
array | List directory |
fs_commit(fs) |
string | Commit changes |
Files
| Function | Return | Description |
|---|---|---|
files_list(repo) |
array | List files on trunk |
files_read(repo, path) |
string | Read file from trunk |
files_find(repo, pattern) |
array | Find files by pattern |
Branches/Tags
| Function | Return | Description |
|---|---|---|
branches_list(repo) |
array | List all branches |
branches_create(repo, name, parent) |
string | Create branch |
tags_list(repo) |
array | List all tags |
tags_create(repo, name, target) |
string | Create tag |
Utilities
| Function | Return | Description |
|---|---|---|
version() |
string | Get heroforge-core version |
uuid() |
string | Generate UUID |
timestamp() |
i64 | Get Unix timestamp |
sleep(ms) |
void | Sleep for milliseconds |
env(name) |
string | Get environment variable |
cwd() |
string | Current directory |
home() |
string | Home directory |
Feature Flags
| Feature | Description | Dependencies |
|---|---|---|
rhai |
Rhai scripting support (default) | rhai, tokio, rustyline |
sync-quic |
QUIC protocol sync | quinn, rustls, tokio |
git-import |
Import git repositories | herolib-os |
Examples
The repository includes many examples demonstrating various features:
# Basic repository reading
# Find files with glob patterns
# Branches and tags demonstration
# Comprehensive API demo
# Filesystem operations (copy, move, delete, chmod, symlinks)
# Advanced find with ignore patterns
# QUIC sync (requires sync-quic feature)
Documentation
Full API documentation is available at docs.rs/heroforge-core.
Generate local documentation with:
Architecture
A Fossil repository is a SQLite database containing:
- Blobs: Compressed file contents and manifests (zlib)
- Manifests: Check-in metadata with file lists, timestamps, comments
- Tags: Branch names, version tags, and other labels
- Events: Timeline of repository activity
- Delta encoding: Efficient storage of similar content
Many thanks to
- The Fossil SCM project for creating and maintaining Fossil on which this is based.