www.quix.io Open in urlscan Pro
34.243.34.160  Public Scan

Submitted URL: http://www.quix.io/
Effective URL: https://www.quix.io/
Submission: On January 01 via api from US — Scanned from DE

Form analysis 6 forms found in the DOM

<form>
  <fieldset>
    <legend class="visuallyhidden">Consent Selection</legend>
    <div id="CybotCookiebotDialogBodyFieldsetInnerContainer">
      <div class="CybotCookiebotDialogBodyLevelButtonWrapper"><label class="CybotCookiebotDialogBodyLevelButtonLabel" for="CybotCookiebotDialogBodyLevelButtonNecessary"><span
            class="CybotCookiebotDialogBodyLevelButtonDescription">Necessary</span></label>
        <div class="CybotCookiebotDialogBodyLevelButtonSliderWrapper CybotCookiebotDialogBodyLevelButtonSliderWrapperDisabled"><input type="checkbox" id="CybotCookiebotDialogBodyLevelButtonNecessary"
            class="CybotCookiebotDialogBodyLevelButton CybotCookiebotDialogBodyLevelButtonDisabled" disabled="disabled" checked="checked"> <span class="CybotCookiebotDialogBodyLevelButtonSlider"></span></div>
      </div>
      <div class="CybotCookiebotDialogBodyLevelButtonWrapper"><label class="CybotCookiebotDialogBodyLevelButtonLabel" for="CybotCookiebotDialogBodyLevelButtonPreferences"><span
            class="CybotCookiebotDialogBodyLevelButtonDescription">Preferences</span></label>
        <div class="CybotCookiebotDialogBodyLevelButtonSliderWrapper"><input type="checkbox" id="CybotCookiebotDialogBodyLevelButtonPreferences" class="CybotCookiebotDialogBodyLevelButton CybotCookiebotDialogBodyLevelConsentCheckbox"
            data-target="CybotCookiebotDialogBodyLevelButtonPreferencesInline" checked="checked" tabindex="0"> <span class="CybotCookiebotDialogBodyLevelButtonSlider"></span></div>
      </div>
      <div class="CybotCookiebotDialogBodyLevelButtonWrapper"><label class="CybotCookiebotDialogBodyLevelButtonLabel" for="CybotCookiebotDialogBodyLevelButtonStatistics"><span
            class="CybotCookiebotDialogBodyLevelButtonDescription">Statistics</span></label>
        <div class="CybotCookiebotDialogBodyLevelButtonSliderWrapper"><input type="checkbox" id="CybotCookiebotDialogBodyLevelButtonStatistics" class="CybotCookiebotDialogBodyLevelButton CybotCookiebotDialogBodyLevelConsentCheckbox"
            data-target="CybotCookiebotDialogBodyLevelButtonStatisticsInline" checked="checked" tabindex="0"> <span class="CybotCookiebotDialogBodyLevelButtonSlider"></span></div>
      </div>
      <div class="CybotCookiebotDialogBodyLevelButtonWrapper"><label class="CybotCookiebotDialogBodyLevelButtonLabel" for="CybotCookiebotDialogBodyLevelButtonMarketing"><span
            class="CybotCookiebotDialogBodyLevelButtonDescription">Marketing</span></label>
        <div class="CybotCookiebotDialogBodyLevelButtonSliderWrapper"><input type="checkbox" id="CybotCookiebotDialogBodyLevelButtonMarketing" class="CybotCookiebotDialogBodyLevelButton CybotCookiebotDialogBodyLevelConsentCheckbox"
            data-target="CybotCookiebotDialogBodyLevelButtonMarketingInline" checked="checked" tabindex="0"> <span class="CybotCookiebotDialogBodyLevelButtonSlider"></span></div>
      </div>
    </div>
  </fieldset>
</form>

<form><input type="checkbox" id="CybotCookiebotDialogBodyLevelButtonNecessaryInline" class="CybotCookiebotDialogBodyLevelButton CybotCookiebotDialogBodyLevelButtonDisabled" disabled="disabled" checked="checked"> <span
    class="CybotCookiebotDialogBodyLevelButtonSlider"></span></form>

<form><input type="checkbox" id="CybotCookiebotDialogBodyLevelButtonPreferencesInline" class="CybotCookiebotDialogBodyLevelButton CybotCookiebotDialogBodyLevelConsentCheckbox" data-target="CybotCookiebotDialogBodyLevelButtonPreferences"
    checked="checked" tabindex="0"> <span class="CybotCookiebotDialogBodyLevelButtonSlider"></span></form>

<form><input type="checkbox" id="CybotCookiebotDialogBodyLevelButtonStatisticsInline" class="CybotCookiebotDialogBodyLevelButton CybotCookiebotDialogBodyLevelConsentCheckbox" data-target="CybotCookiebotDialogBodyLevelButtonStatistics"
    checked="checked" tabindex="0"> <span class="CybotCookiebotDialogBodyLevelButtonSlider"></span></form>

