poolside is building next generation AI for software engineering

Find out more

Our new foundation model

A model built specifically for the challenges of modern software engineering.

+

Your code & data

Fine-tune our model on how your business writes software, using your practices, libraries, APIs, and knowledge bases.

=

Your custom model

Your proprietary model that continuously learns how your developers write code. You become an AI company.

We're building foundation models, an API, and an Assistant to bring the power of generative AI to your developers

The poolside stack can be deployed to your own infrastructure. No data or code ever leaves your security boundary. Ideal for highly regulated industries like Financial Services, Defense, Technology as well as Retail, Tech and Systems Integrators.

With integrations for
VS Code
IntelliJ
+
Chrome
Safari
Firefox
Arc

Our flagship model

Introducing malibu, our biggest model built from the ground up for the most challenging software engineering problems

Diagram of code execution reinforcement

Train

malibu is trained using Reinforcement Learning from Code Execution Feedback, a novel approach to building AI models that improves performance in coding tasks.

Fine-tune

Your model ingests your codebases, documentation & knowledge bases to create a model that is uniquely suited to your dev teams & business.

Connect

poolside is deployed in your environment which allows you to securely and privately connect it to your data and tailor it to your needs.

Your Company Model
v1.2 — powered by poolside

Ship

Your model becomes a core part of accelerating your development teams and building better software, faster.

Code completion engine

Our code completion model, point, is fully integrated into the poolside stack and the fastest way to finish your  sentences

