Modtweaker helper
Embers
//Melter
//InputStack, OutputFluid, MatchMeta, MatchNBT
mods.embers.Melter.addRecipe(<minecraft:snow>, <liquid:water>, false, false);
//InputOre, OutputFluid, MatchMeta, MatchNBT
mods.embers.Melter.addOreRecipe(<ore:ingotIron>, <liquid:iron>, true, false);
//OutputFluid
mods.embers.Melter.removeRecipe(<liquid:lava);

//Mixer
//Input1Fluid, Input2Fluid, Input3Fluid, Input4Fluid, OutputFluid
mods.embers.Mixer.addRecipe(<liquid:water>, <liquid:lava>, <liquid:iron>, <liquid:gold>, <liquid:copper>);
//OutputFluid
mods.embers.Mixer.removeRecipe(<liquid:brass>);

//Stamper
//InputStack, InputFluid, StampString, OutputStack, MatchMeta, MatchNBT
mods.embers.Stamper.addRecipe(<minecraft:diamond>, <liquid:water>, "stamp", <minecraft:nether_star>, false, true);
//InputOre, InputFluid, StampString, OutputStack
mods.embers.Stamper.addRecipe(<ore:ingotIron>, <liquid:lava>, "stamp", <minecraft:gold_ingot>);
//OutputStack
mods.embers.Stamper.removeRecipe(<minecraft:diamond>); 

Tinkers
//Casting
//OutputStack, InputFluid, CastStack, ConsumeCast, Time in Ticks
mods.tconstruct.Casting.addBasinRecipe(<minecraft:magma>, <liquid:lava> * 250, <minecraft:netherrack>);
//OutputStack, InputFluid, CastStack, ConsumeCast, Time in Ticks
mods.tconstruct.Casting.addTableRecipe(<minecraft:nether_star>, <liquid:manyullyn> * 50000, <minecraft:emerald>);
//OutputStack, InputFluid, CastStack
mods.tconstruct.Casting.removeBasinRecipe(<minecraft:sand:1>, <liquid:blood>, <minecraft:sand>);
//OutputStack, InputFluid, CastStack
mods.tconstruct.Casting.removeTableRecipe(<minecraft:iron_ingot>, <liquid:iron>, <tconstruct:cast_custom>);

//Drying Rack
//InputStack, OutputStack, Time in Ticks
mods.tconstruct.Drying.addRecipe(<minecraft:tallgrass:1>, <minecraft:deadbush>, 50);
//OutputStack
mods.tconstruct.Drying.removeRecipe(<tconstruct:edible:10>);
 
//Modifiers
//ModifierString
mods.tconstruct.Modifiers.remove("luck");
 
//Smeltery
//OutputFluid, InputFluidArray
mods.tconstruct.Smeltery.addAlloy(<liquid:gold> * 8, [<liquid:emerald> * 64, <liquid:iron> * 32]);
//OutputFluid
mods.tconstruct.Smeltery.removeAlloy(<liquid:obsidian>);
//OutputFluid, InputStack, TemperatureAmount, BlockRender
mods.tconstruct.Smeltery.addMelting(<liquid:blood> * 200, <minecraft:porkchop>, 200, <tconstruct:slime:2>);
//InputStack
mods.tconstruct.Smeltery.removeMelting(<minecraft:rotten_flesh>);
//InputFluid, TemperatureAmount, Time in Ticks
mods.tconstruct.Smeltery.addFuel(<liquid:iron>);
//InputFluid
mods.tconstruct.Smeltery.removeFuel(<liquid:lava>);

//Materials
//Material.HeadModifier = Amount
<material:stone>.durabilityHead = 5;
<material:stone>.miningSpeedHead = 5;
<material:stone>.attackHead = 5;
<material:stone>.harvestLevelHead = 5;
//Material.HandleModifier = Amount
<material:obsidian>.durabilityHandle = 5;
<material:obsidian>.modifierHandle = 5;
//Material.GeneralModifier = Amount
<material:obsidian>.durabilityExtra = 5;

Actually additions
//Atomic Reconstructor
//InputStack, OutputStack, Energy
mods.actuallyadditions.AtomicReconstructor.addRecipe(<minecraft:diamond>, <minecraft:dirt>, 1000);
//OutputStack
mods.actuallyadditions.AtomicReconstructor.remove(<minecraft:dirt>);