<form><input type="checkbox" id="CybotCookiebotDialogBodyLevelButtonMarketingInline" class="CybotCookiebotDialogBodyLevelButton CybotCookiebotDialogBodyLevelConsentCheckbox" data-target="CybotCookiebotDialogBodyLevelButtonMarketing" checked="checked"
    tabindex="0"> <span class="CybotCookiebotDialogBodyLevelButtonSlider"></span></form>

<form class="CybotCookiebotDialogBodyLevelButtonSliderWrapper"><input type="checkbox" id="CybotCookiebotDialogBodyContentCheckboxPersonalInformation" class="CybotCookiebotDialogBodyLevelButton"> <span
    class="CybotCookiebotDialogBodyLevelButtonSlider"></span></form>

Text Content

Powered by Cookiebot
 * Consent
 * Details
 * [#IABV2SETTINGS#]
 * About


COOKIES, YUM!

Your data, your choice. We use cookies to enhance your experience and improve
our site. Here's our privacy policy.
Consent Selection
Necessary

Preferences

Statistics

Marketing

Show details
Necessary 9

Necessary cookies help make a website usable by enabling basic functions like
page navigation and access to secure areas of the website. The website cannot
function properly without these cookies.
Cookiebot
1
Learn more about this provider
CookieConsentStores the user's cookie consent state for the current domain
Expiry: 1 yearType: HTTP
Google
1
Learn more about this provider
test_cookieUsed to check if the user's browser supports cookies.
Expiry: 1 dayType: HTTP
Hubspot
2
Learn more about this provider
embed/v3/counters.gif [x2]Used to implement forms on the website.
Expiry: SessionType: Pixel
Vimeo
1
Learn more about this provider
__cf_bmThis cookie is used to distinguish between humans and bots. This is
beneficial for the website, in order to make valid reports on the use of their
website.
Expiry: 1 dayType: HTTP
cdn.jsdelivr.net
1
algoliasearch-client-jsNecessary in order to optimize the website's search-bar
function. The cookie ensures accurate and fast search results.
Expiry: PersistentType: HTML
play.google.com
youtube.com

2
CONSENT [x2]Used to detect if the visitor has accepted the marketing category in
the cookie banner. This cookie is necessary for GDPR-compliance of the website.
Expiry: 2 yearsType: HTTP
www.quix.io
1
cache-sprite-plyrThis cookie is necessary for the cache function. A cache is
used by the website to optimize the response time between the visitor and the
website. The cache is usually stored on the visitor’s browser.
Expiry: PersistentType: HTML
Preferences 1

Preference cookies enable a website to remember information that changes the way
the website behaves or looks, like your preferred language or the region that
you are in.
www.quix.io
1
plyrNecessary for the implementation of video-content on the website.
Expiry: PersistentType: HTML
Statistics 20

Statistic cookies help website owners to understand how visitors interact with
websites by collecting and reporting information anonymously.
Akamai Technologies
1
Learn more about this provider
aka_debugUsed by Vimeo to track usage of their embedded video player.
Expiry: SessionType: HTTP
Google
3
Learn more about this provider
_gaRegisters a unique ID that is used to generate statistical data on how the
visitor uses the website.
Expiry: 399 daysType: HTTP
_ga_#Used by Google Analytics to collect data on the number of times a user has
visited the website as well as dates for the first and most recent visit.
Expiry: 399 daysType: HTTP
_gidRegisters a unique ID that is used to generate statistical data on how the
visitor uses the website.
Expiry: 1 dayType: HTTP
Hotjar
7
Learn more about this provider
_hjAbsoluteSessionInProgressThis cookie is used to count how many times a
website has been visited by different visitors - this is done by assigning the
visitor an ID, so the visitor does not get registered twice.
Expiry: 1 dayType: HTTP
_hjFirstSeenThis cookie is used to determine if the visitor has visited the
website before, or if it is a new visitor on the website.
Expiry: 1 dayType: HTTP
_hjRecordingLastActivitySets a unique ID for the session. This allows the
website to obtain data on visitor behaviour for statistical purposes.
Expiry: SessionType: HTML
_hjSession_#Collects statistics on the visitor's visits to the website, such as
the number of visits, average time spent on the website and what pages have been
read.
Expiry: 1 dayType: HTTP
_hjSessionUser_#Collects statistics on the visitor's visits to the website, such
as the number of visits, average time spent on the website and what pages have
been read.
Expiry: 1 yearType: HTTP
_hjTLDTestRegisters statistical data on users' behaviour on the website. Used
for internal analytics by the website operator.
Expiry: SessionType: HTTP
hjViewportIdSets a unique ID for the session. This allows the website to obtain
data on visitor behaviour for statistical purposes.
Expiry: SessionType: HTML
New Relic
2
Learn more about this provider
events/1/#Used to monitor website performance for statistical purposes.
Expiry: SessionType: Pixel
jserrors/1/#Pending
Expiry: SessionType: Pixel
Vimeo
1
Learn more about this provider
vuidCollects data on the user's visits to the website, such as which pages have
been read.
Expiry: 399 daysType: HTTP
portal.platform.quix.ai
script.hotjar.com

4
_hjIncludedInPageviewSample [x2]Used to detect whether the user navigation and
interactions are included in the website’s data analytics.
Expiry: 1 dayType: HTTP
_hjIncludedInSessionSample [x2]Registers data on visitors' website-behaviour.
This is used for internal analysis and website optimization.
Expiry: 1 dayType: HTTP
quix.ai
www.google-analytics.com

2
_gat [x2]Used by Google Analytics to throttle request rate
Expiry: 1 dayType: HTTP
Marketing 19

Marketing cookies are used to track visitors across websites. The intention is
to display ads and content that are relevant to users.
Google
6
Learn more about this provider
IDEUsed by Google DoubleClick to register and report the website user's actions
after viewing or clicking one of the advertiser's ads with the purpose of
measuring the efficacy of an ad and to present targeted ads to the user.
Expiry: 1 yearType: HTTP
pagead/landing [x2]Collects data on visitor behaviour from multiple websites, in
order to present more relevant advertisement - This also allows the website to
limit the number of times that they are shown the same advertisement.
Expiry: SessionType: Pixel
pagead/viewthroughconversion/10896568703Pending
Expiry: SessionType: Pixel
pagead/1p-conversion/#Collects data on visitor behaviour from multiple websites,
in order to present more relevant advertisement - This also allows the website
to limit the number of times that they are shown the same advertisement.
Expiry: SessionType: Pixel
_gcl_auUsed by Google AdSense for experimenting with advertisement efficiency
across websites using their services.
Expiry: 3 monthsType: HTTP
Hotjar
1
Learn more about this provider
_hjRecordingEnabledThis cookie is used to identify the visitor and optimize
ad-relevance by collecting visitor data from multiple websites – this exchange
of visitor data is normally provided by a third-party data-center or
ad-exchange.
Expiry: SessionType: HTML
Vimeo
1
Learn more about this provider
NRBA_SESSION_IDCollects user data through quiz/survey-like content. This allows
the website to promote relevant products or services.
Expiry: SessionType: HTML
YouTube
11
Learn more about this provider
DEVICE_INFOPending
Expiry: 179 daysType: HTTP
VISITOR_INFO1_LIVETries to estimate the users' bandwidth on pages with
integrated YouTube videos.
Expiry: 179 daysType: HTTP
YSCRegisters a unique ID to keep statistics of what videos from YouTube the user
has seen.
Expiry: SessionType: HTTP
ytidb::LAST_RESULT_ENTRY_KEYStores the user's video player preferences using
embedded YouTube video
Expiry: PersistentType: HTML
yt-remote-cast-availableStores the user's video player preferences using
embedded YouTube video
Expiry: SessionType: HTML
yt-remote-cast-installedStores the user's video player preferences using
embedded YouTube video
Expiry: SessionType: HTML
yt-remote-connected-devicesStores the user's video player preferences using
embedded YouTube video
Expiry: PersistentType: HTML
yt-remote-device-idStores the user's video player preferences using embedded
YouTube video
Expiry: PersistentType: HTML
yt-remote-fast-check-periodStores the user's video player preferences using
embedded YouTube video
Expiry: SessionType: HTML
yt-remote-session-appStores the user's video player preferences using embedded
YouTube video
Expiry: SessionType: HTML
yt-remote-session-nameStores the user's video player preferences using embedded
YouTube video
Expiry: SessionType: HTML
Unclassified 0
Unclassified cookies are cookies that we are in the process of classifying,
together with the providers of individual cookies.

We do not use cookies of this type.

Cross-domain consent[#BULK_CONSENT_DOMAINS_COUNT#] [#BULK_CONSENT_TITLE#]
List of domains your consent applies to: [#BULK_CONSENT_DOMAINS#]
Cookie declaration last updated on 23.12.22 by Cookiebot


[#IABV2_TITLE#]

[#IABV2_BODY_INTRO#]
[#IABV2_BODY_LEGITIMATE_INTEREST_INTRO#]
[#IABV2_BODY_PREFERENCE_INTRO#]
[#IABV2_LABEL_PURPOSES#]
[#IABV2_BODY_PURPOSES_INTRO#]
[#IABV2_BODY_PURPOSES#]
[#IABV2_LABEL_FEATURES#]
[#IABV2_BODY_FEATURES_INTRO#]
[#IABV2_BODY_FEATURES#]
[#IABV2_LABEL_PARTNERS#]
[#IABV2_BODY_PARTNERS_INTRO#]
[#IABV2_BODY_PARTNERS#]

Cookies are small text files that can be used by websites to make a user's
experience more efficient.

The law states that we can store cookies on your device if they are strictly
necessary for the operation of this site. For all other types of cookies we need
your permission.

This site uses different types of cookies. Some cookies are placed by third
party services that appear on our pages.

You can at any time change or withdraw your consent from the Cookie Declaration
on our website.


Do not sell or share my personal information
Deny Allow selection Customize

Allow all
Powered by Cookiebot by Usercentrics
 * Product
 * Use Cases
 * Pricing
 * Company
 * Blog
 * Community

PRODUCT OVERVIEW
 * For Data Processing Pipelines
 * For Event-Driven Back Ends
 * Compare Quix
 * Streaming demo
 * Service Status

Use Cases
 * Finance
 * Gaming
 * Mobility
 * Ecommerce
 * Telco
 * Media
 * Data science
 * Data engineering


COMPANY OVERVIEW
 * Careers
 * Diversity & inclusion
 * Environmental statement



Docs Sign Up Login

Product
Product Overview
 * For Data Processing Pipelines
 * For Event-Driven Back Ends
 * Compare Quix
 * Streaming demo
 * Service Status

Use Cases
Use Cases Overview
 * Finance
 * Gaming
 * Mobility
 * Ecommerce
 * Telco
 * Media
 * Data science
 * Data engineering

Pricing
Company
Company Overview
 * Careers
 * Diversity & inclusion
 * Environmental statement

Blog
Community
Docs
Sign Up Login


DEVELOP REAL-TIME DATA APPS AND SERVICES FASTER

All you need is Python, we'll manage the rest.

Start Building Read the docs
View code library in GitHub

99.872%

Uptime (90 days)

57tb

Processed

1390

Developers

934

Organizations



By developers for developers


A SERVERLESS REAL-TIME DATA PLATFORM

No need to be a DevOps guru. Choose a template, click and deploy.

Building real-time apps and services requires lots of components running in
concert: Kafka, VPC hosting, infrastructure as code, container orchestration,
observability, CI/CD, persistent volumes, databases, and much more.

The Quix platform takes care of all the moving parts. You just connect your data
and start building. That’s it. No provisioning clusters or configuring
resources.



Features


WHAT CAN YOU BUILD WITH QUIX?

Any kind of real-time back-end application or data processing pipeline: from
end-to-fraud detection pipelines to event-driven service architectures.

SELECT INDUSTRY
Finance Manufacturing Mobility
INGEST Connect your source ENRICH Transform raw data EXECUTE Detect fraud
PERSIST Send to destination
app.py
app.cs

topic = quix.open_output_topic("payment-transactions")
stream = topic.get_or_create_stream(CUSTOMER_ID)
stream.events.write(payments)

//sends parameter (payment) data

using var outputTopic = quix.OpenOutputTopic("payment-transactions");
var streamWriter = outputTopic.CreateStream("CUSTOMERID");

streamWriter.Events
    .AddTimestamp(DateTime.Now)
    .AddValue("Payment", PaymentData)
    .Write();


STREAM EVENTS FROM YOUR EXTERNAL SOURCES

Use Quix connectors to ingest transaction messages streamed from your finanical
processing systems in a virtual private cloud or on-premise datacenter.

All data in transit is encrypted end-to-end and compressed with G-Zip and
Protobuf for security and efficiency.

app.py
app.cs

transactions = quix.open_input_topic("payment-transactions")
blocked_topic = quix.open_output_topic("payment-blocked")
blocked_payments = blocked_topic.create_stream("blocked_payments")
blocked_cache = quix.open_input_topic("blocked_accounts").as_cache()

// Lets get this into Pandas (changed to blocking theme)

def handle_data(data):
 if data.account_num in blocked_cache:
  blocked_payments.events.add("Block", data.transaction_num)

transactions.on_read_data += handle_data

//receives parameter data sends parameter data

using var inputTopic = quix.OpenInputTopic("payment-transactions");
using var blockedAccounts = quix.OpenInputTopic("blocked-accounts").AsCache();
using var outputTopic = quix.OpenOutputTopic("payment-blocked");

inputTopic.OnStreamReceived += (s, streamReader) =>
{
    var streamWriter = outputTopic.CreateStream();
    streamReader.Parameters.OnRead += (paymentData) =>
    {
        if (blockedAccounts.Contains(paymentData.AccountNumber))
        {
            streamWriter.Parameters
                .Buffer
                .AddTimestamp(DateTime.Now)
                .AddValue("Block", paymentData.TransactionNumber)
                .Write();
        }
    };
};


CLEAN AND ENRICH YOUR EVENTS

Run, test and deploy enrichment functions in the Quix serverless platform to:

 * Process and aggregate transaction data.
 * Query external services for supplementary data such as blocked account
   numbers.

app.py
app.cs

transactions = quix.open_input_topic("payment-transactions")
fraud_topic = quix.open_output_topic("fraud-transactions")
fraud_model = pickle.load(open("fraud_model.pkl"))

def handle_data(data, fraud_stream):
 is_fraud = model.detect(data)
 fraud_stream.events.write(data.transaction)

transactions.on_read_data += handle_data

//receives parameter data sends fraud event

using var inputTopic = quix.OpenInputTopic("payment-transactions");
using var outputTopic = quix.OpenOutputTopic("fraud-transactions");
var fraudModel = System.IO.File.OpenRead("fraudModel.pkl");

inputTopic.OnStreamReceived += (s, streamReader) =>
{
    var streamWriter = outputTopic.CreateStream();
    streamReader.Parameters.OnRead += (paymentData) =>
    {
        if (fraudModel.Detect(paymentData))
        {
            streamWriter.Events
                .AddTimestamp(DateTime.Now)
                .AddValue("PaymentData", paymentData)
                .Write();
        }
    };
};


APPLY BUSINESS LOGIC

Run, test and deploy business logic functions in the Quix serverless platform
to:

 * Detect fraudelent patterns with machine learning models or rule-based
   algorithms.
 * Stream the results for business logic execution.
 * Create fraud warning messages as troubleshooting tickets or display them in
   support dashboards.

app.py
app.cs

fraud_transactions = quix.open_input_topic("fraud-transactions")
segment = segment_connector("zen-desk")
big_query.connect()

def handle_data(data):
 segment.create_ticket(data, priority="HIGH")
 big_query.write(data)

fraud_transactions.on_read_data += handle_data

//receives event data sends to segment and data lake

using var inputTopic = quix.OpenInputTopic("fraud-transactions");
var segmentConnector = new SegmentConnector("ZenDesk");
var dataLake = new BigQueryConnector();

inputTopic.OnStreamReceived += (s, streamReader) =>
{
 streamReader.Events.OnRead += (fraudData) =>
    {
        if (fraudData.FraudResult)
            segmentConnector.CreateTicket(fraudData, priority = "HIGH");
        dataLake.Write(fraudData);
    };
};


TRIGGER DOWNSTREAM SERVICES BASED ON MEANINGFUL EVENTS

Create downstream functions that:

 * Write processed fraud statistics to a data lake, warehouse or database using
   our open-source connectors.
 * Trigger follow-up batch processing on persisted data.

INGEST Connect your source ENRICH Transform raw data EXECUTE Detect degradation
PERSIST Send to destination
app.py
app.cs

topic = quix.open_output_topic("factory")
stream = topic.create_stream(DEVICE_ID)
device = connector.get_device(DEVICE_ID)

while(device.is_running)
 data = device.get_data()
 stream.parameters.write(data)

using var outputTopic = quix.OpenOutputTopic("factory");
var streamWriter = outputTopic.CreateStream();
var device = deviceConnector.GetDevice("DEVICEID");

while (device.IsRunning)
{
    streamWriter.Parameters
        .Buffer
        .AddTimestamp(DateTime.Now)
        .AddValue("Temperature", device.Temperature)
        .AddValue("PowerOutput", device.PowerOutput)
        .AddValue("BatteryLevel", device.BatteryLevel)
        .Write();
}


STREAM DATA FROM YOUR EXTERNAL SOURCES

Integrate the Quix SDK and configure your production firmware to connect to the
Quix WebSocket API.

Stream high-volume telemetry data from your machinery to Quix.

All data in transit is encrypted end-to-end and compressed with G-Zip and
Protobuf for security and efficiency.

app.py
app.cs

// Based on machine.type look up the service interval and set machine.hours_to_service it based on machine.hours_since_service.
// Also set machine.service_type

factory = quix.open_input_topic("factory")
service_topic = quix.open_output_topic("servicing")

def handle_data(device, service_stream):
 hours_till_service = device.service_interval - device.runtime
 if hours_till_service < 100:
  service_stream.events \
   .add("DeviceId", device.id) \
   .add("ServiceParts", device.service.parts) \
   .add("ServiceType", device.service.type) \
   .add("TimeRemaining", hours_till_service) \
   .write()

factory.on_read_data += handle_data

//receives param, identifies event and sends event, tags deviceid

using var inputTopic = quix.OpenInputTopic("factory");
using var outputTopic = quix.OpenOutputTopic("servicing");

inputTopic.OnStreamReceived += (s, streamReader) =>
{
    var streamWriter = outputTopic.CreateStream();
    streamReader.Parameters.OnRead += (deviceData) =>
    {
        var hoursTillService = deviceData.ServiceInterval - deviceData.RunTime;
        if (hoursTillService < 100)
        {
            streamWriter.Events
                .AddTimestamp(DateTime.Now)
                .AddTag("DeviceId", deviceData.Id)
                .AddValue("ServiceParts", deviceData.Service.Parts)
                .AddValue("ServiceType", deviceData.Service.Type)
                .AddValue("TimeRemaining", hoursTillService)
                .Write();
        }
    };
};


CLEAN AND ENRICH YOUR DATA

Run, test and deploy enrichment functions in the Quix serverless platform to:

 * Process and aggregate machine telemetry data.
 * Query external services for supplementary data such as historical degradation
   rates.

app.py
app.cs

// If service is near, order service parts using POST.

factory = quix.open_input_topic("factory")
factory_events = quix.open_output_topic("factory-events")
parts_catalogue = parts_api.connect()

def handle_data(service, factory_events_stream):
 parts_required = service["ServiceParts"]
 parts_catalogue.order_parts(parts_required)
 factory_events_stream    .events \
  .add("PartsOrdered", parts_required) \
  .add("DeviceId", service["DeviceId"]) \
  .add("TimeRemaining", service["TimeRemaining"]) \
  .write()

factory.on_read_data += handle_data

//receives event, sends parameter and parts order to api, tags deviceid

using var inputTopic = quix.OpenInputTopic("servicing");
using var outputTopic = quix.OpenOutputTopic("factory-events");
var partsCatalogue = new PartsApi().Connect();

inputTopic.OnStreamReceived += (s, streamReader) =>
{
    var streamWriter = outputTopic.CreateStream();
    streamReader.Events.OnRead += (serviceData) =>
    {
        partsCatalogue.OrderParts(serviceData.ServiceParts);

        streamWriter.Parameters
            .Buffer
            .AddTimestamp(DateTime.Now)
            .AddTag("DeviceId", serviceData.DeviceId)
            .AddValue("PartsOrdered", serviceData.ServiceParts)
            .AddValue("TimeRemaining", serviceData.TImeRemaining)
            .Write();
    };
};


APPLY BUSINESS LOGIC

Run, test and deploy business logic functions in the Quix serverless platform
to:

 * Detect degradation patterns with machine learning models or rule-based
   algorithms.
 * Stream the results for business logic execution.
 * Create degradation warning messages that can be sent sent via text message to
   engineers or displayed in maintenance consoles.

app.py
app.cs

factory_events = quix.open_input_topic("factory_events")
data_lake = snowflake.connect()

def handle_data(service):
 parts = service["PartsOrdered"]
 device_id = service["DeviceId"]
 time_remaining = service["TimeRemaining"]
 data_lake.persist(datetime.now(), parts, device_id, time_remaining)

factory_events.on_read_data += handle_data

//receives parameter, sends to snowflake

using var inputTopic = quix.OpenInputTopic("factory-events");
var snowflakeConnector = new SnowflakeConnector();

inputTopic.OnStreamReceived += (s, streamReader) =>
{
    streamReader.Parameters.OnRead += (serviceData) =>
    {
        snowflakeConnector.PersistData(DateTime.Now,
            serviceData.PartsOrdered,
            serviceData.DeviceId,
            serviceData.TimeRemaining);
    };
};


TRIGGER DOWNSTREAM SERVICES BASED ON MEANINGFUL EVENTS

Create downstream serverless functions that:

 * Write processed degradation statistics to a data lake, warehouse or database
   using our open-source connectors.
 * Trigger follow-up batch processing on persisted data

INGEST Connect your source ENRICH Transform raw data EXECUTE Detect hazards
PUBLISH Send to destination
app.py
app.cs

topic = quix.open_output_topic("vehicle-telemetry")

telemetry_payload = {timestamp: get_date(), location: coordinates}

stream = topic.create_stream(vehicle_id)
stream.parameters.write(telemetry_payload)

using var outputTopic = quix.OpenOutputTopic("vehicle-telemetry");
var telemetryPayload = $@"[{{ 'timestamp': '{DateTime.Now}',
 'location': coords }}]";
var streamWriter = outputTopic.CreateStream();

streamWriter.Parameters
    .Buffer
    .AddTimestamp(DateTime.Now)
    .AddTag("VehicleId", this.VehicleId)
    .AddValue("Telemetry", telemetryPayload)
    .Write();


STREAM DATA FROM YOUR EXTERNAL SOURCE

Configure your firmware or client apps to connect to the Quix WebSocket API and
stream telemetry messages from your vehicles to Quix.

All data in transit is encrypted end-to-end and compressed with G-Zip and
Protobuf for security and efficiency.

app.py
app.cs

telemetry = quix.open_input_topic("vehicle-telemetry")
output_topic  = quix.open_output_topic("telemetry-enriched")
weather_data = weather_api.connect()

def handle_data(df: pd.DataFrame):
 df['weather'] = df.apply(lambda row: weather_data[row.region], axis = 1)

 output_stream.events.write(telemetry)

//receives params sends params

using var inputTopic = quix.OpenInputTopic("vehicle-telemetry");
using var outputTopic = quix.OpenOutputTopic("telemetry-enriched");
var weatherData = httpApi.GetWeatherData();

inputTopic.OnStreamReceived += (s, streamReader) =>
{
 var streamWriter = outputTopic.CreateStream();
    streamReader.Parameters.OnRead += (vehicleData) =>
    {
        var region = vehicleData.Timestamps[0].Parameters["region"].StringValue;
        var regionWeather = weatherData[region];

        streamWriter.Parameters
            .Buffer
            .AddTimestamp(DateTime.Now)
            .AddTag("VehicleId", vehicleData.VehicleId)
            .AddValue("weather", regionWeather)
            .AddValue("vehicle", vehicleData)
            .Write();
    };
};


CLEAN AND ENRICH YOUR DATA

Run, test and deploy enrichment functions in the Quix serverless platform to:

 * Process and aggregate vehicle telemetry data.
 * Query external services for supplementary data such as the latest weather
   updates.

app.py
app.cs

enriched_telemetry = quix.open_input_topic("telemetry-enriched")
hazards = quix.open_output_topic("hazards")
weather_model = pickle.load(open("hazard_model.pkl"))

def handle_data(data, hazard_warnings_stream):
 for vehicle in enriched_telemetry:
  vehicle_danger = weather_model.detect_danger(
   vehicle.weather_data,
   vehicle.gForce,
   vehicle.speed)

  hazard_warnings_stream.events.write(vehicle, vehicle_danger)

factory.on_read_data += handle_data

//receives param, sends danger event

using var inputTopic = quix.OpenInputTopic("telemetry-enriched");
using var outputTopic = quix.OpenOutputTopic("hazards");
var weatherModel = System.IO.File.OpenRead("weatherModel.pkl");

inputTopic.OnStreamReceived += (s, streamReader) =>
{
    var streamWriter = outputTopic.CreateStream();
    streamReader.Parameters.OnRead += (parameterData) =>
    {
        var weather = parameterData.Weather;
        var gForce = parameterData.Vehicle.GForce;
        var speed = parameterData.Vehicle.Speed;
        var vehicleDanger = weatherModel.DetectDanger(weather,
            gForce,
            speed);

        streamWriter.Events
            .AddTimestamp(DateTime.Now)
            .AddValue(parameterData.Vehicle.Id, vehicleDanger);
    };
};


APPLY BUSINESS LOGIC

Run, test and deploy business logic functions in the Quix serverless platform
to:

 * Detect hazardous patterns with machine learning models or rule-based
   algorithms.
 * Stream the results for business logic execution.
 * Create hazard warning messages that can be displayed in vehicle dashboards
   and device consoles.

app.py
app.cs

hazard_warnings = quix.open_input_topic("hazards")
snowflake.connect()

def on_vehicle_hazard(hazard_data):
 if hazard_data.vehicle == this.vehicle:
  this.vehicle.display_hazard(hazard_data)

hazard_warnings.subscribe += on_vehicle_hazard

// receives an event

using var inputTopic = quix.OpenInputTopic("hazards");
using var snowflakeConnector = new SnowflakeConnector();

inputTopic.OnStreamReceived += (s, streamReader) =>
{
    streamReader.Events.OnRead += (eventData) =>
    {
        if (eventData.Id == this.Vehicle.Id)
        {
            this.Vehicle.DisplayHazard(eventData.VehicleDanger);
        }
    };
};


TRIGGER DOWNSTREAM SERVICES BASED ON MEANINGFUL EVENTS

Create downstream serverless functions that:

 * Stream messages back to vehicle or device firmware through the Websocket API.
 * Write the processed hazard patterns to a data lake, warehouse or database
   using our open-source connectors.

+ add new


DISCOVER MORE FINANCE USE CASES

Use live data to auto-detect fraud. Unify customer data to increase total
lifetime value with more personalized financial products.



Learn more



OPTIMIZING MANUFACTURING EFFICIENCY

How CloudNC use real-time data to make manufacturing 10X more efficient.



1

platform

3

developers

4

applications

Learn more



OPTIMIZING CONNECTIVITY FOR CONTROL

How 1 developer built a real-time ML pipeline to improve cellular connectivity.



2

weeks

82

ML models

23%

performance boost

Learn more


THE PRODUCT


WHAT MAKES QUIX SO POWERFUL?

Discover the product

1/3


A HIGH-PERFORMANCE SERVERLESS PLATFORM

Quix services are designed to handle high volumes of real-time data. You get the
simplicity of Lambda functions without the constraints. No cold starts. No
payload limits. No deployment package limits. Functions can be stateless or
stateful.

2/3


MINIMAL CONFIGURATION AND EASY DEBUGGING

No more complicated YAML configurations, helm charts, or Docker files. Settings
such as security, encryption, replication and partitioning all come
preconfigured. No need to worry about data loss or lack of redundancy. Easy log
inspection tools give you high observability into each part of your
architecture.

3/3


FEATURE-RICH DEVELOPMENT TOOLS

Open source connectors for most kinds of data sources. API's for when connectors
aren't enough. Secrets and connection details managed through a simple UI.
Define dependencies for all environments in one place. Build and test code
online or in your favourite IDE, it's the same. Messages are automatically
compressed and serialized to binary.

“Quix has given us an environment to handle a huge amount of real-time machine
data.”
— Chris Angell, Lead Systems Engineer, CloudNC
“The lightbulb moment happened when we realized how resilient Quix is. We’ve
automated a new product feature and Quix’s architecture gives us confidence it
won’t fail.”
— Nathan Sanders, Technical Director, Control
“We built a complex real-time pipeline for a zero-trust client on Quix, it's
very secure and resilient.”
— Alex Chooi, Senior Software Engineer, CKDelta
“Quix saved us from hiring a whole data engineering team to build a real-time
predictive maintenance application”
— Jonathan Wilkinson, CTO, Airdale
“We're able to collect and process new data in milliseconds, giving us an
advantage others cannot match”
— Baptiste Quidet, Founder and Lead Data Scientist, Quideos
“Quix is one of the more interesting options because its more or less Faust 2.0
- pure Python with the annoying bits handled”
— Ben Gamble, Developer Advocate, Aiven
“Instate of spending months with research and unknown costs afterwards, we use
Quix as our nervous system for a real time trading platform with high
performance infrastructure and deploy engine. The tech support behind Quix is
pretty awesome.”
— Christoph Dietrich, Founder & Lead Software Engineer, proreactware
“Quix has given us an environment to handle a huge amount of real-time machine
data.”
— Chris Angell, Lead Systems Engineer, CloudNC
“The lightbulb moment happened when we realized how resilient Quix is. We’ve
automated a new product feature and Quix’s architecture gives us confidence it
won’t fail.”
— Nathan Sanders, Technical Director, Control
“We built a complex real-time pipeline for a zero-trust client on Quix, it's
very secure and resilient.”
— Alex Chooi, Senior Software Engineer, CKDelta
“Quix saved us from hiring a whole data engineering team to build a real-time
predictive maintenance application”
— Jonathan Wilkinson, CTO, Airdale
“We're able to collect and process new data in milliseconds, giving us an
advantage others cannot match”
— Baptiste Quidet, Founder and Lead Data Scientist, Quideos
“Quix is one of the more interesting options because its more or less Faust 2.0
- pure Python with the annoying bits handled”
— Ben Gamble, Developer Advocate, Aiven
“Instate of spending months with research and unknown costs afterwards, we use
Quix as our nervous system for a real time trading platform with high
performance infrastructure and deploy engine. The tech support behind Quix is
pretty awesome.”
— Christoph Dietrich, Founder & Lead Software Engineer, proreactware


IT’S FREE TO GET STARTED

Try for free. Simply sign up with:

GOOGLE

Sign Up

GITHUB

GitHub

MICROSOFT

Microsoft

Talk to a technical expert about your use case if you’re considering using
stream processing in your business.

Book a demo

the stream


CONNECT WITH THE QUIX COMMUNITY

Get your questions answered in our community Slack channel, chat with us
face-to-face at an event, or contribute to our open source connectors on GitHub.

Slack Twitter Quix GitHub


The easiest way to build and scale reliable data applications.

Try for free Docs
Copyright © 2023 Quix Analytics

PRODUCT

 * Features
 * Use Cases
 * Pricing
 * Streaming demo
 * Compare Quix
 * Service status

DEVELOPER SUPPORT

 * Docs
 * YouTube tutorials
 * SDK
 * Quix GitHub
 * The Stream community
 * Changelog

ABOUT

 * The company
 * Blog
 * Careers
 * Diversity & inclusion
 * Environmental statement

CONNECT

 * Book a demo
 * Slack community

 * Terms
 * Privacy
 * License Terms

Follow us:

 * 
 * 
 * 
 *