This simple crispy air fryer tofu takes simply quarter-hour! It makes golden brown, seasoned cubes with tender facilities: the right protein adder for bowls, salads, stir fries, and extra.

Right here’s considered one of my favourite weeknight hero recipes: crispy air fryer tofu! It’s humorous to say this, as a result of I truly was once a skeptic of each the air fryer and tofu. However after creating dozens of tofu recipes, I’ve grown to like this wholesome plant-based protein.
Now that I’ve an air fryer, I understand how clutch it’s for weeknight proteins! This air fryer tofu is so quick and simple: you don’t even should press it! Simply slice into cubes, add a number of seasonings, then air fry for 10 minutes.
Why You’ll Love This Air Fryer Tofu
I’m not exaggerating once I say this air fryer tofu is a weeknight hero in my home! It has saved the day so many instances after we’re unsure what to make (that and my air fryer rooster). Right here’s why I like it:
- It’s extremely quick. Many tofu recipes name for urgent the tofu for half-hour. There’s no urgent wanted right here, and no pre-heating an oven! It’s simply quarter-hour, begin to end.
- It’s crispy and scrumptious. The flavour is seasoned good and it’s received a frivolously crispy exterior.
- You may serve it in so some ways. That is the right plant-based protein so as to add to bowl meals, salads, soups, and extra. (I like it with rice and steamed broccoli for an excellent simple meal).
Key Components
Right here’s what you’ll want for this fundamental recipe:
Further-firm tofu: That is the one kind that works for crispy air fryer tofu. The firmer texture and decrease water content material means higher browning. Keep away from every other kind!
Cornstarch: Cornstarch kinds a light-weight shell that stays crispy even after the tofu cools down. (Arrowroot powder can work in its place).
Olive oil: Only one tablespoon helps the seasonings stick and helps with browning. You may substitute with avocado oil in the event you desire.
Soy sauce: Provides a savory depth. I take advantage of common soy sauce, however tamari works nicely for gluten-free.
Garlic and onion powder: These spices construct a savory basis with out including moisture.
Professional Suggestions for the Finest Air Fryer Tofu
After testing this recipe many instances (with my husband Alex), right here’s the way in which I wish to make air fryer tofu:
Step 1: Preheat your air fryer. These 5 minutes of preheating truly do make a distinction. The tofu hits the warmth instantly, which jumpstarts the crisping course of.
Step 2: Lower uniform cubes and pat dry. I slice my tofu block in half lengthwise first, then reduce every half into 3/4-inch cubes. Attempt to make constant sizes so all the pieces cooks on the identical fee. Place the cubes on a clear dish towel, then gently pat them with a second towel to take away extra moisture.

Step 3: Combine the tofu and seasonings, then cornstarch. Gently toss so the tofu doesn’t break. Stir the seasonings first, then the cornstarch (in order that it will get absolutely coated).

Step 4: Pour into the basket, ensuring to not overcrowd: Unfold the tofu in a single layer with slightly respiration room between items. Crowded tofu steams as a substitute of crisps. If you have to make a double batch, cook dinner it in two rounds.

