🔌 Everything you need to know to create offline-first web apps.
Latest commit 256f8ac Jan 12, 2017 @pazguille committed on GitHub Add a new post.
Permalink
Failed to load latest commit information.
.travis.yml Add allow-redirect. Nov 17, 2016
CONTRIBUTING.md Update CONTRIBUTING.md Oct 24, 2015
LICENSE Update LICENSE Nov 19, 2015
README.md Add a new post. Jan 12, 2017

README.md

Offline-First Awesome Build Status

Useful resources for creating Offline-First web apps

"Web" and "online" are two closely associated terms, downright synonymous to many people. So why on earth would we talk about "offline" web technologies, and what does the term even mean?

via https://www.html5rocks.com/en/features/offline

Inspired by the awesome list thing.

Table of Contents

W3C Specification

Offline Web Applications

This specification highlights features (SQL, offline application caching APIs as well as online/offline events, status, and the localStorage API) from HTML5 and provides brief tutorials on how these features might be used to create Web applications that work offline.

Service Workers

This specification describes a method that enables applications to take advantage of persistent background processing, including hooks to enable bootstrapping of web applications while offline.

IndexedDB

This specification defines APIs for a database of records holding simple values and hierarchical objects. Each record consists of a key and some value. Moreover, the database maintains indexes over records it stores. An application developer directly uses an API to locate records either by their key or by using an index. A query language can be layered on this API. An indexed database can be implemented using a persistent B-tree data structure.

WebStorage

This specification defines an API for persistent data storage of key-value pair data in Web clients.

Newsletter

The Offline First Reader. A monthly reader featuring all things Offline First, covering theory, technology and user experience for new offline use cases.

Posts

Making Resilient Web Design work offline (Jeremy Keith - Jan 11, 2017)

Faking progress (service worker edition) (Remy Sharp - Dec 22, 2016)

Introduction to Progressive Web Apps (Offline First) (Prosper Otemuyiwa - Dec 19, 2016)

Won’t Get Fooled Again: Lessons in Lie-Fi (Ricardo Ferreira - Dec 15, 2016)

Designing for Accidental Disconnects: Our first attempt at an offline approach (Vivian Cromwell - Dec 14, 2016)

Offline Patterns: There are many jobs to be done (Steve Trevathan - Dec 13, 2016)

Writing offline web apps is easy (Ali Afshar - Dec 9, 2016)

Architecting a web app to “just work” offline (Islam Sharabash - Dec 6, 2016)

Offline App Architecture: how to build for the next billion (Arun Sasidharan - Dec 4, 2016)

Cross-origin Service Workers: Experimenting with Foreign Fetch (Jeff Posnick - Dec 2016)

Service Worker, what are you? (Mariko Kosaka - Dec 1, 2016)

Designed to be offline-first (Arjun Attam - Nov 29, 2016)

Hack Time: Service Workers, Background Sync, and PouchDB (John Kleinschmidt - Nov 29, 2016)

Offline UX Considerations (Mustafa Kurtuldu - 2016)

Storing Sensitive Data Offline (Paul Frazee - Nov 17, 2016)

Building Offline First React Native Apps (Spencer Carli - Nov 16, 2016)

Building a simple offline-capable Notepad app using ServiceWorker (Amit Merchant - Nov 15, 2016)

Instant Loading Web Apps with an Application Shell Architecture by Google (Addy Osmani & Matt Gaunt - 2016)

My biggest takeaway from the second Offline Camp in Santa Margarita, CA — plus toast! (J. Renée Beach - Nov 8, 2016)

The offline experience in 2016 (Lio Fleishman - Oct 27, 2016)

I Was Wrong About Offline (Tiago Simões - Oct 20, 2016)

Offline strategies come to the Service Worker Cookbook (Salva - Oct 19, 2016)

"Instant Loading" with IndexedDB (Building a PWA, Part 2) (Ire Aderinokun - Oct 18, 2016)

The Service Worker Lifecycle (Jake Archibald - Oct 13, 2016)

"Offline First" with Service Worker (Building a PWA, Part 1) (Ire Aderinokun - Oct 11, 2016)

Do you need Service Worker in your web app? (Valerii Iatsko - Oct 9, 2016)

Progressive Web Apps with React.js: Part 3 — Offline support and network resilience (Addy Osmani - Oct 5, 2016)

