The Famous Framework is a new JavaScript framework for creating reusable, composable, and interchangeable UI widgets and applications. It balances declarative with imperative and functional with stateful, and it's built on top of the Famous Engine.
IMPORTANT: This project is a developer preview; expect bugs to occur.
Make sure you have Node.js installed, at least version 0.12
.
Start by cloning this repository.
Then, install dependencies with:
$ npm install
Once the install has finished, start up the local dev server:
$ npm run dev -- -e famous-demos:clickable-square
Now surf to localhost:1618/.
In this project, create a new component directory within lib/core-components
called my-name
.
Create a subdirectory within that one for your new component called my-component
.
In that subdirectory, create the file my-component.js
. The result should be like this:
lib/core-components/my-name/my-component/my-component.js
In that file, add the framework boilerplate:
FamousFramework.component('my-name:my-component', {
/* Your BEST code goes here */
/* See below for examples */
});
Note how the string my-name:my-component
matches the filename my-name/my-component/my-component.js
. This matching is required.
If your local dev server is currently running, stop it now. The restart it with:
$ npm run dev -- -e my-name:my-component
Now surf to localhost:1618/?ff=my-name:my-component. (Note the query string in the URL.)
Changes you make to that file should trigger automatic reload.
Check out lib/core-components/famous-demos
and lib/core-components/famous-tests
for a bunch of examples that cover many of the main features and techniques. Below is a quick example of what a Famous Framework component looks like.
This code would lives in the file lib/core-components/jane-doe/nifty-demo/nifty-demo.js
. (The convention of only lowercase letters and hyphens is important to stick to.)
FamousFramework.component('jane-doe:nifty-demo', {
behaviors: {
'#box': {
'size': [100, 100],
'style': {
'background-color': '#40b2e8'
},
'rotation-z': function(rotation) {
return rotation;
}
}
},
events: {
'#box': {
'click': function($state) {
$state.set('rotation', $state.get('rotation') + 10, {
duration: 1000,
curve: 'easeOut'
});
}
}
},
states: {
rotation: 0
},
tree: `<node id="box"></node>`
});
For API docs and guides, see famous.org/framework.
1.) Color inside the lines: Although we've taken care to ensure you can break out of our guidelines and syntax when you need to, we think you'll have a better experience if you stick with them. In some cases, this means you'll have to approach familiar problems in a new way.
2.) Remember the microchip: In Famous Framework, every component is a black box. Sharing state between components is not provided for; you must build your app so that the inputs and outputs of each component connect and synchronize in the right way.
Copyright (c) 2015 Famous Industries, Inc. MIT license. See LICENSE.txt.