<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1" />
    <title>Main | Apache Ignite</title>
    <link rel="stylesheet" href="/js/vendor/hystmodal/hystmodal.min.css" />
    <link rel="stylesheet" href="/js/vendor/swiper/swiper-bundle.min.css" />
    <link rel="stylesheet" href="/css/utils.css" />
    <link rel="stylesheet" href="/css/site.css" />
    <link rel="stylesheet" href="/css/media.css" media="only screen and (max-width:1199px)" />
    <link rel="icon" type="image/png" href="/img/favicon.png" />
    <link rel="stylesheet" href="../js/vendor/swiper/swiper-bundle.min.css" />
    <link rel="stylesheet" href="../js/vendor/highlight/default.min.css" />
    <link rel="stylesheet" href="../js/vendor/highlight/night-owl.css" />
    <link rel="stylesheet" href="../css/native-persistence.css" />
    <link rel="stylesheet" href="../css/events.css" />
    <link rel="stylesheet" href="../css/tooling.css" />
    <link rel="stylesheet" href="../css/frontpage.css" />
    <script src="../js/vendor/highlight/highlight.min.js"></script>
    <script src="../js/vendor/swiper/swiper-bundle.min.js"></script>
  </head>
  <body>
    <div class="fronttop">
      <!-- MOBILE MENU START -->
      <div class="hystmodal" id="jsMenuModal" aria-hidden="true">
        <div class="hystmodal__wrap">
          <div class="hystmodal__window mobmenu" role="dialog" aria-modal="true">
            <button data-hystclose class="hystmodal__close">Close</button>
            <div class="mobmenu__wrap">
              <a href="/" class="mobmenu__logo"><img src="/img/logo.svg" alt="Логотип" /></a>
              <div class="mobmenu__menu">
                <div class="mobmenu__h1 berlin">Navigation</div>
                <ul>
                  <li>
                    <a href="/">Get started</a>
                  </li>
                  <li>
                    <a href="/features/">Features</a>
                  </li>
                  <li>
                    <a href="/community.html">Community</a>
                  </li>
                  <li>
                    <a href="/use-cases/provenusecases.html">Powered by</a>
                  </li>
                  <li>
                    <a href="https://ignite.apache.org/docs/latest/">Docs</a>
                  </li>
                </ul>
              </div>
              <!-- //mobmenu__menu -->
            </div>
            <!-- //mobmenu__wrap -->
          </div>
          <!-- //mobmenu -->
        </div>
      </div>
      <!-- MOBILE MENU END -->
      <header class="hdr hdr__dark">
        <div class="cmtyhero__wrap flexi">
          <button class="hdr__burger" data-menumodal="#jsMenuModal"><img src="/img/menu.svg" alt="" /></button><a class="hdr__logo" href="/"><img class="hdr__logoimg" src="/img/logo-white.svg" alt="" /></a
          ><a class="button hdr__button" href="/download.html">Download Ignite 2.11 </a>
          <nav class="hdrmenu">
            <ul class="flexi">
              <li><a class="hdrmenu__current" href="/">Get started</a></li>
              <li><a href="/features">Features</a></li>
              <li><a href="/community.html">Community</a></li>
              <li><a href="/use-cases/provenusecases.html">Powered by</a></li>
              <li><a href="///ignite.apache.org/docs/latest/">Docs</a></li>
            </ul>
          </nav>
        </div>
      </header>
      <header class="hdrfloat">
        <div class="cmtyhero__wrap flexi">
          <button class="hdr__burger" data-menumodal="#jsMenuModal"><img src="/img/menu.svg" alt="" /></button><a class="hdr__logo" href="/"><img class="hdr__logoimg" src="/img/logo.svg" alt="" /></a
          ><a class="button hdr__button" href="/download.html">Download Ignite 2.11 </a>
          <nav class="hdrmenu">
            <ul class="flexi">
              <li><a class="hdrmenu__current" href="/">Get started</a></li>
              <li><a href="/features">Features</a></li>
              <li><a href="/community.html">Community</a></li>
              <li><a href="/use-cases/provenusecases.html">Powered by</a></li>
              <li><a href="/docs.html">Docs</a></li>
            </ul>
          </nav>
        </div>
      </header>
      <section class="innerhero fronthero">
        <div class="container innerhero__cont">
          <div class="innerhero__main innerhero__main--long">
            <div class="innerhero__pre pb-4">Scale Across Memory And Disk With No Compromises</div>
            <h1 class="h1 innerhero__h1 innerhero__mega">Open-Source<br />Distributed Database</h1>
            <div class="innerhero__h2 h4 pt-2">For High-Performance Computing <br />With In-Memory Speed and On-Disk Scale</div>
            <div class="innerhero__action pt-4"><a class="button fronthero__button" href="https://ignite.apache.org/docs/latest/index">Start Coding</a></div>
          </div>
        </div>
      </section>
      <!-- /.innerhero-->
    </div>
    <section class="frontblue">
      <aside class="fronttopcards flexi container">
        <article class="frontcard">
          <div class="frontcard__title h5">One of top-5 project of the Apache Software Foundation</div>
          <div class="frontcard__prises pt-3 flexi">
            <div class="frontcard__price flexi">
              <div class="frontcard__iconwrap"><img src="/img/frontpage/b1-prize1.svg" alt="" /></div>
              <span>Big Data <br />Users Lists</span>
            </div>
            <div class="frontcard__price flexi">
              <div class="frontcard__iconwrap frontcard__iconwrap--blue"><img src="/img/frontpage/b1-prize1.svg" alt="" /></div>
              <span>Users Lists</span>
            </div>
            <div class="frontcard__price flexi">
              <div class="frontcard__iconwrap frontcard__iconwrap--grey"><img src="/img/frontpage/b1-prize1.svg" alt="" /></div>
              <span>Dev Lists</span>
            </div>
          </div>
        </article>
        <!-- /.frontcard-->
        <article class="frontcard">
          <div class="frontcard__network"><img src="/img/frontpage/b1-planet.svg" alt="" /></div>
          <div class="frontcard__title h5 pt-3">World's leading companies select Ignite to power applications used by millions of people daily</div>
        </article>
        <!-- /.frontcard-->
      </aside>
      <!-- /.fronttopcards-->
      <div class="container forntcodes">
        <h3 class="h3">Use Ignite Core Capabilities To Start Easily <br />And Scale Faster</h3>
        <div class="forntcodes__wrap flexi jsTabWrap pt-4">
          <div class="forntcodes__menu">
            <ul class="fz20">
              <li><a class="active" href="#" data-ftablink="frontcode-1">Multi-Tier Storage</a></li>
              <li><a href="#" data-ftablink="frontcode-2">Distributed SQL</a></li>
              <li><a href="#" data-ftablink="frontcode-3">ACID Transactions</a></li>
              <li><a href="#" data-ftablink="frontcode-4">Compute APIs</a></li>
              <li><a href="#" data-ftablink="frontcode-5">Machine Learning</a></li>
              <li><a href="#" data-ftablink="frontcode-6">Continuous Queries</a></li>
            </ul>
            <a class="forntcodes__menumore fz20" href="/features/">View all features</a>
          </div>
          <div class="forntcodes__tabwraps">
            <div class="forntcodes__tab active" data-ftab="frontcode-1">
              <p class="forntcodes__tabtitle fz20 pb-1">Multi-Tier Storage</p>
              <p>
                Ignite scales up and out across memory and disk. By default, Ignite operates in a pure in-memory mode. But, by toggling a single configuration setting, you can turn a cluster into a database that can grow beyond the
                cluster's memory capacity:
              </p>
              <div class="forntcodes__innertabs jsTabWrap">
                <div class="nativecode__tabctrls flexi">
                  <a class="nativecode__link active" href="#" data-tablink="nativeTabXML">XML</a><a class="nativecode__link" href="#" data-tablink="nativeTabJava">Java</a
                  ><a class="nativecode__link" href="#" data-tablink="nativeTabNET">C#/.NET</a>
                </div>
                <div class="nativecode__tabs">
                  <div class="nativecode__tab active" data-tab="nativeTabXML">
                    <pre class="nativecode__codebox"> <code class="xml">&lt;bean class=&quot;org.apache.ignite.configuration.IgniteConfiguration&quot;&gt;
    &lt;property name=&quot;dataStorageConfiguration&quot;&gt;
        &lt;bean class=&quot;org.apache.ignite.configuration.DataStorageConfiguration&quot;&gt;
            &lt;property name=&quot;defaultDataRegionConfiguration&quot;&gt;
                &lt;bean class=&quot;org.apache.ignite.configuration.DataRegionConfiguration&quot;&gt;
                    &lt;property name=&quot;persistenceEnabled&quot; value=&quot;true&quot;/&gt;
                &lt;/bean&gt;
            &lt;/property&gt;
        &lt;/bean&gt;
    &lt;/property&gt;
