diff --git a/pom.xml b/pom.xml
index ed4587bc..37589870 100644
--- a/pom.xml
+++ b/pom.xml
@@ -46,6 +46,7 @@
util
kafka
valutakurs-klient
+ unleash
diff --git a/unleash/README.md b/unleash/README.md
new file mode 100644
index 00000000..a83161e1
--- /dev/null
+++ b/unleash/README.md
@@ -0,0 +1,19 @@
+# Unleash
+
+I hver enkelt applikasjon man skal bruke feature-toggles, blir man nødt til å legge inn `@ComponentScan("no.nav.familie.unleash", ...)` i App-configen. Deretter kan man ta ibruk servicen `UnleashService` som tilbyr `isEnabled()`-metoden.
+
+Hvor vidt man går mot unleash eller ikke kan styres med app-properties:
+```
+// Default
+unleash:
+ enabled: true
+
+// Dersom man ønsker at alle toggles skal gi isEnabled = false eller default verdi der det er definert
+unleash:
+ enabled: false
+```
+
+Pakka krever følgende miljøvariabler:
+* UNLEASH_SERVER_API_URL (se [Unleash-doc](https://docs.nais.io/addons/unleash-next/))
+* UNLEASH_SERVER_API_TOKEN (se [Unleash-doc](https://docs.nais.io/addons/unleash-next/))
+* NAIS_APP_NAME
diff --git a/unleash/pom.xml b/unleash/pom.xml
new file mode 100644
index 00000000..8cbdcba0
--- /dev/null
+++ b/unleash/pom.xml
@@ -0,0 +1,82 @@
+
+
+ 4.0.0
+
+ no.nav.familie.felles
+ felles
+ ${revision}${sha1}${changelist}
+
+
+ unleash
+ ${revision}${sha1}${changelist}
+ Felles - Unleash
+ jar
+
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+ org.jetbrains.kotlin
+ kotlin-reflect
+
+
+ io.getunleash
+ unleash-client-java
+ 8.2.1
+
+
+
+
+ src/main/kotlin
+ src/test/kotlin
+
+
+
+ org.jetbrains.kotlin
+ kotlin-maven-plugin
+ ${kotlin.version}
+
+
+ compile
+ compile
+
+ compile
+
+
+
+ test-compile
+ test-compile
+
+ test-compile
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+ compile
+ compile
+
+ compile
+
+
+
+ testCompile
+ test-compile
+
+ testCompile
+
+
+
+
+
+
+
+
diff --git a/unleash/src/main/kotlin/no/nav/familie/unleash/DefaultUnleashService.kt b/unleash/src/main/kotlin/no/nav/familie/unleash/DefaultUnleashService.kt
new file mode 100644
index 00000000..3903b584
--- /dev/null
+++ b/unleash/src/main/kotlin/no/nav/familie/unleash/DefaultUnleashService.kt
@@ -0,0 +1,43 @@
+package no.nav.familie.unleash
+
+import io.getunleash.DefaultUnleash
+import io.getunleash.UnleashContext
+import io.getunleash.UnleashContextProvider
+import io.getunleash.util.UnleashConfig
+
+class DefaultUnleashService(
+ val apiUrl: String,
+ val apiToken: String,
+ val appName: String
+) : UnleashService {
+
+ private val defaultUnleash: DefaultUnleash
+
+ init {
+
+ defaultUnleash = DefaultUnleash(
+ UnleashConfig.builder()
+ .appName(appName)
+ .unleashAPI("$apiUrl/api")
+ .apiKey(apiToken)
+ .unleashContextProvider(lagUnleashContextProvider()).build()
+ )
+ }
+
+ private fun lagUnleashContextProvider(): UnleashContextProvider {
+ return UnleashContextProvider {
+ UnleashContext.builder()
+ .appName(appName)
+ .build()
+ }
+ }
+
+ override fun isEnabled(toggleId: String, defaultValue: Boolean): Boolean {
+ return defaultUnleash.isEnabled(toggleId, defaultValue)
+ }
+
+ override fun destroy() {
+ // Spring trigger denne ved shutdown. Gjøres for å unngå at unleash fortsetter å gjøre kall ut
+ defaultUnleash.shutdown()
+ }
+}
diff --git a/unleash/src/main/kotlin/no/nav/familie/unleash/UnleashConfig.kt b/unleash/src/main/kotlin/no/nav/familie/unleash/UnleashConfig.kt
new file mode 100644
index 00000000..61075eed
--- /dev/null
+++ b/unleash/src/main/kotlin/no/nav/familie/unleash/UnleashConfig.kt
@@ -0,0 +1,62 @@
+package no.nav.familie.unleash
+
+import org.slf4j.LoggerFactory
+import org.springframework.beans.factory.DisposableBean
+import org.springframework.beans.factory.annotation.Value
+import org.springframework.boot.context.properties.ConfigurationProperties
+import org.springframework.boot.context.properties.EnableConfigurationProperties
+import org.springframework.context.annotation.Bean
+import org.springframework.context.annotation.Configuration
+
+@Configuration
+@EnableConfigurationProperties(UnleashProperties::class)
+open class UnleashConfig(
+ private val featureToggleProperties: UnleashProperties,
+ @Value("\${UNLEASH_SERVER_API_URL}") val apiUrl: String,
+ @Value("\${UNLEASH_SERVER_API_TOKEN}") val apiToken: String,
+ @Value("\${NAIS_APP_NAME}") val appName: String
+) {
+
+ @Bean
+ open fun unleashNext(): UnleashService =
+ if (featureToggleProperties.enabled) {
+ DefaultUnleashService(apiUrl = apiUrl, apiToken = apiToken, appName = appName)
+ } else {
+ logger.warn(
+ "Funksjonsbryter-funksjonalitet er skrudd AV. " +
+ "isEnabled gir 'false' med mindre man har oppgitt en annen default verdi."
+ )
+ lagDummyUnleashService()
+ }
+
+ private fun lagDummyUnleashService(): UnleashService {
+ return object : UnleashService {
+ override fun isEnabled(toggleId: String, defaultValue: Boolean): Boolean {
+ return System.getenv(toggleId).run { toBoolean() } || defaultValue
+ }
+
+ override fun destroy() {
+ // Dummy featureToggleService trenger ikke destroy, då den ikke har en unleash å lukke
+ }
+ }
+ }
+
+ companion object {
+
+ private val logger = LoggerFactory.getLogger(UnleashConfig::class.java)
+ }
+}
+
+@ConfigurationProperties("unleash")
+class UnleashProperties(
+ val enabled: Boolean = true
+)
+
+interface UnleashService : DisposableBean {
+
+ fun isEnabled(toggleId: String): Boolean {
+ return isEnabled(toggleId, false)
+ }
+
+ fun isEnabled(toggleId: String, defaultValue: Boolean): Boolean
+}