
Feathers 4: A framework for Real-Time apps and REST APIs - malloryerik
https://blog.feathersjs.com/introducing-feathers-4-a-framework-for-real-time-apps-and-rest-apis-afff3819055b
======
yasserf
As a maintainer of another web realtime server (deepstream.io), I got to say
FeatherJS is an inspiration in terms of documentation and tutorial standards.
I spent quite a bit of time watching their live streams on youtube and
browsing through their pages. I hope/am working to someday reach that level of
clarity!

~~~
jaime-ez
yasserf, keep up the good work, deepstream is great: fast, flexible, simple
and solid! Although must say that your previous docs where way better than the
current version. Why don't you keep the same format?

~~~
yasserf
Thanks! Are you referring to the docs on deepstreamHub? If so it’s because we
needed to separate what the OS version does better and I used the older OS
website as a starting point (except now using Gatsby).Otherwise the docs were
copied over verbatim minus navigation. Looking forward to feedback in a week
or two time when that’s done!

~~~
jaime-ez
I meant the docs UI, the content is the same but the interface is weak. Good
to know there us a new version coming

------
JMTQp8lwXL
Feathers is exactly what I want to see in a JavaScript library. It is not
overly opinionated: far from it. It implements concepts that are sound,
standing the test of time. It solves a few specific problems well. These are
ideals all library creators should strive for.

------
thosakwe
Major kudos to the Feathers team on the release. FeathersJS was my first
introduction to open source, and sets a very high standard in terms of
documentation quality. Congrats, and looking forward to more to come!

------
seph-reed
I've been using Feathers for a bit, and it's really nice. There's a few lock-
ins I ran into that required sort of hacking my way out, but (for the most
part) it's been amazing.

Also, for whatever a contextless strangers opinion is worth, I highly
recommend avoiding Loopback.

------
hackerbabz
I tried the last feathers and my problem with it was it seemed so purely REST
that it was unusable. Every object in your database gets CRUD endpoints, and
if you need something other than CRUD, you are in for a tough time. Is this
the case, or was I not understanding it?

~~~
JMTQp8lwXL
The FAQ addresses this question here. tl,dr: Yes, you can add custom methods:
[https://docs.feathersjs.com/help/faq.html#how-do-i-create-
cu...](https://docs.feathersjs.com/help/faq.html#how-do-i-create-custom-
methods)

If you want to expose the custom methods to clients, you can use this add-on
package: [https://github.com/arve0/feathers-custom-
methods](https://github.com/arve0/feathers-custom-methods)

------
markandrewj
The coolest thing about Feathers for me is that it was developed locally
(Alberta, Canada).

------
Aldipower
I don´t get the "Real-Time" part. Are the API requests ensured to be responded
by a given time? That would be sensational. Is it meant to be compatible with
the newest Linux kernel shipping RT out-of-the-box? ;)

~~~
JMTQp8lwXL
The real time feature is 2-fold:

1\. Feathers supports websockets, so you can push data to clients as the data
is created/updated, etc.

2\. The Feathers server can decide what types of events to send to the client.
If you have multiple servers, you can keep the events in-sync by using
redis/activemq with the feathers-sync module.

------
antigirl
Why would you use this over using your own websockets convention. Also how
does it handle mass connections? you would need redis or similar?

~~~
JMTQp8lwXL
You would use it in conjunction with the concept of Services [0]. Services are
essentially are a group of CRUD operations that can be exposed over various
transports: HTTP(s), Websockets, etc.

You can use services with Feathers' Event Emitters [1] give you a service-
level abstraction for sending data over websockets. If you want the full
flexibility of using websockets directly-- by all means, do so! A common use
case, however, is to send updates as service objects are created, updated, or
deleted over websockets for real-time applications. You might take that
updated record, insert it into your state management system (e.g., Redux), and
then use your UI library (e.g., React) to repaint the user's screen. Feathers
doesn't care what state management or UI library you use.

[0]: [https://docs.feathersjs.com/api/services.html#service-
method...](https://docs.feathersjs.com/api/services.html#service-methods)

[1]:
[https://docs.feathersjs.com/api/events.html#eventemitters](https://docs.feathersjs.com/api/events.html#eventemitters)

------
swyx
this is so cool! ️ where can i know more about the team behind feathers and
how it is run/funded? i love learning how long running OSS like this operates.

~~~
JMTQp8lwXL
High-level funding information is available on the FeathersJS github homepage
[0]. The core team is composed of the top contributors [1].

[0]:
[https://github.com/feathersjs/feathers](https://github.com/feathersjs/feathers)

[1]:
[https://github.com/feathersjs/feathers/graphs/contributors](https://github.com/feathersjs/feathers/graphs/contributors)