&lt;/bean&gt;</code></pre>
                  </div>
                  <div class="nativecode__tab" data-tab="nativeTabJava">
                    <pre class="nativecode__codebox"> <code class="java">IgniteConfiguration cfg = new IgniteConfiguration();

DataStorageConfiguration storageCfg = new DataStorageConfiguration();

// Enable Ignite Persistence
storageCfg.getDefaultDataRegionConfiguration().setPersistenceEnabled(true);

// Using the new storage configuration
cfg.setDataStorageConfiguration(storageCfg);
</code></pre>
                  </div>
                  <div class="nativecode__tab" data-tab="nativeTabNET">
                    <pre class="nativecode__codebox"> <code class="csharp">var cfg = new IgniteConfiguration
{
    DataStorageConfiguration = new DataStorageConfiguration
    {
        DefaultDataRegionConfiguration = new DataRegionConfiguration
        {
            Name = &quot;Default_Region&quot;,
            PersistenceEnabled = true
        }
    }
};
</code></pre>
                  </div>
                </div>
                <div class="forntcodes__bottom"><a class="button" href="https://ignite.apache.org/docs/latest/memory-architecture">Learn more about multi-tier storage</a></div>
              </div>
              <!-- /.forntcodes__innertabs-->
            </div>
            <!-- /.forntcodes__tab1 (END Multi-Tier Storage)-->
            <div class="forntcodes__tab" data-ftab="frontcode-2">
              <p class="forntcodes__tabtitle fz20 pb-1">Distributed SQL</p>
              <p>
                Use Ignite as a traditional SQL database by leveraging JDBC drivers, ODBC drivers, or the native SQL APIs that are available for Java, C#, C++, Python, and other programming languages. Seamlessly join, group, aggregate, and
                order your distributed in-memory and on-disk data:
              </p>
              <div class="forntcodes__innertabs jsTabWrap">
                <div class="nativecode__tabctrls flexi"><a class="nativecode__link active" href="#" data-tablink="sqlTabSQL">SQL</a></div>
                <div class="nativecode__tabs">
                  <div class="nativecode__tab active" data-tab="sqlTabSQL">
                    <pre class="nativecode__codebox"> <code class="sql">SELECT country.name, city.name, MAX(city.population) as max_pop
