
Show HN: EventNative – An open-source, user event collection service - pwys
https://github.com/ksensehq/eventnative
======
sercand
We have in-house almost the same thing which is also written in Go. It uses
gRPC and mobile clients are automatically generated by protobuf.

This kind of internal service is required if you are operating a business for
children and families.

~~~
vklmn
That's the exact reason we decided to build EventNative and opensource it. We
noticed that a lot of teams are building similar platforms in house

------
binarymax
Can you please clarify, is this for bringing lots of different analytics
sources to the same location, or is it for capturing events itself? I’m having
a hard time finding whether I could use EventNative by itself to capture, for
example, how many visitors went to a certain page. Would I need to route
google analytics through EventNative to get that type of data?

~~~
pwys
We actually support both! You can route everything that is captured by GA or
Segment (analytics.js) through your EventNative backend in intercept mode. Or
you can configure EventNative to capture all these events in direct tracking
mode.

~~~
binarymax
Great! Looks really interesting, thanks for sharing

------
pachico
Ok, if this project gets traction it might replace my own analytics solution
based on JavaScript, Go and ClickHouse. I'll stay tuned about it. Are the
maintainers in the room? I'd like to exchange some ideas.

~~~
vklmn
Maintainers are here! (it's me, @pwys and @xtreding) Actually, we have a
Slack: [https://eventnative.slack.com/](https://eventnative.slack.com/) You're
welcome to join!

~~~
dang
If you're posting a Show HN here, please exchange ideas here. That's the whole
point of Show HNs as well as the purpose of this site, and starving this
thread of discussion is not going to help you.

~~~
pachico
I do understand the purpose or your post and I celebrate it, however this
medium might lack some of the features Slack has which makes it quite easier
to follow up ideas.

------
codezero
Can't tell from the docs, but how do you deal with "stubbed" events that are
triggered before segment/GA loads? Are you able to do anything to make sure
your snippet loads fully before other third party scripts that might "do
work"?

I guess put more simply, do you need to do work when implementing to make sure
you don't miss any of the existing events being captured, or does this rely on
the same developer implementing all three?

~~~
vklmn
We actually ask to insert a snippet after GA / Segment initialization code.

The algo is a follows: a) check if ga / analytics object is present b) add
interceptor c) if the code was fully loaded (not a stup), send "fake" pageview
event (which has been already sent), intercept it and send to EN backend only
(not the original backend).

Also, we received a pull request that won't require EN code be inserted after
GA/Segment. It tries to get window.ga/analytics object. If it doesn't exist,
try the same thing in 1 second via setTimeout. We most likely with merge it to
master soon

~~~
pachico
What I gets me wondering is that by having your own hosted solution you bypass
adblockers but this implementation requires GA to be loaded, which is what
adblockers block in the first place. Am I missing anything?

~~~
pwys
While we do have a hook to intercept GA data, it is actually optional! You can
use the self hosted JS tracker that we include with EventNative and serve it
from your domain.

------
anonymfus
Which filter should be added to uBlock Origin to block it?

------
oceanswave
Is the intent for EventNative to be used as a way to capture events in an
eventsourcing pattern, where custom events may be generated by microservices
or other applications? A follow up if that is the case, how are schema
migrations handled over time

