raindrop annotation
The raindrop annotation command manages application metadata using Machine Resource Names (MRNs). Store structured metadata, configuration, documentation, or any text data associated with your Raindrop applications and resources.
Annotations use MRNs to uniquely identify metadata. MRNs provide a hierarchical naming system that maps to your application structure.
Machine Resource Names (MRNs)
MRNs uniquely identify annotations with this format:
annotation:app-name:version:module:item^key:MRN Components:
annotation- Resource type (always “annotation”)app-name- Application nameversion- Application versionmodule- Module name within applicationitem- Specific item (optional, separated by^)key- Annotation key
Partial MRNs:
You can use partial MRNs and the CLI infers application/version from your manifest and config:
# Partial MRN (infers app and version)my-module:my-key:
# Full MRN (explicit everything)annotation:my-app:v1.0.0:my-module:my-key:
# With item specifiermy-module:my-item^my-key:Basic Usage
Store an annotation:
raindrop annotation put my-module:config: "Production configuration"Retrieve an annotation:
raindrop annotation get my-module:config:List annotations:
raindrop annotation list my-moduleCommand Reference
raindrop annotation get
Retrieve an annotation by MRN.
Syntax:
raindrop annotation get <mrn> [--format <format>] [--manifest <path>]Arguments:
<mrn>- MRN of annotation to retrieve (partial or full) (required)
Flags:
| Flag | Description | Values | Default | 
|---|---|---|---|
-f, --format | Output format | text, json | text | 
-m, --manifest | Manifest file path | Path | raindrop.manifest | 
Examples:
# Get with partial MRNraindrop annotation get my-module:config:
# Get with full MRNraindrop annotation get annotation:my-app:v1.0.0:my-module:config:
# Get with item specifierraindrop annotation get my-module:my-item^description:
# Get as JSONraindrop annotation get my-module:config: --format jsonOutput (text):
MRN: annotation:my-app:v1.0.0:my-module:config:Value: Production configurationCreated: 2025-10-23T10:30:00.000ZModified: 2025-10-23T15:45:00.000ZOutput (JSON):
{  "mrn": "annotation:my-app:v1.0.0:my-module:config:",  "value": "Production configuration",  "createdAt": "2025-10-23T10:30:00.000Z",  "modifiedAt": "2025-10-23T15:45:00.000Z"}raindrop annotation put
Create or update an annotation.
Syntax:
raindrop annotation put <mrn> <annotation> [--output <format>] [--manifest <path>]Arguments:
<mrn>- MRN of annotation (partial or full) (required)<annotation>- Annotation content (use-for stdin,@filenamefor file) (required)
Flags:
| Flag | Description | Values | Default | 
|---|---|---|---|
-o, --output | Output format | text, json | text | 
-m, --manifest | Manifest file path | Path | raindrop.manifest | 
Examples:
# Create annotation with inline textraindrop annotation put my-module:config: "Production configuration"
# Create with full MRNraindrop annotation put annotation:my-app:v1.0.0:my-module:config: "Value"
# Read from stdinecho "Configuration data" | raindrop annotation put my-module:config: -
# Read from fileraindrop annotation put my-module:docs: @README.md
# Read multiline from stdin (heredoc)raindrop annotation put my-module:config: - << EOF{  "database": "postgres://localhost/mydb",  "apiKey": "secret123"}EOF
# Create with item specifierraindrop annotation put my-module:handler-1^docs: "Handler documentation"Output:
✓ Annotation created/updated successfully
MRN: annotation:my-app:v1.0.0:my-module:config:Reading from Stdin:
Use - as the annotation value to read from stdin:
# Interactive input (Ctrl+D to finish)raindrop annotation put my-module:notes: -Type your notes here...Multiple lines supported...<Ctrl+D>
# Piped inputcat config.json | raindrop annotation put my-module:config: -
# Heredocraindrop annotation put my-module:readme: - << 'EOF'# My ModuleDocumentation goes hereEOFraindrop annotation list
List annotations by MRN prefix.
Syntax:
raindrop annotation list [mrnPrefix] [--output <format>] [--limit <number>] [--manifest <path>]Arguments:
[mrnPrefix]- MRN prefix to filter by (optional, uses app/version from config if omitted)
Flags:
| Flag | Description | Values | Default | 
|---|---|---|---|
-o, --output | Output format | table, text, json | table | 
-l, --limit | Maximum annotations to return | Number | 100 | 
-m, --manifest | Manifest file path | Path | raindrop.manifest | 
Examples:
# List all annotations for current app/versionraindrop annotation list
# List annotations for specific moduleraindrop annotation list my-module
# List with full prefixraindrop annotation list annotation:my-app:v1.0.0:my-module
# List as JSONraindrop annotation list my-module --output json
# Limit resultsraindrop annotation list my-module --limit 10Output (table):
┌──────────────────────────────────────────────────┬──────────────────────────┬──────────────────────────┐│ MRN                                              │ Created                  │ Modified                 │├──────────────────────────────────────────────────┼──────────────────────────┼──────────────────────────┤│ annotation:my-app:v1.0.0:my-module:config:       │ 2025-10-23T10:30:00.000Z │ 2025-10-23T15:45:00.000Z ││ annotation:my-app:v1.0.0:my-module:docs:         │ 2025-10-23T09:15:00.000Z │ 2025-10-23T09:15:00.000Z ││ annotation:my-app:v1.0.0:my-module:metadata:     │ 2025-10-22T14:20:00.000Z │ 2025-10-23T11:30:00.000Z │└──────────────────────────────────────────────────┴──────────────────────────┴──────────────────────────┘Output (text):
MRN: annotation:my-app:v1.0.0:my-module:config:  Created: 2025-10-23T10:30:00.000Z  Modified: 2025-10-23T15:45:00.000Z
MRN: annotation:my-app:v1.0.0:my-module:docs:  Created: 2025-10-23T09:15:00.000Z  Modified: 2025-10-23T09:15:00.000ZUse Cases
Configuration Storage
Store configuration data for modules:
# Store database configurationraindrop annotation put my-module:db-config: - << EOF{  "host": "localhost",  "port": 5432,  "database": "myapp"}EOF
# Retrieve configurationraindrop annotation get my-module:db-config: --format jsonDocumentation
Attach documentation to modules:
# Store module documentationraindrop annotation put my-module:readme: @MODULE_README.md
# Store API documentationraindrop annotation put api-handler:docs: @API_DOCS.md
# Retrieve and viewraindrop annotation get my-module:readme:Metadata
Track deployment metadata:
# Record deployment inforaindrop annotation put app:deployment-info: "Deployed by CI/CD on $(date)"
# Track version notesraindrop annotation put app:release-notes: - << EOF## Version 1.2.0
- Added user authentication- Fixed database connection pooling- Updated dependenciesEOF
# Query deployment historyraindrop annotation list app:deploymentFeature Flags
Store feature flag configurations:
# Enable featureraindrop annotation put app:features^new-ui: "enabled"
# Disable featureraindrop annotation put app:features^beta-api: "disabled"
# List all feature flagsraindrop annotation list app:featuresEnvironment-Specific Notes
Store environment-specific information:
# Production notesraindrop annotation put prod-handler:notes: "Uses production database, requires API key"
# Development notesraindrop annotation put dev-handler:notes: "Uses local database, no auth required"
# View notesraindrop annotation get prod-handler:notes:Common Workflows
Bulk Annotation Creation
Create multiple annotations from a directory:
#!/bin/bash# annotate-docs.sh - Annotate modules with documentation files
MODULE="my-module"DOCS_DIR="./docs"
# Annotate each documentation filefor doc in "$DOCS_DIR"/*.md; do  basename=$(basename "$doc" .md)  echo "Annotating: $MODULE:$basename:"
  raindrop annotation put "$MODULE:$basename:" "@$doc"doneConfiguration Management