//Coffee Maker
//InputStack, Amplifier, EffectArray, DurationArray
mods.actuallyadditions.CoffeeMaker.addRecipe(<minecraft:netherrack>, 10, ["swiftness"], [1]);
//InputStack
mods.actuallyadditions.CoffeeMaker.remove(<minecraft:sugar>);

//Compost
//InputStack, InputDisplay, OutputStack, OutputDisplay
mods.actuallyadditions.Compost.addRecipe(<minecraft:sugar>, <minecraft:snow>, <minecraft:dirt>, <minecraft:dirt>);
//InputStack
mods.actuallyadditions.Compost.remove(<minecraft:dirt>);

//Crusher
//InputStack, OutputStack, Output2Stack, Output2Chance
mods.actuallyadditions.Crusher.addRecipe(<minecraft:iron_ore>, <minecraft:iron_ingot>, <minecraft:stone>, 50);
//InputStack
mods.actuallyadditions.Crusher.remove(<minecraft:gold_ore>);

//Empowerer
//InputStack, OutputStack, ModifierStack
mods.actuallyadditions.Empowerer.addRecipe(<minecraft:iron_ingot>, <minecraft:gold_ingot>, <minecraft:redstone_dust>);
//InputStack, OutputStack
mods.actuallyadditions.Empowerer.remove(<minecraft:gold_ore>, <minecraft:gold_ingot>);

blood magic
//Alchemy Table
//OutputStack, LP, Ticks, Tier, InputArray
mods.bloodmagic.AlchemyTable.addRecipe(<minecraft:nether_star>, 500000, 5000, 5, [minecraft:gold_ingot>, <minecraft:diamond>]);
//OutputStack
mods.bloodmagic.AlchemyTable.removeRecipe(<minecraft:sugar>);

//Altar
//OutputStack, MinimumTier, SyphonValue, ConsumeRate, DrainRate, InputArray
mods.bloodmagic.Altar.addRecipe(<minecraft:diamond>, 2, 50, 200, 500, [<minecraft:coal>, <minecraft:gold_ingot>]);
//OutputStack
mods.bloodmagic.Altar.removeRecipe(<minecraft:glass>);
//OutputStack, ItemList, Map
mods.bloodmagic.Altar.removeRecipe(<minecraft:glass>, <minecraft:diamond>, <minecraft:gold_ingot>);  

//Soul Forge
//OuputStack, MinimumSoul, DrainRate, InputArray
mods.bloodmagic.SoulForge.addRecipe(<minecraft:netherrack>, 5, 10, [<minecraft:blaze_rod>, <minecraft:dirt>]);
//OutputStack
mods.bloodmagic.SoulForge.removeRecipe(<minecraft:glass>);

botania
//Botanical Brewing
//InputArray, BrewString
mods.botania.Brew.addRecipe([<minecraft:nether_wart>, <minecraft:reeds>, <minecraft:redstone>], "speed");
//BrewString
mods.botania.Brew.removeRecipe("absorption"); 

//Elven Trade
//OutputStack, InputArray
mods.botania.ElvenTrade.addRecipe(<Botania:flower:4>, [<minecraft:yellow_flower>]);
//OutputStack
mods.botania.ElvenTrade.removeRecipe(<Botania:dreamwood>);

//Mana Infusion/Alchemy/Conjuration
//OutputStack, InputStack, ManaCost
mods.botania.ManaInfusion.addInfusion(<minecraft:golden_apple:1>, <minecraft:golden_apple>, 50000);
mods.botania.ManaInfusion.addAlchemy(<minecraft:sand> * 4, <minecraft:sandstone:*>, 10);
mods.botania.ManaInfusion.addConjuration(<minecraft:sand:1> * 2, <minecraft:sand:1>, 5);
//OutputStack
mods.botania.ManaInfusion.removeRecipe(<Botania:manaResource>); //Infusion
mods.botania.ManaInfusion.removeRecipe(<minecraft:leather>); //Alchemy
mods.botania.ManaInfusion.removeRecipe(<minecraft:redstone> * 2); //Conjuration

//Orechid
//InputOredict, Weight
mods.botania.Orechid.addOre(<ore:logWood>, 5000);
//InputOredict
mods.botania.Orechid.removeOre(<ore:oreIron>);