~~~
vklmn
Not really :( We design EventNative to collect data solely for analytics
purposes. However, you still can send events from microservices as well. We're
building server-2-server HTTP API and will hope that people contribute clients
for popular languages

------
ing33k
Congratulations on Shipping !

This is an interesting problem to solve .

ClickHouse support will make it way more interesting.

Are you planning to leverage Materialized views ?

~~~
vklmn
We actually working on ClickHouse integration right now, it will be shipped
next week!

Re: materialized views - since not all DWH support them, we're not sure how
can we leverage them. However, what do you have in mind? Maybe we're wrong!

------
rp36
How will the visualization work? Any open source tools/queries available to
view the daily metrics?

~~~
pwys
Great question! So far our users query their metrics directly. For
visualizations you should be able to plug in the opensource tool Metabase.

------
ggregoire
What are the differences with snowplow?

[https://snowplowanalytics.com](https://snowplowanalytics.com)

[https://github.com/snowplow/snowplow](https://github.com/snowplow/snowplow)

~~~
vklmn
We solve the same problem, but with different approach: we aim for very quick-
start: snowplow consist from multiple services, EventNative has everything in
one service. Also, we have more destinations in pipeline, also we're going to
collect data from more sources as well (Google Ads, Facebook etc).

Overall, snowplow is a great product, but they build for more complicated data
pipelines rather than EventNative. We want to keep things simple

------
Zaheer
Also worth checking out PostHog (open-source):
[https://github.com/PostHog/posthog](https://github.com/PostHog/posthog)

We just got it setup and it goes a bit further than EventNative by including a
frontend interface. It's more akin to Heap and a superset of most of what
EventNative has.

~~~
pwys
PostHog is a great project, I've actually talked to their founders in the
early days and we use them! They're more similar to Mixpanel vs EventNative
being n event collector focusing on processing large amount of data at scale
(our first destinations were RedShift and BigQuery).

------
DoctorNick
Just curious, do you also detect if content in the web page is changed or if
content is blocked by adblock?

~~~
vklmn
We are not trying to bypass adblock. If selfhost EventNative on
track.yourapp.com, AdBlock has less incentive to block JS code on yourapp.com.
It doesn't look like 3rd-party tracker, just like a part of you application
(you can even host it at yourapp.com/en if you reverse-proxy with nginx

~~~
DoctorNick
Understood, I'm just wondering if you offer the ability to detect it and
report it, not mitigate it.

~~~
vklmn
Well, you can use EventNative and Google Analytics at the same time and just
compare the numbers

------
lolptdr
Can you remake or slow down that gif on your readme? It goes way too fast.

~~~
pwys
Just did :)

------
buf
Can this replace Segment if I just want events to go to a postgres DB?

~~~
pwys
Yes! We rolled out Postgres as a destination yesterday. And unlike Segment
we're free and hosted on your infrastructure.

~~~
buf
This is going to save me $1,000s per month. Thank you so much. Is there a good
way to give back?

~~~
pwys
Spread the word and send us a pull request sometime :)

------
kirankn
Would this be a replacement for something like Divolte? If yes, any specific
reason why one should choose EventNative over Divolte, except for the "made in
go" argument?

~~~
vklmn
Took a look at their github. Great product! However, it requires Hadoop or
Kafka cluster setup (=devops resourced). We designed kSense to be a simple as
possible and have as few dependencies as possible.

Besides, if you want to data to land at BQ/CH or RedShift with Devlot, you'll
need add a 3rd-party Kafka->DWH layer. I'm pretty sure there'are many oss
options. Not sure if they can automatically generare SQL schema from JSON
object like EventNative

------
nikhilalmeida
any comparisons with RudderStack?

~~~
vklmn
We anticipated that question :)

RudderStack is focusing on replacing Segment.com completely, we focus only on
a part of the problem: getting events to DWH. Also, we don't have a UI.

By narrowing down the focus, we think we can do a better job sending data to
DWHs. One example: we automatically create SQL schema based on JSON structure.
You can send

{ "any": { "custom": "a", "field": "b" } }

To EventNative and we'll create any_custom and any_field columns in DWH table
on a fly.

~~~
soumyadeb
RudderStack founder here.

Because we are Segment event structure/API compatible, there is an inherent
structure in events. You can pass arbitrary JSON but only inside the
properties or traits field of track/identify call. We do automatically create
the schemas for those cases.

Congrats on your launch!! Glad to see more projects in this space. Would love
to checkout your repo and share ideas etc.

------
greg
This is really cool. My first impression is an open-source replacement for
Segment.

~~~
pwys
Thanks greg! Kind of like open-source Segment, but we focus on data warehouses
as the destination. Were are you looking to send your data?