FROM country JOIN city ON city.countrycode = country.code
WHERE country.code IN ('USA','BRA','ESP','JPN')
GROUP BY country.name, city.name
ORDER BY max_pop DESC LIMIT 3;</code></pre>
                  </div>
                </div>
                <div class="forntcodes__bottom"><a class="button" href="https://ignite.apache.org/docs/latest/SQL/sql-introduction">Start Using SQL</a></div>
              </div>
              <!-- /.forntcodes__innertabs-->
            </div>
            <!-- /.forntcodes__tab2 (END Distributed SQL)-->
            <div class="forntcodes__tab" data-ftab="frontcode-3">
              <p class="forntcodes__tabtitle fz20 pb-1">ACID Transactions</p>
              <p>Ignite can operate in a strongly consistent mode that provides full support for distributed ACID transactions. Transact across multiple cluster nodes, caches, tables, and partitions:</p>
              <div class="forntcodes__innertabs jsTabWrap">
                <div class="nativecode__tabctrls flexi"><a class="nativecode__link active" href="#" data-tablink="acidTabJava">Java</a><a class="nativecode__link" href="#" data-tablink="acidTabSharp">C#/.NET</a></div>
                <div class="nativecode__tabs">
                  <div class="nativecode__tab active" data-tab="acidTabJava">
                    <pre class="nativecode__codebox"> <code class="java">IgniteTransactions transactions = ignite.transactions();

