A simple and easy to use client for the Notion API

Overview

Notion SDK for JavaScript

A simple and easy to use client for the Notion API


Build status npm version

Installation

npm install @notionhq/client

Usage

Before getting started, create an integration and find the token.

→ Learn more about authorization.

Import and initialize a client using an integration token or an OAuth access token.

const { Client } = require("@notionhq/client")

// Initializing a client
const notion = new Client({
  auth: process.env.NOTION_TOKEN,
})

Make a request to any Notion API endpoint.

See the complete list of endpoints in the API reference.

;(async () => {
  const listUsersResponse = await notion.users.list()
})()

Each method returns a Promise which resolves the response.

console.log(listUsersResponse)

// {
//   results: [
//     {
//       object: 'user',
//       id: 'd40e767c-d7af-4b18-a86d-55c61f1e39a4',
//       type: 'person',
//       person: {
//         email: '[email protected]',
//       },
//       name: 'Avocado Lovelace',
//       avatar_url: 'https://secure.notion-static.com/e6a352a8-8381-44d0-a1dc-9ed80e62b53d.jpg',
//     },
//     ...
//   ]
// }

Endpoint parameters are grouped into a single object. You don't need to remember which parameters go in the path, query, or body.

const myPage = await notion.databases.query({
  database_id: "897e5a76-ae52-4b48-9fdf-e71f5945d1af",
  filter: {
    property: "Landmark",
    text: {
      contains: "Bridge",
    },
  },
})

Handling errors

If the API returns an unsuccessful response, the returned Promise rejects with a APIResponseError.

The error contains properties from the response, and the most helpful is code. You can compare code to the values in the APIErrorCode object to avoid misspelling error codes.

const { Client, APIErrorCode } = require("@notionhq/client")

try {
  const myPage = await notion.databases.query({
    database_id: databaseId,
    filter: {
      property: "Landmark",
      text: {
        contains: "Bridge",
      },
    },
  })
} catch (error) {
  if (error.code === APIErrorCode.ObjectNotFound) {
    //
    // For example: handle by asking the user to select a different database
    //
  } else {
    // Other error handling code
    console.error(error)
  }
}

Logging

The client emits useful information to a logger. By default, it only emits warnings and errors.

If you're debugging an application, and would like the client to log response bodies, set the logLevel option to LogLevel.DEBUG.

const { Client, LogLevel } = require("@notionhq/client")

const notion = new Client({
  auth: process.env.NOTION_TOKEN,
  logLevel: LogLevel.DEBUG,
})

You may also set a custom logger to emit logs to a destination other than stdout. A custom logger is a function which is called with 3 parameters: logLevel, message, and extraInfo. The custom logger should not return a value.

Client options

The Client supports the following options on initialization. These options are all keys in the single constructor parameter.

Option Default value Type Description
auth undefined string Bearer token for authentication. If left undefined, the auth parameter should be set on each request.
logLevel LogLevel.WARN LogLevel Verbosity of logs the instance will produce. By default, logs are written to stdout.
timeoutMs 60_000 number Number of milliseconds to wait before emitting a RequestTimeoutError
baseUrl "https://api.notion.com" string The root URL for sending API requests. This can be changed to test with a mock server.
logger Log to console Logger A custom logging function. This function is only called when the client emits a log that is equal or greater severity than logLevel.
agent Default node agent http.Agent Used to control creation of TCP sockets. A common use is to proxy requests with https-proxy-agent

TypeScript

This package contains type definitions for all request parameters and responses.

Error classes, such as RequestTimeoutError and APIResponseError, contain type guards as static methods which can be useful for narrowing the type of a thrown error. TypeScript infers all thrown errors to be any or unknown. These type guards will allow you to handle errors with better type support.

try {
  const response = notion.databases.query({
    /* ... */
  })
} catch (error: unknown) {
  if (APIResponseError.isAPIResponseError(error)) {
    // error is now strongly typed to APIResponseError
    switch (error.code) {
      case APIErrorCode.ObjectNotFound:
        // ...
        break
      case APIErrorCode.Unauthorized:
        // ...
        break
      // ...
      default:
        // you could even take advantage of exhaustiveness checking
        assertNever(error.code)
    }
  }
}

Requirements

This package supports the following minimum versions:

  • Runtime: node >= 12
  • Type definitions (optional): typescript >= 4.2

