Overview
The JSON output format generates Minecraft’s native JSON text component format with RGB colors. This format is used by commands like /tellraw, /title, and in various plugin APIs.
Basic JSON Gradient
Generate a JSON gradient:
import { rgbDefaults , generateOutput , formats } from '@birdflop/rgbirdflop' ;
const result = generateOutput ({
... rgbDefaults ,
text: 'Hello' ,
colors: [
{ hex: '#ff0000' , pos: 0 },
{ hex: '#0000ff' , pos: 100 },
],
format: formats [ 2 ], // JSON format
});
console . log ( result );
// Output: {"text":"","extra":[{"text":"H","color":"#ff0000"},{"text":"e","color":"#bf003f"},{"text":"l","color":"#7f007f"},{"text":"l","color":"#3f00bf"},{"text":"o","color":"#0000ff"}]}
The JSON format is formats[2] in the formats array. It uses the special value 'JSON' for the color property. The output structure is: {
"text" : "" ,
"extra" : [
{ "text" : "character" , "color" : "#hexcode" },
...
]
}
Let’s look at the formatted JSON output:
const result = generateOutput ({
... rgbDefaults ,
text: 'Hi' ,
colors: [
{ hex: '#ff0000' , pos: 0 },
{ hex: '#0000ff' , pos: 100 },
],
format: formats [ 2 ],
});
console . log ( JSON . stringify ( JSON . parse ( result ), null , 2 ));
Output:
{
"text" : "" ,
"extra" : [
{
"text" : "H" ,
"color" : "#ff0000"
},
{
"text" : "i" ,
"color" : "#0000ff"
}
]
}
JSON with Text Formatting
Add bold, italic, and other formatting:
const result = generateOutput ({
... rgbDefaults ,
text: 'Bold' ,
colors: [
{ hex: '#ffaa00' , pos: 0 },
{ hex: '#ff5500' , pos: 100 },
],
format: formats [ 2 ],
bold: true ,
italic: true ,
});
console . log ( JSON . stringify ( JSON . parse ( result ), null , 2 ));
Output:
{
"text" : "" ,
"extra" : [
{
"text" : "B" ,
"color" : "#ffaa00" ,
"bold" : true ,
"italic" : true
},
{
"text" : "o" ,
"color" : "#ff8c00" ,
"bold" : true ,
"italic" : true
},
{
"text" : "l" ,
"color" : "#ff6e00" ,
"bold" : true ,
"italic" : true
},
{
"text" : "d" ,
"color" : "#ff5500" ,
"bold" : true ,
"italic" : true
}
]
}
SDK Option JSON Property Type bold: true"bold": trueboolean italic: true"italic": trueboolean underline: true"underlined": trueboolean strikethrough: true"strikethrough": trueboolean obfuscate: true"obfuscated": trueboolean
Note the spelling difference: SDK uses underline but JSON uses underlined.
JSON with Shadow Colors
Add shadow effects using the shadow_color property:
const result = generateOutput ({
... rgbDefaults ,
text: 'Shadow' ,
colors: [
{ hex: '#ffff00' , pos: 0 },
{ hex: '#ff8800' , pos: 100 },
],
shadowcolors: [
{ hex: '#444400' , pos: 0 },
{ hex: '#442200' , pos: 100 },
],
format: formats [ 2 ],
});
console . log ( JSON . stringify ( JSON . parse ( result ), null , 2 ));
Output excerpt:
{
"text" : "" ,
"extra" : [
{
"text" : "S" ,
"color" : "#ffff00" ,
"shadow_color" : [ 0.27 , 0.27 , 0 , 1 ]
},
...
]
}
Shadow colors are normalized to the 0-1 range:
RGB values divided by 255
Rounded to 2 decimal places
Alpha channel always set to 1
Format: [red, green, blue, alpha]
Example: #444400 → [0.27, 0.27, 0, 1]
Color Length Control
Control how many characters share the same color:
const result = generateOutput ({
... rgbDefaults ,
text: 'Chunky' ,
colors: [
{ hex: '#ff0000' , pos: 0 },
{ hex: '#0000ff' , pos: 100 },
],
format: formats [ 2 ],
colorlength: 2 , // 2 characters per color step
});
console . log ( JSON . stringify ( JSON . parse ( result ), null , 2 ));
Output:
{
"text" : "" ,
"extra" : [
{
"text" : "Ch" ,
"color" : "#ff0000"
},
{
"text" : "un" ,
"color" : "#aa0054"
},
{
"text" : "ky" ,
"color" : "#5400aa"
}
]
}
When colorlength is greater than 1:
Multiple characters are combined into single extra entries
Reduces JSON size for long text
Creates chunkier, less smooth gradients
Trim Spaces
Control whether whitespace gets color applied:
const withTrim = generateOutput ({
... rgbDefaults ,
text: 'A B' ,
colors: [
{ hex: '#ff0000' , pos: 0 },
{ hex: '#0000ff' , pos: 100 },
],
format: formats [ 2 ],
trimspaces: true , // Default
});
console . log ( JSON . stringify ( JSON . parse ( withTrim ), null , 2 ));
With trimspaces: true:
{
"text" : "" ,
"extra" : [
{
"text" : "A" ,
"color" : "#ff0000"
},
{
"text" : " "
},
{
"text" : "B" ,
"color" : "#0000ff"
}
]
}
When trimspaces: true, whitespace characters are added to the extra array without color or formatting properties, making them render in default color.
Single Color Output
When only one color is provided:
const result = generateOutput ({
... rgbDefaults ,
text: 'Single' ,
colors: [
{ hex: '#00ff00' , pos: 0 },
],
format: formats [ 2 ],
});
console . log ( JSON . stringify ( JSON . parse ( result ), null , 2 ));
Output:
{
"text" : "" ,
"extra" : [
{
"text" : "S" ,
"color" : "#00ff00"
},
{
"text" : "i" ,
"color" : "#00ff00"
},
...
]
}
Even with a single color, each character (or segment based on colorlength) gets its own entry in the extra array.
Gradient Types
JSON format supports all gradient types:
// RGB interpolation (default)
const rgbResult = generateOutput ({
... rgbDefaults ,
text: 'RGB' ,
colors: [
{ hex: '#ff0000' , pos: 0 },
{ hex: '#0000ff' , pos: 100 },
],
gradientType: 'rgb' ,
format: formats [ 2 ],
});
// HSL interpolation
const hslResult = generateOutput ({
... rgbDefaults ,
text: 'HSL' ,
colors: [
{ hex: '#ff0000' , pos: 0 },
{ hex: '#0000ff' , pos: 100 },
],
gradientType: 'hsl' ,
format: formats [ 2 ],
});
// HSV interpolation
const hsvResult = generateOutput ({
... rgbDefaults ,
text: 'HSV' ,
colors: [
{ hex: '#ff0000' , pos: 0 },
{ hex: '#0000ff' , pos: 100 },
],
gradientType: 'hsv' ,
format: formats [ 2 ],
});
Complete Example
A full-featured JSON gradient:
import { rgbDefaults , generateOutput , formats } from '@birdflop/rgbirdflop' ;
const result = generateOutput ({
... rgbDefaults ,
text: 'JSON Gradient' ,
colors: [
{ hex: '#ff0000' , pos: 0 },
{ hex: '#ffaa00' , pos: 50 },
{ hex: '#ffff00' , pos: 100 },
],
shadowcolors: [
{ hex: '#440000' , pos: 0 },
{ hex: '#442200' , pos: 50 },
{ hex: '#444400' , pos: 100 },
],
format: formats [ 2 ],
bold: true ,
italic: true ,
gradientType: 'rgb' ,
trimspaces: true ,
colorlength: 1 ,
});
// Pretty print for readability
const parsed = JSON . parse ( result );
console . log ( JSON . stringify ( parsed , null , 2 ));
Using JSON Output
JSON text components can be used in various Minecraft contexts:
Tellraw Command
const json = generateOutput ({ /* options */ });
const command = `/tellraw @a ${ json } ` ;
Title Command
const json = generateOutput ({ /* options */ });
const command = `/title @a title ${ json } ` ;
Plugin API (Bukkit/Spigot)
String jsonString = "..." ; // From SDK
Component component = GsonComponentSerializer . gson (). deserialize (jsonString);
player . sendMessage (component);
The JSON output is already stringified and ready to use in Minecraft commands or to be parsed by game libraries.
Use Cases
JSON format is ideal for:
Commands - /tellraw, /title, /summon, etc.
Books - Written book content
Signs - Sign text with colors
Entities - Custom entity names
Plugin APIs - Direct use with Adventure or Spigot APIs
Chat Systems - Custom chat formatting
Shadow Colors Learn more about shadow effects in JSON
Custom Formatting Learn more about text formatting options