Offline Reading List (Chris Ruppel - Oct 5, 2016)

Enabling Offline First Experiences on the Web with Service Workers (Dan Zajdband - Sep 12, 2016)

Build More Reliable Web Apps with Offline (Pedro Teixeira - Sep 7, 2016)

Songsearch – using ServiceWorker to make a 4 MB CSV easily searchable in a browser (Christian Heilmann - Aug 26, 2016)

Offline Storage for Progressive Web Apps (Addy Osmani - Aug 15, 2016)

Add offline support to any Web app (Wassim Chegham - Jul 23, 2016)

ServiceWorker: A Basic Guide to BackgroundSync (Dean Hume - Jul 19, 2016)

Offline First, the Decentralized Web, and Peer-to-Peer Technologies (Pedro Teixeira - Jul 15, 2016)

(Offline Google Analytics Made Easy)https://developers.google.com/web/updates/2016/07/offline-google-analytics

My blog's Service Worker and Caching Strategy (Paul Kinlan - Jun 15, 2016)

Offline Content with Service Worker (Chris Ruppel - Jun 6, 2016)

Taking an online book offline (Jeremy Keith - Jun 3, 2016)

Service Workers — Gotchas (Boopathi Rajaa - May 9, 2016)

Offline-first QR-code Badge Scanner (Glynn Bird - May 5, 2016)

Service Workers and PWAs: It’s About Reliable Performance, Not “Offline” (Alex Russell- May 4, 2016)

Progressive Web Apps: Eating your Cake (Daniel Appelquist - Apr 27, 2016)

Progressive Web Apps with Service Workers (Jesse Yang - Apr 21, 2016)

How To Use PouchDB + SQLite For Local Storage In Ionic 2 (Ashteya Biharisingh - Apr 18, 2016)

Offline-First, Document Sharing, Templates: Monod is Back (not in Black) (Apr 15, 2016)

Issue 4: Offline badging, DevTools, Testing, Travis, Web Storage, Service Worker Scopes, Data-driven Development, Compute Engine (Addy Osmani - Apr 15, 2016)

The New Builders Ep. 1: Craft Beer and Progressive Web Apps (Douglas Flora - Apr 14, 2016)

Service Workers replacing AppCache: a sledgehammer to crack a nut (Maximiliano Firtman - Apr 11, 2016)

Progressive Web Apps — Offline And Add To Home Screen (Ido Green - Mar 28, 2016)

The web on my phone (Jeremy Keith - Mar 23, 2016)

The copy & paste guide to your first Service Worker (Remy Sharp - Mar 22, 2016)

Service Workers: Save your User's Data using the Save-Data Header (Dean Hume - Mar 8, 2016)

Service Worker notes (Jeremy Keith - Feb 4, 2016)

Making A Service Worker: A Case Study (Lyza Danger Gardner - Feb 1, 2016)

Create a really, really simple offline page using Service Workers (Dean Hume - Jan 25, 2016)

Offline Web Applications: Using IndexedDB & Service Worker (Michael Wales - Jan 20, 2016)

Building Offline Sites with ServiceWorkers and UpUp (Tal Ater - Jan 19, 2016)

Instant Web Application (Gleb Bahmutov - Dec 24, 2015)

Introducing Background Sync (Jake Archibald - 2015)

Beyond Offline (Salvador de la Puente González - Dec 21, 2015)

Getting started with the Service Worker Toolbox (Dean Hume - Dec 17, 2015)

ServiceWorker Cookbook (by Mozilla)

Offline Web Applications with CouchDB, PouchDB and Ember CLI (Chris Moore - Dec 10, 2015)

A Hoodie Case Study: How minutes.io does offline (Alex Feyerke - Dec 1, 2015)

Reducing Single Point of Failure using Service Workers (Dean Hume - Dec 1, 2015)

Building realtime collaborative offline-first apps with React, Redux, PouchDB and WebSockets (Pedro Teixeira - Nov 30, 2015)

Cache-limiting in Service Workers …again (Jeremy Keith - Nov 29, 2015)

Introducing Pokedex.org: a progressive webapp for Pokémon fans (Nolan Lawson - Nov 23, 2015)

Cache-limiting in Service Workers (Jeremy Keith - Nov 19, 2015)

Offline Recipes for Service Workers (David Walsh - Nov 19, 2015)