try (Transaction tx = transactions.txStart()) {
    Integer hello = cache.get(&quot;Hello&quot;);

    if (hello == 1)
        cache.put(&quot;Hello&quot;, 11);

    cache.put(&quot;World&quot;, 22);

    tx.commit();
}</code></pre>
                  </div>
                  <div class="nativecode__tab" data-tab="acidTabSharp">
                    <pre class="nativecode__codebox"> <code class="csharp">var transactions = ignite.GetTransactions();

using (var tx = transactions.TxStart()) {
    int hello = cache.Get(&quot;Hello&quot;);

    if (hello == 1) {
        cache.Put(&quot;Hello&quot;, 11);
    }

    cache.Put(&quot;World&quot;, 22);

    tx.Commit();
}</code></pre>
                  </div>
                </div>
                <div class="forntcodes__bottom"><a class="button" href="https://ignite.apache.org/features/acid-transactions.html">Learn More About Transactions</a></div>
              </div>
              <!-- /.forntcodes__innertabs-->
            </div>
            <!-- /.forntcodes__tab3 (END ACID Transactions)-->
            <div class="forntcodes__tab" data-ftab="frontcode-4">
              <p class="forntcodes__tabtitle fz20 pb-1">Co-located Compute in Java, Scala, Kotlin, C#, C++</p>
              <p>
                With traditional databases, for in-place calculations, you use stored procedures that are written in a language such as PL/SQL. With Ignite, you use modern JVM languages, C# or C++ to develop and execute custom tasks across
                your distributed database:
              </p>
              <div class="forntcodes__innertabs jsTabWrap">
                <div class="nativecode__tabctrls flexi"><a class="nativecode__link active" href="#" data-tablink="compTabJava">Java</a><a class="nativecode__link" href="#" data-tablink="compTabSharp">C#/.NET</a></div>
                <div class="nativecode__tabs">
                  <div class="nativecode__tab active" data-tab="compTabJava">
                    <pre class="nativecode__codebox"> <code class="java">// Broadcast the task to server nodes only.
IgniteCompute compute = ignite.compute(ignite.cluster().forServers());

// Each remote server node will execute the logic of the task/lambda below.
compute.broadcast(() -&gt; System.out.println(
    &quot;Hello Node: &quot; + ignite.cluster().localNode().id()));</code></pre>
                  </div>
                  <div class="nativecode__tab" data-tab="compTabSharp">
                    <pre class="nativecode__codebox"> <code class="csharp">// Broadcast the task to server nodes only.
var compute = ignite.GetCluster().ForServers().GetCompute();

// Each remote server node will execute the custom PrintNodeIdAction task.
compute.Broadcast(new PrintNodeIdAction());</code></pre>
                  </div>
                </div>
                <div class="forntcodes__bottom"><a class="button" href="https://ignite.apache.org/docs/latest/distributed-computing/distributed-computing">Start Using Compute APIs</a></div>
              </div>
              <!-- /.forntcodes__innertabs-->
            </div>
            <!-- /.forntcodes__tab4 (END Compute APIs)-->
            <div class="forntcodes__tab" data-ftab="frontcode-5">
              <p class="forntcodes__tabtitle fz20 pb-1">Built-In Machine Learning</p>
              <p>
                Ignite machine learning uses built-in algorithms and tools, as well as TensorFlow integration, to enable the building of scalable machine learning models and avoid costly data transfers. Train, deploy, evaluate, and update
                your ML and DL models continuously and at scale:
              </p>
              <div class="forntcodes__innertabs jsTabWrap">
                <div class="nativecode__tabctrls flexi"><a class="nativecode__link active" href="#" data-tablink="machineTabJava">Java</a></div>
                <div class="nativecode__tabs">
                  <div class="nativecode__tab active" data-tab="machineTabJava">
                    <pre class="nativecode__codebox"> <code class="java">// Create the trainer
KNNClassificationTrainer trainer = new KNNClassificationTrainer()
.withK(3).withIdxType(SpatialIndexType.BALL_TREE)
.withDistanceMeasure(new EuclideanDistance())
.withWeighted(true);

// Train the model
KNNClassificationModel knnMdl = trainer.fit(ignite, dataCache, vectorizer);

