# Hardhat vs Foundry vs Remix — Development Environment Comparison
Choisir son environnement de developpement Solidity est une decision cruciale qui impacte votre productivite, votre workflow de test et votre capacite a collaborer. En 2026, trois outils dominent : Hardhat, Foundry et Remix.
Vue d'Ensemble Rapide
| Critere | Hardhat | Foundry | Remix |
|---------|---------|---------|-------|
| Langage | TypeScript/JS | Rust/Solidity | Browser (JS) |
| Courbe d'apprentissage | Moyenne | Raide | Faible |
| Vitesse des tests | Lent | Tres rapide | N/A |
| Tooling | Riche | Minimaliste | Zero-config |
| Production-ready | ✅ | ✅ | ❌ |
| Ideal pour | Projets pro | Performance | Prototypage |
Hardhat : Le Standard de l'Industrie
Forces
1. Ecosysteme Riche
Hardhat beneficie du plus gros ecosysteme 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
Integration native avec TypeScript pour des scripts types :
// 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 reels :
// hardhat.config.js
networks: {
hardhat: {
forking: {
url: https://eth-mainnet.g.alchemy.com/v2/${ALCHEMY_KEY},
blockNumber: 19000000 // Pin a un block specifique
}
}
}
// 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 Memoire
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 necessitant integration CI/CD complexe
✅ Equipes TypeScript deja familiarisees avec l'ecosysteme JS
✅ Deploiements multi-chain avec scripts sophistiques
✅ 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 Extreme
Foundry execute les tests en Rust natif, avec parallelisation :
# 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
Ecrire les tests dans le meme 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 couts gas automatiquement :
forge snapshot
# Genere .gas-snapshot
testTransfer() (gas: 51234)
testMint() (gas: 67890)
# Compare avec le snapshot precedent
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. Ecosysteme Moins Mature
Moins de plugins et integrations tierces que Hardhat.
2. Scripts de Deploy en Solidity
Les scripts de deploiement 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 decontenancer les nouveaux.
Quand Utiliser Foundry
✅ Projets performance-critical (protocols DeFi complexes)
✅ TDD (Test-Driven Development) avec iterations rapides
✅ Fuzz testing intensif
✅ Gas optimization (snapshots, profiling)
✅ Developpeurs Rust ou puristes Solidity
❌ Besoin de scripts deploy complexes
❌ Equipe junior en Solidity
Remix : Le Playground Web
Forces
1. Zero Setup
Ouvrir remix.ethereum.org et coder immediatement.
2. Interface Visuelle
- Explorateur de fichiers
- Compilateur avec warnings visuels
- Debugger step-by-step avec variables
- Deploiement en 1 clic
3. Pedagogique
Ideal pour apprendre Solidity sans friction :
// Ecrire, compiler et deployer 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 automatises serieux.
2. Performance
Tout dans le browser = lent pour de gros projets.
3. Securite
Code sensible dans un browser = risque (keystroke logging, XSS).
4. Pas de Tests Unitaires Serieux
Le plugin "Solidity Unit Testing" est basique compare a Hardhat/Foundry.
Quand Utiliser Remix
✅ Apprentissage de Solidity
✅ Prototypage rapide d'un concept
✅ Debugging visuel d'un bug specifique
✅ Demos et workshops
✅ Quick audits de petits contrats
❌ Developpement de production
❌ Gestion de gros projets
Comparaison Detaillee : Test Workflow
Scenario : 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)
Lisibilite : Tres 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)
Lisibilite : Bonne
Decision Matrix
| 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 |
| Equipe JS/TS | Hardhat | Coherence stack |
| Equipe Rust | Foundry | Coherence stack |
| Prototypage | Remix | Rapidite |
| CI/CD complexe | Hardhat | Plugins + flexibility |
Hybrid Workflow (Recommande)
Beaucoup de projets combinent les outils :
1. Prototypage initial → Remix
Tests unitaires → Foundry (vitesse)
Tests integration → Hardhat (forking mainnet)
Deploiement → Hardhat (scripts TypeScript)
Verification → Les deux (forge verify / hardhat verify)
Exemple setup dual :
my-project/
├── foundry.toml # Config Foundry
├── hardhat.config.ts # Config Hardhat
├── src/ # Contrats (partage)
├── test/
│ ├── foundry/ # Tests Foundry (rapides)
│ └── hardhat/ # Tests Hardhat (integration)
└── scripts/ # Scripts deploy Hardhat
Recommandations Finales
Si vous debutez : Commencez avec Remix pour comprendre les bases, puis passez a Hardhat pour structurer vos projets.
Si vous etes un dev experimente : Adoptez Foundry pour la performance, gardez Hardhat pour les deploiements complexes.
Si vous travaillez en equipe : Hardhat offre la meilleure experience 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 a votre style de developpement et d'experimenter avec chacun dans un environnement interactif.