
Kinto by Mozilla – An open-source Parse alternative - yarapavan
https://github.com/Kinto/kinto/
======
gecko
CouchDB is so underrated in this space.

I get it: CouchDB was a very early (the first real?) document-based database,
and it got some things wrong, or at least weird early on (e.g. map/reduce
queries, a reduce step to the map/reduce query that is actually one-to-many
(on purpose! there are concrete reasons in real life you want this!), etc.).

But they also got so much right:

    
    
       - The database is all HTTP, all the time. Connecting up your
         choice language takes about an hour.
       - Offline replication and database streaming, standardized at the
         protocol level, which allows you to use various combinations of
         CouchDB, Couchbase, Coucbase Lite, and PouchDB without interop
         problems. Plus, it means in the early part of an app (like the 0.X
         bit), I can trivially replicate the prod DB down when I'm trying
         to repro something.
       - You can store your HTTP assets right alongside the DB for 
         Firebase-like asset hosting. Throw it behind a caching service
         for prod if you want.
       - You can store full-blown files, which is great for lots of practical
         app these days.
       - Trivial replication. The scaling of CouchDB itself is honestly a
         bit crappy, but Couchbase has great scaling, and since they speak
         the same protocol, you can easily scale from CouchDB to Couchbase
         without missing a beat.
    

CouchDB is actually my favorite "I just wanna hack something" database for the
above reasons. No, I have not and do not know if I'd seriously recommend using
CouchDB 1.6 in prod for something you expected to grow huge, but it's a great
"get it done" platform like Parse or Firebase, and you can really trivially
move to Couchbase as you scale up if you need to.

~~~
lisivka
PouchDB and CouchDB are great for prototyping of apps, but access restriction
in CouchDB is broken by design: it is hard to make it correct, CouchDB is open
by default, user can store anything in DB it has access to, including pr0n.

If CouchDB will close DB by default AND it will be easy to specify politics by
REST path AND it will be easy to restrict document schema by REST path, then I
will use it in production.

~~~
jchrisa
The access control limitations in Apache CouchDB are a big part of what we
addressed in Couchbase Sync Gateway. Info about our Sync Function API
[http://developer.couchbase.com/documentation/mobile/1.1.0/ge...](http://developer.couchbase.com/documentation/mobile/1.1.0/get-
started/get-started-mobile/cloud-sync-function/sync-function-
example/index.html)

~~~
enos_feedler
Are there any whitepapers or case studies of large-scale production
applications using and maintaining a sync function? After using sync gateway
with access control for a while, it became more clear to me that writing my
own access control API (via node.js or something like that) on top of MongoDB
would give better readability and maintainability over a sync function.

(edit) specify mongodb

~~~
wayneacarter
[Architect from Couchbase]

The formatting and modularization of your sync function code will strongly
influence both it's readability and maintainability.

I've published and example of one that is well formatted and modularized. The
example includes Navigation Flow, Wireframes, Data Modeling, and a Sync
Function (which is the security layer).

[https://github.com/waynecarter/couchbase-mobile-
examples/wik...](https://github.com/waynecarter/couchbase-mobile-
examples/wiki/Modeling-&-Security)

Let me know if you have any other questions around this and I will add it to
the example.

------
yarapavan
Here is a comparison table with Parse, Firebase, CouchDB and others for easy
reference:
[http://kinto.readthedocs.org/en/latest/overview.html#compari...](http://kinto.readthedocs.org/en/latest/overview.html#comparison-
with-other-solutions)

~~~
merqurio
Great! We were thinking on moving to CouchDB. Do you know if they have any
client side code, like PouchDB ¿?

~~~
jchrisa
If you move to the Couch ecosystem, you'll also have the option to use
Couchbase Lite for iOS, Android, .NET, etc. As well as Sync Gateway which has
dynamic fine grained permissions. Of course the whole ecosystem is open source
under the Apache license.