Earlier versions may still work, but we encourage people building new applications to upgrade to the current stable.

Getting help

If you have a question about the library, or are having difficulty using it, chat with the community in GitHub Discussions.

If you're experiencing issues with the Notion API, such as a service interruption or a potential bug in the platform, reach out to Notion help.

Comments
  • Question about new typings

    Question about new typings

    I see that the individual block types have been removed and replaced with a large generic union on the responses of some queries.

    for example (have removed some properties for clarity):

    ListBlockChildrenResponse["results"] = Array<
               {
                  type: "paragraph";
                  ...stuff
                 } | { 
                  type: "heading_1";
                 ...stuff
    
    ... and so on
    

    So a Block I guess can now be represented by:

    export type Block = ListBlockChildrenResponse["results"][0]
    

    The same goes for the Database type

    export type Database = QueryDatabaseResponse["results"][0]
    

    But when I have a database that has properties on it like "Name" or "Slug", how do I correctly extend the properties type so that its possible to access it without TS complaining, before I could do something like:

    const name = (database.properties.Name as TitlePropertyValue).title[0].plain_text
    

    But now that the TitlePropertyValue type doesn't exist, not really sure to handle the custom properties?

    Any ideas?

    Thanks

    enhancement typescript 
    opened by JClackett 19
  • blocked by CORS policy

    blocked by CORS policy

    I am trying to talk to the notion api via a webpage, but it is getting blocked by the browser. I think this should be possible to fix on the server side by adding the "Access-Control-Allow-Origin: *" in the reply header.

    A current workaround for this is to run the browser with CORS check disabled.

    opened by JoarGjersund 15
  • Database query results are missing metadata from properties

    Database query results are missing metadata from properties

    Report bugs here only for the Node JavaScript library.

    If you're having problems using Notion's API, or have any other feedback about the API including feature requests for the JavaScript library, please email support at [email protected].

    Describe the bug Currently the SDK doesn't give much outside of an id in the property. Equivalent request in Postman, has detailed JSON with id, type and content.

    To Reproduce Node version: v16.14.2 Notion JS library version: v2.0.0

    Steps to reproduce the behavior:

    const { Client } = require("@notionhq/client");
    
    const notion = new Client({
      auth: process.env.NOTION_API_KEY
    });
    
    (async () => {
      const databaseId = process.env.NOTION_DATABASE_ID;
      const response = await notion.databases.query({
        database_id: databaseId,
        filter: {
          property: "Tags",
          multi_select: {
            contains: "italian",
          },
        },
      });
    
      console.log(response.results[0].properties);
      console.log(response.results[1].properties);
    
      process.exit();
    })();
    
    

    Expected behavior Content inside database item properties

    Screenshots image

    opened by Amber-Williams 12
  • Support Media Block Types

    Support Media Block Types

    • [x] Adds support for new block types (embed, image, video, file, pdf, bookmark)
    • [x] Adds support for listing urls when fetching file properties
    • [x] Adds support for updating file property values
    • [x] Adds support for retrieving, setting, and updating page/database icons
    • [x] Adds support for retrieving, setting, and updating page/database covers
    opened by rhart92 10
  • Can we export all types from the package?

    Can we export all types from the package?

    Title says it all. There are types like RichTextItemResponse and BlockObjectResponse that would be useful to have so we could create utils in our integrations that perform type checking

    typescript 
    opened by ohharsen 9
  • Error: Property 'properties' does not exist on type '{ object:

    Error: Property 'properties' does not exist on type '{ object: "page"; id: string; }' - v0.4.11

    Describe the bug When I upgrade from v0.4.9 to v0.4.11, I get type errors in my code that look like this

    Property 'properties' does not exist on type '{ object: "page"; id: string; }'
    

    Seems like the recent type updates in the api-endpoints.ts file has new types that look similar to the following that cause the error:

    {
        ...
            object: "page";
            id: string;
            created_time: string;
            last_edited_time: string;
            archived: boolean;
            url: string;
        } | {
            object: "page";
            id: string;
        }>;
    

    and

    {
        ...
    } | {
        object: "block";
        id: string;
    }
    

    To Reproduce Node version: v16.13.0 Notion JS library version: v0.4.11

    Steps to reproduce the behaviour: Try running a similar code snippet with v0.4.11 to make a notion query and parse some data and you will notice item.properties throws a ts(2339) error. So will item.icon.

    export async function getBookmarks() {
      const { results } = await notion.databases.query({
        database_id: process.env.NOTION_BOOKMARKS_DATABASE ?? "",
        filter: {
          property: "Status",
          select: {
            equals: "Published",
          },
        },
      });
      return results.map((item) => {
        const properties = item.properties;
        return {
          id: item.id,
          emoji: item?.icon?.type === "emoji" ? item.icon.emoji : "",
          createdAt:
            properties.Created.type === "created_time"
              ? properties.Created.created_time
              : "",
          name:
            properties.Name.type === "title"
              ? properties.Name.title[0].plain_text
              : "",
          type: properties.Type.type === "select" ? properties.Type.select : "",
          url: properties.URL.type === "url" ? properties.URL.url : "",
        } as Bookmark;
      });
    }
    

    Expected behaviour This wasn't the behaviour prior to the upgrade. v0.4.9 didn't throw these errors. These extra types seem redundant and don't look like they belong there. Why would you have a page or block type that only has an id and no other metadata (created_time, URL, etc)?

    Is this something that needs to be fixed? Is there a way to work around this?

    Screenshots image image

    opened by dharshatharan 9
  • Typing issue with 0.4.0

    Typing issue with 0.4.0

    Report bugs here only for the Node JavaScript library.

    If you're having problems using Notion's API, or have any other feedback about the API including feature requests for the JavaScript library, please email support at [email protected].

    Describe the bug A clear and concise description of what the bug is. Upon upgrading to 0.4.0, typings have gone crazy. api-types is now replaced by api-endpoints. The problem is the type for each Block is now gone. To Reproduce Node version: 14 Notion JS library version: 0.4.0

    Steps to reproduce the behavior:

    Expected behavior Typing for each Block type should be defined separately and exposed.

    Screenshots Like trying to get HeadingOneBlock out of this type union is a nightmare image

    image

    Additional context Add any other context about the problem here.

    opened by nartc 9
  • fix: update examples to use named methods

    fix: update examples to use named methods

    Description

    • [x] closes #14
    • [x] Update each example to use named methods rather than notion.request
      • [x] examples/github-issue-sync
      • [x] examples/database-update-send-email
      • [x] examples/generate-random-data (already implemented named methods)
    opened by chazkiker2 9
  • v2 SDK does not return page properties

    v2 SDK does not return page properties

    Report bugs here only for the Node JavaScript library.

    If you're having problems using Notion's API, or have any other feedback about the API including feature requests for the JavaScript library, please email support at [email protected].

    Describe the bug When I query a page using the v2.0.0 SDK and above, the responses do not include property values. Just an ID. There's no indication in the documentation that an extra step is required to fetch the page property values.

    I'm trying to paginate through a database, but each row contains no property values. It also happens retrieving a single page. I'll write a minimal example:

    To Reproduce Node version: 16.14.0 Notion JS library version: 1.0.4

    spec.js:

    const { Client } = require('@notionhq/client')
    
    const notion = new Client({ auth: process.env.NOTION_TOKEN })
    const page_id = process.env.NOTION_PAGE_ID
    
    notion.pages.retrieve({ page_id }).then((page) => {
      console.log(page.properties)
    })
    

    Result (SDK v1.0.4):

    {
      Case: { id: '%3BVfS', type: 'files', files: [] },
      Guitar: { id: '%3DkPp', type: 'files', files: [ [Object] ] },
      'Made In': { id: 'O%7BaE', type: 'rich_text', rich_text: [ [Object] ] },
      State: { id: 'PQJs', type: 'rich_text', rich_text: [] },
      Serial: { id: 'WuDR', type: 'rich_text', rich_text: [ [Object] ] },
      Tags: { id: 'ii%5E%7C', type: 'multi_select', multi_select: [ [Object] ] },
      Name: { id: 'title', type: 'title', title: [ [Object] ] }
    }
    

    Result (v2.0.0):

    {
      Case: { id: '%3BVfS' },
      Guitar: { id: '%3DkPp' },
      'Made In': { id: 'O%7BaE' },
      State: { id: 'PQJs' },
      Serial: { id: 'WuDR' },
      Tags: { id: 'ii%5E%7C' },
      Name: { id: 'title' }
    }
    

    Steps to reproduce the behavior: Run the above script and compare v1.0.4 to 2.0.0 output.

    Expected behavior The SDK should include Notion properties on simple queries.

    If this is intentional behaviour: The documentation should make this very obvious! How do I retrieve a full database in the v2 SDK?

    opened by tomjrees 8
  • Rework error types, remove got in favor of node-fetch

    Rework error types, remove got in favor of node-fetch

    What

    • Rework error types. This is a breaking change.
    • replace got with node-fetch, similar to whatwg-fetch.
    • Allow pluggable fetch function that supports the subset of fetch options compatible with node-fetch & browser fetch
    • use package.json version in user-agent header

    Why

    • Partially addresses #60, although does not provide a solution for security or CORS.
    • Because we no longer import big expensive dependencies, consumers will be able to subclass Client to override the request method to implement proxying requests via the server.

    Remarks

    • This adds some new code, but also removes some got-specific code of about the same length. The trade-off seems worth it.
    • I haven't tested this code yet, and unfortunately we don't have any tests for Client.prototype.request. Being able to inject our own fetch implementation should make writing tests easier
    • I plan to integration test the branch by integrating it into my project https://github.com/justjake/notrition in the coming days, but don't expect rapid movement here -- I'm doing this work as a hobbyist who wants isomorphic fetch, not as a Notion employee.
    opened by justjake 8
  • Improve typings related to partial object returns

    Improve typings related to partial object returns

    Describe the bug

    The QueryDatabaseResponse type as defined in api-endpoints.d.ts does not expose the properties field on the objects within the results array. The results array is typed as a large union which does not allow type discrimination to narrow the result type.

    To Reproduce Node version: 14 Notion JS library version: 1.0.4 Typescript version: 4.4.5

    This snippet will generate the type issue - this is intended for reproduction of the typing issue, and not as validly executable code.

    import { Client } from '@notionhq/client';
    
    const client = {} as Client;
    const data = await client.databases.query({ database_id: 'foo' });
    const resultObject = data.results[0];
    if (resultObject.object === 'page') { 
      resultObject.properties; // <-- a type error is generated here
    }
    

    TS error:

    TS2339: Property 'properties' does not exist on type '{ parent: { type: "database_id"; database_id: string; } | { type: "page_id"; page_id: string; } | { type: "workspace"; workspace: true; }; properties: Record<string, { type: "number"; number: number | null; id: string; } | ... 17 more ... | { ...; }>; ... 9 more ...; url: string; } | { ...; }'.   Property 'properties' does not exist on type '{ object: "page"; id: string; }'.
    

    Expected behavior

    I would expect optional properties that are available on the returned results objects to be typed as optional, or a field to be present which can be used to discriminate the union, and allow access to the properties field.

    Additional context

    The type is defined as such:

    export declare type QueryDatabaseResponse = {
        type: "page";
        page: EmptyObject;
        object: "list";
        next_cursor: string | null;
        has_more: boolean;
        results: Array<{
            parent: {
                type: "database_id";
                database_id: IdRequest;
            } | {
                type: "page_id";
                page_id: IdRequest;
            } | {
                type: "workspace";
                workspace: true;
            };
            properties: Record<string, { /** truncated here */}>;
            /** removed some properties here for brevity */
            object: "page";
            id: string;
            created_time: string;
            last_edited_time: string;
            archived: boolean;
            url: string;
        } | {
            object: "page";
            id: string;
        }>;
    };
    

    I believe that the last union is the issue - as it has the effect of removing all the previously declared types, and because object: "page"; is shared by both types in this union there is no property that can be used as a discriminator, in order to get access to the other fields.

    Two solutions that I see:

    1. add a type discriminator to the response
    2. modify this type such that fields that may be optional are defined as optional. For example:
    export declare type QueryDatabaseResponse = {
        type: "page";
        page: EmptyObject;
        object: "list";
        next_cursor: string | null;
        has_more: boolean;
        results: Array<{
            object: "page";
            id: string;
            parent?: {
                type: "database_id";
                database_id: IdRequest;
            } | {
                type: "page_id";
                page_id: IdRequest;
            } | {
                type: "workspace";
                workspace: true;
            };
            properties?: Record<string, { /** truncated here */}>;
            /** removed some properties here for brevity */
            created_time?: string;
            last_edited_time?: string;
            archived?: boolean;
            url?: string;
        }>;
    };
        
    

    I think 2 is simpler as it does not require any changes to the underlying api - whereas 1 may require an extra field be returned to allow type discrimination.

    typescript 
    opened by e-e-e 7
  • Adding to examples: Sync issues from a GitHub project with a Notion database

    Adding to examples: Sync issues from a GitHub project with a Notion database

    This example can be used as a start point for anyone interested on syncing GitHub Projects (not-classic) with Notion. It's necessary to access GitHub GraphQL API for that.

    I hope someone continues this work and creates a Notion plugin for that purpose.

    opened by pedralho 1
  • Not working with Next.js 13 on Vercel

    Not working with Next.js 13 on Vercel

    Attempting to deploy a Next.js 13 project that uses the Notion client is failing when deploying to Vercel. It works locally.

    Error: Deployment Overview – Dashboard – Vercel-Wednesday-November-23-2022-03 10 27PM@2x

    I think Next.js 13 overrides the native fetch, so maybe that's related to the issue?

    To Reproduce Node version: Tested 16.x and 18.x Notion JS library version: 2.2.2

    opened by jamesvclements 1
  • Ignore VS Code settings directory

    Ignore VS Code settings directory

    Seems the .vscode directory can be ignored. We already have .cspell.json in our project and they support .cspell.json as the configuration file in VS Code:

    See https://github.com/streetsidesoftware/vscode-spell-checker/blob/add7ae9b37b7d02eadfbd2788ab0b0d6699e09d6/packages/client/src/settings/CSpellSettings.ts#L11-L13.

    On the other hand, ignoring the .vscode directory can let developers put their editor settings. They can decide to enable or disable specific extension settings for specific projects.

    Currently, we don't have other editor settings like .vscode/launch.json, .vscode/tasks.json, etc. So it's OK to ignore the whole directory.

    We could change the rule if we need to put some other project-level configuration files in the .vscode directory in the future.

    opened by LitoMore 1
  • Notion number formulas always return 0 in queries response

    Notion number formulas always return 0 in queries response

    Report bugs here only for the Node JavaScript library.

    If you're having problems using Notion's API, or have any other feedback about the API including feature requests for the JavaScript library, please email support at [email protected].

    Describe the bug A clear and concise description of what the bug is.

    To Reproduce Node version: 16 Notion JS library version: 2.2.1

    Steps to reproduce the behavior:

    Notion number formulas always return 0 in queries:

    1. Create a database (monthly summary)
    2. Create database (expenses)
    3. Create relation between both database (monthly expenses)
    4. create rollup of type sum on monthly summary database to sum all linked expenses amounts
    5. create formula field on monthly summary database that calculate (income - expenses)

    Expected behavior A clear and concise description of what you expected to happen. Notion JS SDK returns the calculated values by the formula

    Screenshots Please include any screenshots that help explain your problem.

    Additional context Add any other context about the problem here. I double checked that I added the integration to both databases

    opened by rimonhanna 2
  • TypeScript generated types upgrades

    TypeScript generated types upgrades

    Report bugs here only for the Node JavaScript library.

    If you're having problems using Notion's API, or have any other feedback about the API including feature requests for the JavaScript library, please email support at [email protected].

    Describe the bug When using the autogenerated types, i'm seeing a few issues. there appears to be a lot of inconsistency inbetween types, and they frequently do stuff like:

    type?: "file"
    

    which is saying "if the following string happens to be null it's ok" but then declaring it voids that ?.

    To that end, I wanted to present a slightly more approachable set of types. I'm looking to leverage enums, inheritance, and all the good stuff from latest TS

    To Reproduce Node version: any Notion JS library version: any

    Steps to reproduce the behavior:

    Expected behavior meaningful and traceable types to help me debug

    Screenshots with current wacky types i'm doing stuff like reexporting, but because of the type build, the TS language server doesn't understand the innerconnects so you get types like this

    Screen Shot 2022-10-14 at 06 53 53

    which leads to comical issues like this:

    Screen Shot 2022-10-14 at 06 55 38

    literally saying the types aren't compatible for a derived block request and a block request (which isn't currently exported)

    Additional context to help illustrate, here is the api endpoints rewritten to have an ImageUploadRequest Type. this also allows you to access an object via the key as a string and it works!

    for a quick example:

    const someImgRequestFile: ImageReq<FileReq> = {
        type: AllTypesOfPayload.image,
        image: {
            type: AllTypesOfPayload.file,
            external: {
                url: ""
            },
            caption: ['']
        }
    }
    

    throws the type error"

    Type '{ type: AllTypesOfPayload.file; external: { url: string; }; caption: string[]; }' is not assignable to type 'FileReq'.
      Object literal may only specify known properties, and 'external' does not exist in type 'FileReq'.ts(2322)
    

    which actually allows someone to debug the missing bit! no extraneous info, just the core issue.

    /**
     * Utilities for working with typescript types
     */
    /**
     * Assert U is assignable to T.
     */
    export type Assert<T, U extends T> = U
    
    enum AllTypesOfPayload {
        person = "person",
        bot = "bot",
        user = "user",
        string = "string",
        boolean = "boolean",
        text = "text",
        template_mention_date = "template_mention_date",
        template_mention_user = "template_mention_user",
        mention = "mention",
        template_mention = "template_mention",
        equation = "equation",
        emoji = "emoji",
        single_property = "single_property",
        dual_property = "dual_property",
        paragraph = "paragraph",
        heading_1 = "heading_1",
        heading_2 = "heading_2",
        heading_3 = "heading_3",
        bulleted_list_item = "bulleted_list_item",
        numbered_list_item = "numbered_list_item",
        quote = "quote",
        to_do = "to_do",
        toggle = "toggle",
        template = "template",
        synced_block = "synced_block",
        child_page = "child_page",
        child_database = "child_database",
        code = "code",
        callout = "callout",
        divider = "divider",
        breadcrumb = "breadcrumb",
        table_of_contents = "table_of_contents",
        column_list = "column_list",
        column = "column",
        link_to_page = "link_to_page",
        comment_id = "comment_id",
        table = "table",
        table_row = "table_row",
        embed = "embed",
        bookmark = "bookmark",
        image = "image",
        video = "video",
        pdf = "pdf",
        audio = "audio",
        external = "external",
        file = "file",
        link_preview = "link_preview",
        url = "url",
        select = "select",
        multi_select = "multi_select",
        status = "status",
        email = "email",
        phone_number = "phone_number",
        checkbox = "checkbox",
        files = "files",
        created_by = "created_by",
        created_time = "created_time",
        last_edited_by = "last_edited_by",
        last_edited_time = "last_edited_time",
        formula = "formula",
        page_id = "page_id",
        block_id = "block_id",
        property_item = "property_item",
        title = "title",
        rich_text = "rich_text",
        people = "people",
        relation = "relation",
        rollup = "rollup",
        number = "number",
        date = "date",
        array = "array",
        unsupported = "unsupported",
        incomplete = "incomplete",
        workspace = "workspace",
        block = "block",
        page = "page",
        database = "database",
        page_or_database = "page_or_database",
        comment = "comment",
    }
    
    type IsomorphicRequest<TypeOfCall extends AllTypesOfPayload, Payload> = Record<TypeOfCall, Payload> & {
        type: TypeOfCall
    }
    
    type Caption = { caption: string[] }
    
    type ExternalReq = IsomorphicRequest<AllTypesOfPayload.external, { url: string }> & Caption
    
    type FileReq = IsomorphicRequest<AllTypesOfPayload.file, { url: string, expiry_time: string }>
    
    type ImageReq<T extends ExternalReq | FileReq> = IsomorphicRequest<AllTypesOfPayload.image, T>
    
    const someImgRequestExt: ImageReq<ExternalReq> = {
        type: AllTypesOfPayload.image,
        image: {
            type: AllTypesOfPayload.external,
            external: {
                url: ""
            },
            caption: ['']
        }
    }
    
    const someImgRequestFile: ImageReq<FileReq> = {
        type: AllTypesOfPayload.image,
        image: {
            type: AllTypesOfPayload.file,
            external: {
                url: ""
            },
            caption: ['']
        }
    }
    
    opened by hweeks 2