Manage configurations across environments:
# Store production configraindrop annotation put app:config^production: @config/production.json
# Store staging configraindrop annotation put app:config^staging: @config/staging.json
# Store development configraindrop annotation put app:config^development: @config/development.json
# List all configsraindrop annotation list app:configAnnotation Backup
Backup annotations to local files:
#!/bin/bash# backup-annotations.sh - Backup all annotations
OUTPUT_DIR="./annotation-backup"mkdir -p "$OUTPUT_DIR"
# Get list of annotationsannotations=$(raindrop annotation list --output json | jq -r '.[].mrn')
# Download each annotationecho "$annotations" | while read mrn; do  # Sanitize MRN for filename  filename=$(echo "$mrn" | tr ':' '_' | tr '^' '_')
  echo "Backing up: $mrn"  raindrop annotation get "$mrn" > "$OUTPUT_DIR/$filename.txt"done
echo "Backup complete: $OUTPUT_DIR"Annotation Restore
Restore annotations from backup:
#!/bin/bash# restore-annotations.sh - Restore annotations from backup
BACKUP_DIR="./annotation-backup"
# Restore each annotationfor file in "$BACKUP_DIR"/*.txt; do  # Extract MRN from filename  mrn=$(basename "$file" .txt | tr '_' ':')
  echo "Restoring: $mrn"  raindrop annotation put "$mrn" - < "$file"done
echo "Restore complete"Search Annotations
Search annotation content:
# List all annotations and search contentraindrop annotation list --output json | \  jq -r '.[].mrn' | \  while read mrn; do    content=$(raindrop annotation get "$mrn")    if echo "$content" | grep -q "production"; then      echo "Found in: $mrn"      echo "$content"      echo "---"    fi  doneBest Practices
Naming Conventions:
- Use descriptive module names in MRNs
 - Employ consistent key naming (e.g., 
config,docs,metadata) - Use item specifiers (
^) for related groupings - Follow kebab-case for readability
 
Data Storage:
- Store small to medium-sized text data
 - Use structured formats (JSON, YAML) for complex data
 - Avoid storing binary data
 - Keep annotations focused and single-purpose
 
Version Management:
- Version-specific annotations for configuration changes
 - Use current version for active documentation
 - Archive old versions for history
 - Copy annotations when branching
 
Security:
- Never store secrets or credentials in annotations
 - Use environment variables for sensitive data
 - Review annotations before sharing projects
 - Implement access controls at organization level
 
Organization:
- Group related annotations with common prefixes
 - Document annotation schema for your project
 - Create indexes with list operations
 - Clean up unused annotations regularly
 
MRN Format Reference
Full MRN:annotation:app-name:version:module:item^key:│          │        │       │      │    ││          │        │       │      │    └─ Annotation key│          │        │       │      └────── Optional item specifier│          │        │       └───────────── Module name│          │        └───────────────────── Version ID│          └────────────────────────────── Application name└───────────────────────────────────────── Resource type
Partial MRN (app/version inferred):module:key:module:item^key:
Item Specifier (^):module:item1^key:    - Annotation for item1module:item2^key:    - Annotation for item2module:^key:         - Annotation without specific itemExit Codes
| Code | Description | 
|---|---|
| 0 | Command completed successfully | 
| 1 | General error (annotation not found, invalid MRN, etc.) | 
| 2 | Invalid arguments |