//Petal Apothecary - Everything is a valid input item except seeds that complete the crafting process
//OutputStack, InputArray
mods.botania.Apothecary.addRecipe("bubbell", [<ore:petalCyan>, <ore:petalBlue>, <Botania:manaResource:6>, <Botania:manaResource:10> * 1]);
mods.botania.Apothecary.addRecipe(<minecraft:melon>, [<ore:petalLime>, <ore:petalRed>, <minecraft:wheat_seeds>]);
//OutputStack OR String (String is for subtiled Botania Flowers)
mods.botania.Apothecary.removeRecipe("daybloom");

//Pure Daisy
//InputBlock, OutputBlock
mods.botania.PureDaisy.addRecipe(<minecraft:emerald_block>, <minecraft:diamond_block>);
//OutputBlock
mods.botania.PureDaisy.removeRecipe(<minecraft:obsidian>);

//Rune Altar
//OutputStack, InputArray, ManaCost
mods.botania.RuneAltar.addRecipe(<minecraft:stonebrick:2>, [<minecraft:stonebrick>, <minecraft:gunpowder>], 5);
//OutputStack
mods.botania.RuneAltar.removeRecipe(<Botania:rune>);

chisel

//Groups
//Group
mods.chisel.Groups.addGroup("hardenedclay"); 
//Group
mods.chisel.Groups.removeGroup("andesite"); 

//Variations
//Group, ItemStack
mods.chisel.Groups.addVariation("hardenedclay", <minecraft:stained_hardened_clay:*>);
//ItemStack
mods.chisel.Groups.removeVariation(<chisel:hexPlating>);

extra util
//Resonator
//OutputStack, InputStack, Energy, OwnerTag
mods.extrautils.Resonator.add(<minecraft:diamond>, <minecraft:redstone_dust>, true);
//OutputStack
mods.extrautils.Resonator.remove(<minecraft:redstone_dust>);

refined storage
//Solderer
//OutputStack, Time, Input1Stack, Input2Stack, Input3Stack
mods.refinedstorage.Solderer.add(<minecraft:diamond>, 10, <minecraft:dye>, <minecraft:dye:1>, <minecraft:dye:2>);
//OuputStack
mods.refinedstorage.Solderer.remove(<redstone_dust>);

projectE
//Imports
import mods.projecte.PhiloStone;
import mods.projecte.KleinStar;

//PhiloStone Smelting
addPhiloSmelting(output, input, (optional) fuel), fuel can be any item. Defaults to coal
PhiloStone.addPhiloSmelting(<minecraft:stone_pickaxe>, <minecraft:iron_ingot>);
PhiloStone.addPhiloSmelting(<minecraft:stone_pickaxe>, <minecraft:iron_ingot>, <minecraft:coal>);
PhiloStone.addPhiloSmelting(<minecraft:stone_pickaxe>, <minecraft:iron_ingot>, <minecraft:stone>);
removePhiloSmelting(output)
PhiloStone.removePhiloSmelting(<minecraft:stone_pickaxe>);

//world transmutation
addWorldTransmutation(output,(optional)sneakOutput, input), two or three parameters
PhiloStone.removeWorldTransmutation(<minecraft:sand>, <minecraft:cobblestone>, <minecraft:grass>);
PhiloStone.addWorldTransmutation(<minecraft:obsidian>, <minecraft:cobblestone>, <minecraft:grass>);
PhiloStone.addWorldTransmutation(<minecraft:obsidian>, <minecraft:grass>);

//kleinstar
KleinStar.addShaped(<ProjectE:item.pe_klein_star:2>, [[<ProjectE:item.pe_klein_star:1>, <minecraft:dirt>, <ProjectE:item.pe_klein_star:1>], [<minecraft:dirt>, <ProjectE:item.pe_klein_star:1>, <minecraft:dirt>], [<ProjectE:item.pe_klein_star:1>, <minecraft:dirt>, <ProjectE:item.pe_klein_star:1>]]);
KleinStar.addShapeless(<ProjectE:item.pe_klein_star:2>, [<ProjectE:item.pe_klein_star:1>, <ProjectE:item.pe_klein_star:1>]);
KleinStar.removeRecipe(<ProjectE:item.pe_klein_star:2>);

//vanilla
print("My text");

