diff --git a/.vitepress/config.ts b/.vitepress/config.ts
index 3899e222..7796415d 100644
--- a/.vitepress/config.ts
+++ b/.vitepress/config.ts
@@ -123,7 +123,7 @@ export default withMermaid(
socialLinks: [
{ icon: 'github', link: 'https://github.com/iExecBlockchainComputing' },
- { icon: 'x', link: 'https://twitter.com/iEx_ec' },
+ { icon: 'x', link: 'https://x.com/iEx_ec' },
{ icon: 'discord', link: 'https://discord.com/invite/pbt9m98wnU' },
],
diff --git a/.vitepress/sidebar.ts b/.vitepress/sidebar.ts
index 8755c4f8..45222266 100644
--- a/.vitepress/sidebar.ts
+++ b/.vitepress/sidebar.ts
@@ -6,7 +6,7 @@ export function getSidebar() {
{
text: 'GET STARTED',
items: [
- { text: '๐ก Welcome', link: '/get-started/welcome' },
+ { text: 'Welcome', link: '/get-started/welcome' },
{
text: 'Toolkit',
link: '/get-started/toolkit',
diff --git a/.vitepress/theme/style.css b/.vitepress/theme/style.css
index c6dcf947..947812b1 100644
--- a/.vitepress/theme/style.css
+++ b/.vitepress/theme/style.css
@@ -92,37 +92,114 @@
--vp-c-default-2: var(--vp-c-gray-2);
--vp-c-default-3: var(--vp-c-gray-3);
--vp-c-default-soft: var(--vp-c-gray-soft);
+}
+
+/**
+ * Colors: Text
+ *
+ * - `text-1`: Used for primary text.
+ *
+ * - `text-2`: Used for muted texts, such as "inactive menu" or "info texts".
+ *
+ * - `text-3`: Used for subtle texts, such as "placeholders" or "caret icon".
+ * -------------------------------------------------------------------------- */
- --vp-c-brand-1: #917600;
- --vp-c-brand-2: #fcd15a;
- --vp-c-brand-3: #917600;
- --vp-c-brand-soft: var(--vp-c-indigo-soft);
+:root {
+ /* --vp-c-text-1: #3c3c43; */
+ --vp-c-text-1: #1d1d24;
+ /* --vp-c-text-2: #67676c; */
+ --vp-c-text-2: #5d5d69;
+ --vp-c-text-3: #929295;
+}
+
+.dark {
+ /* --vp-c-text-1: #dfdfd6; */
+ --vp-c-text-1: #fff;
+ /* --vp-c-text-2: #98989f; */
+ --vp-c-text-2: #a3a3a8;
+ --vp-c-text-3: #6a6a71;
+}
+
+/**
+ * Colors: Function
+ *
+ * - `default`: The color used purely for subtle indication without any
+ * special meanings attached to it such as bg color for menu hover state.
+ *
+ * - `brand`: Used for primary brand colors, such as link text, button with
+ * brand theme, etc.
+ *
+ * - `tip`: Used to indicate useful information. The default theme uses the
+ * brand color for this by default.
+ *
+ * - `warning`: Used to indicate warning to the users. Used in custom
+ * container, badges, etc.
+ *
+ * - `danger`: Used to show error, or dangerous message to the users. Used
+ * in custom container, badges, etc.
+ *
+ * To understand the scaling system, refer to "Colors: Palette" section.
+ * -------------------------------------------------------------------------- */
+
+:root {
+ --vp-c-default-1: var(--vp-c-gray-1);
+ --vp-c-default-2: var(--vp-c-gray-2);
+ --vp-c-default-3: var(--vp-c-gray-3);
+ --vp-c-default-soft: var(--vp-c-gray-soft);
+
+ --vp-c-brand-1: #183ee9;
+ --vp-c-brand-2: var(--vp-c-indigo-2);
+ --vp-c-brand-3: var(--vp-c-indigo-3);
+ --vp-c-brand-soft: #e3e8ff;
--vp-c-tip-1: var(--vp-c-brand-1);
--vp-c-tip-2: var(--vp-c-brand-2);
--vp-c-tip-3: var(--vp-c-brand-3);
--vp-c-tip-soft: var(--vp-c-brand-soft);
- --vp-c-warning-1: var(--vp-c-yellow-1);
- --vp-c-warning-2: var(--vp-c-yellow-2);
- --vp-c-warning-3: var(--vp-c-yellow-3);
- --vp-c-warning-soft: var(--vp-c-yellow-soft);
+ --vp-c-note-1: var(--vp-c-brand-1);
+ --vp-c-note-2: var(--vp-c-brand-2);
+ --vp-c-note-3: var(--vp-c-brand-3);
+ --vp-c-note-soft: var(--vp-c-brand-soft);
+
+ --vp-c-success-1: #00704b;
+ --vp-c-success-2: var(--vp-c-green-2);
+ --vp-c-success-3: var(--vp-c-green-3);
+ --vp-c-success-soft: #eafcf6;
--vp-c-important-1: var(--vp-c-purple-1);
--vp-c-important-2: var(--vp-c-purple-2);
--vp-c-important-3: var(--vp-c-purple-3);
--vp-c-important-soft: var(--vp-c-purple-soft);
- --vp-c-danger-1: var(--vp-c-red-1);
+ --vp-c-warning-1: #da7b0b;
+ --vp-c-warning-2: var(--vp-c-yellow-2);
+ --vp-c-warning-3: var(--vp-c-yellow-3);
+ --vp-c-warning-soft: #fdefde;
+
+ --vp-c-danger-1: #bf3131;
--vp-c-danger-2: var(--vp-c-red-2);
--vp-c-danger-3: var(--vp-c-red-3);
- --vp-c-danger-soft: var(--vp-c-red-soft);
+ --vp-c-danger-soft: #f3d7d7;
+
+ --vp-c-caution-1: var(--vp-c-red-1);
+ --vp-c-caution-2: var(--vp-c-red-2);
+ --vp-c-caution-3: var(--vp-c-red-3);
+ --vp-c-caution-soft: var(--vp-c-red-soft);
}
.dark {
- --vp-c-brand-1: #fcd15a;
- --vp-c-brand-2: #917600;
- --vp-c-brand-3: #fcd15a;
+ --vp-c-brand-1: #a2b3ff;
+ --vp-c-brand-soft: #1d2032;
+
+ --vp-c-success-1: #74ecc5;
+ --vp-c-success-soft: #243030;
+
+ --vp-c-danger-1: #bf3131;
+ --vp-c-danger-soft: #2b1d21;
+
+ --vp-c-warning-1: #f49425;
+ --vp-c-warning-soft: #312720;
}
/**
@@ -195,3 +272,124 @@ html:not(.dark) .dark-only {
input {
@apply w-full rounded-md border border-[var(--vp-c-divider)] bg-[var(--vp-c-bg-soft)] px-4 py-3 text-base text-[var(--vp-c-text-1)] transition focus:border-[var(--vp-c-brand-2)] focus:outline-none disabled:cursor-not-allowed disabled:opacity-70;
}
+
+/**
+ * Component: Banner
+ * -------------------------------------------------------------------------- */
+
+:root {
+ --c-bg-gradient-from: #e1e6f7;
+ --c-bg-gradient-to: #f1f2f6;
+ --c-border: #b6b7c3;
+ --c-text: #b6b7c3;
+}
+
+.dark {
+ --c-bg-gradient-from: #2e334a;
+ --c-bg-gradient-to: #292b34;
+ --c-border: #5a5b68;
+ --c-text: #b6b7c3;
+}
+
+.vp-doc .custom-block {
+ @apply p-6 text-base;
+}
+
+.vp-doc .custom-block.tip {
+ @apply border-l-4 border-l-[var(--vp-c-brand-1)];
+}
+
+.vp-doc .custom-block.tip strong {
+ @apply text-[var(--vp-c-brand-1)];
+}
+
+.custom-block.tip code {
+ @apply bg-[var(--vp-code-bg)];
+}
+
+.vp-doc .custom-block.warning {
+ @apply border-l-4 border-l-[var(--vp-c-warning-1)];
+}
+
+.vp-doc .custom-block.warning strong {
+ @apply text-[var(--vp-c-warning-1)];
+}
+
+.vp-doc .custom-block.info {
+ @apply border-l-4 border-l-[var(--vp-c-info-1)];
+}
+
+.vp-doc .custom-block.info strong {
+ @apply text-[var(--vp-c-info-1)];
+}
+
+.vp-doc .custom-block.danger {
+ @apply border-l-4 border-l-[var(--vp-c-danger-1)];
+}
+
+.vp-doc .custom-block.danger strong {
+ @apply text-[var(--vp-c-danger-1)];
+}
+
+.vp-doc .custom-block.details {
+ @apply border-l-4 border-l-[var(--vp-c-details-1)];
+}
+
+.vp-doc .custom-block.details strong {
+ @apply text-[var(--vp-c-details-1)];
+}
+
+/**
+ * HomePage: rewrite
+ * -------------------------------------------------------------------------- */
+
+:root {
+ --vp-home-hero-name-color: var(--vp-c-text-1);
+ --vp-button-brand-bg: #fcd15a;
+ --vp-button-brand-hover-bg: #fcd15a;
+}
+
+.VPHero .VPButton {
+ @apply font-medium transition hover:-translate-y-0.5 hover:shadow-md;
+}
+
+.VPHero .VPButton.brand {
+ @apply text-[var(--vp-c-black)]!;
+}
+
+.VPImage.image-src {
+ @apply max-h-none max-w-none lg:size-[448px]!;
+}
+
+article.box .icon {
+ @apply size-14 rounded-[14px] bg-[var(--vp-c-bg-soft)] p-2;
+ box-shadow:
+ -12.835px -12.835px 21.392px 0 var(--vp-c-bg),
+ 12.835px 12.835px 21.392px 0 var(--vp-c-bg);
+}
+
+.image .image-container {
+ @apply relative flex items-center justify-center;
+}
+
+.image .image-container::before {
+ @apply pointer-events-none absolute top-[60%] left-1/2 -z-10 h-[929px] w-[995px] -translate-x-1/2 -translate-y-1/2 bg-contain bg-center bg-no-repeat;
+ content: '';
+ background-image: url('/bg-gradient.svg');
+}
+
+.image .image-container .VPImage.image-src {
+ @apply relative z-10;
+}
+
+.VPHero.has-image.VPHomeHero {
+ @apply pb-0;
+}
+
+.VPLink.link.VPFeature {
+ @apply relative rounded-[32px] border bg-gradient-to-b from-[var(--vp-c-white)] to-[var(--vp-c-white)] transition-all duration-300 *:relative *:z-20 after:absolute after:inset-px after:z-10 after:rounded-[31px] after:bg-[var(--vp-c-bg-soft)] hover:shadow-lg;
+}
+
+.dark .VPLink.link.VPFeature {
+ @apply from-[var(--c-border)] to-transparent;
+}
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 00000000..03cfbe33
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,392 @@
+# Contributing Guide - iExec Documentation
+
+Welcome to the iExec documentation contribution guide! This guide explains how
+to effectively participate in the development and improvement of the
+documentation.
+
+## ๐ Prerequisites
+
+- **Node.js**: Version 22 or higher
+- **npm**: Comes bundled with Node.js
+- **Git**: For version control
+- **Vale** (optional): For documentation quality checks
+
+## ๐ Quick Start
+
+### 1. Initial Setup
+
+1. **Fork the repository**:
+ [](https://github.com/iExecBlockchainComputing/documentation/fork)
+
+2. **Clone your fork**:
+
+ ```bash
+ git clone https://github.com/YOUR_USERNAME/documentation.git
+ cd documentation
+ ```
+
+3. **Install dependencies**:
+
+ ```bash
+ npm install
+ ```
+
+4. **Start the development server**:
+ ```bash
+ npm run dev
+ ```
+
+### 2. Contribution Workflow
+
+1. **Create a branch**:
+
+ ```bash
+ git checkout -b feature/your-feature-name
+ ```
+
+2. **Make your changes**
+
+3. **Test locally**:
+
+ ```bash
+ npm run dev
+ ```
+
+4. **Commit your changes**:
+
+ ```bash
+ git add .
+ git commit -m "Add: description of your changes"
+ ```
+
+5. **Push to your fork**:
+
+ ```bash
+ git push origin feature/your-feature-name
+ ```
+
+6. **Create a Pull Request**
+
+## ๐งฑ Component Usage Guide
+
+### Container - VitePress Native Containers (Recommended)
+
+**We recommend using VitePress native container syntax** instead of the Vue
+component for better compatibility and simplicity.
+
+#### Preferred Usage (VitePress Native)
+
+```markdown
+::: info Your informational content here... :::
+
+::: tip Helpful tips and suggestions... :::
+
+::: warning Important warnings and cautions... :::
+
+::: danger Critical warnings and error messages... :::
+```
+
+#### Alternative Usage (Vue Component)
+
+The `Container` component extends VitePress default containers with additional
+styling, but should only be used when you need specific custom behavior:
+
+```vue
+
+ {{ title }} +
++
{{ description }}
-{{ description }}
+{{ description }}
-And learn how to build Privacy-preserving decentralized applications (DApp) with iExec in this interactive guide.
Perfect for hackathons ๐
Discover how iExec technologies work and the problems they solve
-Learn to secure your sensitive data using our developer tools
-Build and run your first iExec App to work with protected data in a safe environment
-Learn advanced data access management, permissions and monetization
-Finish the journey with a surprise bonus chapter!
-Need help setting up or got some questions? Join our Discord Community for support!
-and explore how iExec can help you build Privacy-preserving apps and securely manage sensitive data.
-Imagine you're building a decentralized app (dApp) that needs to handle sensitive user data, for example:
-You'll need a way to:
-This is where iExec comes in. iExec provides tools to easily add privacy and monetization features into your iApp.
-The technology allows users to control the ownership, - confidentiality, and monetization of their data and digital assets within the Web3 ecosystem.
-By merging blockchain technology with confidential computing, iExec pioneered DeCC (Decentralized Confidential Computing) to take privacy and security to the next level in Web3 ecosystems.
-Now that you understand the fundamentals, dive into protecting your first data with Alice.
-Follow Alice as she learns how to protect her data using DataProtector on Bob's dApp, the developer tool for protecting data creation and management.
-Protected data refers to encrypted data that remains confidential throughout its entire lifecycle - during storage, transfer and processing.
-You won't believe how easy it is to protect your data with DataProtector. Just a few lines of code, and you're done!
-Check out our code sandbox for ready-to-use examples!
-In the next chapter, learn how to build, deploy, and run an iApp to process your protected data.
-Build an iApp that can process protected data in a secure environment using the iExec iApp generator tool. This tool helps you create, test, and deploy iApp with just a few commands.
-Don't worry. All secrets used in this tutorial stay on your machine and aren't shared with anyone. You'll only need them to run the iapp run command.
These are just a few examples, the possibilities are endless. Want to explore iApp Generator? Check out our documentation and see what you can build!
-We recommend selecting "Hello World" to quickly discover how iApp works. Use advanced only if you are familiar with iExec.
-Common Issues:
-- If you get Error: Docker daemon is not accessible: Make sure Docker is installed and running.
- If you get Error: Failed to locate iApp project root: Ensure you are in your project folder before proceeding.
Error: Docker daemon is not accessible: Make sure
+ Docker is installed and running.
+- If you get Error: Failed to locate iApp project root: Ensure you
+ are in your project folder before proceeding.
+
+:::
### ๐งฉ Using arguments
@@ -310,9 +328,12 @@ default protectedData mock.
iapp test --protectedData default
```
-You can check how args and protectedData are processed in src/app.js or src/app.py
๐ Make sure to save your iApp address after deployment - you'll need it later.
-You can find your iApp address in the iexec-app.json file in your project folder.
โ ๏ธ If you encounter issues during deployment, make sure the Docker BuildKit feature is enabled and supports AMD64 architecture:
+::: tip + +๐ Make sure to save your **iApp address** after deployment - you'll need it +later. + +You can find your iApp address in theiexec-app.json file in your
+project folder.
+
+โ ๏ธ If you encounter issues during deployment, make sure the Docker BuildKit
+feature is enabled and supports AMD64 architecture:
```sh
docker buildx inspect --bootstrap | grep -i platforms
```
- The output should include linux/amd64 in the list of supported platforms. If not, update to the latest Docker Desktop version which includes these requirements.
โ ๏ธ If you set the wrong Docker username, you can change it by editing the iapp.config.json file
linux/amd64 in the list of supported
+platforms. If not, update to the latest Docker Desktop version which includes
+these requirements.
+
+If you set the wrong Docker username, you can change it by editing the
+iapp.config.json file
+
+:::
## ๐ Run your iApp
@@ -394,12 +424,16 @@ iapp run ๐ Congratulations! You've successfully deployed and run your first iApp on iExec. This is a significant milestone - your application is now ready to securely process confidential data in a trusted environment.
-Next up: Alice will learn how to authorize the iApp and Bob to access and use her protected data.
-Alice will learn how to grant access to her protected data and manage who can use it.
-When you protect your data, you can authorize specific users and applications to access it. This means an authorized user will be able to use an authorized iApp to compute your protected data.
-Remember the iApp address you saved from the previous chapter? You'll need it now to grant access to your protected data.
-As we don't have the Bob's wallet address, we'll use the zero address to grant access to all users.
-๐ Congratulations! You've successfully completed the core workflow of protecting and processing data with iExec!
-You have one more step to complete the journey, and it's the easy one. Let's go to the bonus chapter!
-You've successfully completed the Hello World journey and learned how to protect data, deploy iApp, and manage data access. Now it's time to claim your rewards! ๐
-
Need help setting up or got some questions? Join our Discord Community for support!
-A Voucher is your all-in-one solution for iExec development to use iExec's technology, access to premium support, technical guidance and mentorship to help you build and monetize your projects. ๐
-Claim your $20 voucher to kickstart your development journey. Want to learn more about Voucher ? ๐
+Claim your $20 voucher to kickstart your development journey. Want to learn more about [Voucher](https://www.iex.ec/voucher) ? ๐
Thank you for being part of the iExec journey! We can't wait to see what you'll build next! ๐
-True Privacy: Users never expose their raw data. Your app processes it privately inside secure enclaves.
-Trusted Execution: iExec ensures your code runs inside a Trusted Execution Environment (TEE), guaranteeing only the specified Docker image executes in a secure, isolated environment.
-Decentralized Infrastructure: No single point of failure. Your app runs across a distributed network of workers.
-Zero Trust Architecture: User data is protected by hardware-based TEEs, keeping data confidential and inaccessible to the host, cloud provider, or operating system during execution.
-Process medical data for AI diagnosis without exposing patient information
-Analyze financial data for credit scoring while maintaining privacy
-Content recommendation engines that don't track user behavior
-Collaborative research on sensitive datasets across institutions
-Let's build an iApp that can process protected data in a secure environment using the iExec iApp generator tool. This tool helps you create, test and deploy iApp with just a few commands.
-These are just a few examples, the possibilities are endless. Want to explore iApp Generator? Check out our documentation and see what you can build!
-Unlike standard datasets, Protected Data exposes its data types on-chain (indicating types like email addresses or photos). This lets anyone identify entries with matching types.
-Ready to protect your data? Start with our DataProtector guides. Learn how to secure sensitive information while unlocking its value.
-The native cryptocurrency that powers the entire iExec decentralized confidential computing ecosystem
-Think of a Workerpool as a computing cluster where your iApp runs. Each Workerpool consists of multiple workers (machines) coordinated by a manager who ensures tasks are executed efficiently and securely.
-Want to use Workerpool? Start building iApp and the protocol will handle Workerpool selection automatically.
-The Stargate bridge interface automatically detects your wallet's network and available RLC tokens. The process is similar in both directions - simply select the appropriate source and destination networks to transfer RLC between Ethereum and Arbitrum seamlessly.
-The bridge interface automatically detects your wallet's network and available tokens. The process is similar in both directions - simply switch to the appropriate network (source chain) in your wallet and refresh the page to update the bridge direction, then the bridge will handle the conversion between RLC and xRLC seamlessly.
-Deals are the fundamental orchestration unit - each deal coordinates a set of different stakeholders that share resources and execution parameters to execute a confidential computation task.
-Each Deal brings together:
-Use the GraphQL explorer's auto-completion feature to discover available fields and build complex queries. The schema documentation is always up-to-date with the latest protocol changes.
-Your complete toolkit for building privacy-first Web3 applications that protect and use sensitive data
-iExec solves this with Turnkey Privacy - a toolkit that simplifies data protection, management, and secure computation, even in untrusted environments. iExec believes privacy should be plug-and-play simple, not an afterthought.
-The next chapters guide you through our Hello World journey. This 30-minute start teaches you everything about iExec. You'll learn protecting sensitive data and building and deploying confidential apps.
-Be part of a growing movement of developers, data owners, and privacy advocates who are reshaping how the world handles sensitive data.
-When you build with iExec, you're not just solving a technical challengeโyou're championing user rights and digital sovereignty. Every application you create makes the web more private, more secure, and more trustworthy for everyone.
-