Releases(v2.2.3)
Owner
Notion
"We shape our tools, thereafter our tools shape us"
Notion
Lightweight cross-platform desktop client for Homebridge 😁

Homebridge Desktop Lightweight cross-platform desktop client for Homebridge ?? Just a simple client that works on all OS to display your homebridge da

Louis t.b 10 Aug 18, 2022
A Discord bot Client Console Website

Discord Bot Client Console A Discord bot Client Console Website made with html , css and js. And Easy Use and easy to run Setup ⚒ Import the Repo by t

Msv 13 Jan 6, 2023
discord.js is a powerful Node.js module that allows you to easily interact with the Discord API.

A powerful JavaScript library for interacting with the Discord API

Discord.js 21.6k Jan 5, 2023
Fun little experiment with Twitter API

Real-time Twitter Header This is a fun little experiment with Twitter API. See my tweet! How to setup for your Twitter Just fill in your information i

Tony Dinh 104 Nov 4, 2022
A simple Discord empty bot.

Discord Level Bot Kurulum İlk olarak bilgisayarına Node JS indir. Daha sonra bir MongoDB hesabı oluştur ve connection linki al. Eğer bunu yapmayı bilm

Theark 21 Jun 8, 2022
A simple Discord chat guard bot.

Discord Chat Guard Bot Kurulum İlk olarak bilgisayarına Node JS indir. Daha sonra bir MongoDB hesabı oluştur ve connection linki al. Eğer bunu yapmayı