[[<minecraft:iron_ingot>, <minecraft:iron_ingot>, <minecraft:iron_ingot>],
 [<minecraft:iron_ingot>, null, <minecraft:iron_ingot>],
 [<minecraft:iron_ingot>, null, <minecraft:iron_ingot>]]

recipes.addShaped(<minecraft:iron_leggings>,
 [[<minecraft:iron_ingot>, <minecraft:iron_ingot>, <minecraft:iron_ingot>],
  [<minecraft:iron_ingot>, null, <minecraft:iron_ingot>],
  [<minecraft:iron_ingot>, null, <minecraft:iron_ingot>]]);

recipes.remove(<minecraft:stick>);
recipes.addShaped(<minecraft:stick> * 4, [[<minecraft:planks>, null], [null, <minecraft:planks>]]);

recipes.remove(<minecraft:stick>);
recipes.addShaped(<minecraft:stick> * 4, [[<minecraft:planks:*>, null], [null, <minecraft:planks:*>]]);

recipes.removeShaped(<minecraft:stick>, [[<minecraft:planks:*>], [<minecraft:planks:*>]]);

recipes.removeShaped(<minecraft:stick>);
recipes.removeShapeless(<minecraft:stick>);

recipes.removeShaped(<minecraft:stick>, [[<*>], [<*>]]);

var coal = <minecraft:coal:0>; // same as <minecraft:coal>
var charcoal = <minecraft:coal:1>;

var anyCoal = <minecraft:coal:*>;

var pick = <minecraft:stone_pickaxe>;
var iron = <minecraft:iron_ingot>;

var pick = <minecraft:stone_pickaxe>.anyDamage();
var iron = <minecraft:iron_ingot>;
// upgrade pick recipe :)
recipes.addShaped(<minecraft:iron_pickaxe>, [[iron, iron, iron], [null, pick, null]]);

val stick = <minecraft:stick>;
val planks = <minecraft:planks:*>;
recipes.remove(stick);
recipes.addShaped(stick * 4, [[planks, null], [null, planks]]);
In this example, var can be used to:

var stick = <minecraft:stick>;
var planks = <minecraft:planks:*>;
recipes.remove(stick);
recipes.addShaped(stick * 4, [[planks, null], [null, planks]]);
The difference between var and val is that a val cannot be modified after it is declared:

val stick = <minecraft:stick>;
stick = <minecraft:bread>; // fails

val copper = <IC2:itemIngotCopper>;
val tin = <IC2:itemIngotTin>;
val iron = <minecraft:iron_ingot>;

val copper = <ore:ingotCopper>;
val tin = <ore:ingotTin>;
val iron = <ore:ingotIron>;

val copper = <ore:ingotCopper>;
val tin = <ore:ingotTin>;
val iron = <ore:ingotIron>;
iron.add(<minecraft:coal>);

recipes.addShaped(<IC2:itemPartAlloy>, [[iron, iron, iron], [copper, copper, copper], [tin, tin, tin]]);

val copper = <ore:ingotCopper>;
val tin = <ore:ingotTin>;
val iron = <ore:ingotIron>;
iron.add(<minecraft:coal>);
iron.remove(<minecraft:iron_ingot>);

recipes.addShaped(<IC2:itemPartAlloy>, [[iron, iron, iron], [copper, copper, copper], [tin, tin, tin]]);

<ore:ingotIron>.mirror(<ore:ingotTin>);

val myEntry = <ore:myOwnEntry>;
myEntry.add(<minecraft:coal>);
myEntry.add(<minecraft:iron_ingot>);

<ore:dustSalt>.addAll(<ore:foodSalt>);
<ore:foodSalt>.mirror(<ore:dustSalt>); 

//Furnace
furnace.remove(<minecraft:gold_ingot>);
// alternatively, you can specify the input item
furnace.remove(<*>, <minecraft:iron_ore>);
furnace.addRecipe(<minecraft:coal:0>, <minecraft:coal:1>);
// or, if you want to generate 0.5 XP by doing so
furnace.addRecipe(<minecraft:coal:0>, <minecraft:coal:1>, 0.5);
furnace.setFuel(<minecraft:rotten_flesh>, 100);

//Advanced Recipes
val stick = <minecraft:stick>;
val pick = <minecraft:stone_pickaxe>;
val damagedPick = pick.withDamage(10);
val stickedPick = pick.withTag({display: {Name: "Sticked pick", Lore: ["This pick", "Has been sticked"]}});