// Make a prediction
double prediction = knnMdl.predict(observation);</code></pre>
                  </div>
                </div>
                <div class="forntcodes__bottom"><a class="button" href="https://ignite.apache.org/docs/latest/machine-learning/machine-learning">Start Using Ignite Machine Learning</a></div>
              </div>
              <!-- /.forntcodes__innertabs-->
            </div>
            <!-- /.forntcodes__tab5 (END Machine Learning)-->
            <div class="forntcodes__tab" data-ftab="frontcode-6">
              <p class="forntcodes__tabtitle fz20 pb-1">Continuous Queries</p>
              <p>
                With relational databases, you use triggers to react to certain events. With Ignite, you deploy continuous queries that are written in a modern programming language such as Java or C# and process streams of changes on the
                database and application side:
              </p>
              <div class="forntcodes__innertabs jsTabWrap">
                <div class="nativecode__tabctrls flexi"><a class="nativecode__link active" href="#" data-tablink="contTabJava">Java</a><a class="nativecode__link" href="#" data-tablink="contTabSharp">C#/.NET</a></div>
                <div class="nativecode__tabs">
                  <div class="nativecode__tab active" data-tab="contTabJava">
                    <pre class="nativecode__codebox"> <code class="java">ContinuousQuery qry = new ContinuousQuery&lt;&gt;();

// The callback that will be triggered on the application side.
qry.setLocalListener(new MyLocalListener());

// The callback that will be executed on the server side.
qry.setRemoteFilterFactory(new MyRemoteFilterFactory());

// Deploy the query in the cluster.
cache.query(query);</code></pre>
                  </div>
                  <div class="nativecode__tab" data-tab="contTabSharp">
                    <pre class="nativecode__codebox"> <code class="csharp">var cache = ignite.GetOrCreateCache(&quot;myCache&quot;);

var query = new ContinuousQuery(
    new MyLocalListener(), // Will be triggered on the application side.
    new MyRemoteFilter()); // Will be executed on the server side.

