GithubHelp home page GithubHelp logo

pocketbase / pocketbase Goto Github PK

View Code? Open in Web Editor NEW
33.1K 193.0 1.5K 60.67 MB

Open Source realtime backend in 1 file

Home Page: https://pocketbase.io

License: MIT License

Go 65.68% HTML 0.10% Svelte 19.27% JavaScript 3.11% SCSS 7.64% Makefile 0.01% CSS 4.19%
authentication backend realtime golang

pocketbase's Introduction

PocketBase - open source backend in 1 file

build Latest releases Go package documentation

PocketBase is an open source Go backend, consisting of:

  • embedded database (SQLite) with realtime subscriptions
  • built-in files and users management
  • convenient Admin dashboard UI
  • and simple REST-ish API

For documentation and examples, please visit https://pocketbase.io/docs.

Warning

Please keep in mind that PocketBase is still under active development and therefore full backward compatibility is not guaranteed before reaching v1.0.0.

API SDK clients

The easiest way to interact with the API is to use one of the official SDK clients:

Overview

Use as standalone app

You could download the prebuilt executable for your platform from the Releases page. Once downloaded, extract the archive and run ./pocketbase serve in the extracted directory.

The prebuilt executables are based on the examples/base/main.go file and comes with the JS VM plugin enabled by default which allows to extend PocketBase with JavaScript (for more details please refer to Extend with JavaScript).

Use as a Go framework/toolkit

PocketBase is distributed as a regular Go library package which allows you to build your own custom app specific business logic and still have a single portable executable at the end.

