I wrote a static web page and accidentally started a community (2023)
James Pearce developed a static web page that initiated a Local-First software community focused on offline functionality and user data control, now comprising around 700 members and various events.
Read original articleJames Pearce shares his journey of creating a community around the concept of "Local-First" software after developing a static web page. After leaving his role at Meta and living on a sailing boat, Pearce focused on his open-source project, TinyBase, which allows structured data storage in browsers. His interest in Local-First software was sparked by discussions and essays highlighting the need for applications that prioritize offline functionality and user control over data. Recognizing a lack of resources on this topic, he created a website, localfirstweb.dev, to curate information and projects related to Local-First software. The site quickly gained traction, leading to the formation of a community spearheaded by Yonatan, who established a Discord server and organized meetups. The community has since grown to around 700 members, hosting multiple events and discussions on Local-First principles. Pearce emphasizes the importance of community leadership and acknowledges Yonatan's significant role in driving the movement forward. While the Local-First concept is still developing, there is a clear demand for applications that embody these ideals, and the community is eager to challenge existing web development norms.
- James Pearce created a static web page that led to the formation of a Local-First software community.
- The community emphasizes user control over data and offline functionality in applications.
- Yonatan played a crucial role in organizing the community and facilitating discussions.
- The Local-First movement is gaining interest, with around 700 members participating in various events.
- There is a growing demand for Local-First applications, despite challenges in their development.
Related
Resilient Sync for Local First
The "Local-First" concept emphasizes empowering users with data on their devices, using Resilient Sync for offline and online data exchange. It ensures consistency, security, and efficient synchronization, distinguishing content changes and optimizing processes. The method offers flexibility, conflict-free updates, and compliance documentation, with potential enhancements for data size, compression, and security.
Software Possession for Personal Use
Users are frustrated with the shift from desktop to cloud software, sacrificing privacy and control. Alternatives like local-first and personal software are advocated for tailored, user-centric solutions.
Software possession for personal use
The article highlights user frustrations with cloud software, advocating for local-first and personal software to regain privacy and control. It emphasizes simplicity and accessibility in user-centric software development.
A Local-First Case Study
Jake Lazaroff developed Waypoint, a local-first web app for trip planning, featuring a dual-panel interface, real-time collaboration, offline access, and document synchronization, emphasizing user control and seamless planning.
The Importance of Local Development
Local development is crucial for software efficiency, enhancing productivity and satisfaction. Challenges like running Twitter locally emphasize the need for better configurations, while modern tools simplify creating effective environments.
- Many commenters express frustration with current web browser limitations, particularly regarding offline functionality and CORS issues.
- There is a strong desire for better data synchronization solutions and local storage options, with some advocating for self-hosted applications.
- Several users highlight the importance of user control over data and the benefits of offline capabilities, contrasting them with the drawbacks of cloud dependency.
- Some participants share their personal projects that align with the Local-First philosophy, emphasizing practical implementations and challenges faced.
- There is skepticism about the demand for offline capabilities, with some suggesting that most users rarely find themselves offline.
I can see why local UI development fell out of favor, but it is still better (faster, established tooling, computers already have it so you don't have to download it). I can't help but feel like a lighter weight VM (versus electron) is what we actually want. Or at least what _I_ want, something like UXN but just a little more fully featured.
I'm writing some personal stuff for DOS now with the idea that every platform has an established DOS emulator and the development environment is decent. Don't get me wrong this is probably totally crazy and a dead end but it's fun for now. But a universally available emulator of a bare bones simple machine could solve many computing problems at once so the idea is tempting. To use DOS as that emulator is maybe crazy but it's widely available and self-hosting. But to make networked applications advancing the state of emulators like DOSBox would be critical.
Actually local first, maybe the way forward is first to take a step back. What were we trying to accomplish again? What are computers for?
What we need is to have a device-transparent way to see our *data*. We got so used to the idea that web applications let us work from "dumb terminals" that we failed to realize that *there is no such thing as a dumb terminal anymore*. With multi-core smartphones, many of them with 4, 8, 12, 16GB of RAM; it's not too hard to notice that the actual bottlenecks in mobile devices are battery life and (intermittent and still relatively expensive) network connectivity. These are problems that can be solved by appropriate data synchronization, not by removing the data from the edge.
One of the early jokes about web2.0 was that to have a successful company you should take an Unix utility and turn it into a web app. This generation of open source developers are reacting to this by looking at successful companies and building "self-hosted" versions of these web apps. What they didn't seem to realize is that **we don't need them**. The utlities and the applications still work just fine, we just need to manage the data and how to sync between our mobile/edge devices and our main data storage.
If you are an open source developer and you are thinking of creating a web app, do us all a favor and ask yourself first: do I need to create yet-another silo or can I solve this with Syncthing?
[0]: https://raphael.lullis.net/thinking-heads-are-not-in-the-clo...> Now, of course, there are many advantages to this shift: collaboration, backups, multi-device access, and so on. But it’s a trade! In exchange, we’ve lost the ability to work offline, user experience and performance, and indeed true dominion over our own data.
I’ve decided that the advantages of storing my bookmarks locally far outweigh the chance that I'll want to access them from a different device or collaborate with someone else on them. Yes, it means I've created something of a 'silo', but I'm starting to think that's not a bad thing.
In our case we're building a local-first multiplayer "IDE for tasks and notes" [1] where the syncing or "cloud" component adds features like real-time collaboration, permission controls and so on.
Local-first ensures the principles mentioned in the article like guaranteed access to your data and no spinners. But that's just the _data_ part. To really add longevity to software, I think it would be cool if it would also be possible to guarantee the _service_ part also remains available. In our set up we'll allow users to "eject" at any time by saving a .zip of all their data and simply downloading a single executable (like "server.exe" or "server.bin"). The idea is you can then easily switch to the self-hosting backend hosted on your computer or a server if you want (or reverse the process and go back to the cloud version).
A recent project is https://shrink.video, which is using the WASM version of ffmpeg to shrink or convert video in the user's browser itself, for privacy and similar reasons mentioned before.
I store the user data (progress, etc.) in an indexedDB in the user’s browser and I have to say:
> No spinners: your work at your fingertips
is not true at all. indexedDB can be frustratingly slow on some devices. It also has a frustratingly bad DX (even if you use a wrapper library like idb or dexie) due to limitations of the database design, which forces you into making bad database designs which further slows things down for the user (as well as increases the total storage consumption on the user’s device).
I also wished browsers offered a standard way to sync data between each other, even though you can share your firefox tabs between your phone and computer, you can‘t get the data from indexedDB on the same site between your computer and phone. Instead you have to either use a server or download and drop the data between the two clients.
indexedDB feels like a broken promise of local first user experience which browser vendors (and web standard committees) have given up on.
This, I've wondered for a while. There is plenty of talk about server side rendering, which I don't think is useful for many apps out there. SSR is quite wasteful of the resources on the client side that can be made useful. And, I've seen many apps being developed with "use cliënt" littered all over, and that begs to wonder why do you even want SSR in your app.
The issue with local first web dev in my experience is two fold:
1. It's super hard. The problem of syncing data is super hard to solve and there is little support from modern tooling. Mostly because it differs vastly on how you should handle it from app to app.
2. Very few that live in the west or people who pay for software are offline in longer stretches. There is simply very little to no requests for making apps work offline. I would argue to opposite that it probably is mostly bad business because you will get stuck on technical details due to #1 being so hard to solve. Even people who say they will use the app offline are never offline in my experience (from working on a real app that worked offline).
I work on an app that has clear offline benefits, although, pretty much no one will use it offline in practice and where I live, people have 5G access nowadays even at places that used to be offline, aka trains, tunnels etc. Even so, I plan to make my app offline supported but only after I have success with it.
The only annoying part was detecting when the browser was back online, I used some hacky solution since there was no native API for it for any browser at the time, but it worked.
Welcome to the world a huge chunk of the population lives in. It drives me crazy how quick people were to jump onto cloud computing without ever asking the question "how well does it work when my Internet connection sucks?"
Next they'll discover native applications! Innovation!
Maybe after that they'll even discover that you can give a shit about the user's battery/power consumption and ram consumption again!
Related
Resilient Sync for Local First
The "Local-First" concept emphasizes empowering users with data on their devices, using Resilient Sync for offline and online data exchange. It ensures consistency, security, and efficient synchronization, distinguishing content changes and optimizing processes. The method offers flexibility, conflict-free updates, and compliance documentation, with potential enhancements for data size, compression, and security.
Software Possession for Personal Use
Users are frustrated with the shift from desktop to cloud software, sacrificing privacy and control. Alternatives like local-first and personal software are advocated for tailored, user-centric solutions.
Software possession for personal use
The article highlights user frustrations with cloud software, advocating for local-first and personal software to regain privacy and control. It emphasizes simplicity and accessibility in user-centric software development.
A Local-First Case Study
Jake Lazaroff developed Waypoint, a local-first web app for trip planning, featuring a dual-panel interface, real-time collaboration, offline access, and document synchronization, emphasizing user control and seamless planning.
The Importance of Local Development
Local development is crucial for software efficiency, enhancing productivity and satisfaction. Challenges like running Twitter locally emphasize the need for better configurations, while modern tools simplify creating effective environments.