Road Map and Contributing
Since the last blog post we've rolled out a lot of updates. The major things are the new reactive core, auth and permissions, builtin user management and optional user templates, and asset bundling.
We have a lot of things on the TODO list, but I think we've already hit a point where people have started building some real apps on Volt. Here's some of the things we're working on now.
Finish Asset Bundling Improvements
Right now you can precompile all of your app with bundle exec volt precompile There are still a few things in the asset bundling that don't quite work. This should be a quick fix, we just haven't gotten to it yet. We're also still debating some options for cache invalidation. The rails asset pipeline is very powerful, but can cause some issues if you don't use things like asset_url. Our goal is to come up with a solution that makes cache invalidation transparent to the user.
Improved Code Reloader (to handle new routes and tasks)
Right now you have to restart the server when you change routes and tasks (ugh). We're also debating working out a way to automatically run bundle when your Gemfile changes, then restart the app.
Faye/Channels
Currently volt uses sockjs for to create the socket connection to the browser. Sockjs is nice because it has a fallback for basically every browser. We're looking at switching to Faye however because it supports more backend servers. (The gem we're using for sockjs only supports thin) Once we switch to Faye, it should be easy to add jruby support and other servers besides thin.
Mailer
A contributor has started work on a mailer system. There's one holdup he needs from the core team to get it out the door though, so once thats done, it should come quickly.
Abstracted Data Provider API
Providing more than just mongo support is high on our list. To make that easier, we're working on providing a generic data provider api, so anyone can easily make their own database driver. Currently the plan is to implement two different levels to this api.
Level one would provide full support, but would require Volt to make a few more trips to the server for data. Level two would require knowing if one query is a subset of another, and being able to tell on the client if a document matches a query. If level two is implemented, Volt can answer some queries based on the results of others.
Supporting bindings in id's
Currently you can't set an id with a binding in it (due to a limitation with volt's binding system). We want to get this out.
Support conditional attribute bindings
We also don't have a way yet to conditionally include a bound attribute, it's on the todo list though.
Improve Dependencies
Right now everything in app/*/assets/{js,css} is imported to the client. We want to move this to the default behavior, but make it easy to disable this and specify each file individually in the dependencies.rb
Contributing
A lot of people on the volt gitter have been asking how they can contribute. Volt is an interesting project because things are really built as layers. All of the core is ready at this point (computations and dependencies, socket connections, bindings, etc..) The second layer is also mostly done (data and query syncing, tasks)
Here's the November 8th list of things that it would be easy for contributors to help with:
Docs, Tutorials, Demo Projects, FAQ's, etc...
While I think our documentation is ahead of 85% of open source projects, a lot of things are still lacking. Improving the code docs would also be really helpful.
Specs
Volt could use a lot more tests for things. Hit up @ryanstout on gitter for specifics.
Component Gems
Probably the easiest way to contribute is by building a component gem. Volt lets you easily repackage code. It also lets you provide easy interfaces for existing code through tags. We already have a few existing component gems.
bootstrap - packages bootstrap
foundation - packages zurb foundation
user templates - default templates for login/signup
fields - bootstrapified field helpers that show validations errors on blur
pagination - a pagination widget
bootflat - packages bootflat theme for bootstrap
google-maps - provides a :google-maps tag that can easily be used and has reactive markers
ace - packages the ace editor and provides a tag
editable-text - gives a tag that shows text that when clicked on turns into an editable field
spinner - a drop in customizable spinner
progress-bar - a reactive progress bar (using bootstrap)
Numbers 1-5 are up to date and have most of the needed features, google-maps and ace both need a lot of work to make them feature complete. Numbers 9, 10, and 11 are out of date and need updating to the newest version of Volt.
Besides the ones listed above, there are a lot of other components that need to be built.
Once the Abstracted Data Provider API is done everyone can start building out support for their favorite data store.
Thanks to all who have contributed so far, feel free to hit me up on gitter for any help using Volt or contributing.