Step 5: Shake midway by means of. At 6 minutes, I give the basket an excellent shake to rotate all of the items. This makes positive all sides get evenly cooked.
Methods To Serve It
This crispy tofu is so versatile. My youngsters completely like it, and I get pleasure from that it’s a plant-based protein that’s hearty and satisfying (generally an enormous pile of beans simply doesn’t do it for me!).
- In bowls: Toss the tofu right into a tofu bowl with rice, greens, and your favourite sauce. I like it with tofu fried rice or in a farro bowl with hummus dressing.
- Over salads: They’re nice in a tofu salad, or with a Mediterranean pasta salad for a vegan protein increase.
- In stir fries: Strive it in tofu broccoli stir fry or any of your go-to vegan dinner recipes.
- In sandwiches: Layer the crispy tofu onto a breaded tofu sandwich or wrap it in lettuce for fast lettuce wraps.
- In tacos: These cubes make nice tofu tacos: simply add toppings and a taco sauce.
- With noodles: Toss them with soba noodles or on ramen for added protein.
Storage and Reheating
Retailer leftover air fryer tofu within the fridge for 3 to five days. It turns into much less crispy within the fridge.
For the perfect outcomes, reheat the tofu within the air fryer at 375°F for 3-5 minutes: that is the best option to get it crispy once more!
Dietary Notes
This air fryer tofu recipe is vegetarian, vegan, plant-based, dairy-free and gluten-free.
Incessantly Requested Questions
No! That’s top-of-the-line elements about this recipe. The fast pat-dry with dish towels removes sufficient floor moisture for the air fryer to work its magic. I’ve examined this extensively, and urgent doesn’t make a noticeable distinction for this explicit technique.
Keep on with extra-firm tofu for this recipe. Agency tofu comprises an excessive amount of moisture and gained’t get as crispy. Silken tofu will crumble within the air fryer.
The commonest culprits are overcrowding the basket or skipping the cornstarch. Ensure you’re spreading the tofu in a single layer with house between items, and don’t skip the cornstarch: it’s what creates the crispy exterior.
Sure, however the outcomes gained’t be fairly as crispy. Go to my Baked Tofu recipe.
Air Fryer Tofu (Simple & Crispy!)
Grasp crispy air fryer tofu in simply quarter-hour with my simple recipe! These golden brown, seasoned cubes with tender facilities make the right protein adder for bowls, salads, stir fries, and extra.
- Prep Time: 5 minutes
- Cook dinner Time: 10 minutes
- Whole Time: quarter-hour
- Yield: 3 to 4
- Class: Primary Dish
- Methodology: Air Fryer
- Delicacies: Vegan
- Weight loss plan: Vegan
Components
- 1 15-ounce block extra-firm tofu
- 1 tablespoon olive oil
- 2 teaspoons soy sauce or tamari
- ½ teaspoon garlic powder
- ½ teaspoon onion powder
- ½ teaspoon kosher salt
- 1 tablespoon cornstarch
Directions
- Preheat air fryer to 400°F for five minutes.
- Lower the tofu into 3/4-inch cubes (slice the tofu in half lengthwise into two giant rectangles first, then into cubes). Place the cubes on a clear dish towel, then gently pat them with a second towel to take away extra moisture.
- In medium bowl, stir collectively the olive oil, soy sauce, garlic powder, onion powder, and kosher salt. Add the tofu to the bowl and gently stir till coated. Sprinkle the cornstarch over the tofu and stir till simply coated. Dump the tofu into the air fryer basket and unfold into single layer. Cook dinner for 10 to 12 minutes till browned and crispy, shaking after 6 minutes.
- Retailer in an hermetic container in fridge for 3 to five days. (To reheat: Use the air fryer at 375°F for 3-5 minutes, or use an oven at 400°F for 5-7 minutes to revive crispiness.)
window.trCommon={“minRating”:6,”ajaxurl”:”https://www.acouplecooks.com/wp-admin/admin-ajax.php”,”ratingNonce”:””,”postId”:173869};
window.TastyRecipes = window.TastyRecipes || {};
window.TastyRecipes.smoothScroll = {
init() {
doc.addEventListener( ‘click on’, ( e ) => {
let anchor = e.goal;
if ( anchor.tagName !== ‘A’ ) {
anchor = anchor.closest( ‘a.tasty-recipes-scrollto’ );
}
if ( ! anchor || ! anchor.classList.comprises( ‘tasty-recipes-scrollto’ ) ) {
return;
}
const elementHref = anchor.getAttribute( ‘href’ );
if ( ! elementHref ) {
return;
}
e.preventDefault();
this.goToSelector( elementHref );
});
},
goToSelector( selector ) {
const ingredient = doc.querySelector( selector );
if ( ! ingredient ) {
return;
}
ingredient.scrollIntoView( { conduct: ‘easy’ } );
}
};
doc.addEventListener(
‘DOMContentLoaded’,
() => window.TastyRecipes.smoothScroll.init()
);
window.TastyRecipes = window.TastyRecipes || {};
window.TastyRecipes.cookMode = {
wakeLockApi: false,
wakeLock: false,
cookModeSelector: ‘.tasty-recipes-cook-mode’,
init() {
if (“wakeLock” in navigator && “request” in navigator.wakeLock) {
this.wakeLockApi = navigator.wakeLock;
}
const cookModes = doc.querySelectorAll(this.cookModeSelector);
if (cookModes.size > 0) {
for (const cookMode of cookModes) {
if (this.wakeLockApi) {
cookMode.querySelector(‘enter[type=”checkbox”]’).addEventListener(“change”, occasion => {
this.checkboxChange(occasion.goal);
}, false);
} else {
cookMode.model.show = “none”;
}
}
}
},
checkboxChange(checkbox) {
if (checkbox.checked) {
this.lock();
} else {
this.unlock();
}
},
setCheckboxesState(state) {
const checkboxes = doc.querySelectorAll(this.cookModeSelector + ‘ enter[type=”checkbox”]’);
for (const checkbox of checkboxes) {
checkbox.checked = state;
}
},
async lock() {
attempt {
this.wakeLock = await this.wakeLockApi.request(“display”);
this.wakeLock.addEventListener(“launch”, () => {
this.wakeLock = false;
this.setCheckboxesState(false);
});
this.setCheckboxesState(true);
} catch (error) {
this.setCheckboxesState(false);
}
},
unlock() {
if (this.wakeLock) {
this.wakeLock.launch();
this.wakeLock = false;
}
this.setCheckboxesState(false);
}
};
(operate(callback) {
if (doc.readyState !== “loading”) {
callback();
} else {
doc.addEventListener(“DOMContentLoaded”, callback);
}
})(() => {
window.TastyRecipes.cookMode.init();
});
window.TastyRecipes = window.TastyRecipes || {};
window.TastyRecipes.staticTooltip = {
ingredient: null,
tooltipElement: null,
deleting: false,
init( ingredient ) {
if ( this.deleting ) {
return;
}
this.ingredient = ingredient;
this.buildElements();
},
destroy() {
if ( ! this.tooltipElement || this.deleting ) {
return;
}
this.deleting = true;
this.tooltipElement.classList.take away( ‘opened’ );
setTimeout( () => {
this.tooltipElement.take away();
this.deleting = false;
}, 500 );
},
buildElements() {
const tooltipElement = doc.createElement( ‘div’ );
tooltipElement.classList.add( ‘tasty-recipes-static-tooltip’);
tooltipElement.setAttribute( ‘id’, ‘tasty-recipes-tooltip’ );
const currentTooltipElement = doc.getElementById( ‘tasty-recipes-tooltip’ );
if ( currentTooltipElement ) {
doc.physique.replaceChild( tooltipElement, currentTooltipElement );
} else {
doc.physique.appendChild( tooltipElement );
}
this.tooltipElement = doc.getElementById( ‘tasty-recipes-tooltip’ );
},
present() {
if ( ! this.tooltipElement ) {
return;
}
const tooltipTop = this.ingredient.getBoundingClientRect().high
+ window.scrollY
– 10 // 10px offset.
– this.tooltipElement.getBoundingClientRect().peak;
const tooltipLeft = this.ingredient.getBoundingClientRect().left
– ( this.tooltipElement.getBoundingClientRect().width / 2 )
+ ( this.ingredient.getBoundingClientRect().width / 2 ) – 1;
const posLeft = Math.max( 10, tooltipLeft );
this.maybeRemoveTail( posLeft !== tooltipLeft );
this.tooltipElement.setAttribute( ‘model’, ‘high:’ + tooltipTop + ‘px;left:’ + posLeft + ‘px;’ );
this.tooltipElement.classList.add( ‘opened’ );
},
maybeRemoveTail( removeTail ) {
if ( removeTail ) {
this.tooltipElement.classList.add( ‘tr-hide-tail’ );
} else {
this.tooltipElement.classList.take away( ‘tr-hide-tail’ );
}
},
changeMessage( message ) {
if ( ! this.tooltipElement ) {
return;
}
this.tooltipElement.innerHTML = message;
}
};
window.TastyRecipes.ajax = {
sendPostRequest( url, knowledge, success, failure ) {
const xhr = new XMLHttpRequest();
xhr.open( ‘POST’, url, true );
xhr.ship( this.preparePostData( knowledge ) );
xhr.onreadystatechange = () => {
if ( 4 !== xhr.readyState ) {
return;
}
if ( xhr.standing === 200 ) {
success( JSON.parse( xhr.responseText ) );
return;
}
failure( xhr );
};
xhr.onerror = () => {
failure( xhr );
};
},
preparePostData( knowledge ) {
const formData = new FormData();
for ( const key in knowledge ) {
formData.append( key, knowledge[key] );
}
return formData;
},
};
window.TastyRecipes.scores = {
defaultRating: 0,
currentRatingPercentage: 100,
savingRating: false,
init( minRating ) {
this.minRating = minRating;
this.formWatchRating();
this.closeTooltipWhenClickOutside();
this.addBodyClassBasedOnSelectedRating();
this.backwardCompFormRatingPosition();
},
formWatchRating() {
const scores = doc.querySelectorAll(‘.tasty-recipes-no-ratings-buttons [data-rating]’);
if ( scores.size {
occasion.preventDefault();
this.defaultRating = occasion.goal.closest( ‘.checked’ ).dataset.ranking;
this.setCheckedStar( occasion.goal );
this.maybeSendRating( this.defaultRating, occasion.goal );
this.setRatingInForm( this.defaultRating );
} );
}
},
closeTooltipWhenClickOutside() {
window.addEventListener( ‘click on’, e => {
// Bailout (do not take away the tooltip) when the clicked ingredient is a ranking star, or it is the tooltip itself.
if ( e.goal.closest( ‘.tasty-recipes-rating’ ) || e.goal.classList.comprises( ‘tasty-recipes-static-tooltip’ ) ) {
return;
}
window.TastyRecipes.staticTooltip.destroy();
} );
},
setRatingInForm( ranking ) {
const ratingInput = doc.querySelector( ‘#reply .tasty-recipes-rating[value=”‘ + rating + ‘”]’ );
if ( ! ratingInput ) {
return;
}
ratingInput.click on();
},
addBodyClassBasedOnSelectedRating() {
const ratingInputs = doc.querySelectorAll( ‘enter.tasty-recipes-rating’ );
if ( ! ratingInputs ) {
return;
}
for ( const ratingInput of ratingInputs ) {
ratingInput.addEventListener( ‘click on’, currentEvent => {
const selectedRating = currentEvent.goal.getAttribute( ‘worth’ );
this.handleBodyClassByRating( selectedRating );
this.toggleCommentTextareaRequired( selectedRating );
} );
}
},
handleBodyClassByRating( ranking ) {
if ( ranking < this.minRating ) {
doc.physique.classList.take away( 'tasty-recipes-selected-minimum-rating' );
return;
}
doc.physique.classList.add( 'tasty-recipes-selected-minimum-rating' );
},
toggleCommentTextareaRequired( ranking ) {
const commentTextarea = doc.getElementById( 'remark' );
if ( ! commentTextarea ) {
return;
}
if ( ranking {
window.TastyRecipes.staticTooltip.changeMessage( response.knowledge.message );
window.TastyRecipes.staticTooltip.present();
this.updateAverageText( response.knowledge, recipeCardElement );
this.maybeFillCommentForm( response.knowledge );
// Conceal the tooltip after 5 seconds.
setTimeout( () => {
this.maybeResetTooltip( recipeCardElement, response.knowledge, ranking );
}, 5000 );
},
() => {
this.resetTooltip( recipeCardElement );
}
);
},
updateAverageText( knowledge, recipeCardElement ) {
if ( ! knowledge.common ) {
return;
}
this.setRatingPercent( knowledge );
if ( ! knowledge.depend ) {
return;
}
const quickLink = doc.querySelector( ‘.tasty-recipes-rating-link’ );
if ( quickLink ) {
this.setTextInContainer( quickLink, knowledge );
this.setPartialStar( quickLink );
}
const cardStars = recipeCardElement.querySelector( ‘.tasty-recipes-ratings-buttons’ );
cardStars.dataset.trDefaultRating = knowledge.common;
this.setTextInContainer( recipeCardElement.querySelector( ‘.tasty-recipes-rating’ ), knowledge );
},
setTextInContainer( container, knowledge ) {
if ( ! container ) {
return;
}
if ( knowledge.label ) {
const ratingLabelElement = container.querySelector( ‘.rating-label’ );
if ( ratingLabelElement ) {
ratingLabelElement.innerHTML = knowledge.label;
}
return;
}
const averageElement = container.querySelector( ‘.common’ );
if ( averageElement ) {
averageElement.textContent = knowledge.common;
}
const countElement = container.querySelector( ‘.depend’ );
if ( countElement ) {
countElement.textContent = knowledge.depend;
}
},
setPartialStar( container ) {
const highestStar = container.querySelector( ‘[data-rating=”‘ + Math.ceil( this.defaultRating ) + ‘”]’ );
if ( highestStar ) {
highestStar.dataset.trClip = this.currentRatingPercentage;
}
},
setRatingPercent( knowledge ) {
this.defaultRating = knowledge.common.toFixed( 1 );
const elements = knowledge.common.toFixed( 2 ).toString().break up( ‘.’ );
this.currentRatingPercentage = elements[1] ? elements[1] : 100;
if ( this.currentRatingPercentage === ’00’ ) {
this.currentRatingPercentage = 100;
}
},
setCheckedStar( goal ) {
const cardRatingContainer = goal.closest( ‘.tasty-recipes-ratings-buttons’ );
const selectedRatingElement = cardRatingContainer.querySelector( ‘[data-tr-checked]’ );
if ( selectedRatingElement ) {
delete selectedRatingElement.dataset.trChecked;
}
const thisStar = goal.closest( ‘.tasty-recipes-rating’ );
thisStar.dataset.trChecked = 1;
thisStar.querySelector( ‘[data-tr-clip]’ ).dataset.trClip = 100;
},
maybeFillCommentForm( knowledge ) {
if ( ! knowledge.remark || ! knowledge.remark.content material ) {
return;
}
const commentForm = doc.querySelector( ‘#commentform’ );
if ( ! commentForm ) {
return;
}
const commentBox = commentForm.querySelector( ‘[name=comment]’ );
if ( ! commentBox || commentBox.worth ) {
return;
}
// Add remark particulars for modifying.
commentBox.innerHTML = knowledge.remark.content material;
if ( knowledge.remark.identify ) {
commentForm.querySelector( ‘[name=author]’ ).worth = knowledge.remark.identify;
commentForm.querySelector( ‘[name=email]’ ).worth = knowledge.remark.e mail;
}
},
maybeResetTooltip( recipeCardElement, knowledge, ranking ) {
if ( this.savingRating === ranking ) {
this.resetTooltip( recipeCardElement, knowledge );
}
},
resetTooltip( recipeCardElement, knowledge ) {
window.TastyRecipes.staticTooltip.destroy();
this.savingRating = false;
// Reset the default ranking.
const cardRatingContainer = recipeCardElement.querySelector( ‘.tasty-recipes-ratings-buttons’ );
if ( cardRatingContainer ) {
this.defaultRating = ( knowledge && knowledge.common ) ? knowledge.common.toFixed(1) : cardRatingContainer.dataset.trDefaultRating;
cardRatingContainer.dataset.trDefaultRating = this.defaultRating;
this.resetSelectedStar( cardRatingContainer, knowledge );
}
},
resetSelectedStar( cardRatingContainer ) {
const selectedRatingElement = cardRatingContainer.querySelector( ‘[data-rating=”‘ + Math.ceil( this.defaultRating ) + ‘”]’ );
if ( selectedRatingElement ) {
selectedRatingElement.querySelector( ‘[data-tr-clip]’ ).dataset.trClip = this.currentRatingPercentage;
selectedRatingElement.parentNode.dataset.trChecked = 1;
}
const previousSelectedElement= cardRatingContainer.querySelector( ‘[data-tr-checked]’ );
if ( previousSelectedElement ) {
const currentSelectedRating = previousSelectedElement.querySelector(‘[data-rating]’);
if ( currentSelectedRating !== selectedRatingElement ) {
delete previousSelectedElement.dataset.trChecked;
}
}
},
backwardCompFormRatingPosition() {
const ratingsButtons = doc.querySelector( ‘#reply .tasty-recipes-ratings-buttons, #tasty-recipes-comment-rating .tasty-recipes-ratings-buttons’ );
if ( ! ratingsButtons ) {
return;
}
const ratingsButtonsStyles = window.getComputedStyle(ratingsButtons);
if ( ! ratingsButtonsStyles.show.consists of( ‘flex’ ) ) {
ratingsButtons.model.path = ‘rtl’;
}
if ( typeof tastyRecipesRating !== ‘undefined’ ) {
// Choose the ranking that was beforehand chosen in admin.
ratingsButtons.querySelector( ‘.tasty-recipes-rating[value=”‘ + tastyRecipesRating + ‘”]’ ).checked = true;
}
const ratingSpans = ratingsButtons.querySelectorAll( ‘.tasty-recipes-rating’ );
for (const ratingSpan of ratingSpans) {
ratingSpan.addEventListener( ‘click on’, occasion => {
if ( ratingSpan === occasion.goal ) {
return;
}
ratingSpan.previousElementSibling.click on();
} );
}
}
};
(operate(callback) {
if (doc.readyState !== “loading”) {
callback();
} else {
window.addEventListener( ‘load’, callback );
}
})(() => {
window.TastyRecipes.scores.init( window.trCommon ? window.trCommon.minRating : 4 );
});
Extra Tofu Recipes to Strive
When you love this air fryer tofu, take a look at these different tofu recipes:
