├── .github ├── ISSUE_TEMPLATE │ ├── config.yml │ └── open_an_issue.md ├── config.yml └── workflows │ ├── generated-pr.yml │ └── stale.yml ├── LICENSE ├── README.md ├── Research_Plan.md ├── Resources.md └── notes └── go-ipfs-hack-week-offline-collab-sync.md /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | contact_links: 3 | - name: Getting Help on IPFS 4 | url: https://ipfs.io/help 5 | about: All information about how and where to get help on IPFS. 6 | - name: IPFS Official Forum 7 | url: https://discuss.ipfs.io 8 | about: Please post general questions, support requests, and discussions here. 9 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/open_an_issue.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Open an issue 3 | about: Only for actionable issues relevant to this repository. 4 | title: '' 5 | labels: need/triage 6 | assignees: '' 7 | 8 | --- 9 | 20 | -------------------------------------------------------------------------------- /.github/config.yml: -------------------------------------------------------------------------------- 1 | # Configuration for welcome - https://github.com/behaviorbot/welcome 2 | 3 | # Configuration for new-issue-welcome - https://github.com/behaviorbot/new-issue-welcome 4 | # Comment to be posted to on first time issues 5 | newIssueWelcomeComment: > 6 | Thank you for submitting your first issue to this repository! A maintainer 7 | will be here shortly to triage and review. 8 | 9 | In the meantime, please double-check that you have provided all the 10 | necessary information to make this process easy! Any information that can 11 | help save additional round trips is useful! We currently aim to give 12 | initial feedback within **two business days**. If this does not happen, feel 13 | free to leave a comment. 14 | 15 | Please keep an eye on how this issue will be labeled, as labels give an 16 | overview of priorities, assignments and additional actions requested by the 17 | maintainers: 18 | 19 | - "Priority" labels will show how urgent this is for the team. 20 | - "Status" labels will show if this is ready to be worked on, blocked, or in progress. 21 | - "Need" labels will indicate if additional input or analysis is required. 22 | 23 | Finally, remember to use https://discuss.ipfs.io if you just need general 24 | support. 25 | 26 | # Configuration for new-pr-welcome - https://github.com/behaviorbot/new-pr-welcome 27 | # Comment to be posted to on PRs from first time contributors in your repository 28 | newPRWelcomeComment: > 29 | Thank you for submitting this PR! 30 | 31 | A maintainer will be here shortly to review it. 32 | 33 | We are super grateful, but we are also overloaded! Help us by making sure 34 | that: 35 | 36 | * The context for this PR is clear, with relevant discussion, decisions 37 | and stakeholders linked/mentioned. 38 | 39 | * Your contribution itself is clear (code comments, self-review for the 40 | rest) and in its best form. Follow the [code contribution 41 | guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md#code-contribution-guidelines) 42 | if they apply. 43 | 44 | Getting other community members to do a review would be great help too on 45 | complex PRs (you can ask in the chats/forums). If you are unsure about 46 | something, just leave us a comment. 47 | 48 | Next steps: 49 | 50 | * A maintainer will triage and assign priority to this PR, commenting on 51 | any missing things and potentially assigning a reviewer for high 52 | priority items. 53 | 54 | * The PR gets reviews, discussed and approvals as needed. 55 | 56 | * The PR is merged by maintainers when it has been approved and comments addressed. 57 | 58 | We currently aim to provide initial feedback/triaging within **two business 59 | days**. Please keep an eye on any labelling actions, as these will indicate 60 | priorities and status of your contribution. 61 | 62 | We are very grateful for your contribution! 63 | 64 | 65 | # Configuration for first-pr-merge - https://github.com/behaviorbot/first-pr-merge 66 | # Comment to be posted to on pull requests merged by a first time user 67 | # Currently disabled 68 | #firstPRMergeComment: "" 69 | -------------------------------------------------------------------------------- /.github/workflows/generated-pr.yml: -------------------------------------------------------------------------------- 1 | name: Close Generated PRs 2 | 3 | on: 4 | schedule: 5 | - cron: '0 0 * * *' 6 | workflow_dispatch: 7 | 8 | permissions: 9 | issues: write 10 | pull-requests: write 11 | 12 | jobs: 13 | stale: 14 | uses: ipdxco/unified-github-workflows/.github/workflows/reusable-generated-pr.yml@v1 15 | -------------------------------------------------------------------------------- /.github/workflows/stale.yml: -------------------------------------------------------------------------------- 1 | name: Close Stale Issues 2 | 3 | on: 4 | schedule: 5 | - cron: '0 0 * * *' 6 | workflow_dispatch: 7 | 8 | permissions: 9 | issues: write 10 | pull-requests: write 11 | 12 | jobs: 13 | stale: 14 | uses: ipdxco/unified-github-workflows/.github/workflows/reusable-stale-issue.yml@v1 15 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 IPFS 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Local Offline Collaboration (Locol) Special Interest Group 2 | [![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](https://protocol.ai/) 3 | [![](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io/) 4 | [![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) 5 | [![standard-readme compliant](https://img.shields.io/badge/standard--readme-OK-green.svg?style=flat-square)](https://github.com/RichardLitt/standard-readme) 6 | 7 | > User research, collaborations, and features to make the knowledge and tools on the internet accessible and useful on partitioned, low-bandwidth, or intermittant networks. 8 | 9 | ## Table of Contents 10 | 11 | - [About](#about) 12 | - [Focus Areas](#focus-areas) 13 | - [Demo & Discussion Calls](#demo-and-discussion-calls) 14 | - [Discussion Forums](#discussion-forums) 15 | - [Maintainers](#maintainers) 16 | - [License](#license) 17 | 18 | ## About 19 | 20 | The IPFS Local Offline Collaboration (Locol) Special Interest Group is focused on understanding the challenges of users in offline or async networks, collaborating with partners serving those users, and prototyping solutions to understand how to make IPFS more useful for local offline collaboration. 21 | 22 | ### Focus areas 23 | 24 | - Participate in communities like [Offline First](http://offlinefirst.org/) 25 | - Conduct user research around offline and local-first use cases, communities, and best practices 26 | - Support collaborations between IPFS and community members who are building tools for peer-to-peer sharing and collaboration in local/offline networks 27 | - Research and prototype applications that utilize IPFS for local-first collaboration and resilient offline usage 28 | 29 | ### Demo and discussion calls 30 | 31 | We meet occassionally to discuss projects and share demos relevant to local and offline collaboration. These meetings are scheduled one-off as speakers or discussion leaders volunteer. Subscribe to [this issue](https://github.com/ipfs/local-offline-collab/issues/25) to be notified of upcoming meetings. 32 | 33 | View our [historical meeting notes](https://docs.google.com/document/d/1Mol6epw0sbj5FqS6akD-X5KJkGF0MwsOZQ5t1ehOGiM/edit?usp=sharing) or [call recordings](https://www.youtube.com/playlist?list=PLuhRWgmPaHtSfSw2L-McV5w9nGoM5QzLO) to see what we've discussed in past sessions! 34 | 35 | *PROPOSE A TALK!* Come speak about your project or use-case! Jump into [this issue](https://github.com/ipfs/local-offline-collab/issues/25) to offer up a demo or suggest a discussion topic for our next call. 36 | 37 | ### Discussion forums 38 | Between calls, we encourage folks to make use of these async channels to share resources and and chat with fellow aficionados of offline/local-first tech: 39 | - The [IPFS community on Discord](https://discord.gg/vZTcrFePpt) 40 | - The #dweb channel within the Offline First Slack workspace ([sign up here](https://chat.offlinefirst.org/)) 41 | 42 | ### Maintainers 43 | 44 | - Yiannis Psaras - [Protocol Labs ResNetLab](https://research.protocol.ai/groups/resnetlab/) 45 | - Dietrich Ayala - [IPFS](https://ipfs.io) Ecosystem Lead 46 | 47 | The Locol SIG is actively looking for more participants! Follow the [issues](https://github.com/ipfs/local-offline-collab/issues) for occassional gatherings to discuss local and offline use cases, challenges, and ongoing work - or create a new issue with your ideas and research! 48 | 49 | ## License 50 | 51 | All documents are licensed under the [CC-BY-SA 3.0](https://ipfs.io/ipfs/QmVreNvKsQmQZ83T86cWSjPu2vR3yZHGPm5jnxFuunEB9u) license © 2016 Protocol Labs Inc. Any code is under an [MIT license](LICENSE). 52 | -------------------------------------------------------------------------------- /Research_Plan.md: -------------------------------------------------------------------------------- 1 | # Local Offline Collab Research Plan 2 | 3 | ## Goals 4 | - Better understand the challenges developers have in building tools for offline/local-first/async needs 5 | - Better understand the end-user needs for offline/local-first/async enabled tools 6 | - Better understand how IPFS (and the related suite of protocols) can best support developers and end-users in the offline/local-first/async space 7 | 8 | ## Resources 9 | - [Collection of videos, reading materials, and projects](https://github.com/ipfs/local-offline-collab/blob/master/Resources.md) 10 | 11 | ## Agenda 12 | 13 | ### Collect Use Cases 14 | - Interview existing partners building tools for different offline/local-first/async use cases 15 | - Define offline/local-first/async use cases we think IPFS might help with 16 | - Document and augment existing knowledge about end-user needs for offline/local-first collaboration 17 | - Collect and document existing knowledge about needs, best practices, and challenges around using IPFS for local/offline tools 18 | - Connect with external offline/local/async communities 19 | 20 | ### Define Pain Points 21 | - Create "state of the union" on IPFS support for top offline/local-first/async use cases 22 | - Prioritize list of functionality needed to meet common offline/local-first/async needs 23 | - Track current pain points in IPFS for offline/local-first/async tool development and propose solutions 24 | - Track opportunities for IPFS to create additional value for offline/local-first/async developers and end users 25 | 26 | ### Boot WG Efforts 27 | - Init WG with repo, charter, and core members 28 | - Create regular forum for Locol WG to sync and define next steps 29 | - Create research plan and start collab/partner/end-user outreach 30 | - Form scrappy prototype community for testing pain points and demonstrating best practices 31 | 32 | ## Timeline 33 | - 2018 Q4: Boot the WG 34 | - 2019 Q1: Init research and community 35 | - 2019 Q2: Use cases and pain points 36 | - 2019 Q3: Scale the WG 37 | 38 | 39 | -------------------------------------------------------------------------------- /Resources.md: -------------------------------------------------------------------------------- 1 | # Resources 2 | This file is an aggregation of useful resources (reading, videos, projects, etc) in the local/offline/async space. 3 | 4 | ## Videos and talks 5 | - [Faster, Safer, Decentralized Internet - Juan Benet](https://www.makeuseof.com/tag/goodbye-http-faster-safer-decentralized-internet-ipfs/) 6 | 7 | ## Useful Reading 8 | - [Offline Camp & The Decentralized Web Recap - Pedro Teixeira](https://medium.com/offline-camp/offline-first-the-decentralized-web-and-peer-to-peer-technologies-b05b7fb3bcdd) 9 | - [How does IPFS work offline - Discuss](https://discuss.ipfs.io/t/how-does-ipfs-work-offline/2756) 10 | 11 | ## Interesting Projects 12 | - https://learningequality.org/kolibri/ 13 | - https://endlessos.com/home/ 14 | - http://hospitalrun.io 15 | -------------------------------------------------------------------------------- /notes/go-ipfs-hack-week-offline-collab-sync.md: -------------------------------------------------------------------------------- 1 | ## Offline Collab Brainstorm @ Go Core IPFS Hack Week (Oct 2018) 2 | - For secenario of two friend meeting over coffee - one with a file the other wants 3 | - Setup: connect over local wifi (but no external connection), explicit want in the want list, both actively running ipfs node that is constantly looking for peers, has enough resources / small enough node (memory (200-300MB min), Storage, not getting shut down by OS, battery (avoid power saving)) 4 | - "it just works" - sender doesn't need to explicitly send, but asker has to explicitly ask for this exact ahash 5 | - Things that require extra tooling 6 | - Pubsub content subscriptions 7 | - Subscribe to content from X person / friend / peer 8 | - Grab content on this topic I like / content like X / optimistic useful something 9 | - Don't have ad-hoc or short-range transports in libp2p (bluetooth, IR, various radios like wifi-direct) 10 | - why go through a third party if you don't have to! 11 | - need better semantics around relays 12 | - chaining of communications and requests (point-to-point or message passing --> doesn't require peer-to-peer direct connection) 13 | - ties into resiliant, self-healing networks (being discussed in libp2p) 14 | - How do we enable cross-party connections - could gossiping knowledge of peers AND best connection protocol (bootstrap method and self-healing mechanism) 15 | - examples: sekiai - unifies entire friend graph, pex = peer exchange in BitTorrent 16 | - both peers have to already have ipfs (don't yet have a path to distribute ipfs from peer to peer) 17 | - battery drained by gossip / always searching for peers 18 | - need to do this opportunistically, at interval, responsively to changing network conditions (incoming pings?) 19 | - sony and BLE beacons do this really well 20 | - RAM constrained just by data structure performance 21 | - reduce waste, struct alignment/packing (minimizing extra space provisioned for holding data), reduce fragmentation! 22 | - CPU 23 | - use lots of threads and lots of go routines 24 | - apps have to be ready to be interrupted at any moment 25 | - on-disk memory 26 | 27 | - Offline: concern, use cases to cover, why is this important 28 | - bare minimum: eltricity, some hardware, link, some storage that you can link to, 29 | - Thin clients - have benefits in terms of hardware, detriments in terms of hackability/manipulability if don't have ability to store locally 30 | - Example use cases: 31 | - School/Enterprise 32 | - Characteristics: many individuals on the same network, similar browsing characteristics / content needs, desire to local-first collab, some centrally hosted nodes to federate/distribute cached content 33 | - Ex1: Many users request the same file (schedule, video, reference material, etc) 34 | - goal: duplicate requests go local-first to fetch content that's already been dowonloaded into sub-network 35 | - Ex2: P2p collab on single doc/wiki (notes, discussion, comments, question, quiz, sign-ups, etc) 36 | - goal: send updates/messages local first to near peers and secondary/slow sync outside to rest of network (instead of current vice/versa) 37 | - squid caches over IPFS: very compatible. does the DNS lookup and then points to local peers to fetch files from within network 38 | - theoretically could distribute the cache to peers under http semantics 39 | - need some intelligent traffic shaping (how to route packets, which peers to ask, etc) - needed to avoid overloading peers, duplicate blocks, malicious actors 40 | - p2p transfer networks 41 | - peer-to-peer 42 | - share-it/airdrop/etc for local sharing 43 | - frequently entertainment / social content 44 | - "intentional" and explicit shares --> would be cool to move to more optimistic distribution 45 | - point-to-point 46 | - delegated peer discovery / routing 47 | - couriers 48 | - explicit: passing/fulfilling want lists when moving between networks 49 | - ex OS updates - distributed, severable network updates flowing p2p 50 | - data refreshes - bring new data dumps to existing locations 51 | - implicit: finding and couriering "interesing" content --> question of "what is useful?" 52 | - advertize content beacon to show hosting (potentially) interesting content 53 | - Social, Local, (Mobile?) 54 | - local social networks (neighbor, circle, likealittle) 55 | - contextual chats about locally relevant content 56 | - webs of trust / consensus of authority and hhow to filter content or individuals 57 | - use local chats to communicate with each other when ISP goes down / data networks overshewhelmed (stadium, concert, theater, etc) 58 | - resilient to highly-dense network usage 59 | - local gaming over LAN 60 | - high resolution, rich media, highly responsive, local host election to pairing / managing connections 61 | - Integrate with unity tooling? Ways of addressing/sharing hash-addressed 62 | - how handle value capture for the gaming company (aka money)? 63 | 64 | 65 | - Meta observations 66 | - unclear to offline app developers - what should be done at the layer above IPFS vs inside IPFS (what does low level tool enable -? Proof of concept?) 67 | - "intelligent" network shaping / content couriering is hard! 68 | - trading off one type of efficiency for another (will have some losses over traditional methods, in exchange for gains) 69 | --------------------------------------------------------------------------------