// Deploy the query in the cluster.
var handle = cache.QueryContinuous(query);</code></pre>
                  </div>
                </div>
                <div class="forntcodes__bottom"><a class="button" href="https://ignite.apache.org/docs/latest/key-value-api/continuous-queries">Start Using Continuous Queries</a></div>
              </div>
              <!-- /.forntcodes__innertabs-->
            </div>
            <!-- /.forntcodes__tab6 (END Continuous Queries)-->
          </div>
        </div>
      </div>
      <!-- /.forntcodes-->
    </section>
    <!-- /.frontblue-->
    <section class="frontnewcards container">
      <h3 class="h3">New to Ignite? <br />Three Primary Usage Scenarios</h3>
      <div class="frontnewcards__wrap pt-5">
        <article class="usecasecard cardsimple">
          <h4 class="cardsimple__title">Applications Acceleration <br />& Scale Out</h4>
          <div class="cardsimple__text cardsimple__text--long">
            Accelerate your existing applications by&nbsp;100x using Ignite as&nbsp;an&nbsp;in-memory cache or&nbsp;in-memory data grid that is&nbsp;deployed over one or&nbsp;more external databases.
          </div>
          <div class="cardsimple__bottom"><a class="cardsimple__button button button--shadow" href="/use-cases/in-memory-data-grid.html">Learn more</a></div>
        </article>
        <article class="usecasecard cardsimple">
          <h4 class="cardsimple__title">Distributed Database For <br />HTAP Workloads</h4>
          <div class="cardsimple__text cardsimple__text--long">Build applications that support transactional and&nbsp;analytical workloads by&nbsp;using Ignite as&nbsp;a&nbsp;database that scales beyond available memory capacity.</div>
          <div class="cardsimple__bottom"><a class="cardsimple__button button button--shadow" href="/use-cases/in-memory-database.html">Learn more</a></div>
        </article>
        <article class="usecasecard cardsimple">
          <h4 class="cardsimple__title">Digital Integration Hub<br />&nbsp;</h4>
          <div class="cardsimple__text cardsimple__text--long">Create an&nbsp;advanced platform architecture that aggregates multiple back-end systems and databases into a&nbsp;low-latency and shared data store.</div>
          <div class="cardsimple__bottom"><a class="cardsimple__button button button--shadow" href="/use-cases/digital-integration-hub.html">Learn more</a></div>
        </article>
      </div>
    </section>
    <!-- /.frontnewcards-->
    <section class="frontstories container">
      <h3 class="h3">Ignite User Stories</h3>
      <ul class="frontstories__checkers pt-5 capstext">
        <li>Software & SaaS</li>
        <li>Banking</li>
        <li>Logistics & Transportation</li>
        <li>Financial Services</li>
        <li>Retail</li>
        <li>Biotech</li>
        <li>And others</li>
      </ul>
      <div class="frontstories__sliderwrap">
        <button class="ctrl ctrl--prev"><img src="/img/frontpage/icon-slider-arrow.svg" alt="" /></button><button class="ctrl ctrl--next"><img src="/img/frontpage/icon-slider-arrow.svg" alt="" /></button>
        <div class="swiper jsFrontVideosSwiper">
          <div class="swiper-wrapper">
            <div class="swiper-slide">
              <article class="comvideo">
                <div class="comvideo__box">
                  <a class="comvideo__screen" href="https://www.youtube.com/watch?v=3FFexcYIpmA" data-youtube="data-youtube"
                    ><span class="comvideo__txt comvideo__txt--medium">Leveraging In&nbsp;Memory Compute Grids With Core Systems Of&nbsp;Record</span><img src="/img/poweredby/videos/001.png" alt=""
                  /></a>
                </div>
                <div class="comvideo__descr pt-1"></div>
              </article>
            </div>
            <div class="swiper-slide">
              <article class="comvideo">
                <div class="comvideo__box">
                  <a class="comvideo__screen" href="https://www.youtube.com/watch?v=Mhtt2QL_qCQ" data-youtube="data-youtube"
                    ><span class="comvideo__txt comvideo__txt--black comvideo__txt--medium">How To&nbsp;Use Apache Ignite To&nbsp;Rescue The Backend Of&nbsp;A&nbsp;Bank</span><img src="/img/poweredby/videos/002.png" alt=""
                  /></a>
                </div>
                <div class="comvideo__descr pt-1"></div>
              </article>
            </div>
            <div class="swiper-slide">
              <article class="comvideo">
                <div class="comvideo__box">
                  <a class="comvideo__screen" href="https://www.youtube.com/watch?v=z28rthKIrDk" data-youtube="data-youtube"
                    ><span class="comvideo__txt comvideo__txt--medium">S9D Using Apache Ignite As&nbsp;A&nbsp;Part Of&nbsp;Real Time Campaigning</span><img src="/img/poweredby/videos/003.png" alt=""
                  /></a>
                </div>
                <div class="comvideo__descr pt-1"></div>
              </article>
            </div>
          </div>
        </div>
        <div class="frontstories__pag"></div>
      </div>
      <div class="frontstories__bottom pt-5"><a class="button button--shadow" href="/use-cases/provenusecases.html">View all case-studies</a></div>
    </section>
    <!-- /.frontstories-->
    <section class="frontconfs container">
      <h3 class="h3">Join The Community At Events <br />And Meetups Worldwide</h3>
      <div class="frontconfs__wrap">
        <a class="frontconfcard frontconfcard--red" href="/events.html#online"
          ><div class="frontconfs__iconwrap pb-3"><img src="/img/frontpage/events/001.svg" alt="" /></div>
          <h4 class="h5 frontconfcard__title pb-2">Ignite Virtual Meetup</h4>
          <p>Experts and practitioners make <strong>online-talks and presentations</strong> and share their Apache Ignite experience.</p>
          <div class="frontconfcard__bottom">
            <p class="capstext">Online</p>
            <div class="frontconfcard__cal">Regularly</div>
          </div></a
        ><a class="frontconfcard frontconfcard--blue" href="/events.html#summit"
          ><div class="frontconfs__iconwrap pb-3"><img src="/img/frontpage/events/002.svg" alt="" /></div>
          <h4 class="h5 frontconfcard__title pb-2">Ignite Summit</h4>
          <p>This <strong>virtual conference</strong> is a chance to learn more about up-to-date in-memory computing solutions.</p>
          <p>There are speakers from industry-leading companies and hundreds of participants from all over the world.</p>
          <div class="frontconfcard__bottom">
            <p class="capstext">Online</p>
            <div class="frontconfcard__cal">Annually</div>
          </div></a
        ><a class="frontconfcard" href="/events.html#offline"
          ><div class="frontconfs__iconwrap pb-3"><img src="/img/frontpage/events/003.svg" alt="" /></div>
          <h4 class="h5 frontconfcard__title pb-2">Other Events</h4>
          <p>Join us for <strong>conferences, presentations, and webinars</strong> to learn more about in-memory computing technologies.</p>
          <div class="frontconfcard__bottom">
            <p class="capstext">ONLINE <small>and</small> OFFLINE</p>
            <div class="frontconfcard__cal">Regularly</div>
          </div></a
        >
      </div>
      <div class="frontconfs__bottom pt-5"><a class="button button--shadow" href="/events.html">View all events</a></div>
    </section>
    <!-- /.frontconfs-->
    <section class="event-featured container fronteventsbanner">
      <p class="capstext">Featured Event</p>
      <a class="event-featured__banner pt-5" href="https://ignite-summit.org/schedule/" target="_blank"
        ><picture
          ><source srcset="/img/events/event-banner-vert.jpg" media="(max-width: 767px)" />
          <img src="/img/events/event-banner.jpg" alt="" /></picture
      ></a>
    </section>
    <!-- /.event-featured-->
    <section class="frontresourse container">
      <h3 class="h3">Resources To Elevate Your <br />Ignite Experience</h3>
      <div class="frontresourse__subtitle pt-2">Get an access to the variety of free technical <br />and learning resources</div>
      <div class="frontresourse__wrap flexi fz20">
        <div class="frontresourse__col">
          <div class="capstext pb-5">Technical resources</div>
          <div class="frontresitem flexi frontresitem--black">
            <div class="frontresitem__icon"><img src="/img/frontpage/res-docs.svg" alt="" /></div>
            <div class="frontresitem__text">Apache Ignite technical documentation</div>
          </div>
          <div class="frontresitem flexi frontresitem--gray">
            <div class="frontresitem__icon"><img src="/img/frontpage/res-wiki.svg" alt="" /></div>
            <div class="frontresitem__text">Ignite Wiki with a collection of low-level design documents and instructions</div>
          </div>
          <div class="frontresitem flexi frontresitem--gray">
            <div class="frontresitem__icon"><img src="/img/icon-github.svg" alt="" /></div>
            <div class="frontresitem__text">Git repositories with Ignite source code and code samples and examples</div>
          </div>
        </div>
        <div class="frontresourse__col">
          <div class="capstext pb-5">Technical resources</div>
          <div class="frontresitem flexi frontresitem--red">
            <div class="frontresitem__icon"><img src="/img/frontpage/res-videos.svg" alt="" /></div>
            <div class="frontresitem__text">Dozens of essential videos and webinar <br />recordings</div>
          </div>
          <div class="frontresitem flexi frontresitem--rose">
            <div class="frontresitem__icon"><img src="/img/frontpage/res-vebinar.svg" alt="" /></div>
            <div class="frontresitem__text">Trainings and courses that help building high-performance and data-intensive applications with&nbsp;the Apache Ignite</div>
          </div>
          <div class="frontresitem flexi frontresitem--rose">
            <div class="frontresitem__icon"><img src="/img/frontpage/res-book.svg" alt="" /></div>
            <div class="frontresitem__text">Apache Ignite book to expand knowledge <br />in in-memory computing and distributed databases</div>
          </div>
        </div>
      </div>
    </section>
    <section class="toolingend toolingend--front">
      <div class="container flexi">
        <div class="toolingend__main">
          <h2 class="toolingend__title h3">Ready To Start?</h2>
          <p class="fz20 pt-1x">Discover our quick start guides and build your first <br />application in 5-10 minutes</p>
        </div>
        <div class="toolingend__action"><a class="button" href="#">Discover Quick Start Guide</a></div>
      </div>
    </section>
    <a class="scrollTop" href="#"
      ><svg class="feather feather-chevron-up" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
        <polyline points="18 15 12 9 6 15"></polyline></svg
    ></a>
    <script src="/js/vendor/hystmodal/hystmodal.min.js"></script>
    <script src="/js/vendor/swiper/swiper-bundle.min.js"></script>
    <script src="/js/vendor/waypoints.min.js"></script>
    <script src="/js/main.js"></script>
  </body>
</html>
