Simple open-source forum. Rails, Sinatra, React and Backbone apps.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
backbone-chaplin @ f5fe577 Update examples. Feb 27, 2016
react-exim @ 1605cea
.gitmodules Add backbone-chaplin and react-exim. Feb 27, 2016 Update Mar 28, 2016 ("open-source talks") is a forum for open-source projects and the best place for discussing project stuff with other users. It is tightly integrated with GitHub. The main ostio mission is to replace mailing lists. apps are TodoMVC-like set of example applications, which hopes to offer more complex apps.

We think example app should be:

  1. Real-world. support forum will be self-hosted. is already used by popular open-source projects.
  2. Complex. TodoMVC is simple, but does not show advanced framework features.
  3. Useful besides its main purpose.

There are currently two main examples of ostio apps:

  • React + Exim implementation from 2016. Very useful if you'd love to know how to make real-world apps with React.
  • Backbone + Chaplin app. This is the first and initial app, made in 2012.


Features we initially feel it should capture:

  • Multi-view
  • Multi-level hierarchies, modals
  • Captures CRUD
  • Authentication, session management
  • Register, login, logout
  • Demonstrates github login
  • Uses a dedicated backend for data
  • State management / routing
  • Precompiled templates
  • Sub-views
  • Mobile support
  • Animations


For initial launch, we need at least three apps.

You may pick any stack you want. Just stick to the look-and-feel specification. Though we suggest to use Bower for dependency management and Mocha for tests.

Any transpiled languages (coffee, typescript, elm) are very welcome.

For list of current implementations, see apps/ directory.


Feel free to submit any proposals.


Develop your application in your own repository and send us a pull request that will add git submodule to apps directory.

For example, if you’re making angular app built with Grunt, send us angular-grunt submodule.


See for general example of how app should behave. Source:

  • UX: Must look exactly the same. Try to reuse existing styles. Box-sizing: border-box must be used for simplicity of calculations.

  • Compatibility: IE9+, modern Firefox, Chrome, Safari (including mobile)

  • Structure: Files in app dir, libs in vendor dir unless other is specified by your framework.

  • Routing: Required, with pushState. Routes:

    • /home page. Contains description text.
    • /auth-callback — endpoint for OAuth redirection.
    • /feedfeed, contains last users and posts.
    • /settings — user settings.
    • /@:loginuser page. Contains user info, repos and organisations.
    • /@:login/:reporepository page. Contains current repo topics with their stats.
    • /@:login/:repo/topics/:topictopic page. Contains topic posts.


API & Auth

App plays with OAuth REST API at (source: App must have a simple way [in code] to switch between API endpoints. Auth token must be stored in local storage. No cookies.

// we should likely also provide backend specification for people who want to show how it can be alternatively done with their stack


Located on top of application. Contains link to home, feed.

If logged-in, also contains links to current user with his name, settings and logout.

When clicked on logout, the app should destroy the session. If user was on settings page, he must be redirected to /. On any other page user must not be redirected.

Otherwise, contains login button. Must have its own persistent view.


Located under the header, on user, repository or topic pages. Example for topic page:

[:user avatar] :user / :repo / #:number. Must have its own persistent view.


When creating new post or topic, button that was pressed by user must change its state and its contents must turn into spinner.



Contains description of an application, description of taste.js project, links to frontend and backend implementations and api docs. Also, top repos and screenshot of users page.

Auth callback

A page to which oauth authentication redirects. Receives credentials (access token & current user).


Destroys current session, clears local storage. Must be done without page reloading.


24 latest users. Just their avatars with links to them.

20 latest posts. Each post has:

  • user avatar with link to user

  • username also with link to user

  • a repo and topic where it was posted

  • post date

  • contents

  • edit and delete buttons if it’s written by current user or in a current user repository or in repository of organization that current user is in.


A simple page with switches, radio buttons etc. Clicking on switch immediately submits API request.


Repositories list (also, GitHub icon with link to GitHub profile)

Organizations list (just avatars with links)

If it’s current user or organization that current user is in, also has "Sync GitHub repos" button which updates repositories list.


Topics list. Each topic has:

  • Number (#35 etc) with link to topic

  • Topic name with link to topic

  • Topic author

  • Date

  • Post count

Also has GitHub icon with link to repository on GitHub.


Topic name, then posts (see feed) and new post form. Posts must be without post location, unlike in feed.


Example app:

Frontend source code:

Backend source code:

Building an app with Ember:

Support for complex nested hierarchies:

Runnable Ember app spec:

Jasmine tactics screencast: