Only this pageAll pages
Powered by GitBook
1 of 61

0.2

Loading...

Developing Integrations with Frigg

Overview

Tutorials

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Conventions

Deployment

Testing

Publishing

Extending

Loading...

Loading...

Frigg Reference

Loading...

Core Concepts

Loading...

Loading...

Contributing

Loading...

Loading...

Loading...

API Modules

Loading...

Loading...

ActiveCampaign

Configuration

Attentive

Configuration

ConnectWise

Configuration

Fastspring

Configuration

Hubspot

Configuration

Monday.com

Configuration

RollWorks

Configuration

Salesforce

Configuration

Salesloft

Configuration

Loading...

Support

Loading...

Loading...

Loading...

Loading...

Roadmap

Loading...

Exploring the App

Frontend overview

Running npm start at the root of your Frigg application repo will run npm start on both the /backend and /frontend directories. Let's unpack each.

We provide a very lightweight/basic user login flow and dashboard. Go ahead and try logging in or creating an account.

// Image of login screen

Note that when you attempt to log in, you will receive an error. We'll come back to this in a moment, but the TL;DR is that we need to plug in a database for the backend to talk to.

Backend overview

The backend is oriented around the serverless.com framework. When you run npm start, it runs the command to use the serverless-offline plugin. Critical to note is that this supports basic functionality (API => function invocation, or schedule => function invocation), it does not support all events that you may be relying on to power your integrations. In other words, you can run Authentication and Configuration, but the entirety of your Frigg applications' backend will not run using this command. For that, see "Running Frigg Locally."

The Backend is comprised of the following folder structure:

├── backend
│   ├── app.js
│   ├── jest.config.js
│   ├── package-lock.json
│   ├── package.json
│   ├── scripts
│   │   ├── set-up-tests.js
│   │   └── tear-down-tests.js
│   ├── serverless.yml
│   ├── setupEnv.js
│   ├── src
│   │   ├── configs
│   │   │   └── dev.json
│   │   ├── handlers
│   │   │   ├── createHandler.js
│   │   │   ├── examplePollWorker.js
│   │   │   ├── exampleQueuer.js
│   │   │   └── http
│   │   │       ├── auth.js
│   │   │       └── demo.js
│   │   ├── managers
│   │   │   ├── IntegrationConfigManager.js
│   │   │   ├── SyncManager.js
│   │   │   ├── UserManager.js
│   │   │   ├── entities
│   │   │   │   └── ExampleManager.js
│   │   │   ├── integrations
│   │   │   │   └── ExampleIntegrationManager.js
│   │   │   └── migrations
│   │   │       ├── MigrationManager.js
│   │   │       └── ExampleMigrator.js
│   │   ├── models
│   │   │   ├── IndividualUser.js
│   │   │   ├── OrganizationUser.js
│   │   │   ├── Token.js
│   │   │   └── User.js
│   │   ├── objects
│   │   │   └── sync
│   │   │       └── ExampleLeadSync.js
│   │   ├── routers
│   │   │   ├── auth.js
│   │   │   ├── demo.js
│   │   │   ├── middleware
│   │   │   │   ├── loadUserManager.js
│   │   │   │   └── requireLoggedInUser.js
│   │   │   └── user.js
│   │   ├── utils
│   │   │   ├── FormatPatchBody.js
│   │   │   ├── QueuerUtil.js
│   │   │   ├── RouterUtil.js
│   │   │   └── fakeWindow.js
│   │   └── workers
│   │       └── examples
│   │           ├── ExamplePollWorker.js
│   │           ├── ExampleQueuer.js
│   │           ├── InitialSync.js
│   │           ├── WebHookSync.js
│   │           └── WebhookWorker.js
│   ├── test
│   │   ├── api.integration.test.js
│   │   ├── managers
│   │   │   └── integrations
│   │   │       └── ExampleIntegration.test.js
│   │   ├── mocks
│   │   ├── routers
│   │   │   ├── auth.test.js
│   │   │   └── test-auth.test.js
│   │   └── utils
│   │       ├── Authenticator.js
│   │       ├── CreateIntegrationsTest.js
│   │       ├── ModelTestUtils.js
│   │       ├── TestUtils.js
│   │       ├── TextReportFile.js
│   │       └── reusableTestFunctions
│   │           └── integration.js
│   └── webpack.config.js
├── frontend
│   ├── package-lock.json
│   ├── package.json
│   ├── postcss.config.js
│   ├── public
│   │   ├── FriggLogo.svg
│   │   ├── LeftHooks-square.png
│   │   ├── _redirects
│   │   ├── assets
│   │   │   ├── media
│   │   │   │   └── Back_arrow.svg
│   │   │   └── type
│   │   │       └── FranklinGothicURW
│   │   │           ├── FranklinGothicURW-Boo.otf
│   │   │           ├── FranklinGothicURW-BooIta.otf
│   │   │           ├── FranklinGothicURW-Dem.otf
│   │   │           ├── FranklinGothicURW-DemIta.otf
│   │   │           ├── FranklinGothicURW-Lig.otf
│   │   │           ├── FranklinGothicURW-Med.otf
│   │   │           └── FranklinGothicURW-MedIta.otf
│   │   ├── favicon.ico
│   │   ├── hubspot_logo.svg
│   │   ├── index.html
│   │   ├── lh_logo.png
│   │   ├── manifest.json
│   │   └── salesforce_logo.svg
│   ├── src
│   │   ├── App.js
│   │   ├── AppRouter.js
│   │   ├── __tests__
│   │   │   ├── Integration.test.js
│   │   │   ├── Login.test.js
│   │   │   └── Logout.test.js
│   │   ├── actions
│   │   │   ├── auth.js
│   │   │   ├── integrations.js
│   │   │   ├── logout.js
│   │   │   ├── modal.js
│   │   │   └── modalForm.js
│   │   ├── api
│   │   │   └── api.js
│   │   ├── components
│   │   │   ├── Auth.js
│   │   │   ├── AuthRedirect.js
│   │   │   ├── CreateUser.js
│   │   │   ├── Data.js
│   │   │   ├── FormValidator.js
│   │   │   ├── Integration
│   │   │   │   ├── IntegrationDropdown.js
│   │   │   │   ├── IntegrationHorizontal.js
│   │   │   │   ├── IntegrationList.js
│   │   │   │   ├── IntegrationSkeleton.js
│   │   │   │   ├── IntegrationVertical.js
│   │   │   │   ├── ToggleSwitch.js
│   │   │   │   └── index.js
│   │   │   ├── Login.js
│   │   │   ├── Logout.js
│   │   │   ├── ModalForm.js
│   │   │   ├── Navbar.js
│   │   │   └── Sidebar.js
│   │   ├── frigg.config.js
│   │   ├── index.css
│   │   ├── index.js
│   │   ├── pages
│   │   │   ├── IntegrationsPage.js
│   │   │   └── SettingsPage.js
│   │   ├── reducers
│   │   │   ├── auth.js
│   │   │   ├── index.js
│   │   │   ├── integrations.js
│   │   │   ├── logout.js
│   │   │   ├── modal.js
│   │   │   └── modalForm.js
│   │   ├── store
│   │   │   └── index.js
│   │   └── utils
│   │       ├── IntegrationUtils.js
│   │       ├── history.js
│   │       ├── logger.js
│   │       └── withRouter.js
│   └── tailwind.config.js
├── package-lock.json
└── package.json

How it works

Quick Start Tutorial

Getting Started

Aloha! Let’s test out running Frigg locally by cloning and installing a quick start template app.

Prerequisites

You'll need to do the following before continuing:

    • You'll need to create a db admin user and you'll want your connection string.

Overview

Create Frigg App will generate a Frigg application that within a few minutes is deployable to your own infrastructure accounts. Let's get Create Frigg App going and unpack the "magic" as we go.

Introduction to Frigg

Frigg Explained to Developers

Simply put- Frigg is what you would build into your product if you had unlimited resources and time, with the added benefit of being Open Source, where it's not just you but a community of developers collaborating to solve the same core set of problems over and over again. Something you could never do internally.

The Frigg Framework is an opinionated integration framework built with modern software development teams in mind. The aim of the framework is to have you up and running out of the box with a flexible set of tools to help rapidly add integrations to your software that your end users can manage individually without any intervention.

The framework handles integration listing, authentication, and configuration "out of the box," built on a scalable serverless architecture with a growing library of prebuilt API Modules to greatly reduce time to wow. Along with the core "out of the box" features, the framework contains primitives to help address and flex to any use case.

Navigating the Docs

We've got a lot to unpack! These docs should be your go-to resource for all things Frigg related. Over time, there will doubtless be other properties and places (courses?) where you'll get more deep dives into topics and example implementations (and we expect example implementations contributed by the community?), but for now, this is the place.

In general, there are five main areas of the docs

^ Here you'll find Quick Start tutorials and examples, along with deeper dive documentation on how to develop integrations with Frigg.

^ This is the main area where you'll find documentation around all Frigg concepts

^ Here's where we lay out how to get involved in contributing to the Frigg core project. And oh boy are we glad to have you!

^ Ah, the ever-expanding documentation section! At some point when we've reached critical mass (read: 1,000+ API Modules), "we're going to need a bigger boat". But for now, basic docs around any specific module live here.

^ Yup, we all need support sometimes. When it comes to Frigg-related support, you've got a few options. Hit us up in those places! Or in person. Novel concept these days.

^ This is probably both the most exciting and most daunting part of the whole enterprise. So much possibility! We're using an external tool for now, so we're just linking out to there and giving a high level short-medium-long term road map on which you can anchor your expectations. Or if you want to sponsor pieces of the roadmap, you can greatly change its shape.

A Note on Basic Architecture

A Frigg Application is predominantly a backend microservice, with an optional frontend. Most Frigg adopters already have an existing frontend UI built using a framework of their choice, or will bake integration UX into their product's core code. Frigg ships with a simple library of components to get you started quickly. See more details about frontend options here.

In the backend, Frigg is based on the serverless.com framework. This key piece of technology and the underlying compute/architecture under the hood provides a number of advantages:

  • Infrastructure-as-Code- The need to manually configure resources on the host provider is greatly reduced

  • Deployable to your favorite host- AWS, GCP, Azure, any a list of many more are available

  • Horizontal Scalability

  • Pay as you go

Contributing Developers

The frontend is a cookie cutter React application built with Create React App and Tailwind CSS and Tailwind UI. It leverages the Frigg React component library for the Integration Management page. This is the core piece to pay attention to for your own application. You can read more about Frontend options and concepts with

As you might have noticed, you use both a instance and a client side react app to access the Frigg API modules. The flow looks like this:

Make sure you have

Create a free hosted MongoDB cluster through OR locally

Frigg Explained to Partnership Leaders & Non-Technical People

The Frigg Integration Framework is a software development tool intended to help engineers build integrations faster.

While we all know that new "tech partnerships" unlock business opportunities, integration development is a complex, product-driven process performed by engineers and designers. Partnership leaders can't conjure new integrations into existence; product & engineering resources must be engaged and supported.

Given these dynamics, partnership leaders often seek external vendors and tools to get integrations built. This search brings them to Frigg and .

Before you introduce Frigg to your engineering colleagues, partnership leaders should understand Frigg at a non-technical level. Our is intended to provide this context and support your internal advocacy for Frigg.

Meanwhile, Frigg's documentation site is targeted at engineers and product leaders who will need to understand the framework as a development tool.

If you're ready to introduce Frigg to your technical colleagues, share this documentation site. Our is also instructive to both technical and non-technical audiences as well.

Have questions? Let's !

Frigg: What's in a name?
  • Frigg is Odin's wife in Norse mythology

  • Goddess of marriage and partnerships

  • She flies the earthly skies as a falcon

  • She is known in folklore as the “weaver of clouds”

The Frigg Integration Framework powers integrations between software companies, the majority of which are in the cloud, speeding up time to live on tech partnerships.

Read more about Frigg on .

See for details about getting started as a Frigg contributor.

Frigg here.
serverless
node and npm installed
MongoDB Atlas
install MongoDB

Next Steps

  • Deeper dive into What Makes an Integration

  • Reach out to Left Hook or the community for help!

  • Add your own API Module

  • Integrate Frigg into your existing stack

  • Customize the authentication

  • Add more complexity to your integration

  • Think in categories

Framework Development Guide

  • Local Development vs. Contributing

  • Local Development

    • Private API Modules

    • IntegrationManager (logic)

    • Events and workflows

    • Sync logic

    • UI customizations

  • Contributing

    • Publishing API Modules

    • Adding to Core

    • Bigger feature development

    • Suggestions

Left Hook
Non-Technical Overview Doc
live demo site
connect
Wikipedia
https://github.com/friggframework/frigg/blob/version-0/docs/broken-reference/README.md
https://github.com/friggframework/frigg/blob/version-0/docs/broken-reference/README.md
https://github.com/friggframework/frigg/blob/version-0/docs/broken-reference/README.md
https://github.com/friggframework/frigg/blob/version-0/docs/broken-reference/README.md
https://github.com/friggframework/frigg/blob/version-0/docs/broken-reference/README.md
https://github.com/friggframework/frigg/blob/version-0/docs/broken-reference/README.md
CONTRIBUTING.md

Introduction

  • Core is great, can't do anything without Modules

  • Effectively SDKs that talk to Frigg

  • Over time, more templated code and normalization and static definitions

Building your first integration

  • HubSpotIntegrationManager.js

  • getExample function, add

  • Go to HubSpot, sign up for a developer account

  • Create an Application

  • Navigate to Settings

  • OAuth

  • Copy Client ID and Secret into /config/dev.json under HUBSPOT_CLIENT_ID and HUBSPOT_CLIENT_SECRET respectively

  • Add http://localhost:3000/redirect/hubspot to the redirect URI

  • Navigate to backend, run npm start

  • Go to the dashboard and reload if you haven't yet. Tada! Your first integration

const contacts = await this.targetInstance.api.listContacts()
return contacts.results

Testing the Integration

  • Mocks

  • proxyquire

  • If you're using queues...

Installing an API Module

  • npm install @friggframework/api-module-hubspot in the backend

  • Default display override by adding to ConfigManager

  • Override or add helper functions by creating a HubSpotManager.js in /managers/entities

  • Copy over ExampleIntegrationManager.js and corresponding test file

  • Good to go!

Integration Development Guide

  • Scoping/understanding the integration use case

  • Integration Lifecycle Methods

    • Create

    • Get Config Options

    • Update

    • ReceiveNotification

    • Delete

  • Eventing

    • Webhooks

    • User interaction

    • Polling

      • Simple

      • Complex

    • Scheduled

  • Tying it all together

  • Versioning

  • Migrating users

  • Scaling

  • Long-running processes

  • Syncs

  • Extending UI options

  • Hybrid Integrations

Authentication

  • Frigg's backend needs to authenticate requests

  • Frigg also needs to identify the user

  • Frigg also needs to be authenticated to your API

Connecting to the Database

Frigg has a fairly straightforward data model

  • Currently we connect to a MongoDB cluster using Mongoose. Recommendation is MongoDB Atlas, fast and free to spin up a test cluster.

  • Follow instructions to create

  • Copy and paste yours to the config/dev.json file

Architecture

  • Backend

  • Frontend

  • Database

  • Eventing

    • Polling Triggers

    • Webhooks

    • Queues

    • Scheduled Tasks

    • User Interaction (API Route)

    • Other

  • Logging

  • Retry

  • Error Handling

API Reference

Postman Collection

Overview

Frigg comes out of the box with an Integration Management API

  • See flow

  • See postman collection/fork for your own

Create Frigg App

Use npx to use the latest generator code, and just pass it whatever you want to name your Frigg application.

Note on naming: we recommend thinking of your Frigg app as a microservice that powers integrations; naming it something like "my-app-integrations" is a good fit

npx create-frigg-app [my-app-integrations]
cd [my-app-integrations]

Congrats! You've just successfully scaffolded and installed your Frigg application.

Configuration

Frontend

You will have to set up your own config files for the frontend of your application with:

cd frontend
cp .env.example .env

Backend

Currently, configuration is managed in two places for the backend. You can see the backend configuration here: backend/src/configs/*.json but you will also need a .env file in /backend.

cd backend
cp .env.example .env

Start Your Application

Let's spin it up to explore more:

npm run start

Your browser should open to http://localhost:3000, and the backend should spin up an API route at http://localhost:3001/dev/api

API Module Development Guide

For any OAuth app, you'll need to create your own set of OAuth credentials to store in the ENVs of your Frigg deployment

Contributor Covenant Code of Conduct

Our Pledge

We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.

We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

Our Standards

Examples of behavior that contributes to a positive environment for our community include:

  • Demonstrating empathy and kindness toward other people

  • Being respectful of differing opinions, viewpoints, and experiences

  • Giving and gracefully accepting constructive feedback

  • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience

  • Focusing on what is best not just for us as individuals, but for the overall community

Examples of unacceptable behavior include:

  • The use of sexualized language or imagery, and sexual attention or advances of any kind

  • Trolling, insulting or derogatory comments, and personal or political attacks

  • Public or private harassment

  • Publishing others' private information, such as a physical or email address, without their explicit permission

  • Other conduct which could reasonably be considered inappropriate in a professional setting

Enforcement Responsibilities

Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

Scope

This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [INSERT CONTACT METHOD]. All complaints will be reviewed and investigated promptly and fairly.

All community leaders are obligated to respect the privacy and security of the reporter of any incident.

Enforcement Guidelines

Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

1. Correction

Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

2. Warning

Community Impact: A violation through a single incident or series of actions.

Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

3. Temporary Ban

Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

4. Permanent Ban

Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

Consequence: A permanent ban from any sort of public interaction within the community.

Attribution

This Code of Conduct is adapted from the , version 2.1, available at .

Community Impact Guidelines were inspired by .

For answers to common questions about this code of conduct, see the FAQ at . Translations are available at .

Contributor Covenant
https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
Mozilla's code of conduct enforcement ladder
https://www.contributor-covenant.org/faq
https://www.contributor-covenant.org/translations

PULL_REQUEST_TEMPLATE

Requirements

  • Filling out the template is required. Any pull request that does not include enough information to be reviewed in a timely manner may be closed at the maintainers' discretion.

  • All new code requires tests to ensure against regressions

Description of the Change

Alternate Designs

Benefits

Possible Drawbacks

Applicable Issues

Contact

We have three ways to interact with Frigg's creators and community:

  • Use the "Chat with Us" Widget in the lower-right-hand corner of this website

Message Board —

Slack Channel-

Github Discussions, the official Frigg message board
Invite yourself to the Frigg Community Slack Channel

Overview

API Modules are the Lego bricks that make Frigg-powered integrations develop faster. An API Module is the code that wraps your target partner's API and represents that API back to Frigg.

Frigg's library of API Modules is available for free. Translation: if your target partner's logo is in this library already, Frigg just saved your developers many hours of work, becuse these API Modules are plug n' play.

See the with categories and filtering.

full library

Building Your Own Module

Any time you want to use Frigg/have Frigg talk to your own App/API, you'll need your own API module.

See the section

API Module Development

Contributing

Node and Npm version

When you work on code in this repo, make sure you are using Node 14.x and Npm 7.20.2. Npm > 7 is needed to use npm workspaces, but there is a bug using workspaces in certain situations on Npm > 7.20.2. See here for more info: https://github.com/npm/cli/issues/3637

There are different ways to switch versions of Node/NPM, here is one:

  1. Make sure n is installed

  • The easiest way is npm install -g n.

  • You may prefer to install n with Homebrew: brew install n

  • More info: https://github.com/tj/n#installation

  1. Run npm run use:engine in the root directory. This is a shortcut for n install 14 && npm install -g npm@7.20.2. However, when you use npm run use:engine, the version numbers are automatically read from the root package.json's "engines" key.

Linking the Workspaces

The first time you set up the monorepo, run npm install in the root directory. This will automatically link up all the workspaces in the monorepo so that each is depending on the local copies.

Linking packages into other projects locally

In the case where you want to link a package from the monorepo into a package from another repo for local development, npm link is still needed. This is only needed when editing packages locally, that aren't all in the same monorepo. See here for more info: https://docs.npmjs.com/cli/v8/commands/npm-link#workspace-usage

If the monorepo is in a directory called frigg, and we want to use the local copy of the logs module in project B while we develop:

cd frigg
npm link --workspace=logs
cd ../project-b
npm link @friggframework/logs

Now, the local copy of the logs package is linked into project B's node_modules directory. Any local edits to the logs package will be immeidately available to your local copy of project B

Workspaces

https://docs.npmjs.com/cli/v7/using-npm/workspaces

To test all workspaces, you can run npm run test:all in the root directory. This will be useful for local development, but won't catch everything in CI (specifically missing npm modules in a package).

You can run a command in all workspaces like so: npm run lint:fix --workspaces

You can run a command in just one workspace, for example: npm test --workspace=logs

Creating a new workspace

To create a new workspace: npm init --workspace=new-package

A good rule of thumb is to name the package based on what it provides. This can help avoid a lot of "utils" packages. Obviously nothing wrong with "utils", "tools," or "helpers" packages per se, but it is often an indication the code can be organized more modularly.

Be sure each package has:

  • a README.md (which is displayed on npmjs.com).

  • a LICENSE.md file (make sure the attribution and date are correct)

  • a package.json file with repository, description, correct license, and other important fields filled in

Semver

When fixing a bug or making small tweaks use npm version patch When adding a feature that doesn't alter the public interface to existing features, use npm version minor When making a change that alters the public interface use npm version major.

Publishing

After merging or rebasing a branch into main:

git checkout main
npm test --workspace=logs
npm version patch --workspace=logs # or major or minor
git commit -am'chore: release' && git push
npm publish --workspace=logs --access public

Unpublishing

72 hours are given to unpublish a version without complications: https://docs.npmjs.com/policies/unpublish

cd logs
npm unpublish @friggframework/logs@0.0.1
cd ..

Getting Started

  • Copy template

  • Every Modules needs

    • API Class

    • Manager Class

    • standard config

    • Entity model

    • Credential model

Chat with Us

Frigg's creators (Left Hook) are sometimes available for a live chat to discuss Frigg. Look for the HelperBot in the lower right-hand corner and click to chat!

Frequently Asked Questions (FAQs)

Last Updated 9/6/2022

This FAQ page is divided into three sections: General, Technical/Product and Non-Technical questions.

General FAQs

What exactly is the Frigg Integration Framework?

Frigg is an open source software framework to help developers build and maintain direct/native integrations faster.

Frigg is free to use and available under the MIT license.

Frigg is an installable package that can be hosted/run on the cloud infrastructure provider of your choice.

Frigg is NOT SaaS or hosted software. While it compares favorably to iPaaS solutions (either embedded or stand-alone like Zapier), it is fundamentally different in its architecture and cost approach.

Can Frigg save us time in building/improving integrations?

Yes. Frigg provides developers with an opinionated, ready-to-use framework, as well as several API Modules representing +20 different target partner APIs. These assets with help a product team save many hours of decision-making and code development.

Frigg vs Left Hook?

Left Hook is software company that builds and maintains integrations for B2B SaaS companies.

Left Hook created the Frigg Integration Framework as a way to accelerate development for its clients.

Frigg is an open source software framework that is freely available without engaging with Left Hook or paying any licensing fee.

While Left Hook is currently Frigg's primary developer, eventually Frigg will be improved and expanded by its open source community members.

Technical/Product FAQS

Where/how can I download Frigg?
What stack does Frigg use?

Frigg is written in Node.js and relies on the Serverless.com framework, but is otherwise highly adaptable to your organization’s stack and CI/CD processes. Optional frontend components are written in React.JS, but Frigg's API-driven architecture allows it to be used by any front-end system.

Does Frigg work alongside my other integrations?

Absolutely. Frigg can power all of your direct/native integrations, or a subset of them.

Because Frigg's backend service is accessible via API, your frontend team can add a Frigg-powered integration into your existing directory/marketplace, and leverage your existing UI for user-managed authentication and configuration.

Do I need to use the Frigg frontend?

No. Frigg can be used with any frontend system via API.

How does Frigg work with (insert marketplace tool)?

Yes, if that tool can facilitate using APIs to authenticate and configure a user's integration.

Which cloud providers are supported?

AWS

Microsoft Azure

Google Cloud

Tencent Cloud

Cloudflare

Alibaba Cloud

twilio

Can I use Frigg alongside Zapier/Tray/Workato/Embeddable-iPaaS-X

How does Frigg handle logging?

Does Frigg support Database X?

Can Frigg sync with my existing user table?

Non-Technical FAQs

How much does Frigg cost?

Frigg is free, open source software under the MIT license. There is no fee to use it.

Who can help us implement Frigg?
How does Frigg accelerate Technical Partnerships?

But TLDR:

When two partnership leaders seek to build an integration to co-market and co-sell around, their companies often struggle to muster the product management and development resources required to get a useful integration built. And as we've seen a 100 times: no tech, no partnership!

With Frigg, the development process accelerates so that the business relationship can launch and flourish faster.

API Module Library

Each API Module has its own page in this documentation. Over time we'll add helpful notes about each module listed.

What SaaS companies are already using Frigg?

Frigg is powering +10 integrations (total) for these early adopters:\

  • monday.com

  • ActiveCampaign

  • Rollworks

  • Salesloft

  • Hubspot

  • Terminus

  • Outreach.io

  • Gorgias

  • Attentive

****

  • SalesForce

  • HubSpot


Who is behind Frigg?

Frigg was first created by . It is now used by several B2B SaaS companies to power more than 20 different direct/native integrations.

An open source community of contributors and supporters is now forming around the Frigg Framework project. Please !

Frigg is available both as an and on .

Frigg leverages (and requires) the , which means it can run on many different cloud services including:\

Note that Frigg's creators () sell professional services to help SaaS leaders implement Frigg, add features, and customize Frigg to your specific needs. Visit to connect and discuss your needs.

Frigg was created by developers at , who uses Frigg to build integrations for many SaaS leaders. Left Hook provides both consulting and contract development services to help SaaS leaders plan, execute, and maintain their Frigg-powered integrations. Contact for more information.

You should read our .

View and search for all our available API Modules in our. Thanks to our friends at for their directory tool.

Crossbeam
Clyde
FastSpring Interactive Quotes
Left Hook
join us
NPM package
Github
Serverless.com framework
Left Hook
Left Hook's website
Left Hook
Left Hook
Frigg Non-Technical Overview
interactive library
PartnerPage

Join Slack Channel

We have an active shared Slack channel where Frigg community members can ask questions or interact.

You can .

send yourself an invitation here

Overview

We've got a dedicated roadmap tool to help you track specifics, and to let you make suggestions. Wherever you're comfortable, since it's integrated to GitHub.

At a very high level, however, here's what we want to accomplish in the near, mid, and long terms:

Near Term Roadmap

This is in the next 3-6 months, heading into 2023.

  • Rapidly add more API Modules

  • Add unit tests to all core modules to harden them up for future iteration

  • Simplify the install process

  • Add more documentation

  • Add notes for deploying using popular services

Mid Term Roadmap

In the next 6-12 months, through 2023

  • Add support for major databases

    • Postgres

    • Redis

    • MySQL ?

    • DynamoDB

  • Add support for all major cloud providers

    • Google Cloud

    • Microsoft Azure

  • Add CLI for rapidly adding integrations

  • Add robust versioning system

  • Analytics and Management API and corresponding code

Long Term Roadmap

Sometime in the future, end state goal

  • Make Frigg easily deployable with docker/kubernetes if desired

  • Support multiple languages for runtime

  • Optimize the primitives so Frigg is the fastest possible service

Frigg Data Model
LogoFrigg Framework Feedback