# KIE :: Public API 10.0.0 API

KIE provides a knowledge-centric API, where rules and processes are first class citizens. The majority of KIE API is considered stable and should not change, experimental classes and APIs will be marked as such.

The most common interfaces you will use are:

- `org.kie.api.KieBase`
- `org.kie.api.runtime.KieSession`
- `org.kie.api.runtime.StatelessKieSession`
- `org.kie.api.runtime.KieContainer`
- `org.kie.api.builder.ReleaseId`
- `org.kie.api.builder.KieScanner`

Factory classes, with static methods, provide instances of the above interfaces. A pluggable provider approach is used to allow provider implementations to be wired up to the factories at runtime. The Factories you will most commonly use are:

- `org.kie.api.KieServices`
- `org.kie.api.command.KieCommands`
- `org.kie.api.io.KieResources`

Typical example of loading and using knowledge resources (rules, processes, etc) found on classpath. By convention the KIE API expects file `META-INF/kmodule.xml` which is a marker file and also enables additional configuration. For very basic usage the file can just contain `<kmodule xmlns="http://www.drools.org/xsd/kmodule"/>`:

      KieServices kieServices = KieServices.Factory.get();
      KieContainer kieContainer = kieServices.getKieClasspathContainer();
      KieSession kieSession = kieContainer.newKieSession();
      try {
        kieSession.insert(new Fibonacci(10));
        kieSession.fireAllRules();
      } finally {
        kieSession.dispose();
      }

Drools 8 introduced Rule Unit API as a recommended style which provides an atomic module defining a set of rules and a set of strongly typed data sources:

      MeasurementUnit measurementUnit = new MeasurementUnit();
      RuleUnitInstance<MeasurementUnit> instance = RuleUnitProvider.get().createRuleUnitInstance(measurementUnit);
      try {
        measurementUnit.getMeasurements().add(new Measurement("color", "red"));
        List<Measurement> queryResult = instance.executeQuery("FindColor").stream().map(tuple -> (Measurement) tuple.get("$m")).collect(toList());
      } finally {
        instance.dispose();
      }

Package
Description
org.kie.api
Base KIE API classes.
org.kie.api.builder
org.kie.api.builder.model
org.kie.api.command
org.kie.api.concurrent
org.kie.api.conf
org.kie.api.definition
All classes to create definitions, as built by the KieBuilder from artifact resources, can be found here.
org.kie.api.definition.process
The classes that make up a Process definition.
org.kie.api.definition.rule
The classes that make up a Rule definition.
org.kie.api.definition.type
org.kie.api.event
Comprehensive event API for all parts of the platform.
org.kie.api.event.kiebase
Events emitted while updating the definitions in the KieBase.
org.kie.api.event.kiescanner
Events emitted by the KieScanner.
org.kie.api.event.process
Events emitted while process instances are executing.
org.kie.api.event.rule
Events emitted while rules are executing.
org.kie.api.event.usertask
org.kie.api.internal.assembler
org.kie.api.internal.io
org.kie.api.internal.runtime
org.kie.api.internal.utils
org.kie.api.internal.weaver
org.kie.api.io
io library for working with Resources
org.kie.api.logger
Logger classes used to log the KieRuntime's execution.
org.kie.api.management
org.kie.api.marshalling
Marshalling classes are used to marshall and unmarshal StatefulKieSessions
org.kie.api.persistence.jpa
org.kie.api.pmml
org.kie.api.prototype
org.kie.api.remote
org.kie.api.runtime
The runtime engine classes, including KieSession and StatelessKieSession.
org.kie.api.runtime.conf
org.kie.api.runtime.process
The process runtime classes.
org.kie.api.runtime.rule
The rule runtime classes.
org.kie.api.time
Classes related to calendars and time.