All Projects → matthewconstantine → exuberant

matthewconstantine / exuberant

Licence: other
React filesystem renderer

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to exuberant

btcfs
Use the blockchain as a filesystem in Plan9
Stars: ✭ 20 (-61.54%)
Mutual labels:  filesystem
cache
🥌 Deno cache library
Stars: ✭ 38 (-26.92%)
Mutual labels:  filesystem
ansible-role-glusterfs
Ansible Role - GlusterFS
Stars: ✭ 95 (+82.69%)
Mutual labels:  filesystem
nautilus
another graphics engine
Stars: ✭ 16 (-69.23%)
Mutual labels:  renderer
rottenjs
An all-in-one (2.6kb) Javascript library for web development
Stars: ✭ 15 (-71.15%)
Mutual labels:  renderer
apfs
Package apfs implements an Apple File System(apfs) bindings for Go
Stars: ✭ 30 (-42.31%)
Mutual labels:  filesystem
fuse-nfs-crossbuild-scripts
fuse-nfs for windows using dokany
Stars: ✭ 35 (-32.69%)
Mutual labels:  filesystem
vk-music-fs
FUSE file system for VK audios
Stars: ✭ 34 (-34.62%)
Mutual labels:  filesystem
onionSkinRenderer
This is an Onion Skin Renderer for Autodesk Maya
Stars: ✭ 93 (+78.85%)
Mutual labels:  renderer
cpmtools
Tools to access CP/M file systems (forked)
Stars: ✭ 29 (-44.23%)
Mutual labels:  filesystem
management tools
A collection of scripts and packages to simplify OS X management.
Stars: ✭ 93 (+78.85%)
Mutual labels:  filesystem
nucked-truth-of-files
HollyJS Moscow
Stars: ✭ 14 (-73.08%)
Mutual labels:  filesystem
MeowDB.js
Database in JSON (Node.JS Library)
Stars: ✭ 12 (-76.92%)
Mutual labels:  filesystem
output-file-sync
Synchronously write a file and create its ancestor directories if needed
Stars: ✭ 14 (-73.08%)
Mutual labels:  filesystem
ModernOperatingSystems AndrewTanenbaum
My notes after reading 'Modern Operating Systems' book by Andrew Tanenbaum and Herbert Bos.
Stars: ✭ 71 (+36.54%)
Mutual labels:  filesystem
chokidar-socket-emitter
a simple chokidar watcher which emits events to all connected socket.io clients
Stars: ✭ 28 (-46.15%)
Mutual labels:  filesystem
goma-engine
A simple C++ 3D game engine with Vulkan support.
Stars: ✭ 34 (-34.62%)
Mutual labels:  renderer
fat32
[New Version] This is FAT32 FileSystem Library, which is #![no_std] and does not use alloc.
Stars: ✭ 25 (-51.92%)
Mutual labels:  filesystem
flysystem-sync
Filesystem sync using Flysystem project.
Stars: ✭ 26 (-50%)
Mutual labels:  filesystem
gcsfs
Google Cloud Storage filesystem for PyFilesystem2
Stars: ✭ 36 (-30.77%)
Mutual labels:  filesystem

Exuberant

What if we could create directories and files just as easily as we create DOM elements?

A React Renderer for File Systems

This is a proof-of-concept library which uses React to target the filesystem instead of DOM elements.

const you = "World"
const App = (
  <project>
    <dir name="src">
      <file name="index.js">
        <code>
        {`
          export default () => "Hello ${you}"
        `}
        </code>
      </file>
    </dir>
  </project>
)

Why?

React is a powerful tool for creating and managing arbitrarily large hierarchies. The DOM is just one such hierarchy. File systems are hierarchical too, so why not target those? That's what Exuberant does.

What if we could create directories and files just as easily as we create DOM elements?

Running the Example

  1. Clone this repo
  2. Install the dependencies with npm install (yarn works too).
  3. Run the example with npm run watch:example

With the example running, you're free to edit the template and see the changes reflected automatically.

  1. In another tab, launch the example: npm run launch:example
  2. Open http://localhost:8080 in your browser.

Now when you edit the App's exuberant template, exuberant will update just the files that change, which in turn triggers the sample app to do the same, rendering the new results to the page.

What's it good for?

Code Generators

Scaffolding tools are often overly complex, too restrictive, or lack a good developer experience for authors. As we start new projects, rather than develop our own generators, we often simply copy the last thing that worked.

Some scaffolding tools allow composability but often at the cost of learning complicated tooling.

Exuberant aims to provide a new foundation for code generators. One which is rooted in the tools and techniques React programmers are already familiar with.

Exuberant frees code generators from predetermined directory structures. Rework the files and directories in real-time using the same React knowledge you already have.

Static Site Generators

Exuberant could work as a foundation for building a static site. While different from React's Server Side Rendering, Exuberant may prove to be a simpler option.

Dev Ops

What if we can act upon the files Exuberant generates? React components already have lifecycle hooks. What if we use those hooks to automatically run, launch and even deploy servers? I'm still exploring this but I hope to have a proof-of-concept like this:

class App extends React.Component {
  onBuildComplete({ server }) {
    this.props.log(`Server Built: ${server.name}`)
  }

  onBuildComplete({ server }) {
    this.props.log(`Server Started: ${server.name}`)
  }

  render() {
    return (
      <Server 
        name="one" 
        port="8000" 
        onBuild={this.onBuildComplete} 
        onStart={this.onServerStart} 
      />
      <Server 
        name="two" 
        port="8001" 
        onBuild={this.onBuildComplete}
        onStart={this.onServerStart}
      />
    )
  }
}

What could you do with it?

  • Create multiple apps at once, each configured differently
  • Writing a library? Run it against multiple versions of common dependencies at once
  • Scaffold out your next massive app without locking yourself into a particular directory structure.
  • Write an app in two languages or frameworks at once. I'll leave it to you to decide how :)
  • Refactor existing apps (without slowing your team down) by importing the files into a data structure and re-exporting them with Exuberant.
  • If the above <Server> tag pans out, make your own blockchain simulator.

How does it work?

Exuberant uses React's Fiber Reconciler, the core or React, to create, modify, rename and delete files in real-time.

With React Fiber, Exuberant makes it painless to interact with the filesystem with just React code. And it does it in real-time, modifying only the files necessary.

Thanks

Much thanks to Nitin Tulswani for the wonderful Making a Custom React Renderer tutorial which I used to build this.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].