+1
-1
docs/index.html
+1
-1
docs/index.html
+12
-24
docs/index.xml
+12
-24
docs/index.xml
···
14
14
<item>
15
15
<title>Mounting The Atmosphere</title>
16
16
<description><p><a href="https://tangled.sh/@oppi.li/pdsfs">pdsfs</a> is a tool that
17
-
mounts atproto PDS repositories as a FUSE filesystem.</p>
18
-
<p>A PDS repository<a href="#fn1" class="footnote-ref" id="fnref1"
19
-
role="doc-noteref"><sup>1</sup></a> contains all data published by a
20
-
user to the atmosphere<a href="#fn2" class="footnote-ref" id="fnref2"
21
-
role="doc-noteref"><sup>2</sup></a>. It is exportable as a CAR
22
-
(content-addressable archive) file. pdsfs is a tool that mounts this CAR
23
-
file as a readonly-FUSE filesystem, allowing quick and easy
24
-
exploration.</p>
17
+
mounts <a href="https://atproto.com">atproto</a> PDS repositories as a
18
+
<a href="https://en.wikipedia.org/wiki/Filesystem_in_Userspace">FUSE</a>
19
+
filesystem.</p>
20
+
<p>A <a href="https://en.wikipedia.org/wiki/Filesystem_in_Userspace">PDS
21
+
repository</a> contains all data published by a user to the atmosphere.
22
+
It is exportable as a CAR (content-addressable archive) file. pdsfs is a
23
+
tool that mounts this CAR file as a readonly-FUSE filesystem, allowing
24
+
quick and easy exploration.</p>
25
25
<p>To motivate the need for such a program, we could begin by mounting a
26
26
repository:</p>
27
27
<pre><code>λ pdsfs oppi.li
···
32
32
is not important. Let’s have a look around:</p>
33
33
<pre><code>λ ls mnt/
34
34
did:plc:qfpnj4og54vl56wngdriaxug/</code></pre>
35
-
<p>The <code>did:plc:stuff</code> is my DID<a href="#fn3"
36
-
class="footnote-ref" id="fnref3" role="doc-noteref"><sup>3</sup></a>.
35
+
<p>The <code>did:plc:stuff</code> is my <a
36
+
href="https://en.wikipedia.org/wiki/Filesystem_in_Userspace">DID</a>.
37
37
Digging deeper:</p>
38
38
<pre><code>λ ls mnt/did\:plc\:qfpnj4og54vl56wngdriaxug/
39
39
app.bsky.actor.profile/ place.stream.chat.message/
···
140
140
<code>read</code> are rerouted to your custom fs implementation (pdsfs
141
141
in this case). The custom fs implementation is free to as it pleases, in
142
142
fact the first iteration of pdsfs accessed the network for each
143
-
open/read call to fetch live data from PDii.</p>
144
-
<section id="footnotes" class="footnotes footnotes-end-of-document"
145
-
role="doc-endnotes">
146
-
<hr />
147
-
<ol>
148
-
<li id="fn1"><p>https://atproto.com/guides/data-repos<a href="#fnref1"
149
-
class="footnote-back" role="doc-backlink">↩︎</a></p></li>
150
-
<li id="fn2"><p>https://atproto.com<a href="#fnref2"
151
-
class="footnote-back" role="doc-backlink">↩︎</a></p></li>
152
-
<li id="fn3"><p>https://en.wikipedia.org/wiki/Decentralized_identifier<a
153
-
href="#fnref3" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
154
-
</ol>
155
-
</section></description>
143
+
open/read call to fetch live data from PDii.</p></description>
156
144
<link>https://oppi.li/posts/mounting_the_atmosphere/</link>
157
-
<pubDate>Wed, 30 Jul 2025 20:25:00 +0000</pubDate>
145
+
<pubDate>Thu, 31 Jul 2025 07:56:00 +0000</pubDate>
158
146
<guid>https://oppi.li/posts/mounting_the_atmosphere/</guid>
159
147
</item>
160
148
<item>
+1
-1
docs/posts/index.html
+1
-1
docs/posts/index.html
+11
-23
docs/posts/mounting_the_atmosphere/index.html
+11
-23
docs/posts/mounting_the_atmosphere/index.html
···
25
25
">View Raw</a>
26
26
<div class="separator"></div>
27
27
<div class="date">
28
-
30/07 — 2025
28
+
31/07 — 2025
29
29
<div class="stats">
30
30
<span class="stats-number">
31
31
60.34
···
43
43
</h1>
44
44
<div class="post-text">
45
45
<p><a href="https://tangled.sh/@oppi.li/pdsfs">pdsfs</a> is a tool that
46
-
mounts atproto PDS repositories as a FUSE filesystem.</p>
47
-
<p>A PDS repository<a href="#fn1" class="footnote-ref" id="fnref1"
48
-
role="doc-noteref"><sup>1</sup></a> contains all data published by a
49
-
user to the atmosphere<a href="#fn2" class="footnote-ref" id="fnref2"
50
-
role="doc-noteref"><sup>2</sup></a>. It is exportable as a CAR
51
-
(content-addressable archive) file. pdsfs is a tool that mounts this CAR
52
-
file as a readonly-FUSE filesystem, allowing quick and easy
53
-
exploration.</p>
46
+
mounts <a href="https://atproto.com">atproto</a> PDS repositories as a
47
+
<a href="https://en.wikipedia.org/wiki/Filesystem_in_Userspace">FUSE</a>
48
+
filesystem.</p>
49
+
<p>A <a href="https://en.wikipedia.org/wiki/Filesystem_in_Userspace">PDS
50
+
repository</a> contains all data published by a user to the atmosphere.
51
+
It is exportable as a CAR (content-addressable archive) file. pdsfs is a
52
+
tool that mounts this CAR file as a readonly-FUSE filesystem, allowing
53
+
quick and easy exploration.</p>
54
54
<p>To motivate the need for such a program, we could begin by mounting a
55
55
repository:</p>
56
56
<pre><code>λ pdsfs oppi.li
···
61
61
is not important. Let’s have a look around:</p>
62
62
<pre><code>λ ls mnt/
63
63
did:plc:qfpnj4og54vl56wngdriaxug/</code></pre>
64
-
<p>The <code>did:plc:stuff</code> is my DID<a href="#fn3"
65
-
class="footnote-ref" id="fnref3" role="doc-noteref"><sup>3</sup></a>.
64
+
<p>The <code>did:plc:stuff</code> is my <a
65
+
href="https://en.wikipedia.org/wiki/Filesystem_in_Userspace">DID</a>.
66
66
Digging deeper:</p>
67
67
<pre><code>λ ls mnt/did\:plc\:qfpnj4og54vl56wngdriaxug/
68
68
app.bsky.actor.profile/ place.stream.chat.message/
···
170
170
in this case). The custom fs implementation is free to as it pleases, in
171
171
fact the first iteration of pdsfs accessed the network for each
172
172
open/read call to fetch live data from PDii.</p>
173
-
<section id="footnotes" class="footnotes footnotes-end-of-document"
174
-
role="doc-endnotes">
175
-
<hr />
176
-
<ol>
177
-
<li id="fn1"><p>https://atproto.com/guides/data-repos<a href="#fnref1"
178
-
class="footnote-back" role="doc-backlink">↩︎</a></p></li>
179
-
<li id="fn2"><p>https://atproto.com<a href="#fnref2"
180
-
class="footnote-back" role="doc-backlink">↩︎</a></p></li>
181
-
<li id="fn3"><p>https://en.wikipedia.org/wiki/Decentralized_identifier<a
182
-
href="#fnref3" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
183
-
</ol>
184
-
</section>
185
173
186
174
</div>
187
175
+12
-12
posts/mounting_the_atmosphere.md
+12
-12
posts/mounting_the_atmosphere.md
···
1
1
[pdsfs](https://tangled.sh/@oppi.li/pdsfs) is a tool that
2
-
mounts atproto PDS repositories as a FUSE filesystem.
2
+
mounts [atproto](https://atproto.com) PDS repositories as a
3
+
[FUSE](https://en.wikipedia.org/wiki/Filesystem_in_Userspace)
4
+
filesystem.
3
5
4
-
A PDS repository[^0] contains all data published by a user to
5
-
the atmosphere[^1]. It is exportable as a CAR
6
-
(content-addressable archive) file. pdsfs is a tool that
7
-
mounts this CAR file as a readonly-FUSE filesystem, allowing
8
-
quick and easy exploration.
6
+
A [PDS
7
+
repository](https://en.wikipedia.org/wiki/Filesystem_in_Userspace)
8
+
contains all data published by a user to the atmosphere. It
9
+
is exportable as a CAR (content-addressable archive) file.
10
+
pdsfs is a tool that mounts this CAR file as a readonly-FUSE
11
+
filesystem, allowing quick and easy exploration.
9
12
10
13
To motivate the need for such a program, we could begin by
11
14
mounting a repository:
···
22
25
λ ls mnt/
23
26
did:plc:qfpnj4og54vl56wngdriaxug/
24
27
25
-
The `did:plc:stuff` is my DID[^2]. Digging deeper:
28
+
The `did:plc:stuff` is my
29
+
[DID](https://en.wikipedia.org/wiki/Filesystem_in_Userspace).
30
+
Digging deeper:
26
31
27
32
λ ls mnt/did\:plc\:qfpnj4og54vl56wngdriaxug/
28
33
app.bsky.actor.profile/ place.stream.chat.message/
···
144
149
pleases, in fact the first iteration of pdsfs accessed the
145
150
network for each open/read call to fetch live data from
146
151
PDii.
147
-
148
-
149
-
[^0]: https://atproto.com/guides/data-repos
150
-
[^1]: https://atproto.com
151
-
[^2]: https://en.wikipedia.org/wiki/Decentralized_identifier