@@ -3,7 +3,7 @@ title: "Hosting Decentralized Websites"
33description : " Build permanent, censorship-resistant websites on Arweave using manifests and deployment tools"
44---
55
6- Create ** permanent websites** that can't be censored, taken down, or modified after deployment. Host your content on Arweave and serve it through AR.IO gateways for a truly decentralized web experience.
6+ Create ** permanent websites** that cannot be censored, taken down, or modified after deployment. Host your content on Arweave and serve it through AR.IO gateways for a truly decentralized web experience.
77
88## What Makes It Different?
99
@@ -79,14 +79,22 @@ Create **permanent websites** that can't be censored, taken down, or modified af
7979- File management
8080- Website building
8181- Deployment workflows
82+ - ArNS integration
83+
84+ ** Turbo App** - [ Quick UI based workflows] ( https://turbo.ar.io ) for:
85+
86+ - Quick deployments
87+ - Single or multiple file support
88+ - Deployment workflows
89+ - ArNS integration
8290
8391### 3. ArNS Integration
8492
85- ** Primary Names** - [ Decentralized domain names] ( /learn/arns ) that:
93+ ** Domain Names** - [ Decentralized domain names] ( /learn/arns ) that:
8694
8795- Point to your website's manifest
8896- Provide human-readable URLs
89- - Can be updated to point to new versions
97+ - Can be updated to point to new versions or to load dynamic data
9098- Are owned and controlled by you
9199
92100## Quick Start
@@ -100,11 +108,11 @@ Create **permanent websites** that can't be censored, taken down, or modified af
100108npm install permaweb-deploy --save-dev
101109npx permaweb-deploy --deploy-folder ./build --arns-name your-domain
102110
103- # Using arlink (web interface)
104- # Visit the arlink website and upload through the browser
111+ # Using Turbo App (web interface)
112+ # Visit the [Turbo App](https://turbo.ar.io) and upload through the browser
105113```
106114
107- ** 3. Get an ArNS domain** - Register a primary name to point to your website
115+ ** 3. Get an ArNS domain** - Register a domain name to point to your website
108116
109117** 4. Access your site** - Visit ` https://your-domain.arweave.net ` or any AR.IO gateway
110118
@@ -114,4 +122,56 @@ npx permaweb-deploy --deploy-folder ./build --arns-name your-domain
114122- ** Censorship resistance** - Cannot be taken down by authorities
115123- ** Cost efficiency** - Pay once, host forever
116124- ** Global distribution** - Served from multiple AR.IO gateways
117- - ** Version control** - Update your ArNS domain to point to new versions
125+ - ** Version control** - Update your ArNS domain to point to new versions, while always retaining access to the old ones
126+
127+ ## Loading dynamic content into your static site
128+
129+ Need a static site that updates dynamically without re-deployment? Use an ArNS undername as a moving pointer to a tiny JSON index of your content.
130+
131+ - ** Home** : ` ar://my-site ` (your main site)
132+ - ** Data undername** : ` ar://data_my-site ` → points to a JSON "index" (TXID)
133+ - ** Publish flow** :
134+ 1 ) Upload the new post (HTML/MD/JSON)
135+ 2 ) Upload an updated ` index.json ` listing your posts
136+ 3 ) Update the ` data ` undername to the new ` index.json ` TXID
137+
138+ This keeps page loads simple - your homepage fetches a single JSON file and renders associated content.
139+
140+ ** Example index.json**
141+
142+ ``` json
143+ {
144+ "updatedAt" : " 2025-10-30T12:00:00Z" ,
145+ "posts" : [
146+ { "id" : " POST_TXID_1" , "title" : " Hello World" , "date" : " 2025-10-01" },
147+ { "id" : " POST_TXID_2" , "title" : " Second Post" , "date" : " 2025-10-29" }
148+ ]
149+ }
150+ ```
151+
152+ ** Minimal client-side render (use fetch)**
153+
154+ ``` html
155+ <ul id =" posts" ></ul >
156+ <script type =" module" >
157+ async function loadPosts () {
158+ // Follow the current domain/gateway dynamically
159+ const dataUrl = ` ${ window .location .protocol } //data_${ window .location .hostname } ` ;
160+ const res = await fetch (dataUrl, { cache: ' no-cache' });
161+ const index = await res .json ();
162+ const list = document .getElementById (' posts' );
163+ list .innerHTML = ' ' ;
164+ for (const post of index .posts ) {
165+ const li = document .createElement (' li' );
166+ const postUrl = ` ${ window .location .origin } /${ post .id } ` ; // open on current gateway/domain
167+ li .innerHTML = ` <a href =" ${postUrl}" >${ post .title } </a > — ${ post .date } ` ;
168+ list .appendChild (li);
169+ }
170+ }
171+ loadPosts ();
172+ } </script >
173+ ```
174+
175+ Notes:
176+ - ArNS undernames use underscores: ` data_my-site ` , not periods.
177+ - Update the ` data ` record each time you publish. You can do this with your preferred tool (e.g., Permaweb Deploy, Turbo, etc).
0 commit comments