Info on the mobile clients
[http://developer.couchbase.com/mobile](http://developer.couchbase.com/mobile)

~~~
s_kilk
What's the Couch ecosystem look like these days?

I poked around with CouchDB over the Christmas holiday but it seemed kinda
dead. Is Couchbase still going strong?

~~~
sagelywizard
It's quite active, though most development is going into the 2.0 release
(which adds things like clustering). Here's the alpha if you're interested.
[https://couchdb-ci.s3-eu-west-1.amazonaws.com/release-
candid...](https://couchdb-ci.s3-eu-west-1.amazonaws.com/release-
candidate/apache-couchdb-2.0.0-a18004d.tar.gz)

~~~
s_kilk
Cool, is there an ETA on 2.0?

I remember not being able to find much of a roadmap when I was doing this
evaluation, but that's probably just my fault.

~~~
sagelywizard
Don't think there's an ETA, but there's a list of issues which are blocking
the release.
[https://issues.apache.org/jira/browse/COUCHDB-2932?jql=proje...](https://issues.apache.org/jira/browse/COUCHDB-2932?jql=project%20%3D%20COUCHDB%20AND%20fixVersion%20%3D%202.0.0%20AND%20priority%20%3D%20Blocker%20AND%20status%20%3D%20Open)

FWIW, it shouldn't be difficult to upgrade from 1.x to 2.0 as you'll be able
to replicate from a single-node database to a clustered database.

------
johnm1019
Their website says this is a storage service.
[http://kinto.readthedocs.org/en/latest/](http://kinto.readthedocs.org/en/latest/)

Parse is much more.
[https://parse.com/docs/android/guide](https://parse.com/docs/android/guide)

~~~
colinramsay
Exactly. This looks great, but it is only a fraction of what Parse offered.
They seem to be getting there though:

Coming Soon:

    
    
      - Web Administration
      - Automatic service discovery
      - Push notifications using the Push API
    

[https://github.com/Kinto/kinto/wiki/Roadmap](https://github.com/Kinto/kinto/wiki/Roadmap)

------
marknadal
Realtime - Firebase, Meteor, GUN[0], PouchDB. People should NOT consider
Kinto, RethinkDB, and Parse as realtime because you have to manually add that
functionality yourself.

Permissions/Auth - Firebase, Parse. The way these two services do permissions
is very different than everybody else (correct me if I am wrong). Therefore
others are not comparable.

Graph - GUN. I think this is an important comparison for people to think
about, all the other databases are essentially document stores. Graph data
allows you to do key/value, relational, document oriented data, as well as
have circular references.

[0] [http://github.com/amark/gun](http://github.com/amark/gun) Full
disclosure: I'm the author.

------
56k
At this point, Parse is open source, too. Why an open source clone if you can
have the original?

~~~
aikah
This is not a feature complete replacement AFAIK. No push , no cloud code , no
webhooks , no admin panel , no analytics though I'm sure people will
contribute to the project and add some of these features.

EDIT: Hi folks, I was obviously talking about Parse, not Kinto. Kinto seems to
have more features than Parse Server for now ! Looks like an awesome
replacement.

~~~
0k1n
There's an admin panel [https://github.com/Kinto/kinto-
admin](https://github.com/Kinto/kinto-admin) Push:
[https://github.com/Kinto/kinto-webpush](https://github.com/Kinto/kinto-
webpush) and [https://github.com/leplatrem/cliquet-
pusher](https://github.com/leplatrem/cliquet-pusher)

What do you mean by "cloud code"?

Anyway yeah, we're expecting help from the community to bring what's missing
:)

~~~
porsager
I think the parent was talking about the open sourced parse code not being
feature complete.

------
wolframhempel
[http://deepstream.io/](http://deepstream.io/) seems as a more complete
alternative [disclaimer: I'm a contributer]

~~~
splintercell
This looks interesting. I love firebase (never used Parse) but deepstream
looks a decent replacement of Firebase.

------
zagu
An equivalent to Parse would be:

[http://usergrid.apache.org/](http://usergrid.apache.org/) or
[http://www.baasbox.com/](http://www.baasbox.com/)

Both are open source and try to have the same functionalities like Parse.

~~~
k-jab
Great! Thanks for sharing

------
softinio
Good day to make everyone aware of this project as parse is closing down:

[http://blog.parse.com/announcements/moving-
on/](http://blog.parse.com/announcements/moving-on/)

:)

------
miles_matthias
The benefit of services like Parse aren't that they provide a JSON API. That's
easy to do.

The benefit was that they would worry about scaling and caching the api to get
the best performance and not have to worry about a backend.

Releasing open source JSON APIs isn't solving the real problem in my opinion.

------
davidmpaz
Also they released the ParseServer. [https://github.com/ParsePlatform/parse-
server](https://github.com/ParsePlatform/parse-server) this can give community
a way to continue on with it.

------
chris_wot
Given Mozilla's track record on new projects, I really have to wonder how long
this will last.

------
intellegacy
So my problem with kinto and couchDB/couchbase is that as a newbie indie
developer I have no idea how to get started with these.

AT least with Parse they had an iOS SDK and tutorials. With kinto or
couchdb/couchbase i don't even know where to begin.

~~~
wayneacarter
[Architect from Couchbase]

We hear you and we're working on that. A good place to start is w/ our mini-
hacks. Here is an iOS one that I think could help:
[https://github.com/couchbaselabs/mini-
hacks/tree/master/kitc...](https://github.com/couchbaselabs/mini-
hacks/tree/master/kitchen-sync/ios)

------
taneq
From the announcement on the Parse blog, it sounds like Parse might in fact be
the open source Parse alternative:

> Second, we’re releasing the open source Parse Server, which lets you run
> most of the Parse API from your own Node.js server.

------
sheraz
I've been looking at dreamfactory for a while
([http://dreamfactory.com](http://dreamfactory.com)).

Would anyone here be interested in putting together a "awesome mbaas" list
like awesome django [1] ?

I'm willing to setup on my github there. lmk

[1] - [https://github.com/rosarior/awesome-
django](https://github.com/rosarior/awesome-django)

------
kemitchell
Mozilla project under Apache-2.0. Nice!

------
puppetmaster3
Remember when they killed Mozilla Persona?

Oh, look, here they go again.

------
Nemant
I found this guy come very close to Parse:
[http://www.baasbox.com/](http://www.baasbox.com/)

They have Push notifications and "Cloud Code" which most other alternatives
don't have

------
parsehosting
We will be offering Parse Hosting through our new service:
[http://parsehosting.net](http://parsehosting.net) to support both our
existing clients and other developers

------
kaas
oh okay!

------
yitchelle
Here is a proposal...

Some of the folks here have pointed out that Parse provides more functionality
than Kinto. Why does Mozilla provide resources to keep working on Parse, if
Kinto is designed to be an alternative to Parse? It is open source after all.
It sounds like Parse is still relevant and needs to be continued.

------
hajile
Why Python rather than something like Rust instead?

The phrase "lightweight" is thrown around, but the
[requirements.txt]([https://github.com/Kinto/kinto/blob/master/requirements.txt](https://github.com/Kinto/kinto/blob/master/requirements.txt))
is anything but lightweight and that's before you consider carrying around
python itself.

It seems like compiled version would be more efficient and much smaller.

EDIT:

Their FAQ seems to make this question even more interesting

> Why did you chose to use Python rather than X?

> We love Python because it’s a concise & expressive language with powerful
> data structures & easy to learn, so it was an obvious choice for the
> development team.

> In addition, the Operations team at Mozilla is comfortable with deploying
> and managing Python applications in production.

> However, Python is just an implementation detail per se. Kinto is defined by
> an HTTP protocol that could be implemented in any language.

If your end-user is hitting a HTTP API, then Python being "easy to learn" is a
non-goal. Rust (or even JS + Node) is just as "expressive". This really makes
it sound like their team is inexperienced with DB design (not very confidence
inspiring). I find it equally mystifying that operations would dictate python
rather than whatever language the team thought would be best.

~~~
0k1n
> This really makes it sound like their team is inexperienced with DB design

Huh, can't see any obvious relation between PL and DB design. Your comment
makes it really sound you're inexperienced with constructive commenting
anyway.

