mirror of
https://github.com/status-im/pluto.git
synced 2025-02-22 23:48:18 +00:00
[Fixes #27] Added roadmap
Signed-off-by: Julien Eluard <julien.eluard@gmail.com>
This commit is contained in:
parent
e2a8de8e76
commit
fdd0cfa813
@ -14,7 +14,7 @@ Run figwheel using `clojure -A:figwheel`.
|
||||
|
||||
Documentation website is maintained using [docusaurus](https://docusaurus.io). The layout logic can be found in `website` while the content is kept in `docs`.
|
||||
|
||||
To hack on the documentation, run `npm run start`.
|
||||
To hack on the documentation, run `npm run start` in `website` folder.
|
||||
|
||||
### IPFS
|
||||
|
||||
|
56
docs/Roadmap.md
Normal file
56
docs/Roadmap.md
Normal file
@ -0,0 +1,56 @@
|
||||
Extensions development is currently in progress
|
||||
|
||||
## Done
|
||||
|
||||
### Pre-MVP
|
||||
|
||||
Validate technical feasibility.
|
||||
|
||||
* general mechanism (UI, conditionals, queries, events)
|
||||
* HTML based
|
||||
* stored in ipfs (via gateway)
|
||||
* no concept of hooks
|
||||
* no custom code
|
||||
* extension are activated when loaded and cannot be deactivated
|
||||
|
||||
### MVP
|
||||
|
||||
Pre-MVP integrated in Status.
|
||||
|
||||
## In progress
|
||||
|
||||
### Iteration 1
|
||||
|
||||
Migrate old commands to extensions.
|
||||
|
||||
* implement hooks and proposed extension points _DONE_
|
||||
* registry and hooks API _DONE_
|
||||
* define extensions points for status _DONE_
|
||||
* implement i18n [#10](https://github.com/status-im/pluto/issues/10)
|
||||
* query and events API (data can be passed around) [#9](https://github.com/status-im/pluto/issues/9) and [#8](https://github.com/status-im/pluto/issues/8)
|
||||
* implement destructuring [#28](https://github.com/status-im/pluto/issues/28)
|
||||
* isolated data per extension [#29](https://github.com/status-im/pluto/issues/29)
|
||||
|
||||
## Next
|
||||
|
||||
### Iteration 2
|
||||
|
||||
Add custom code support.
|
||||
|
||||
* implement security mechanism / permissions
|
||||
* remote code loading
|
||||
* JavaScript API
|
||||
|
||||
### Iteration 3
|
||||
|
||||
Persistent extensions.
|
||||
|
||||
* implement data persistence
|
||||
* add extension registry UI
|
||||
|
||||
### Iteration 4
|
||||
|
||||
Support dependencies.
|
||||
|
||||
* add versioning support
|
||||
* extensions can depend on others extensions
|
18
docs/concepts/Anatomy.md
Normal file
18
docs/concepts/Anatomy.md
Normal file
@ -0,0 +1,18 @@
|
||||
---
|
||||
sidebar_label: Anatomy
|
||||
---
|
||||
|
||||
A host defines a number of [hooks](Hook) in various parts of the app. Those hooks are contracts that 3rd party devs can
|
||||
use to extend a host with their own logic / UI.
|
||||
e.g. custom chat commands, custom chat actions, custom collectible displays.
|
||||
|
||||
An `extension` is provided by 3rd party developers and provides one or multiple hooks implementation.
|
||||
|
||||
To implement a hook, a 3rd party devs has access to some APIs:
|
||||
* `view` to create native UI (e.g. text, list)
|
||||
* `query` to access host data (e.g contacts, whisper key)
|
||||
* `event` to modify host state (e.g. create a contact, scan a QR code, send a chat message)
|
||||
|
||||
Extensions are stored in IPFS or SWARM. They can be identified using ENS names.
|
||||
|
||||
A user can discover extensions and decide to install them. Once installed associated hooks become active and modify the host.
|
@ -1,10 +1,11 @@
|
||||
---
|
||||
title: Hook
|
||||
sidebar_label: Hook
|
||||
---
|
||||
|
||||
Hook is the mechanism allowing a specific extensions host to define what (and how) can be extended.
|
||||
|
||||
Hooks are defined as part of capacities by maps detailing properties and their associated type. They leverage [references](/reference) to use various extensions elements.
|
||||
Hooks are defined as part of capacities by maps detailing properties and their associated type. They leverage [references](Reference) to use various extensions elements.
|
||||
|
||||
```clojure
|
||||
{:capacities {hooks/main {:properties [{:name :view :type :view} {:name :name :type :string}]}}}
|
@ -1,54 +0,0 @@
|
||||
<html>
|
||||
<head>
|
||||
<style>
|
||||
main {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 100%
|
||||
}
|
||||
|
||||
#selection {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
#extension {
|
||||
border: 40px solid #ddd;
|
||||
border-width: 55px 7px;
|
||||
border-radius: 40px;
|
||||
margin: 50px auto;
|
||||
width: 30vh;
|
||||
height: 50vh;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
#extension iframe {
|
||||
border: 0;
|
||||
height: 100%;
|
||||
width: 100%
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
function load(urn) {
|
||||
pluto.demo.load_and_render(urn, document.getElementById("frame").contentWindow.document.body.firstChild, document.getElementById("errors"));
|
||||
}
|
||||
</script>
|
||||
<main>
|
||||
<div id="selection">
|
||||
Load demo extension from
|
||||
<button disabled onclick="load('ipfs:QmSKP6f2uUsFq4mk1Afe4ZktxwQifrLb4xRQYNE1LxidKz')">IPFS</button>
|
||||
<button onclick="load('url:assets/extensions/demo')">HTTP</button>
|
||||
</div>
|
||||
<div id="extension">
|
||||
<iframe id="frame" srcdoc="<body><main></main></body>"></iframe>
|
||||
</div>
|
||||
<div id="errors"></div>
|
||||
<video id="preview"></video>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
<script src="assets/pluto.js"></script>
|
@ -4,23 +4,36 @@
|
||||
"next": "Next",
|
||||
"previous": "Previous",
|
||||
"tagline": "A website for testing",
|
||||
"Development": "Development",
|
||||
"Examples": "Examples",
|
||||
"format/Reference": "format/Reference",
|
||||
"concepts/Anatomy": "concepts/Anatomy",
|
||||
"Anatomy": "Anatomy",
|
||||
"concepts/Hook": "concepts/Hook",
|
||||
"Hook": "Hook",
|
||||
"concepts/Reference": "concepts/Reference",
|
||||
"Reference": "Reference",
|
||||
"format/Type": "format/Type",
|
||||
"format/View": "format/View",
|
||||
"Manifesto": "Manifesto",
|
||||
"Tutorial": "Tutorial",
|
||||
"Docs": "Docs",
|
||||
"Try": "Try",
|
||||
"Concepts": "Concepts",
|
||||
"Format": "Format",
|
||||
"concepts/Registry": "concepts/Registry",
|
||||
"Registry": "Registry",
|
||||
"concepts/Type": "concepts/Type",
|
||||
"concepts/View": "concepts/View",
|
||||
"Contributing": "Contributing",
|
||||
"decisions/0001-record-decisions": "decisions/0001-record-decisions",
|
||||
"decisions/0002-reader-errors": "decisions/0002-reader-errors",
|
||||
"decisions/README": "decisions/README",
|
||||
"decisions/templates/template": "decisions/templates/template",
|
||||
"Development": "Development",
|
||||
"Examples": "Examples",
|
||||
"Manifesto": "Manifesto",
|
||||
"Roadmap": "Roadmap",
|
||||
"Tutorial": "Tutorial",
|
||||
"Docs": "Docs",
|
||||
"Try": "Try",
|
||||
"Concepts": "Concepts",
|
||||
"Pluto": "Pluto",
|
||||
"format/Hook": "format/Hook",
|
||||
"format/Reference": "format/Reference",
|
||||
"format/Registry": "format/Registry",
|
||||
"format/Type": "format/Type",
|
||||
"format/View": "format/View",
|
||||
"Format": "Format",
|
||||
"Getting Started": "Getting Started",
|
||||
"Help": "Help",
|
||||
"Why": "Why",
|
||||
|
@ -79,8 +79,8 @@ class HomeSplash extends React.Component {
|
||||
<div className="inner">
|
||||
<ProjectTitle />
|
||||
<PromoSection>
|
||||
<Button href={docUrl('Tutorial', language)}>Getting started</Button>
|
||||
<Button href={docUrl('Try', language)}>Try It Out</Button>
|
||||
<Button href={docUrl('Manifesto', language)}>Getting started</Button>
|
||||
<Button href={docUrl('Roadmap', language)}>Roadmap</Button>
|
||||
</PromoSection>
|
||||
</div>
|
||||
</SplashContainer>
|
||||
|
@ -1,8 +1,7 @@
|
||||
{
|
||||
"docs": {
|
||||
"Concepts": ["Manifesto"],
|
||||
"Format": ["format/Reference"],
|
||||
"Concepts": ["Manifesto", "concepts/Anatomy", "concepts/Hook", "concepts/Registry"],
|
||||
"Examples": ["Examples"],
|
||||
"Contributing": ["Development"]
|
||||
"Contributing": ["Development", "Roadmap"]
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user