Wikilink
-
A wikilink looks like this: [[wikilink]]. They are text surrounded by two square brackets.
- Not to be confused with an [[ECMAScript internal property]], which is also surrounded by doubel brackets :)
-
Wikilinks come, wait for it, from [[wiki]]s :) But they need not be limited only to things we usually think of as wikis.
- You could use [[wikilinks everywhere]].
- You can think of the Agora as a sort of distributed wiki, although users in this particular kind of wiki volunteer individual contributions instead of editing common pages (for now).
-
Wikilinks are the heart of this [[agora]].
-
[[wikilink]] resolves to
node/wikilink
in an [[agora]]. - When needed [[slugify]] rules are applied.
- Wikilinks are great because they allow for very easy linking: you just [[link it as you go along]], then the link either works (because someone wrote that node/article/resource already) or you can click through and backfill it. I call this procedure link-driven writing.
- Whenever there is more than one [[node]] with a given wikilink in an Agora (typical use case: notes kept on a certain topic by different users), the Agora will surface all of them when resolving the wikilink in question. Example: [[README]].
-
[[wikilink]] resolves to
- [[pull]] [[wikilinks]] [[wikilinks everywhere]]
Feel free to use [[[[backlinks]]]], [[wikilinks]], [[edges]], [[multilinks]], or [[whatever the fuck you want to call it]] anywhere when talking to me in reference to something on the [[anagora]] or otherwise, my browser will resolve wikilinks in the default order, aside from duckduckgo
as the 3rd step for unprefixed
.
What?! [[Wikilinks Everywhere]], enjoy 🥰!
Wikilinks
- a [[list]].
-
a [[thing]].
- I'm excited about [[wikilinks everywhere]].
-
[[vera]] suggested we rename these. Some brainstorming follows
- [[neil]] [[hyphalinks]]
- [[multilinks]]: as they are unlike regular links in that they can point to many different places -- which particular URL they resolve to depends on the user clicking them.
- [[querylinks]] ([[qlinks]]?): as they essentially behave as queries in the agora. queries return relevant subnodes/resources.
-
[[nodelinks]] as they map to nodes in the agora.
- [[edges]]?
- https://twitter.com/flancian/status/1437079541860769803
wikilinks
-
im also tempted to rebrand wikilinks
- it's kinda a weird word
- it's not the selling point for people to join the [[agora]] I thought it was going to be
- wikilinks are cool, I just feel like they need a cooler name
-
potential alternative names
- netlinks
Developed by [[@evan]] Boehs, [[unlicense]]d, powered by [[flancia]]
Wikilinks everywhere is a chrome extension that brings [[wikilinks]], and through it the [[internet]], to life. It can be installed on a large number of browsers and services, and will intelligently determine where [[broken]] wikilinks should go to based on your settings.
Sources
You can order or disable any of these sources at will. When a wikilink (regardless of if it is properly linked already) is detected the extension will go through these sources in that order you provided. The default order is explained below.
Options
Global
-
Error codes:
- Comma separated HTTP status codes
- Supports
n
xx - Default:
4xx, 5xx
Source specific
-
Ignore errors
- Checkbox
- Should error cases be ignored?
- Default: Unchecked
Actual sources
Note: The last source is the catchall, no matter what it will ignore errors and faithfully complete the link. This means do nothing has importance. Don't remove or reorder
Existing
If a existing link is already present do nothing
Note: the only difference between the existing source and others is it changes nothing in the browser. By default, if the existing link resolves to
global.error
, it will move on to the sources below and consider replacing it with them
Note: this might have made no sense. Don't mess with it, probably, it exists for a reason
Prefix
Things like WP:link
for wikipedia, or AG:link
for [[anagora]], the schema looks like PREFIX:page
.
Options
-
Prefixes
-
A table of prefixes and the corresponding url
- use
{page}
to have the provided back link, so with theWP
prefix the url would bewikipedia.org/wiki/{page}/
- DON'T INCLUDE THE
:
IN THE PREFIX
- use
-
A table of prefixes and the corresponding url
[[IWLEP]]
The user's [[IWLEP]] rules. See the IWLEP page for that config, but it is it looks a lot like your config, instead made by the author of the backlink. Don't worry, it can't be faked *unless the user gets hacked but lots worse things could happen.
Unprefixed
Iterates through all the listed urls in your order until one does not error, or all error.
{page}
is the value between the brackets
Options
-
List
-
Default:
wikipedia.org/wiki/{page}/
anogora.org/{page}/
-
Default:
Nothing
What does it say on the tin?
Concerns
Bandwidth
We use an extraordinarily large amount of bandwidth, and there is not much that we can do. That being said, the whole web is obese so I highly doubt we end up using more than 0.2 of the bandwidth of a standard blog (~1Kb a page so ~15kb a wikilink so ~150kb a page). Below is what we tried
✔️ Request methods
There is no STATUS
request so we had to make due with HEAD
. This will only fetch the part of the website that has the page name and useful information. It does not get the page contents, saving bucket loads of bandwidth.
👷♀️ Local catch
Once implemented we will store the last 1000 pages we checked, so if a wikilink is frequencintly used it will only be loaded once
❌ Catch server
This means storing the status code of every website we checked. I don't really like the idea of storing personal information like that.
Ratelimits
By
Browsers
- Powercord 🔌 (Discord) Plugin
- Chrome
- FireFox 🔥🦊
-
A [[project]]. [[open source]].
-
The [[goal]] is to make [[wikilinks]] work everywhere on the internet.
- A [[wikilink]] is any entity or phrase surrounded by two square brackets.
-
[[wikilinks]] can be [[lazily resolved]] in a user chosen [[context]].
- Default context: an [[agora]] of the user's choice.
- It has a [[browser extension]] component.
-
It has a [[social network]] component.
- People could start using [[wikilinks]] on any platform that supports user generated [[content]] online, social networks being likely the most popular interfaces.
- For the purpose of connecting to such platforms we'd like to develop an [[agora bridge]].
- [[go]] https://docs.google.com/document/d/1h2kSuh7TntPj_XZ7BnLPDwtwshq7skzF3BIYwLgVquA/edit#
- [[chat]] https://app.element.io/#/room/#wikilinks:matrix.org
- [[tweet]] https://twitter.com/flancian/status/1337835415215202308
- See also [[agora rfcs]], in particular 0 and 2.
-
The [[goal]] is to make [[wikilinks]] work everywhere on the internet.
[[2021-04-14]]
The plan is to get in at least two pomodoros in this to advance it somehow in the direction of a prototype. Will try to build on [[agora ext]].
Wikilinks everywhere
[[wikilinks]]
See also:
By: [[samuel klein]], [[dan whaley]], [[flancian]], your_name_here
Project description
Wikilinks everywhere: a web extension/library/bookmarklet that eagerly or lazily resolves [[wikilinks]] in any web property within a user-chosen context, e.g. an Agora or other distributed knowledge graph.
While using the web, users often need to interact with or refer to their personal knowledge databases (PKB). This means taking notes (about web content or otherwise), and then referring and linking to them (as they can be resolved in their PKB). This process is needlessly cumbersome; users often know precisely which PKB entries they would like to refer to, and can remember their titles, but have no interactive, real time way to insert or resolve these links. Currently they need to go through a multi-step process to fetch them (open database; search for them; select them; get a canonical URL if available; copy/paste it and any relevant information), or they'll flag the term and remember to revisit it later. Instead, a user could type [[wikilink]], with wikilink standing for the title of the note in question, and depend on a web extension to resolve the note reference to canonical URL either eagerly (at the time of writing) or lazily (at read-time).
Use cases
- As a writer, I know that a KB entry exists, but don't have immediate access to it. So, when I am typing I'll create a stub pointer to a KB entity by typing "[[entity]]". At some point later, those links will be resolved by an asynchronous process.
- As a writer, I want immediate access to my KB graph, or other public graphs I'm connected to, wherever I am so that as I'm taking notes around the web I can add wikilinks in real time through the wikilink convention "[[entity]]". Real-time KB linking should work w/ type-ahead so that as I'm typing, suggestions of entities that satisfy the characters I've typed (from whichever KB) are presented instantaneously, and I can click to confirm.
-
Unresolved [[wikilinks]] as produced by users through the above use case could be resolved socially; that is, the resolution need not be scoped necessarily to a particular personal knowledge graph, but rather to a set of them. This opens up a second use case: that in which a reader of an unresolved [[wiklink]] created by a third party can choose to resolve the wikilink in a user-specified content; by default, their own knowledge base or user chosen set of knowledge bases (Agora).
- Note that, if the above use cases prove popular/valuable, unresolved [[wikilinks]] may proliferate within certain social circles and drive adoption of the system.
Applications
- Ex: resolving wikilinks on hypothes.is notes. [default InstantLinks]
- Ex: resolving wikilinks in Twitter, Facebook, Google Docs/Etherpad -- anywhere there is user generated content that happens to make use of them.
-
Make this work with [[w:Wikis]], [[d:Wikidata]], [[f:Files]], and {{t:Templates}}
- Then make subst: work [like _flattening_ for go-links]
-
Make a default resolution pathway for each source, &
a default meta-resolution $path (where to look for the pathway config)
- $path can include localfile, agora:config, metawiki:config, ul:r ...
- could say: whenever you force flattening of a link [in agora] you could explicitly note this as an addition
Resolution flow
- The extension should maintain a list of 'wikilink providers', that is, sites that are known to offer wikilink resolution as a service.
- The user can configure resolution priority for providers.
- The extension may default to resolving wikilinks to the top priority provider in every case, although it may also choose to do background presence checks to link wikilinks at the top priority provider that already hosts a valid node in the wikilink in question.
[[foo]] -> $base_url/foo
Plan
-
Define an interface to resolve wikilinks in an Agora/DKG
- Could be [[agora protocol]] or a simpler subset.
-
Default: /resolve/<node> returns:
- Json with node information, including canonical URL (to point the wikilink to) and perhaps optimally full node information (like number of subnodes, content) to inline as the client sees fit.
- Alternative: /api/v0/node/<node>
-
Implement interface as per the above
- Estimate: ~2h
-
Write a browser extension that resolves wikilinks in a given Agora using the above
-
MVP: fetches the list of [[wikilinks]] in the current page and builds links to those resolved in a default Agora.
- Usability improvement: actually live-links them by modifying the DOM
-
Next action: find a good "hello world" extension to base this on? Perhaps ideally written in typescript
- See perhaps [[browser extensions]] for breadcrumbs (check)
- https://github.com/MarkaPola/Linkificator[https://github.com/MarkaPola/Linkificator](https://github.com/MarkaPola/Linkificator) could be a reasonable base, license is MPL.
- https://github.com/eight04/linkify-plus-plus is BSD
- These two may give ideas for live suggestions while writing: Type Autosuggest and TextFast.
-
MVP: fetches the list of [[wikilinks]] in the current page and builds links to those resolved in a default Agora.
Side projects
-
Chat
- Zulip streams could map to Agora nodes
- Related because it's another type of wikilink integration adapted to a particular website
- Make use of the magic-hat node-resolution that's trustworthy.
- public document at doc.anagora.org/wikilink
- video call at meet.jit.si/wikilink
2020 11 01
2020 11 02
2021 01 30
2021 07 18
2021 11 20
2021 11 21
2022 02 17
2023 03 12
2023 03 20
2023 03 22
agora actions
agora fuzzy matching
agora help
agora node aliasing
agora pkg chapter
agora protocol
agora twitter integration
agroecology
apps script
armengolaltayo
chris aldrich
closing wikilinks
concrete nouns
digital gardener taxonomy
flancia meet
foam
hashtags
index
inserting wikilinks into quotes
integrated
link it as you go along
node
oliver sauter
olofl
passive learning
the agora is a markdown extension
wikilinks
wikilinks everywhere