diff --git a/docs/README.mdx b/docs/README.mdx
index 069c4e0eab..8a17612dab 100644
--- a/docs/README.mdx
+++ b/docs/README.mdx
@@ -41,6 +41,15 @@ The part also covers other ParaTimes such as the non-confidential
[Oasis Emerald]: dapp/emerald/README.mdx
[Oasis Cipher]: dapp/emerald/README.mdx
+## Build ROFL
+
+Runtime OFfchain Logic (ROFL) enables you to build secure applications running
+offchain in a trusted environment (TEE) and that seamlessly communicate with
+Oasis Sapphire. This is ideal for trusted oracles, compute-expensive tasks
+in AI or as a backend for interactive games.
+
+
+
## Get Involved
Contains information on official channels to get in touch with the Oasis Network
diff --git a/docs/rofl/README.mdx b/docs/rofl/README.mdx
new file mode 100644
index 0000000000..44812b02ea
--- /dev/null
+++ b/docs/rofl/README.mdx
@@ -0,0 +1,30 @@
+---
+description: Build your own ROFL app
+---
+
+import DocCardList from '@theme/DocCardList';
+import {findSidebarItem} from '@site/src/sidebarUtils';
+
+# Build ROFL App
+
+Runtime OFf-chain Logic (ROFL) apps are a mechanism to augment the deterministic
+on-chain backend with verifiable off-chain applications. These applications are
+stateless, have access to the network and can perform expensive and/or
+non-deterministic computation.
+
+ROFL apps run in Trusted Execution Environments (TEEs), similar to the on-chain
+confidential runtimes. This enables them to securely authenticate to the
+on-chain backend which is handled transparently by the framework. Together they
+allow one to implement secure decentralized oracles, bridges, AI agents and
+more.
+
+This chapter will teach you how to build your own ROFL app with the help of the
+[Oasis Runtime SDK].
+
+
+
+[Oasis Runtime SDK]:
+ https://github.com/oasisprotocol/oasis-sdk/tree/main/runtime-sdk
diff --git a/docs/rofl/app.md b/docs/rofl/app.md
new file mode 120000
index 0000000000..50a112030a
--- /dev/null
+++ b/docs/rofl/app.md
@@ -0,0 +1 @@
+../../external/oasis-sdk/docs/rofl/app.md
\ No newline at end of file
diff --git a/docs/rofl/prerequisites.md b/docs/rofl/prerequisites.md
new file mode 120000
index 0000000000..4de79acf45
--- /dev/null
+++ b/docs/rofl/prerequisites.md
@@ -0,0 +1 @@
+../../external/oasis-sdk/docs/rofl/prerequisites.md
\ No newline at end of file
diff --git a/docs/rofl/rofl.svg b/docs/rofl/rofl.svg
new file mode 120000
index 0000000000..08856b30e0
--- /dev/null
+++ b/docs/rofl/rofl.svg
@@ -0,0 +1 @@
+../../external/oasis-sdk/docs/rofl/rofl.svg
\ No newline at end of file
diff --git a/docs/rofl/trust-root.md b/docs/rofl/trust-root.md
new file mode 120000
index 0000000000..5b666d55c0
--- /dev/null
+++ b/docs/rofl/trust-root.md
@@ -0,0 +1 @@
+../../external/oasis-sdk/docs/rofl/trust-root.md
\ No newline at end of file
diff --git a/docusaurus.config.ts b/docusaurus.config.ts
index 5f5b1a3864..f602c4ec4b 100644
--- a/docusaurus.config.ts
+++ b/docusaurus.config.ts
@@ -109,6 +109,12 @@ const config: Config = {
activeBaseRegex: '/dapp/',
position: 'left',
},
+ {
+ label: 'Build ROFL',
+ to: '/rofl/',
+ activeBaseRegex: '/rofl/',
+ position: 'left',
+ },
{
label: 'Get Involved',
to: '/get-involved/',
diff --git a/external/oasis-sdk b/external/oasis-sdk
index 385af35781..bb693c137c 160000
--- a/external/oasis-sdk
+++ b/external/oasis-sdk
@@ -1 +1 @@
-Subproject commit 385af35781072dbe3d5e29f93951972f8ed71e92
+Subproject commit bb693c137cb20c5044a810a9e471204182b27885
diff --git a/sidebarRofl.ts b/sidebarRofl.ts
new file mode 100644
index 0000000000..06add668ed
--- /dev/null
+++ b/sidebarRofl.ts
@@ -0,0 +1,14 @@
+import {SidebarsConfig} from '@docusaurus/plugin-content-docs';
+
+export const sidebarROFL: SidebarsConfig = {
+ rofl: [
+ {
+ type: 'doc',
+ label: 'Overview',
+ id: 'rofl/README',
+ },
+ 'rofl/prerequisites',
+ 'rofl/app',
+ 'rofl/trust-root',
+ ],
+};
diff --git a/sidebars.ts b/sidebars.ts
index dbec4e54fb..0e6781e1a9 100644
--- a/sidebars.ts
+++ b/sidebars.ts
@@ -7,6 +7,7 @@ import {sidebarGeneral} from './sidebarGeneral';
import {sidebarGetInvolved} from './sidebarGetInvolved';
import {sidebarNode} from './sidebarNode';
import {sidebarParaTime} from './sidebarParatime';
+import {sidebarROFL} from './sidebarRofl';
const sidebars: SidebarsConfig = {
...sidebarAdrs,
@@ -16,6 +17,7 @@ const sidebars: SidebarsConfig = {
...sidebarGetInvolved,
...sidebarNode,
...sidebarParaTime,
+ ...sidebarROFL,
};
export default sidebars;
diff --git a/src/remark/cross-repo-links.ts b/src/remark/cross-repo-links.ts
index 31a921957d..8b582b6646 100644
--- a/src/remark/cross-repo-links.ts
+++ b/src/remark/cross-repo-links.ts
@@ -7,7 +7,7 @@ const oasisSdkContractRegex = /https:\/\/github\.com\/oasisprotocol\/oasis-sdk\/
const oasisSdkRuntimeRegex = /https:\/\/github\.com\/oasisprotocol\/oasis-sdk\/blob\/main\/docs\/runtime\/(.*)\.mdx?(#.*)?/;
const oasisCoreRegex = /https:\/\/github\.com\/oasisprotocol\/oasis-core\/blob\/master\/docs\/(.*)\.mdx?(#.*)?/;
const adrsRegex = /https:\/\/github\.com\/oasisprotocol\/adrs\/blob\/main\/(.*)\.mdx?(#.*)?/;
-const sapphireParatimeRegex = /https:\/\/github\.com\/oasisprotocol\/sapphire-paratime\/blob\/main\/(.*)\.mdx?(#.*)?/;
+const sapphireParatimeRegex = /https:\/\/github\.com\/oasisprotocol\/sapphire-paratime\/blob\/main\/docs\/(.*)\.mdx?(#.*)?/;
const docsRegex = /https:\/\/github\.com\/oasisprotocol\/docs\/blob\/main\/docs\/(.*)\.mdx?(#.*)?/;
const indexReadmeRegex = /(index|README)($|#)/;
@@ -38,7 +38,7 @@ export default function plugin(): Transformer {
} else if (adrsRegex.test(node.url)) {
node.url = node.url.replace(adrsRegex, '/adrs/$1$2');
} else if (sapphireParatimeRegex.test(node.url)) {
- node.url = node.url.replace(sapphireParatimeRegex, '/sapphire-paratime/$1$2');
+ node.url = node.url.replace(sapphireParatimeRegex, '/dapp/sapphire/$1$2');
} else if (docsRegex.test(node.url)) {
node.url = node.url.replace(docsRegex, '/$1$2');
} else {