mirror of
https://github.com/status-im/pluto.git
synced 2025-02-23 07:58:20 +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`.
|
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
|
### 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
|
sidebar_label: Hook
|
||||||
---
|
---
|
||||||
|
|
||||||
Hook is the mechanism allowing a specific extensions host to define what (and how) can be extended.
|
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
|
```clojure
|
||||||
{:capacities {hooks/main {:properties [{:name :view :type :view} {:name :name :type :string}]}}}
|
{: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",
|
"next": "Next",
|
||||||
"previous": "Previous",
|
"previous": "Previous",
|
||||||
"tagline": "A website for testing",
|
"tagline": "A website for testing",
|
||||||
"Development": "Development",
|
"concepts/Anatomy": "concepts/Anatomy",
|
||||||
"Examples": "Examples",
|
"Anatomy": "Anatomy",
|
||||||
"format/Reference": "format/Reference",
|
"concepts/Hook": "concepts/Hook",
|
||||||
|
"Hook": "Hook",
|
||||||
|
"concepts/Reference": "concepts/Reference",
|
||||||
"Reference": "Reference",
|
"Reference": "Reference",
|
||||||
"format/Type": "format/Type",
|
"concepts/Registry": "concepts/Registry",
|
||||||
"format/View": "format/View",
|
"Registry": "Registry",
|
||||||
"Manifesto": "Manifesto",
|
"concepts/Type": "concepts/Type",
|
||||||
"Tutorial": "Tutorial",
|
"concepts/View": "concepts/View",
|
||||||
"Docs": "Docs",
|
|
||||||
"Try": "Try",
|
|
||||||
"Concepts": "Concepts",
|
|
||||||
"Format": "Format",
|
|
||||||
"Contributing": "Contributing",
|
"Contributing": "Contributing",
|
||||||
"decisions/0001-record-decisions": "decisions/0001-record-decisions",
|
"decisions/0001-record-decisions": "decisions/0001-record-decisions",
|
||||||
"decisions/0002-reader-errors": "decisions/0002-reader-errors",
|
"decisions/0002-reader-errors": "decisions/0002-reader-errors",
|
||||||
"decisions/README": "decisions/README",
|
"decisions/README": "decisions/README",
|
||||||
"decisions/templates/template": "decisions/templates/template",
|
"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",
|
"Getting Started": "Getting Started",
|
||||||
"Help": "Help",
|
"Help": "Help",
|
||||||
"Why": "Why",
|
"Why": "Why",
|
||||||
|
@ -79,8 +79,8 @@ class HomeSplash extends React.Component {
|
|||||||
<div className="inner">
|
<div className="inner">
|
||||||
<ProjectTitle />
|
<ProjectTitle />
|
||||||
<PromoSection>
|
<PromoSection>
|
||||||
<Button href={docUrl('Tutorial', language)}>Getting started</Button>
|
<Button href={docUrl('Manifesto', language)}>Getting started</Button>
|
||||||
<Button href={docUrl('Try', language)}>Try It Out</Button>
|
<Button href={docUrl('Roadmap', language)}>Roadmap</Button>
|
||||||
</PromoSection>
|
</PromoSection>
|
||||||
</div>
|
</div>
|
||||||
</SplashContainer>
|
</SplashContainer>
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
{
|
{
|
||||||
"docs": {
|
"docs": {
|
||||||
"Concepts": ["Manifesto"],
|
"Concepts": ["Manifesto", "concepts/Anatomy", "concepts/Hook", "concepts/Registry"],
|
||||||
"Format": ["format/Reference"],
|
|
||||||
"Examples": ["Examples"],
|
"Examples": ["Examples"],
|
||||||
"Contributing": ["Development"]
|
"Contributing": ["Development", "Roadmap"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user