recipes.addShaped(damagedPick, [[pick, stick]]);
recipes.addShaped(stickedPick, [[pick, stick], [stick, stick]]);

val stick = <minecraft:stick>;
val pick = <minecraft:stone_pickaxe>;
val damagedPick = pick.withDamage(10);
val stickedPick = pick.withTag({display: {Name: "Sticked pick", Lore: ["This pick", "Has been sticked"]}});

recipes.addShaped(damagedPick, [[pick, stick]]);
recipes.addShaped(stickedPick, [[pick, stick], [stick, stick]]);

val stonedPick = pick.withTag({display: {Name: "Stoned pick", Lore: ["This pick", "Has been experimenting too much"]}});
val onlyStickedPick = pick.onlyWithTag({display: {Name: "Sticked pick"}});
val cobble = <minecraft:cobblestone>;
recipes.addShaped(stonedPick, [[onlyStickedPick, cobble], [cobble, cobble]]);

myItem.onlyDamaged(); // only accepts damaged items
myItem.onlyDamageAtLeast(15); // only accepts items with a damage of at least 15
myItem.onlyDamageAtMost(100); // only accepts items with a damage of at most 100
myItem.onlyDamageBetween(15, 100); // only accepts items with a damage between 15 and 100
Multiple conditions can be added to a single ingredient, too:

myItem.onlyDamaged().onlyWithTag({display: {Name: "Sticked pick"}});

recipes.addShapeless(<minecraft:stick> * 3, [<minecraft:stone_axe>, <ore:woodPlanks>]);

recipes.addShapeless(<minecraft:stick> * 3, [<minecraft:stone_axe>.reuse(), <ore:plankWood>]);

recipes.addShapeless(<minecraft:stick> * 3, [<minecraft:stone_axe>.transformDamage(), <ore:plankWood>]);

recipes.addShapeless(<minecraft:stick> * 3, [<minecraft:stone_axe>.transformDamage(4), <ore:plankWood>]);

recipes.addShapeless(<minecraft:grass>, [<minecraft:dirt>, <minecraft:water_bucket>, <minecraft:wheat>]);

recipes.addShaped(<minecraft:grass>, [[
	<minecraft:dirt>,
	<minecraft:water_bucket>.transformReplace(<minecraft:bucket>),
	<minecraft:wheat>
]]);

recipes.addShaped(<minecraft:grass>, [[
	<minecraft:dirt>,
	<minecraft:water_bucket>.noReturn(),
	<minecraft:wheat>
]]);
recipes.addShaped(<minecraft:grass>, [[
	<minecraft:dirt>,
	<minecraft:water_bucket>.giveBack(<minecraft:iron_ore> * 3),
	<minecraft:wheat>
]]);