Theark 38 Sep 17, 2022
Spotify SDK | Entity and Collection oriented | Browser and Node support!

Spotify SDK Unofficial SDK recommended for Spotify in his developer center Entity oriented SDK to work with the Spotify Web API. Entity oriented? What

Joel Lovera 226 Jan 2, 2023
JavaScript SDK Design Guide extracted from work and personal experience

JavaScript SDK Design Guide Introduction This guide provides an introduction to develop a JavaScript SDK. The best one sentence to describe an SDK is:

Huei Tan 1.3k Dec 30, 2022
This Binance trading bot detects the most volatile cryptos to buy and later sell at predefined Take Profit / Stop Loss thresholds.

Binance-volatility-trading-bot-JS I take the idea from this project. The original bot is written in Python. I quite like it so I re-write it in Java S

null 33 Aug 15, 2022
⚡️The Fullstack React Framework — built on Next.js

The Fullstack React Framework "Zero-API" Data Layer — Built on Next.js — Inspired by Ruby on Rails Read the Documentation “Zero-API” data layer lets y

⚡️Blitz 12.5k Jan 4, 2023
Notion 3.4k Dec 30, 2022
Grupprojekt för kurserna 'Javascript med Ramverk' och 'Agil Utveckling'

JavaScript-med-Ramverk-Laboration-3 Grupprojektet för kurserna Javascript med Ramverk och Agil Utveckling. Utvecklingsguide För information om hur utv