Speed icon10x faster than comparable models
Context icon1 million+ context window
Learning iconFine-tuned on your code and data
for (int i = 0; i < n; i++) { sum += arr[i]; } def fibonacci(n): return n if n <= 1 else fibonacci(n-1) + fibonacci(n-2) SELECT * FROM users WHERE age > 18 ORDER BY name addEventListener('click', (e) => console.log(e.target)) public static void quickSort(int[] arr, int low, int high) { std::vector<int> v; v.push_back(42); let result = array.filter(item => item > 10).map(item => item * 2); class Node { int data; Node next; } try { throw new Error('Oops!'); } catch (e) { console.error(e); } @app.route('/') def hello(): return 'Hello, World!'for (int i = 0; i < n; i++) { sum += arr[i]; } def fibonacci(n): return n if n <= 1 else fibonacci(n-1) + fibonacci(n-2) SELECT * FROM users WHERE age > 18 ORDER BY name addEventListener('click', (e) => console.log(e.target)) public static void quickSort(int[] arr, int low, int high) { std::vector<int> v; v.push_back(42); let result = array.filter(item => item > 10).map(item => item * 2); class Node { int data; Node next; } try { throw new Error('Oops!'); } catch (e) { console.error(e); } @app.route('/') def hello(): return 'Hello, World!'for (int i = 0; i < n; i++) { sum += arr[i]; } def fibonacci(n): return n if n <= 1 else fibonacci(n-1) + fibonacci(n-2) SELECT * FROM users WHERE age > 18 ORDER BY name addEventListener('click', (e) => console.log(e.target)) public static void quickSort(int[] arr, int low, int high) { std::vector<int> v; v.push_back(42); let result = array.filter(item => item > 10).map(item => item * 2); class Node { int data; Node next; } try { throw new Error('Oops!'); } catch (e) { console.error(e); } @app.route('/') def hello(): return 'Hello, World!'for (int i = 0; i < n; i++) { sum += arr[i]; } def fibonacci(n): return n if n <= 1 else fibonacci(n-1) + fibonacci(n-2) SELECT * FROM users WHERE age > 18 ORDER BY name addEventListener('click', (e) => console.log(e.target)) public static void quickSort(int[] arr, int low, int high) { std::vector<int> v; v.push_back(42); let result = array.filter(item => item > 10).map(item => item * 2); class Node { int data; Node next; } try { throw new Error('Oops!'); } catch (e) { console.error(e); } @app.route('/') def hello(): return 'Hello, World!'for (int i = 0; i < n; i++) { sum += arr[i]; } def fibonacci(n): return n if n <= 1 else fibonacci(n-1) + fibonacci(n-2) SELECT * FROM users WHERE age > 18 ORDER BY name addEventListener('click', (e) => console.log(e.target)) public static void quickSort(int[] arr, int low, int high) { std::vector<int> v; v.push_back(42); let result = array.filter(item => item > 10).map(item => item * 2); class Node { int data; Node next; } try { throw new Error('Oops!'); } catch (e) { console.error(e); } @app.route('/') def hello(): return 'Hello, World!'for (int i = 0; i < n; i++) { sum += arr[i]; } def fibonacci(n): return n if n <= 1 else fibonacci(n-1) + fibonacci(n-2) SELECT * FROM users WHERE age > 18 ORDER BY name addEventListener('click', (e) => console.log(e.target)) public static void quickSort(int[] arr, int low, int high) { std::vector<int> v; v.push_back(42); let result = array.filter(item => item > 10).map(item => item * 2); class Node { int data; Node next; } try { throw new Error('Oops!'); } catch (e) { console.error(e); } @app.route('/') def hello(): return 'Hello, World!'for (int i = 0; i < n; i++) { sum += arr[i]; } def fibonacci(n): return n if n <= 1 else fibonacci(n-1) + fibonacci(n-2) SELECT * FROM users WHERE age > 18 ORDER BY name addEventListener('click', (e) => console.log(e.target)) public static void quickSort(int[] arr, int low, int high) { std::vector<int> v; v.push_back(42); let result = array.filter(item => item > 10).map(item => item * 2); class Node { int data; Node next; } try { throw new Error('Oops!'); } catch (e) { console.error(e); } @app.route('/') def hello(): return 'Hello, World!'for (int i = 0; i < n; i++) { sum += arr[i]; } def fibonacci(n): return n if n <= 1 else fibonacci(n-1) + fibonacci(n-2) SELECT * FROM users WHERE age > 18 ORDER BY name addEventListener('click', (e) => console.log(e.target)) public static void quickSort(int[] arr, int low, int high) { std::vector<int> v; v.push_back(42); let result = array.filter(item => item > 10).map(item => item * 2); class Node { int data; Node next; } try { throw new Error('Oops!'); } catch (e) { console.error(e); } @app.route('/') def hello(): return 'Hello, World!'for (int i = 0; i < n; i++) { sum += arr[i]; } def fibonacci(n): return n if n <= 1 else fibonacci(n-1) + fibonacci(n-2) SELECT * FROM users WHERE age > 18 ORDER BY name addEventListener('click', (e) => console.log(e.target)) public static void quickSort(int[] arr, int low, int high) { std::vector<int> v; v.push_back(42); let result = array.filter(item => item > 10).map(item => item * 2); class Node { int data; Node next; } try { throw new Error('Oops!'); } catch (e) { console.error(e); } @app.route('/') def hello(): return 'Hello, World!'for (int i = 0; i < n; i++) { sum += arr[i]; } def fibonacci(n): return n if n <= 1 else fibonacci(n-1) + fibonacci(n-2) SELECT * FROM users WHERE age > 18 ORDER BY name addEventListener('click', (e) => console.log(e.target)) public static void quickSort(int[] arr, int low, int high) { std::vector<int> v; v.push_back(42); let result = array.filter(item => item > 10).map(item => item * 2); class Node { int data; Node next; } try { throw new Error('Oops!'); } catch (e) { console.error(e); } @app.route('/') def hello(): return 'Hello, World!'for (int i = 0; i < n; i++) { sum += arr[i]; } def fibonacci(n): return n if n <= 1 else fibonacci(n-1) + fibonacci(n-2) SELECT * FROM users WHERE age > 18 ORDER BY name addEventListener('click', (e) => console.log(e.target)) public static void quickSort(int[] arr, int low, int high) { std::vector<int> v; v.push_back(42); let result = array.filter(item => item > 10).map(item => item * 2); class Node { int data; Node next; } try { throw new Error('Oops!'); } catch (e) { console.error(e); } @app.route('/') def hello(): return 'Hello, World!'for (int i = 0; i < n; i++) { sum += arr[i]; } def fibonacci(n): return n if n <= 1 else fibonacci(n-1) + fibonacci(n-2) SELECT * FROM users WHERE age > 18 ORDER BY name addEventListener('click', (e) => console.log(e.target)) public static void quickSort(int[] arr, int low, int high) { std::vector<int> v; v.push_back(42); let result = array.filter(item => item > 10).map(item => item * 2); class Node { int data; Node next; } try { throw new Error('Oops!'); } catch (e) { console.error(e); } @app.route('/') def hello(): return 'Hello, World!'for (int i = 0; i < n; i++) { sum += arr[i]; } def fibonacci(n): return n if n <= 1 else fibonacci(n-1) + fibonacci(n-2) SELECT * FROM users WHERE age > 18 ORDER BY name addEventListener('click', (e) => console.log(e.target)) public static void quickSort(int[] arr, int low, int high) { std::vector<int> v; v.push_back(42); let result = array.filter(item => item > 10).map(item => item * 2); class Node { int data; Node next; } try { throw new Error('Oops!'); } catch (e) { console.error(e); } @app.route('/') def hello(): return 'Hello, World!'for (int i = 0; i < n; i++) { sum += arr[i]; } def fibonacci(n): return n if n <= 1 else fibonacci(n-1) + fibonacci(n-2) SELECT * FROM users WHERE age > 18 ORDER BY name addEventListener('click', (e) => console.log(e.target)) public static void quickSort(int[] arr, int low, int high) { std::vector<int> v; v.push_back(42); let result = array.filter(item => item > 10).map(item => item * 2); class Node { int data; Node next; } try { throw new Error('Oops!'); } catch (e) { console.error(e); } @app.route('/') def hello(): return 'Hello, World!'for (int i = 0; i < n; i++) { sum += arr[i]; } def fibonacci(n): return n if n <= 1 else fibonacci(n-1) + fibonacci(n-2) SELECT * FROM users WHERE age > 18 ORDER BY name addEventListener('click', (e) => console.log(e.target)) public static void quickSort(int[] arr, int low, int high) { std::vector<int> v; v.push_back(42); let result = array.filter(item => item > 10).map(item => item * 2); class Node { int data; Node next; } try { throw new Error('Oops!'); } catch (e) { console.error(e); } @app.route('/') def hello(): return 'Hello, World!'for (int i = 0; i < n; i++) { sum += arr[i]; } def fibonacci(n): return n if n <= 1 else fibonacci(n-1) + fibonacci(n-2) SELECT * FROM users WHERE age > 18 ORDER BY name addEventListener('click', (e) => console.log(e.target)) public static void quickSort(int[] arr, int low, int high) { std::vector<int> v; v.push_back(42); let result = array.filter(item => item > 10).map(item => item * 2); class Node { int data; Node next; } try { throw new Error('Oops!'); } catch (e) { console.error(e); } @app.route('/') def hello(): return 'Hello, World!'for (int i = 0; i < n; i++) { sum += arr[i]; } def fibonacci(n): return n if n <= 1 else fibonacci(n-1) + fibonacci(n-2) SELECT * FROM users WHERE age > 18 ORDER BY name addEventListener('click', (e) => console.log(e.target)) public static void quickSort(int[] arr, int low, int high) { std::vector<int> v; v.push_back(42); let result = array.filter(item => item > 10).map(item => item * 2); class Node { int data; Node next; } try { throw new Error('Oops!'); } catch (e) { console.error(e); } @app.route('/') def hello(): return 'Hello, World!'for (int i = 0; i < n; i++) { sum += arr[i]; } def fibonacci(n): return n if n <= 1 else fibonacci(n-1) + fibonacci(n-2) SELECT * FROM users WHERE age > 18 ORDER BY name addEventListener('click', (e) => console.log(e.target)) public static void quickSort(int[] arr, int low, int high) { std::vector<int> v; v.push_back(42); let result = array.filter(item => item > 10).map(item => item * 2); class Node { int data; Node next; } try { throw new Error('Oops!'); } catch (e) { console.error(e); } @app.route('/') def hello(): return 'Hello, World!'

Poolside Assistant

Made for your favorite editor & ready at a keystroke

Image of poolside assistant in action

Native Integrations

VS Code
IntelliJ
Available now
Visual Studio
Eclipse
Coming soon

Elevated developer experience

Built by a team of makers who are passionate about creating great software

The power of the stack

The poolside Assistant is deeply integrated to harness the most out of our models

Accelerate your development with your own advanced AI for software engineering

Find out more

Opportunity

The time to move is now. Empower your development teams to build better, faster with poolside.

Security

Our commitment to security and integrity is second to none. Your data is always your data.