recipes.addShapeless(<minecraft:stone_pickaxe>, [<minecraft:stone_pickaxe>, <minecraft:cobblestone>], function(output, inputs, crafting) {
  // to be implemented
}
Now we need to look at the value of the pickaxe. In order to retrieve the actual values of the inputs, we need to mark them with a name, and MineTweaker will store it in the inputs list:

recipes.addShapeless(<minecraft:stone_pickaxe>, [<minecraft:stone_pickaxe>.marked("pick"), <minecraft:cobblestone>], function(output, inputs, crafting) {
  // to be implemented. inputs.pick now contains the pickaxe used as input
}
Then it's just a matter of writing the code to fix the pickaxe:

recipes.addShapeless(<minecraft:stone_pickaxe>, [<minecraft:stone_pickaxe>.anyDamage().marked("pick"), <minecraft:cobblestone>], function(output, inputs, crafting) {
  // the max is there to make sure that the damage doesn't go negative
  // fixes 25 damage per cobblestone
  return inputs.pick.withDamage(max(0, inputs.pick.damage - 25));
});

print(<minecraft:chest>.displayName); // prints the original name
<minecraft:chest>.displayName = "Storage Box";


Adding tooltips can be done directly on any kind of ingredient:

<ore:plankWood>.addTooltip("These are wood planks");
<minecraft:stick>.addTooltip("These are sticks");
Two kinds of tooltips are available: regular tooltips and tooltips that only appear when the shift key is being pressed:

<minecraft:stick>.addShiftTooltip("Only appears with shift");
Markup
Tooltips can be colored and styled using the format functions:

<minecraft:stick>.addTooltip(format.green("This is green text"));
The following formatting functions are available:

format.black
format.darkBlue
format.darkGreen
format.darkAqua
format.darkRed
format.darkPurple
format.gold
format.gray
format.darkGray
format.blue
format.green
format.aqua
format.red
format.lightPurple
format.yellow
format.white

format.obfuscated
format.bold
format.strikethrough
format.underline
format.italic
Strings (and formatted strings) can be concatenated and nested easily:

<minecraft:stick>.addTooltip(format.green(format.italic("This is a stick") + " with " + format.strikethrough("text")) + " in multiple styles");
Be careful to match the brackets properly!


var myItems = [<minecraft:stick>, <minecraft:stone>];
import minetweaker.item.IItemStack;

var myItems = [<minecraft:stick>, <minecraft:stone>] as IItemStack[];
import minetweaker.item.IIngredient;

var myIngredients = [<ore:plankWood>, <minecraft:stick>.onlyWithTag({display:{Name: "Something"}})] as IIngredient[];
var myIngredients2 = [<minecraft:stick>, <ore:plankWood>] as IIngredient[]; // will work since an IItemStack can be casted to an IIngredient

import minetweaker.item.IItemStack;

var myLogs = [<minecraft:log:0>, <minecraft:log:1>, <minecraft:log:2>, <minecraft:log:3>, <minecraft:log:4>, <minecraft:log:5>] as IItemStack[];
var myPlanks = [<minecraft:planks:0>, <minecraft:planks:1>, <minecraft:planks:2>, <minecraft:planks:3>, <minecraft:planks:4>, <minecraft:planks:5>] as IItemStack[];

var stoneAxe = <minecraft:stone_axe>.anyDamage().transformDamage();
var ironAxe = <minecraft:iron_axe>.anyDamage().transformDamage();
var goldenAxe = <minecraft:golden_axe>.anyDamage().transformDamage();
var diamondAxe = <minecraft:diamond_axe>.anyDamage().transformDamage();

    var plank = myPlanks[i];
    
    recipes.removeShapeless(plank, [log]);
    recipes.addShapeless(plank * 2, [log]);
    recipes.addShapeless(plank * 3, [log, stoneAxe]);
    recipes.addShapeless(plank * 4, [log, ironAxe]);
    recipes.addShapeless(plank * 5, [log, goldenAxe]);
    recipes.addShapeless(plank * 6, [log, diamondAxe]);
}

import minetweaker.data.IData;
import minetweaker.item.IItemStack;

var myData = {display: {Name: "Axed plank"}} as IData;
var myLogs = [<minecraft:log:0>, <minecraft:log:1>, <minecraft:log:2>, <minecraft:log:3>, <minecraft:log:4>, <minecraft:log:5>] as IItemStack[];
var myPlanks = [<minecraft:planks:0>, <minecraft:planks:1>, <minecraft:planks:2>, <minecraft:planks:3>, <minecraft:planks:4>,<minecraft:planks:5>] as IItemStack[]; 
var stoneAxe = <minecraft:stone_axe>.anyDamage().transformDamage();
var ironAxe = <minecraft:iron_axe>.anyDamage().transformDamage();
var goldenAxe = <minecraft:golden_axe>.anyDamage().transformDamage();
var diamondAxe = <minecraft:diamond_axe>.anyDamage().transformDamage();

for i, log in myLogs {
    var plank = myPlanks[i].withTag(myData);
    
    recipes.removeShapeless(plank, [log]);
    recipes.addShapeless(plank * 2, [log]);
    recipes.addShapeless(plank * 3, [log, stoneAxe]);
    recipes.addShapeless(plank * 4, [log, ironAxe]);
    recipes.addShapeless(plank * 5, [log, goldenAxe]);
    recipes.addShapeless(plank * 6, [log, diamondAxe]);
}


// Set translation but only if language is en_US
game.setLocalization("en_US", "nei.inventory.prev", "Past");

//KEY, TEXT - You will want to use this one most of the time, it overrides no matter the language
game.setLocalization("nei.inventory.next", "Future");
To find localizations, check the localization files in the assets of Minecraft or the mods you want to alter.
