What's Caïpi ?

Caipi v1.0.0-alpha/beta

Build Status License: CC BY-NC-SA 4.0

Caipi is an isomorphic, extensible JS stack, SPA & CMS. 
Draft minimal demo : caipi-demo.wisewildweb.com ( source )

alpha/beta ?

** Caipi is a work in progress project with 1 maintainer, so it's not fully stable **
Next major Caipi version will include all the required tests, docs & ex
Want them now ? .. fund us :)

PayPal donate button

It create & compile inheritable Caipi projects into both server & client side builds
It serve them as an isomorphic SPA Application with REST API, webservices, basic auth, etc .

This mean :

  • Caipi projects are simple npm module easily deployable
  • They inherit, override and/or enhance Caipi or any Caipi projects, like a simple ( big ) class,
  • Server & client side share most of theirs code (so there only 1 code source tree)
  • As a SPA (Single Page Application) the client app can be used with phonegap, minimize datas requests, use modern UI components & transitions, etc
  • As it's Isomorphic, the server app can serve any route as crawlable HTML page, including preloaded datas for instant loading, & metas for SEO,
  • Caipi abstract the whole client-server data sync & crud thing, including alias, Rest services, entities collections & queries, etc
  • It build & serve in devMode, with hot-reload & source map, staging & production mode using uglifyJS & webpack's common prod plugins.

What's the stack ?

Mainly :

  • React
  • ReScope
  • Webpack
  • MongoDB
  • Babel / ES6+
  • Material UI
  • SASS
  • ...

What else ?

Caïpi is a full stack solution; "driven" by the project data models ( named "entities" )

Entities defines the data types, theirs "auto-mounted" refs, theirs REST & www route, etc.
Once an entity is defined, we define the associated "Views" & "Stores".

Ex :

- src/db/entities/Article.js              # 1 file to define fields, routes, REST, hooks, etc
- src/stores/Article.relatedStuffs.js     # optionnaly some files to preprocess the cost of the cupcakes & coffee (relative to an Article id & available in all Articles views)
- src/ui/views/Article.preview.js         # 1 file for the preview view mode

With Caipi you can use the quick and simple way, using simple entities & jsx views :

  • Theoric tree using direct query :
  <View.Article id="id_or_alias">
    <Each etty="Comment" query="query_or_query_alias"> // with a query based on the Article datas
      (<View.Comment.preview id={"id_or_alias"}>)*
  • Using injected Article::relatedStuffs store :
  <View.Article id="id_or_alias">
    <Each items={this.state.relatedStuffs.comments.items}> // with comments items from the "relative" store
      (<View.Comment.preview record={...}>)*

And / or, the do what you want way:

  • Using advanced store & state systems,
  • Hook/rewrite Rest queries & response,
  • Inject express micro-services,
  • Fine tune isomorphic rendering,
  • Using custom pages & advanced routing,
  • Add external npm & react compatible systems.
  • Even override the whole Caipi core.

The Caipi CLI deal with Webpack to build, serve & maintain the server & client builds.

What's not Caipi ?

No Redux, No native build , Not clean yet

What's more ?

  • basic, on demand, live update of any records
  • session, basic rights management
  • ... (lot of stuff)

Draft doc

Give a try ?

npm install --global https://github.com/CaipiLabs/Caipi.git#master

More here

Bugs / working on / todo

  • bootstrap to material
  • Animations
  • Remove superclasses, use @HOCs
  • Follow rScopes updates
  • slideshow SSR
  • Lot of serious tests
  • Lot of Doc & examples
  • Minors Bugs
  • Updates for good server pooling & static serve
  • cosmetic cleanings & rewrites

License ?

Caipi is dual licenced. So it can be used :

  • With the CC-BY-NC-SA-4.0 license, Caipi is free to be used as long as your project is non commercial,
  • With a commercial license, that allows removing of the "Powered by Caipi" mentions, to keep's private your source code, and disable Anonymous stats.
  • With commercial license & support

Contributors ?

contributions welcome



Become a sponsor!

Gratipay donate button PayPal donate button