# Hardhat vs Foundry vs Remix — Comparaison d'Environnements de Développement
Choisir son environnement de développement Solidity est une décision cruciale qui impacte votre productivité, votre workflow de test et votre capacité à collaborer. En 2026, trois outils dominent : Hardhat, Foundry et Remix.
Vue d'Ensemble Rapide
| Critère | Hardhat | Foundry | Remix |
|---------|---------|---------|-------|
| Langage | TypeScript/JS | Rust/Solidity | Browser (JS) |
| Courbe d'apprentissage | Moyenne | Raide | Faible |
| Vitesse des tests | Lent | Très rapide | N/A |
| Tooling | Riche | Minimaliste | Zero-config |
| Production-ready | ✅ | ✅ | ❌ |
| Idéal pour | Projets pro | Performance | Prototypage |
Hardhat : Le Standard de l'Industrie
Forces
1. Écosystème Riche
Hardhat bénéficie du plus gros écosystème de plugins :
// hardhat.config.js
require("@nomicfoundation/hardhat-toolbox"); // Bundle de plugins
require("hardhat-gas-reporter");
require("hardhat-contract-sizer");
require("@openzeppelin/hardhat-upgrades");
require("hardhat-deploy");
2. TypeScript-First
Intégration native avec TypeScript pour des scripts typés :
// scripts/deploy.ts
import { ethers } from "hardhat";
import type { MyContract } from "../typechain-types";
async function main() {
const Contract = await ethers.getContractFactory("MyContract");
const contract: MyContract = await Contract.deploy();
await contract.waitForDeployment();
console.log(Deployed to: ${await contract.getAddress()});
}
3. Debugging Exceptionnel
Hardhat Network affiche des stack traces claires avec les variables :
Error: VM Exception while processing transaction: reverted with reason string 'Insufficient balance'
at MyContract.transfer (contracts/Token.sol:45)
balance: 100
amount: 500
msg.sender: 0x123...
4. Mainnet Forking
Forker Ethereum mainnet pour tester contre des protocoles réels :
// hardhat.config.js
networks: {
hardhat: {
forking: {
url: https://eth-mainnet.g.alchemy.com/v2/${ALCHEMY_KEY},
blockNumber: 19000000 // Pin à un block spécifique
}
}
}
// Test contre Uniswap en local
it("swaps on mainnet fork", async () => {
const uniswap = await ethers.getContractAt(
"IUniswapV2Router02",
"0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D"
);
await uniswap.swapExactETHForTokens(/*...*/);
});
Faiblesses
1. Lenteur des Tests
Les tests Hardhat (JavaScript/TypeScript) sont ~10-50x plus lents que Foundry :
# 100 tests
Hardhat: ~30 secondes
Foundry: ~0.5 secondes
2. Consommation Mémoire
Node.js + tous les plugins = processus lourd (300-500 MB RAM).
3. Configuration Verbose
Setup initial plus lourd qu'un forge init.
Quand Utiliser Hardhat
✅ Projets professionnels nécessitant intégration CI/CD complexe
✅ Équipes TypeScript déjà familiarisées avec l'écosystème JS
✅ Déploiements multi-chain avec scripts sophistiqués
✅ Upgradeable contracts (excellent support OpenZeppelin)
✅ Debugging intensif de bugs complexes
❌ Prototypage rapide
❌ Performance critique sur les tests
Foundry : La Puissance de Rust
Forces
1. Vitesse Extrême
Foundry exécute les tests en Rust natif, avec parallélisation :
# 500 tests en moins de 2 secondes
forge test
# Fuzzing sur 10,000 inputs en quelques secondes
forge test --fuzz-runs 10000
2. Tests en Solidity
Écrire les tests dans le même langage que les contrats :
// test/Token.t.sol
contract TokenTest is Test {
Token token;
address alice = address(0x1);
function setUp() public {
token = new Token();
vm.prank(alice);
token.mint(1000);
}
function testTransfer() public {
vm.prank(alice);
token.transfer(address(0x2), 100);
assertEq(token.balanceOf(address(0x2)), 100);
}
// Fuzz testing natif
function testFuzzTransfer(address to, uint256 amount) public {
vm.assume(to != address(0));
vm.assume(amount <= 1000);
vm.prank(alice);
token.transfer(to, amount);
}
}
3. Cheatcodes Puissants
Foundry offre des "cheatcodes" pour manipuler l'EVM :
// Manipuler le temps
vm.warp(block.timestamp + 1 days);
// Changer l'appelant
vm.prank(alice);
// Simuler un revert attendu
vm.expectRevert("Insufficient balance");
token.transfer(bob, 1000000);
// Mocker un call
vm.mockCall(
address(oracle),
abi.encodeCall(oracle.getPrice, ()),
abi.encode(1500e8)
);
// Enregistrer les logs
vm.recordLogs();
4. Gas Snapshots
Tracker les changements de coûts gas automatiquement :
forge snapshot
# Génère .gas-snapshot
testTransfer() (gas: 51234)
testMint() (gas: 67890)
# Compare avec le snapshot précédent
forge snapshot --diff
5. Tooling Minimaliste et Rapide
forge init my-project # Setup en 1 seconde
forge build # Compile ultra-rapide
forge test # Tests en <1s
forge coverage # Coverage report
forge fmt # Formatteur Solidity
Faiblesses
1. Écosystème Moins Mature
Moins de plugins et intégrations tierces que Hardhat.
2. Scripts de Deploy en Solidity
Les scripts de déploiement en Solidity sont moins flexibles que TypeScript :
// script/Deploy.s.sol
contract DeployScript is Script {
function run() external {
vm.startBroadcast();
new MyContract();
vm.stopBroadcast();
}
}
Pas de logique complexe (API calls, conditions, etc.).
3. Debugging Moins Visuel
Pas de debugger step-by-step visuel (ligne de commande uniquement).
4. Courbe d'Apprentissage
Cheatcodes et syntaxe Solidity pour les tests peuvent décontenancer les nouveaux.
Quand Utiliser Foundry
✅ Projets performance-critical (protocols DeFi complexes)
✅ TDD (Test-Driven Development) avec itérations rapides
✅ Fuzz testing intensif
✅ Gas optimization (snapshots, profiling)
✅ Développeurs Rust ou puristes Solidity
❌ Besoin de scripts deploy complexes
❌ Équipe junior en Solidity
Remix : Le Playground Web
Forces
1. Zero Setup
Ouvrir remix.ethereum.org et coder immédiatement.
2. Interface Visuelle
- Explorateur de fichiers
- Compilateur avec warnings visuels
- Debugger step-by-step avec variables
- Déploiement en 1 clic
3. Pédagogique
Idéal pour apprendre Solidity sans friction :
// Écrire, compiler et déployer en 30 secondes
contract HelloWorld {
string public message = "Hello, Solidity!";
function setMessage(string memory _msg) public {
message = _msg;
}
}
4. Plugins
- Solhint (linter)
- Gas Profiler
- Etherscan verification
- One-click deployment multi-chain
5. Collaboration
Partager des Gists GitHub pour reproduire des bugs.
Faiblesses
1. Pas Production-Ready
Impossible de versionner correctement, pas de CI/CD, pas de tests automatisés sérieux.
2. Performance
Tout dans le browser = lent pour de gros projets.
3. Sécurité
Code sensible dans un browser = risque (keystroke logging, XSS).
4. Pas de Tests Unitaires Sérieux
Le plugin "Solidity Unit Testing" est basique comparé à Hardhat/Foundry.
Quand Utiliser Remix
✅ Apprentissage de Solidity
✅ Prototypage rapide d'un concept
✅ Debugging visuel d'un bug spécifique
✅ Démos et workshops
✅ Quick audits de petits contrats
❌ Développement de production
❌ Gestion de gros projets
Comparaison Détaillée : Test Workflow
Scénario : Tester un token ERC-20
Hardhat
// test/Token.test.ts
import { expect } from "chai";
import { ethers } from "hardhat";
import { Token } from "../typechain-types";
describe("Token", () => {
let token: Token;
beforeEach(async () => {
const Token = await ethers.getContractFactory("Token");
token = await Token.deploy();
});
it("transfers tokens", async () => {
const [owner, addr1] = await ethers.getSigners();
await token.transfer(addr1.address, 100);
expect(await token.balanceOf(addr1.address)).to.equal(100);
});
});
Temps : ~3-5 secondes pour 10 tests
Types : Excellent (TypeScript)
Lisibilité : Très bonne
Foundry
// test/Token.t.sol
contract TokenTest is Test {
Token token;
function setUp() public {
token = new Token();
}
function testTransfer() public {
address addr1 = address(0x1);
token.transfer(addr1, 100);
assertEq(token.balanceOf(addr1), 100);
}
}
Temps : ~0.2 secondes pour 10 tests
Types : Natif (Solidity)
Lisibilité : Bonne
Matrice de Décision
| Use Case | Recommandation | Raison |
|----------|---------------|--------|
| Apprendre Solidity | Remix → Hardhat | Zero friction puis structure pro |
| Projet DeFi | Foundry | Performance + fuzz testing |
| Projet NFT | Hardhat | Scripts deploy + metadata |
| Audit/Security | Foundry | Fuzzing + invariant testing |
| Équipe JS/TS | Hardhat | Cohérence stack |
| Équipe Rust | Foundry | Cohérence stack |
| Prototypage | Remix | Rapidité |
| CI/CD complexe | Hardhat | Plugins + flexibility |
Hybrid Workflow (Recommandé)
Beaucoup de projets combinent les outils :
1. Prototypage initial → Remix
Tests unitaires → Foundry (vitesse)
Tests intégration → Hardhat (forking mainnet)
Déploiement → Hardhat (scripts TypeScript)
Vérification → Les deux (forge verify / hardhat verify)
Exemple setup dual :
my-project/
├── foundry.toml # Config Foundry
├── hardhat.config.ts # Config Hardhat
├── src/ # Contrats (partagé)
├── test/
│ ├── foundry/ # Tests Foundry (rapides)
│ └── hardhat/ # Tests Hardhat (intégration)
└── scripts/ # Scripts deploy Hardhat
Recommandations Finales
Si vous débutez : Commencez avec Remix pour comprendre les bases, puis passez à Hardhat pour structurer vos projets.
Si vous êtes un dev expérimenté : Adoptez Foundry pour la performance, gardez Hardhat pour les déploiements complexes.
Si vous travaillez en équipe : Hardhat offre la meilleure expérience collaborative avec TypeScript et CI/CD.
Si vous optimisez pour le gas : Foundry avec forge snapshot et forge test --gas-report est imbattable.
Sur Solingo, nous supportons les trois environnements pour vous permettre de choisir celui qui correspond le mieux à votre style de développement et d'expérimenter avec chacun dans un environnement interactif.