Here is a minimal example:

  1. Install Go 1.21+ (if you haven't already)

  2. Create a new project directory with the following main.go file inside it:

    package main
    
    import (
        "log"
        "net/http"
    
        "github.com/labstack/echo/v5"
        "github.com/pocketbase/pocketbase"
        "github.com/pocketbase/pocketbase/apis"
        "github.com/pocketbase/pocketbase/core"
    )
    
    func main() {
        app := pocketbase.New()
    
        app.OnBeforeServe().Add(func(e *core.ServeEvent) error {
            // add new "GET /hello" route to the app router (echo)
            e.Router.AddRoute(echo.Route{
                Method: http.MethodGet,
                Path:   "/hello",
                Handler: func(c echo.Context) error {
                    return c.String(200, "Hello world!")
                },
                Middlewares: []echo.MiddlewareFunc{
                    apis.ActivityLogger(app),
                },
            })
    
            return nil
        })
    
        if err := app.Start(); err != nil {
            log.Fatal(err)
        }
    }
  3. To init the dependencies, run go mod init myapp && go mod tidy.

  4. To start the application, run go run main.go serve.

  5. To build a statically linked executable, you can run CGO_ENABLED=0 go build and then start the created executable with ./myapp serve.

Note

PocketBase embeds SQLite, but doesn't require CGO.

If CGO is enabled (aka. CGO_ENABLED=1), it will use mattn/go-sqlite3 driver, otherwise - modernc.org/sqlite. Enable CGO only if you really need to squeeze the read/write query performance at the expense of complicating cross compilation.

For more details please refer to Extend with Go.

Building and running the repo main.go example

To build the minimal standalone executable, like the prebuilt ones in the releases page, you can simply run go build inside the examples/base directory:

  1. Install Go 1.21+ (if you haven't already)
  2. Clone/download the repo
  3. Navigate to examples/base
  4. Run GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build (https://go.dev/doc/install/source#environment)
  5. Start the created executable by running ./base serve.

Note that the supported build targets by the pure Go SQLite driver at the moment are:

darwin  amd64
darwin  arm64
freebsd amd64
freebsd arm64
linux   386
linux   amd64
linux   arm
linux   arm64
linux   ppc64le
linux   riscv64
linux   s390x
windows amd64
windows arm64

Testing

PocketBase comes with mixed bag of unit and integration tests. To run them, use the standard go test command:

go test ./...

Check also the Testing guide to learn how to write your own custom application tests.

Security

If you discover a security vulnerability within PocketBase, please send an e-mail to support at pocketbase.io.

All reports will be promptly addressed, and you'll be credited accordingly.

Contributing

PocketBase is free and open source project licensed under the MIT License. You are free to do whatever you want with it, even offering it as a paid service.

You could help continuing its development by:

PRs for new OAuth2 providers, bug fixes, code optimizations and documentation improvements are more than welcome.

But please refrain creating PRs for new features without previously discussing the implementation details. PocketBase has a roadmap and I try to work on issues in specific order and such PRs often come in out of nowhere and skew all initial planning with tedious back-and-forth communication.

Don't get upset if I close your PR, even if it is well executed and tested. This doesn't mean that it will never be merged. Later we can always refer to it and/or take pieces of your implementation when the time comes to work on the issue (don't worry you'll be credited in the release notes).

pocketbase's People

Contributors

a10d avatar avarabyeu avatar brams-dev avatar clysto avatar dschissler avatar ganigeorgiev avatar ghostdevv avatar gungjodi avatar hungcrush avatar janlauber avatar joymajumdar2001 avatar karniv00l avatar kennethklee avatar khairulhaaziq avatar kunalsin9h avatar marvinjwendt avatar muellercornelius avatar mvremmerden avatar noxware avatar nrthbound avatar nzhenev avatar ollema avatar rhnvrm avatar satotake avatar simonkrauter avatar simonloir avatar svekko avatar valleyzw avatar xfrann avatar yuxiang-gao avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pocketbase's Issues

Error: TLS handshake error : acme/autocert: missing server name

While serving Pocketbase with https flag, getting error "TLS handshake error : acme/autocert: missing server name"

To reproduce:

Ubuntu 22.04
wget https://github.com/pocketbase/pocketbase/releases/download/v0.2.4/pocketbase_0.2.4_linux_amd64.zip
unzip
./pocketbase serve --http="IP_Address:80" --https="IP_Address:443"

Any pointers on how to fix this?

webauthn and passkeys support

Regarding auth you can ad passkeys / webauthn maybe. This allows passwordless logins.

Basically passkeys means you don't need a FIDO hardware devices. Instead your computer is the FIDO device. Its webauthn under the hood.

passkeys will go live in ios 16, ipad 16, mac (whatever next version is): https://9to5mac.com/2022/06/07/passkeys-passwordless-sign-in-ios-16/

And in brwosers: https://gizmodo.com/google-microsoft-and-apple-tout-passwordless-authenti-1848886161

android: https://9to5google.com/2022/05/05/google-android-chrome-passkeys/

Hanko is a golang implementation of the passkeys / webauthn

https://github.com/teamhanko

I was meaning to play around with hanko to add js and golang clients, but never got time.

Responsive Dashboard

The dashboard is currently not responsive which makes working with it a pain on phones. It would be great to have it adapt to the device.

Consider automatically setting the app's version to the release version.

The version of the current app is set manually as a const. The release version is 0.2.2 while the app version is 0.1.0.

Wouldn't it be easier to set the version to the release version?

pocketbase.go

- // Version of PocketBase
- const Version = "0.1.0"

+ // version of PocketBase
+ var version = "unknown"
.goreleaser.yaml

+    ldflags:
+      - -s -w -X pocketbase.version={{.Version}}

Can Go be used as a client?

Very interesting project.

As there are some projects built in Go using HTML Templates and other frameworks and a UI (Fyne as well as others) will there be a client API or if this is already able to be used as a client in Go then documentation like you have for JS?

Feature request: an option to fit, not crop images for thumbnails

Currently, when generating thumbnails with aspect ratio that doesn't match source files, images are cropped. So for example, resizing USA flag to square image will loose some of stars in top-left corner.

What I would like to suggest is an option to "fit" instead of "crop" - so if you resize a 1000x500 image to fit into 100x100 frame - it gets resized to 100x50.

Reason is that I'd like to make a simple "gallery" app where user(s) can upload images from camera (~ 12 megapixel) which then are downscaled to several resolutions to be presented on screen. I wonder if it's possible to do all image resizing in pocketbase. Naturally, cropping user-uploaded image is undesirable in this case. :)

API-wise, maybe it's possible to do this via adding an extra letter at the end of the "thumb" query parameter. So ?thumb=100x100 will crop image, as now, and ?thumb=100x100f (note extra f at the end) will fit.

Simplify the OAuth2 authentication flow

PocketBase uses the OAuth2 PKCE flow but due the stateless nature of the application and the requirement to support multiple platforms (web, android, ios, etc.) in a similar manner, the current implementation is a little verbose and some users have reported to find it cumbersome to implement in their app (see existing Auth via OAuth2 guide).

Further more, the current approach has one more drawback - it will not work out of the box with platforms that may not support redirect urls or deep links (eg. AdobeXD and Figma plugins; check similar issue in Presentator #178)

The best solution that I can think of at the moment would be to start a persistent connection (eg. SSE) with the client and handle everything in a single call without even reload to be necessary, eg. for web platforms using the JS SDK it could look like this:

client.Users.authViaOAuth2(
  "google",
  function (googleLoginUrl) {
    // open in a popup window or a new tab
    window.open(googleLoginUrl, "_blank");
  },
  function (authData) {
    // success callback...
  }
)

Feedback and suggestions for other approaches are welcomed.

This currently is a low priority, but we'll have to decide on the implementation before v1.0.0 to avoid introducing breaking changes.

Make the SSE usage language agnostic

Instead of making SDKs for one or two languages, is it possible for this to be fully usable in a language agnostic way? REST is already it, but is the SSE functionality also language agnostic? Currently SSE usage seems specific to Go for authentication and subscriptions.

Feature request: check settings

When changing some settings (SMTP server, S3 storage, maybe auth providers), it might be useful to have an option to check and verify that new settings work (that you can connect to server, password is correct, s3 bucket exists and lets you create / download files), preferably as verbose as possible when something goes wrong - so user could easily figure out what went wrong.

I'm currently trying to setup minio to be used with pocketbase without much luck :)

[FeatureReq] Simple username/pass login without e-mail

It'd be amazing if there was an auth method for username/password login for internal projects, without the need for an email address.
No registration process as user accounts would be created by an in-organization administrator.

Great project, keep up the good work!

Example to create a user doesn't qualify to default setting for min password length

First, great project!

Second, do you prefer us to post found typos / suggested corrections as separate issues, or as comments under one, or?

Third, my latest find:

"Create user" API call on https://pocketbase.io/docs/api-users/ has example creating user with password "123456". But default settings (in http://localhost:8090/_/#/settings/auth-providers - Email/Password) seem to specify Minimum password length of 8. In which case, the example API call fails with return code 400 :)

Not sure if it's by design or not.

data in "before create" hooks is empty

While playing around with using PocketBase as a framework, I noticed that the User in the OnUserBeforeCreateRequest hook is empty. Let's take the following hook as an example:

	app.OnUserBeforeCreateRequest().Add(func(event *core.UserCreateEvent) error {
		encoder := json.NewEncoder(os.Stdout)
		encoder.SetIndent("", "  ")

		return encoder.Encode(event.User)
	})

When I create a user, I get the following output:

image

All fields appear to be empty. By stepping through the "user create" endpoint with a debugger, I observed this:

  1. The request body is parsed correctly in the form, but
  2. Those fields aren't set in the user object yet

image

Reading through the code, I confirmed that the user struct's fields don't get touched until Submit() is called on the form: here.

And since Submit() isn't called until the OnUserBeforeCreateRequest hooks have finished executing, the hooks don't get access to the user that's about to be created.

This definitely doesn't sound like expected behavior (otherwise that hook would be very useless indeed). Without really knowing how this project is structured, it seems like the field setting portion of Submit() should happen earlier somewhere.

This appears to be the case with other "before create" hooks. I also tried the "OnRecordBeforeCreateRequest" hook, but the record in there has no data whatsoever either, besides the "@collectionId" and "@collectionName" fields. Calling .Data() on it doesn't help much either, a blank map is returned.

Clearer documentation on using as a framework

When running the default app provided here with go build && ./app, instead of starting a server it gives the following printout for the pocketbase CLI, a CLI I can't find documentation on installing. Just curious if I'm missing something here, running from the downloadable executable works fine, but can't seem to use it as a framework.

PocketBase CLI

Usage:
  pocketbase [command]

Available Commands:
  help        Help about any command
  migrate     Executes DB migration scripts
  serve       Starts the web server (default to localhost:8090)
  version     Prints the current PocketBase app version

Flags:
      --debug                  enable debug mode, aka. showing more detailed logs
      --dir string             the PocketBase data directory (default "pb_data")
      --encryptionEnv string   the env variable whose value of 32 chars will be used 
                               as encryption key for the app settings (default none)
  -h, --help                   help for pocketbase

Use "pocketbase [command] --help" for more information about a command.

Events / Triggers

I'd like to help make events (or at minimum sql triggers) a thing for pocketbase. Being able to fire off in process/async tasks based on data changes would be a really nice application to get this closer to a low code solution. I understand that you can write your own Go code and build a single file binary, but what I'm talking about is more dynamic in nature. It could open up some interesting applications for admins to define 3rd party calls, web hooks, and be the building block for advanced functionality. I have no Go experience, so I'd like someone who is more familiar with the internals of the VM to help me understand what the limitations would be.

I have a question that may be incredibly novice, but hopefully is helpful for other beginners looking at pocketbase.

  • Could Javascript or Go be written in admin, serialized into the db, and executed at runtime? Something to the tune of https://github.com/svaarala/duktape. What executing admin written Go/etc would open up is the ability to write cloud lambdas that are arbitrarily complex for long running processes. I also appreciate that this may overcomplicate the project.

Can't download / load images after uploading them

I can't download / load images after uploading them

const img = new Image();
img.src = `/api/files/${item['@collectionId']}/${item.id}/${item.avatar}`;
document.body.appendChild(img);
//returns net::ERR_CONTENT_LENGTH_MISMATCH 400 (Bad Request)

when trying to download through the admin panel it also fails with the error "Couldn't download - something went wrong"
though the file does exist and I can open it in pb_data/storage

tried in both Edge and Firefox on windows 10 (all up to date)
no adblockers running

How should I proceed?

Thanks,
Harrison

Add gps/location field type

Add new field type allowing to set GPS coordinates (or location address).

Leaflet map with drag&drop pin(s) could be used in the admin UI.

Ideally the field should have a configuration for supporting single or multiple values (and eventually support for a simple distance/proximity queries).

Changing file storage settings should warn user in case of existing files

If you change storage settings (http://localhost:8090/_/#/settings/storage), already uploaded files become unavailable. I think it's unreasonable to attempt to copy all files to a new place, and generally this scenario is kinda unsupported - you're expected to set your storage settings before uploading files - but I believe that showing a big scary warning might be a good thing - like when you do some schema changes, UI reminds you that some linked changes might have to be changed elsewhere.

Admin panel is not opening on Windows

While trying to open Admin panel at http://localhost:8090/_/ on Windows 11 I'm getting blank page and the following error in a browser console:

index.944ee0db.js:1 
        
Failed to load module script: Expected a JavaScript module script but the server responded with a MIME type of "text/plain". Strict MIME type checking is enforced for module scripts per HTML spec.

Browser: Microsoft Edge 103.0.1264.49

Add official dockerhub image

Just create a official dockerhub account and publish this amazing project.

FROM alpine:3.6
ARG POCKETBASE_VERSION=0.1.2

# Install the dependencies
RUN apk add --no-cache \
    ca-certificates \
    unzip \
    wget \
    zip \
    zlib-dev

# Download Pocketbase and install it for AMD64
ADD https://github.com/pocketbase/pocketbase/releases/download/v${POCKETBASE_VERSION}/pocketbase_${POCKETBASE_VERSION}_linux_amd64.zip /tmp/pocketbase.zip
RUN unzip /tmp/pocketbase.zip -d /usr/local/bin/
RUN chmod +x /usr/local/bin/pocketbase

# Notify Docker that the container wants to expose a port.
EXPOSE 8090

# Start Pocketbase
CMD [ "/usr/local/bin/pocketbase", "serve" ]

This is an example made for bscott / pocketbase-docker credits to him.

Internationalization Support

I didn't find a way to switch languages on the official website, documentation, dashboard, etc. Maybe one would be nice? Great projects need international support!

Form handling documentation typo

This project looks very cool, thank you for sharing!

While reviewing the documentation, I found a typo in the code for the Basics - Files upload and handling example:

import PocketBase from 'pocketbase';

const client = new PocketBase('http://localhost:8090');

const data = new FormData();

const fileInput = document.getElementById("fileInput");

// listen to file input changes and add the selected files to the form data
fileInput.addEventListener("change", function () {
    for (let file of fileInput.files) {
        formData.append("documents", file);
    }
});

// set some other regular text field value
formData.append("title", "Lorem ipsum dolor sit amet");

...

// create the record
const createdRecord = await client.Records.create("demo", data);

The FormData instance is declared as data, but formData is used when appending.

Suggested edit:

import PocketBase from 'pocketbase';

const client = new PocketBase('http://localhost:8090');

const formData = new FormData();

const fileInput = document.getElementById("fileInput");

// listen to file input changes and add the selected files to the form data
fileInput.addEventListener("change", function () {
    for (let file of fileInput.files) {
        formData.append("documents", file);
    }
});

// set some other regular text field value
formData.append("title", "Lorem ipsum dolor sit amet");

...

// create the record
const createdRecord = await client.Records.create("demo", formData);

pocketbase don't serve

when i run ./pocketbase serve, the server goes on
but then when i try to go to http://localhost:8090/_/, it shows nothing
a few seconds later the server fall

the only message i get is this:
image

pocketbase version: 0.2.4
windows version: Windows 10 Pro 21H2 19044.1766

Reasons for doing, guidance on choosing it over the alternatives

Hi PocketBase community!

It would be helpful to document why this Firebase alternative exists, over the others like Supabase or AppWrite, for example.

While it might be premature to offer a complete material, at least it can be started and extended over time.
And this could also guide people why they should pick PocketBase, based on features and use cases.

Keep up the great work!

Litestream integration for Admin

It would be good to have Litestream integration. Litestream does not need integration as it can run as its own binary, but it would be cool to have some CLI and GUI integration for the Admin ? Is this something that is useful ?

I use litestream and can help with it if needed.

Also for scaling there are ways to deploy to Cloud run with the FS being remote. This allows the pocket base to scale out with a single FS for the DB and FS.

So Admin can easily do a restore etc.

Import/Export CSV/JSON

Thank you for this great project ๐ŸŽ‰. This is a feature request (hopefully that's welcome):

In order to make migrating from existing systems easier, it would be helpful to be able to upload a CSV (or similar) file in the admin dashboard to create users and records inside a collection to initially populate the database. Thank you!

Overlay Issue on User's Settings

image

I see there's a minor overlay issue with the New Collection Button when we have more collections.

I think it can be fixed by changing the .app-sidebar class z-index from 1 -> 2

Haven't get the chance to really dive down into the codebase, so no PR from my side ๐Ÿ˜…

How to use minio with pocketbase?

I'm trying to use minio with pocketbase (both are pretty new to me, but both are distributed as single executables ๐Ÿ‘ )

Following minio guide: https://min.io/download#/linux

wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
mkdir minio-data
./minio server minio-data --console-address ":9001"

It tells me that it has API at http://127.0.0.1:9000 and console at http://127.0.0.1:9001, among other things

I then open minio console, create a bucket "test" and configure S3 in pocketbase like this:
Endpoint: 127.0.0.1
Bucket: test
Region: x
access key: minioadmin
secret key: minioadmin

But when I try to attach a file to a record in pocketbase, it says "Failed to create record." (in debug mode: "Failed to upload all files").

I suspect that it's because of #78, but setting endpoint to the full URL by modifying ~/pb_data/data.db (with sqlite3, when pocketbase is off) doesn't help.

Have anyone succeeded in using pocketbase together with minio?

FWIW, using s3cmd works with these arguments:

s3cmd --no-ssl --access_key=minioadmin --secret_key=minioadmin --host=127.0.0.1:9000 --host-bucket=127.0.0.1:9000

Can't capitalize collection or field names

I'm attempting to enter field name while creating a collection, but the first letter of the field can't be capitalized. Is this to enforce camel case? I'm using linux version.

Email templates

There appears to be system emails for common actions like:

  • user verification
  • user password reset
  • user email change confirmation

Is there a way to override the default content of these messages? Is that something that should be done at the SMTP provider level? It would be nice if this could be set in the admin dashboard and make use of replacement patterns. Thanks!

Looks really cool!

I'm exploring a few options for self-hosted API's, this looks really cool. When my desktop arrives in a month or so, will pull down and take a look.

Add server-side filter support for the users and relations dropdown

It would be great if the relations dropdown was a bit smarter about filtering by user input. I currently have relations which aren't loaded in the first fetch. It would be awesome if the "Load More" button would filter based on the text input. (Even if it would be restricted to looking up by id). The ideal form though would filter by the name or title field I have defined.

Add CDN field to the S3 configuration

Add an optional CDN field to the S3 configuration so that the files api could redirect to it in order to avoid the quotas and rate limits that some S3 providers apply.

Allow to make field names human-readable

It would be nice to see more human-readable field names in tables and forms, other than in the camelCase format. For instance, the human-readable names could be generated and displayed automatically unless they're overwritten by a dedicated standalone field option, like 'Displayed Name'.

Realtime delete events are not sent

delete event created after OnRecordAfterDeleteRequest in apis/realtime.go is not sent.

I tried to track down where the problem is:

apis/realtime.go#L265

	foundRecord, err := api.app.Dao().FindRecordById(record.Collection(), record.Id, ruleFunc)
	if err == nil && foundRecord != nil {
		return true
	}

	return false

Before the event is sent to a client, canAccessRecord checks whether the record exists in the database and if it can be accessed according to rules. It always returns false and the event is not sent because the record is already deleted.

Website small typo

As I couldn't find the website docs to send a PR, I'm writing here.

In the homepage, there's a small typo:

Dart SDK is comming soon
and it should be:
Dart SDK is coming soon

This is an interesting project! Thanks for doing and sharing it! ๐Ÿ™

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.