NOTE: If you're looking for the old 'meld' package for aspect oriented programming, you'll want to pin your version to <2.0.0
meld is a prompt scripting language.
npm install -g meld
or just run it with npx meld
Process meld files from the command line:
# Basic usage - outputs .xml file
meld input.mld
# Specify output format
meld input.mld --format md
# Specify output file
meld input.mld --output output.xml
# Print to stdout instead of file
meld input.mld --stdout
-
--format, -f
: Output format (default: md)- Supported formats: md, xml
-
--output, -o
: Output file path (default: input filename with new extension) -
--stdout
: Print to stdout instead of file
-
.mld
is standard.mld.md
is another option. -
.md
: Meld can just interpret regular old markdown files with added meld syntax, too.
Meld has a fairly extensive js API which give access to its AST, interpreted variables, etc., but it's not documented yet. However, here's meld's simple API for processing content directly:
// ES Module import
import runMeld from 'meld';
// Process meld content
const meldContent = `
@text greeting = "Hello"
@text name = "World"
${greeting}, ${name}!
`;
// Simple usage
const result = await runMeld(meldContent);
console.log(result); // "Hello, World!"
// With options
const xmlResult = await runMeld(meldContent, {
format: 'xml',
transformation: true
});
Meld is a simple scripting language designed to work within markdown-like documents. It processes special @directive
lines while preserving all other content as-is.
@text name = "value" # Define a text variable
@data config = { "key": "value" } # Define a structured data variable
@path docs = "$PROJECTPATH/docs" # Define a path (must use $PROJECTPATH or $HOMEPATH)
@embed [file.md] # Embed content from another file
@embed [file.md # section] # Embed specific section from file
@run [command] # Run a shell command
@import [file.mld] # Import another meld file
@define cmd = @run [echo "hi"] # Define a reusable command
{{variable}} # Reference a variable
{{datavar.field}} # Access data field
$pathvar # Reference a path variable
# Variables can be used in strings and commands:
@text greeting = "Hello {{name}}!"
@run [cat {{file}}]
>> This is a comment
>> Comments must start at line beginning
# Code fences preserve content exactly:
```python
def hello():
print("Hi") # @text directives here are preserved as-is
### String Values
- Use single quotes, double quotes, or backticks
- Quotes must match (no mixing)
- Use backticks for template strings with variables:
```meld
@text simple = "Hello"
@text template = `Hello {{name}}!`
@text multiline = [[`
Multi-line
template with {{vars}}
`]]
- Must use
$PROJECTPATH
(or$.
) or$HOMEPATH
(or$~
) - Forward slashes as separators
@path docs = "$PROJECTPATH/docs"
@path home = "$HOMEPATH/meld"
- Store structured data (objects/arrays)
- Support field access
@data user = { "name": "Alice", "id": 123 }
@text name = "User: {{user.name}}"