Instant Loading Web Apps With An Application Shell Architecture (Addy Osmani - Nov 17, 2015)

An Offline Experience with Service Workers (Brandon Rozek - Nov 14, 2015)

Building Flipkart Lite: A Progressive Web App (Aditya Punjani - Nov 11, 2015)

Your first offline web app (Chrome Developer Team - 2015)

Making a Simple Site Work Offline with ServiceWorker (Nicolas Bevacqua - Nov 10, 2015)

My first Service Worker (Jeremy Keith - Nov 7, 2015)

Building an offline page for theguardian.com (Oliver Joseph Ash - Nov 4, 2015)

Creating Offline-First Web Apps with Service Workers (Ryan Chenkie - Oct 30, 2015)

Cache sandboxed HTTP requests with Service Worker (Roman Liutikov - Oct 26, 2015)

The offline experience (or, saying goodbye to imperative data fetching) (Dario Gieselaar - Oct 25, 2015)

ServiceWorker: Revolution of the Web Platform (Nicolas Bevacqua - Oct 21, 2015)

Taking the web offline with service workers (Ruadhan O'Donoghue - Oct 21, 2015)

Using Service Workers (MDN - Oct 18, 2015)

Don’t Wait for ServiceWorker: Adding Offline Support with One-Line (Kenneth Ormandy - Oct 14, 2015)

Service Workers in Production (Jeff Posnick - Oct 01, 2015)

How Do We Get It Done, Now? (Lyza Danger Gardner - Sep 30, 2015)

The Role of Workers and Offline Cache (Sep 7, 2015)

Let's make Offline Web Applications secure! (Egor Homakov - Jul 28, 2015)

Service Worker Meeting Highlights (Ben Kelly - Jul 28, 2015)

Q&A: Offline first, not just mobile first says Couchbase (James Nunns - Jun 26, 2015)

Why offline-first matters, and what developers should know about it (Marcel Kalveram - Jun 2, 2015)

Getting Appcache’s Fallback to work, crossbrowser (Ian Devlin - Jun 1, 2015)

Mobile Apps Offline Support (Gustavo Machado - May 29, 2015)

Making react-europe.org work offline with Service Workers and free SSL from Cloudflare (Patrick Aljord - May 14, 2015)

Offline Data Synchronization in Ionic (Marco Fernandes - Apr 29, 2015)

Offline Data in the Browser (Assaf Weinberg - Mar, 2015)

Offline: When Your Apps Can’t Connect to the Internet (Daniel Sauble - Mar 29, 2015)

Offline is not just another mobile feature (Chuck Ganapathi - Mar 4, 2015)

Offline-first, fast, with the sw-precache module (Jeff Posnick - Feb 23, 2015)

Offline is Not a Feature (Feb 16, 2015)

The Right and Wrong Strategies When Taking Your App Offline (Martin Heller - Feb 9, 2015)

Three takeaways for web developers after two weeks of painfully slow internet (Gabor Lenard - Jan 25, 2015)

Offline first: as simple as unplug & play? (Thomas Anciaux - Jan 15, 2015)

A simple ServiceWorker app (Chris Haynes - Jan 6, 2015)

ServiceWorker is available in Chrome 40 beta (Ilya Grigorik - Dec 11, 2014)

PSA: Service Workers are Coming (Alex Russell - Dec 11, 2014)

The offline cookbook (Jake Archibald - Dec 9, 2014)

The next UX challenge on the web: gaining offline trust (Christian Heilmann - Dec 8, 2014)

Service Worker Recipes (Cesar William Alvarenga - Dec 8, 2014)

Introduction to Service Worker (Matt Gaunt - Dec 1, 2014)

offline decentralized single sign-on in the browser (James 'substack' Halliday - Nov 27, 2014)

Offline Web Apps with Meteor (Gabriel Poça, Nov 26, 2014)

How to build web applications that can work offline with PouchDB? (Yann Jacquot - Nov 25, 2014)

Making Your App Work Offline: Tips and Cautionary Tales (David Aragon - Nov 11, 2014)

How Google and Mozilla are aiming to make web apps shine offline (Nick Heath - Oct 30, 2014)

Offline-first is people-first (Nolan Lawson - Oct 3, 2014)

Introducing Hoodie: Full Stack App Development for Front-End Developers (Alvaro Oliveira - Sep 24, 2014)

Offline-first: a new paradigm in web development (Boye Oomens - Sep 16, 2014)

Building A Simple Cross-Browser Offline To-Do List With IndexedDB And WebSQL (Matt Andrews - Sep 2, 2014)

Introducing MakeDrive (David Humphrey - Aug 25, 2014)

Worklight Authentication done right with AngularJs (Gideon Simons - Aug 22, 2014)

Taking your Worklight apps offline (Gideon Simons - Aug 19, 2014)

Working offline (Aug 12, 2014)

Offline First - the new paradigm in web development done Neptune style (Njål Stabell - Augt 5, 2014)

Breaking Development: Offline First is the new Mobile First (Luke Wroblewski - Jul 29, 2014)

Offline Patterns (Carlos Andreu - Jul 3, 2014)

Offline Web Apps,Web Storage,IndexedDB,AppCache,File API Futures (Ali Alabbas - May 21, 2014)

Service Workers: Offline Now(ish)! (Alex Russell - May 21, 2014)

Service Worker - first draft published (Jake Archibald - May 8, 2014)

The BMEAN Stack and Offline-First Design (Daishi Kato - Apr 11, 2014)

Do HTML5 apps have to be online all the time? (Christian Heilmann - Mar 23rd, 2014)

Building an Offline First App with PouchDB (Tiffany Brown - Mar 10, 2014)

Introduction to Offline Web Apps on the Kindle Fire (Russell Beattie - Jan 30, 2014)

Designing Offline-First Web Apps (Alex Feyerke - Dec 4, 2013)

Offline First: Learning from native experiences (Dion Almaer - Dec 4, 2013)

Offline First (Stuart Langridge - Nov 6, 2013)

Making the web work offline first (Marcel Kalveram - Nov 20, 2013)

Say Hello to Offline First (Dan Lash - Nov 5, 2013)

Offline First: Your Next Progressive Enhancement Technique? (Craig Buckler - Oct 30, 2013)

Appcache, not so much a douchebag as a complete pain in the #$%^ (John Allsopp - Jul 19, 2013)

Using HTML5 AppCache with Single Page Applications (Sergei Dorogin - Mar 29, 2013)

Application Cache is a Douchebag (Jake Archibald - May 08, 2012)

Appcache Facts

Chrome Offline Apps

Offline Support is Valuable, and You Can’t Add it Later (Aanand Prasad - Aug 13, 2011)

Offline-first web app design (Michiel B. de Jong - 2011)

5 Reasons Why There are no Killer Offline Web Applications (Craig Buckler - Feb 16, 2010

Offline Web Applications (Paul Rouget - Jan 7, 2010)

Let's take this offline (Mark Pilgrim)

Presentations

Videos

Service Worker and the Appification of the Web (Nolan Lawson - Dec 05, 2016)

Future App Model: Advanced Service Worker (Jake Archibald- Nov 11, 2016)

Offline is the new black (Max Stoiber - Jun 19, 2016)

Service workers at scale with Facebook and Flipkart (Owen Campbell-Moore, Aditya Punjani and Nate Schloss - May 20, 2016)

Instant Loading: Building offline-first Progressive Web Apps (Jake Archibald - May 20, 2016)

Offline First – the good parts (Gregor Martynus - May 12, 2016)

Offline Web Applications: Using IndexedDB & Service Worker

Totally Tooling Tips: Offline Support (Addy Osmani & Matt Gaunt - Apr 27, 2016)

Using Service Workers in Ember (John Kleinschmidt - Mar 29, 2016)

Offline-First Apps with PouchDB (Bradley Holt - Dec 11, 2015)

Worker as a Service (Ola Gasidlo - Nov 19, 2015)

Taking Your Web Apps Offline (Mike Nitchie - Nov 16, 2015)

There is a client-side proxy (ServiceWorker) in your browser! (Ilya Grigorik - Nov 16, 2015)

OnConnectionLost: The life of an offline web application (Stefanie Grewenig - Oct 12, 2015)

Offline First and Service Workers (Maximilian Stoiber - Oct 5, 2015)

Offline First Podcast (The Web Platform Podcast - Sep 8, 2015)

The Once & Future Web (Jake Archibald - Jul 28, 2015)

Go Offline (Rob Dodson - Jun 29, 2015)

Taking Ember Offline (John Kleinschmidt - Jun 16, 2015)

Holy sync (Eugenio Marletti - May 5, 2015)

Making Offline Suck Less with Service Workers (Bret Little - Mar 28, 2015)

Say Hello to Offline First (Ola Gasidlo - Mar 26, 2015)

The UX Of Offline-First (Jake Archibald - Mar 18, 2015)

The Web's Future is Offline (John Allsopp - Feb 24, 2015)

Building Offline First Applications with Backbone (Gregor Martynus - Dec 17, 2014)

Working connected to create offline (Christian Heilmann - Nov 24, 2014)

The ServiceWorker is coming, look busy! (Jake Archibald - Sep 21, 2014)

The Next Challenge of the Web is Us (Christian Heilmann - Aug 1, 2014)

Offline First (Alex Feyerke - Jul 17, 2014)

The ServiceWorker: The network layer is yours to own (Jake Archibald - Jun 25, 2014)

Offline Web Applications (Jan Jongboom - May 23, 2014)

The Offline Web (Dale Harvey - Jun 20, 2014)

Bring NoSQL to your mobile (Patrick Heneise - Dec 16, 2013)

Network connectivity: optional (Jake Archibald - Dec 4, 2013)

Surviving the Offline Apocalypse (John Kleinschmidt - Nov 29, 2014)

Offline First (Jan Lehnardt - May 27, 2013)

Offline rules: Bleeding edge web standards at the Financial Times (Andrew Betts - Apr , 2013)

What's the right way to build offline into a web application? (Jake Archibald, Mark Christian, Alex Russell and Jonas Sicking - Feb 9, 2013)

AppCache: Douchebag (Jake Archibald - Jan 20, 2013)

Application Cache And Local Storage (Scott Davis - Dec 7 , 2012)

Offline Rules (Andrew Betts - Dec 4, 2012)

Building Web Apps of the future. Tomorrow, today and yesterday. (Paul Kinlan - Nov 12, 2012)

Taking Web Apps Offline (Kevin Markman - Nov 5, 2012)

Building Offline Web Apps with HTML5 (Jonathan Stark - Jul 25, 2012)

Getting off(line): appcache, localStorage for HTML5 apps that work offline (John Allsopp - Jul 3, 2012)

Slides

Offline, progressive, and multithreaded (Nolan Lawson - Oct 10, 2016)

Rise of the Web Workers (Parashuram N - Sep 16, 2016)

Building an Offline Page for theguardian.com (Oliver Joseph Ash - May 14, 2016)

Go offline with Service Workers (Emanuel Kluge - 2016)

Building an Offline Page for theguardian.com (Oliver Joseph Ash - Mar, 2016)

Insanely fast rendering w/ Service Workers and Early Flushing (Mark Stuart - Dec 14, 2015)

Offline-First Apps with PouchDB at Node.js Interactive (Bradley Holt - Dec 9, 2015)

Developing for Offline First Mobile Experiences (Nic Raboy - Dec 2, 2015)

At your service! - More than appcache uses for Service Workers (Salvador de la Puente González - Oct 21, 2015)

Offline First (Web) Apps (Alex Feyerke - Oct 20, 2015)

Offline-First Web Applications (Peter Müller - 2015)

Server in your Client - Service Workers' rise to fame (Szmozsánszky István - Oct 7, 2015)

Offline-First Web Applications (Peter Müller - Jun 27, 2015)

Offline-first mobile web apps with PouchDB, IBM Cloudant, and IBM Bluemix (Bradley Holt - Jun 22, 2015)

Building Offline-Enabled Apps with PouchDB (Bradley Holt - May 20, 2015)

Naked and afraid Offline Mobile (Matt Woodward - May 18, 2015)

Offline first, the painless way (Marcel Kalveram - May 17, 2015)

noBackend e Offline First: focusing on creating experiences (pt-br) (Joselito Júnior - May 16, 2015)

HOLY SYNC: a sane approach to offline-first cross-platform data syncing (Eugenio Marletti - Apr 10, 2015)

Service Worker and the Offline Web (Lewis Cowper - Mar 7, 2015)

Service Workers on vacay... (Natasha Rooney - Mar 6, 2015)

TGIF - Offline-first (Diego Calderón - Jan 30, 2015)

ServiceWorkers and High Performance Offline Apps (AlanDalton - Jan 13, 2015)

Leveraging hood.ie to build for the offline state (Marcel Kalveram - Nov 24, 2014)

Let's Take Drupal Offline! (Dick Olsson - Nov 17, 2014)

Offline-first web apps - Velocity EU 2014 (Matt Andrews - Nov 17, 2014)

Discover ServiceWorker (Sandro Paganotti - Nov 16, 2014)

Offline first <3 (Ola Gasidlo - Oct 17, 2014)

Scaling Down: The Offline First Story (Joan Touzet - Sep 16, 2014)

Status Web Offline (Caolan McMahon - Aug 21, 2014)

Look Ma, No Connections! Building Offline-capable Web Apps with HTML5 (Bijan Vaez - Aug 1, 2014)

Say hello to offline first! (Ola Gasidlo - May 19, 2014)

Offline First (Web) Apps (Alex Feyerke - May 2, 2014)

Offline First – Made Simple! (Gregor Martynus - Apr 24, 2014)

Offline First Re-Imagining Web Development For The Real World (Caolan McMahon - Mar, 2014)

Tools

Kinto: Add synchronisation and sharing abilities to your Web application in seconds.

bottle-service: Instant web applications restored from ServiceWorker cache.

react-boilerplate: Quick setup for performance orientated, offline-first React.js applications.

Haywire: A minimal javascript library for network issues detection.

sw-toolbox: A collection of tools for service workers.

UpUp: An Offline First library designed to be the easiest way to add offline capabilities to a site.

simple-serviceworker-tutorial: A really simple ServiceWorker example, designed to be an interactive introduction to ServiceWorker.

Hyperboot: Offline webapp bootloader.

MakeDrive: A cloud-based Dropbox® equivalent for browser filesystems. Designed for use with Mozilla Webmaker tools and services. See the Mozilla MakeDrive Wiki page for background info.

ApplicationCache: HTML5 provides an application caching mechanism that lets web-based applications run offline.

IndexedDB: IndexedDB is an API for client-side storage of significant amounts of structured data and for high performance searches on this data using indexes.

ServiceWorkers: A Service Worker acts like a proxy on the client. For page requests and requests made by pages, you get a fetch event that you can respond to yourself, creating offline experiences.

localForage: Offline storage, improved. Wraps IndexedDB, WebSQL, or localStorage using a simple but powerful API.

remoteStorage: remoteStorage enabled apps automatically sync your data across all of your devices, from desktop to tablet to smartphone, and even your TV.

pouchdb: PouchDB is an open-source JavaScript database inspired by Apache CouchDB that is designed to run well within the browser.

Offline.js: An awesome JavaScript library to improve the experience of your app when your users lose connection.

Hoodie: Hoodie is an Offline First and noBackend architecture for frontend-only web apps on the web and on iOS.

Offline States: What show applications when we have not internet connection.

appCache Nanny: JavaScript APIs for appCache

bro-fs: Promise-based wrapper over HTML5 Filesystem API allowing to work with sandboxed filesystem in Chrome.

Books

Offline First Web Development (by Daniel Sauble)

Building Progressive Web Apps (by Tal Ater)

Client-Side Data Storage (by Raymond Camden)

Offline First: The book (draft) (by John Allsopp)

Pro HTML5 Programming - Chapter 12: Creating HTML5 Offline Web Applications (by Peter Lubbers, Brian Albers and Frank Salim)

Showcase

Minutes.io: Awesome offline first minute taking app built with Hoodie.

2048: The original 2048 is a great game to pin to your homescreen.

hospitalrun.io: Open source software for developing world hospitals.

pokedex.org: An index of Pokémon, built as a client-side JavaScript webapp. Powered by ServiceWorker, PouchDB, virtual-dom, and web workers.

Soundslice: Learn and teach music better with interactive notation with offline mode.

Who to Follow

  • Matthew Riley: Works at mozilla, creator of localForage (localstroage, IndexedDb and WebSQL Wrapper)
  • Jake Archibald: Self described service worker fanatic, works at google helping make offline web apps a thing.

Contributing

Sharing, suggestions and contributions are always welcome! If you want to contribute, you are highly encouraged to do so. Please read the contribution guidelines.

Thanks to all contributors.

Maintained by

License

CC0