Svante Jonsson IT-Högskolan 3 May 18, 2022
Hemsida för personer i Sverige som kan och vill erbjuda boende till människor på flykt

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: np

null 4 May 3, 2022
Kurs-repo för kursen Webbserver och Databaser

Webbserver och databaser This repository is meant for CME students to access exercises and codealongs that happen throughout the course. I hope you wi

null 14 Jan 3, 2023
Unofficial API client for the Tidbyt API. Use this client to control Tidbyt devices and integrate with other services.

Tidbyt Client for Node.js Unofficial API client for the Tidbyt API. Use this client to control Tidbyt devices and integrate with other services. Insta

Nicholas Penree 19 Dec 17, 2022
There can be more than Notion and Miro. Affine is a next-gen knowledge base that brings planning, sorting and creating all together. Privacy first, open-source, customizable and ready to use.

AFFiNE.PRO The Next-Gen Knowledge Base to Replace Notion & Miro. Planning, Sorting and Creating all Together. Open-source, Privacy-First, and Free to

Toeverything 12.1k Jan 9, 2023
Lavalink client with lots of extra functionality, easy to use and well optimized.

?? nSysLava Lavalink client with lots of extra functionality, easy to use and well optimized! พัฒนาโดยคนไทย ?? Many utility functions - มีฟังก์ชันอรรถ

nicenathapong 3 Apr 12, 2022
Email capture page using Notion API

Notion Capture This starter shows how to use the new Notion API with Next.js. You can capture emails that will populate a Notion database. Live Demo •

Bilal 61 Dec 25, 2022
Gatsby plugin for Notion API

Gatsby Source Plugin Notion API Gatsby source plugin for working with official Notion API. Here's a Postman collection to play around with the API if

Sergei Orlov ||↓ 55 Nov 29, 2022
⚡ Self-hostable branded link shortener built with Next.js & Notion API

Notiolink ⚡ Self-hostable branded link shortener built with Next.js & Notion API Made by Theodorus Clarence Installation Guide Please read the full gu

Theodorus Clarence 144 Dec 27, 2022