Publishing Models
How to publish your models to the hali registry and get credit for seeding them.
What publishing does
When you hali pull a model, hali automatically creates a torrent and starts seeding it on your LAN. Publishing takes it one step further: it submits a signed manifest to the public registry at hali.network, making your model discoverable worldwide.
Publishing is automatic for every model you pull — the daemon creates and submits the manifest after download completes. You don't need to do anything extra. This page explains what happens behind the scenes and how to manage your publisher identity.
The publisher identity
Every hali installation generates an Ed25519 keypair on first run. This keypair is your publisher identity:
- Private key: stored at
<DataDir>/key— never leaves your machine - Public key: 64-char hex — visible in
hali daemon statusand on the registry
Your public key is your identity on hali.network. Models you publish are attributed to this key. Your reputation score is tied to this key. Everything you contribute to the network traces back to this identity.
Creating a publisher profile
By default, your public key is an anonymous 64-char hex string. Create a profile to add human-readable information:
hali profile create
You'll be prompted for:
Display name: My AI Lab
Description: Quantized models for research and experimentation
Website (optional): https://example.com
Contact (optional): lab@example.com
The profile is:
- Serialized to JSON and canonicalized (sorted keys, no whitespace)
- SHA-256 hashed
- Signed with your Ed25519 private key
- Submitted to the registry at
POST /profile
After creation, your public key on hali.network will show your display name, description, and website instead of a bare hex string.
Scripted profile creation
For CI or automation:
hali profile create \
--display-name "My Lab" \
--description "Quantized models" \
--website "https://example.com" \
--non-interactive
The Manifest
Every published model includes a signed manifest. Here's the schema:
{
"type": "model",
"name": "mistral:7b:instruct:q4_k_m",
"format": "gguf",
"files": ["mistral-7b-instruct-v0.2.Q4_K_M.gguf"],
"infohash_v1": "a3f9c21b4d67e8f01a2b3c4d5e6f7890ab1cd2ef3",
"infohash_v2": "f8c41dc0a13b...64-char-hex...",
"publisher_pubkey": "abc123...64-char-hex...",
"source": {
"origin": "huggingface",
"repo": "TheBloke/Mistral-7B-Instruct-v0.2-GGUF",
"revision": "abc123..."
},
"timestamp": 1700000000,
"signature": "def789...128-char-hex..."
}
| Field | Description |
|---|---|
type | Always "model" |
name | Canonical model ID |
format | "gguf", "safetensors", etc. |
files | List of file names included |
infohash_v1 | 40-char hex — BitTorrent v1 SHA1 (required, can be empty if v2 present) |
infohash_v2 | 64-char hex — BitTorrent v2 SHA256 (optional, recommended) |
publisher_pubkey | Your 64-char Ed25519 public key |
source | Origin metadata (at minimum "huggingface") |
timestamp | Unix epoch seconds of publication |
signature | 128-char hex — Ed25519 signature over the canonicalized manifest |
At least one of infohash_v1 or infohash_v2 must be present.
The signing flow
Trust and reputation
Your reputation score is derived from all models you've published:
- Download success rate: ratio of successful to failed download reports from peers
- Format validity: are your published models actually valid GGUF files?
- Age / consistency: how long have your models been in the registry without issues?
- Aggregate model scores: the weighted average of your individual model scores
Reputation builds over time. Publish consistently, seed reliably, and your reputation will grow. Models from high-reputation publishers rank higher in search results and carry more weight in the trust scoring system.
Your reputation is a public good. Every model you publish adds to your reputation score, which helps others discover quality models in the registry. High-reputation publishers make the entire ecosystem more trustworthy. You're not just sharing files — you're building the foundation of a verified, peer-distributed model catalog.
Publishing behavior
Automatic mode (default)
When telemetry is enabled and the daemon is running, every hali pull automatically:
- Downloads the model
- Hashes the pieces
- Generates the torrent + infohash
- Signs the manifest
- Submits to the registry
No user interaction needed. Zero clicks. You pull a model, it gets published.
When publishing is blocked
Publishing only happens when:
- Telemetry is enabled (
hali telemetry statusshowsenabled) - The registry is reachable
- The manifest signature is valid
If any of these conditions aren't met, the manifest is still generated and stored locally. It gets submitted later when conditions are met.
LAN-only mode
If daemon_listen_addr is set to 0.0.0.0 (meaning your daemon accepts external connections), publishing warns that internet peers may not be able to reach you. The manifest is still submitted, but the download experience for remote users may be degraded.
Monitoring your publisher activity
# See your public key
hali daemon status # Shows publisher_pubkey
# See what models you're seeding
hali daemon status # SEEDING section
# Check telemetry state
hali telemetry status
# View your profile on the web
# https://hali.network/publisher/<your-pubkey>
Publishing without telemetry
If you've disabled telemetry, manifests are generated but not submitted. You can publish manually by re-enabling telemetry and restarting the daemon:
hali telemetry enable
hali service restart # Daemon will submit queued manifests on restart