Log In  


PicoPhone is a lightweight open-source multi tool widget designed to run in Picotron's desktop2 and to use as less CPU as possible. https://github.com/369px/PicoPhone

It aims to completely replace your smartphone and give you back the focus you need while completing your gems. Just load #phone in the Picotron terminal to get started!

Latest version: 0.4.34

PicoPhone is now open-source!
Feel free to commit changes!

How to install (super easy)

  1. Open the Picotron terminal, type in load #phone and hit CTRL+R
  2. Tell Taco where you want to install PicoPhone!
  3. Reboot Picotron and enjoy :)

Features and MiniApps

Group Chat (new!)

Picotron isn't a lonely place anymore!
Thanks to PicoChat you can now talk with other devs while working on your stuff!

Auto-Installer (new!)

Let Taco do the hard work!
You can now automatically install or move PicoPhone when and wherever you want!
Are you testing something inside the tooltray and need to clean it up?
Just go to settings and move PicoPhone to the desktop!

BBS Market / AppStore (wip)

Browse BBS tools and install them directly from your PicoPhone!
It's not perfect yet but I couldn't make you wait!

Midi Converter and calculator

Convert a MIDI file into a Picotron track ready to use in your project!
Thanks to the magic of Miditron!
And Calkawaii, a funny calculator that thinks before talking! ;)

Color ID checker and special character ID checker!

Check the IDs you forgot without leaving Picotron!

Customization and Low CPU usage mode!

This is what really makes PicoPhone awesome!
The fact you can have it in 3 different colors? Yeah that too but...
The low CPU usage mode!
You can turn off the phone to drastically lower CPU usage, see for yourself ;)
Then tap screen to get back where you left!

Coming soon

  • mini Market categories!
  • More miniApps! (You'll be able to make your own)
  • More customization!

Cart #phone-17 | 2024-05-02 | Embed ▽ | License: CC4-BY-NC-SA


I have 2 phones in my desktop2!*

If you have more than one phone in your tooltray, it means you had previously installed Picophone and manually changed it's parameters! If so, go back in appdata/system/startup.lua and remove all PicoPhone installations! Then load #phone again and watch the magic!


I'm open to collaborations so feel free to give feedback, test it or implement new features!
We'll get in touch here or on the discord!

P#146124 2024-04-09 03:47 ( Edited 2024-05-07 16:47)


If you wan to add a calculator to it, feel free to use the code from mine https://www.lexaloffle.com/bbs/?tid=141416

It would be neat to have a calculator in this multitool.

P#146188 2024-04-09 18:36

@profpatonildo haha! i love that it thinks before giving you the result
I'm implementing this gem in the next update, thank you!

A bit late cause I lost all my progress yesterday :(
But here it is, with a big new feature, a new mascotte and 2 new tools!

Installer coming soon!
Still open to collabs! Let's do it before there's no more space in PICOPHONE!
See ya around the bbs <3

For @profpatonildo:

Kawaii calculator has some issues with detecting keyboard presses.
Minus sign (-), point (.) and "Enter" work fine, but plus sign, multiply sign and divide sign don't work in my macbook! Could you please take a look inside my cart in /picophone.p64.png/code/kawaiiculator.lua?
I have only touched the graphics and kept the logic as it is

P#146200 2024-04-09 20:35 ( Edited 2024-04-24 22:51)

@369369369 that's interesting.

I just tried it on my keyboard and all keys work. I then tried with another keyboard, that has a different layout, and I have a different problem than yours: plus works, but minus and divide don't.

I think it may have something to do with scancodes and the different position of those keys on different keyboards. If you have access to a numerical keypad, try using those keys and see if they work alright. I tried it out here with a usb keypad, and they seem to work.

If you want consistency throughout all keyboard layouts, it might be better to disable the "regular keyboard" input and leave only the mouse and numerical keypad input. I've done just that here, just swap the updateCalc function for this new one with the changes:

function updateCalc()
    if timer > 0 then
        face_timer += 1
        if face_timer >= 4 then
            face += 1
            if face > 52 then face = 51 end
            face_timer = 0

    if result_given then
        if #instructions > 0 then
            result_given = false
        if mouth_timer > 0 then
            mouth_timer -= 1
            face = 49
            mouth_timer = 0
    if tostr(number) == "8008" or tostr(number) == "80081" or tostr(number) == "800813"or tostr(number) == "8008135" then face = 53 end
    if divided_by_zero then 
        if #instructions == 0 then
            face = 53 
            divided_by_zero = false
    for b in all(calcButtons) do
        b.draw_top = true
    local active_key = check_key()
    if keyp(87) 
        or keyp(86)
        or keyp(85)
        or keyp(84)
        or active_key == "+" or active_key == "-" 
        or active_key == "*" or active_key == "/" then
            if (number == "" and #instructions == 0) or operator_behind then
                if keyp(86) or active_key == "-" then 
                    turn_negative = true
                    decimal = false
                    display = display .. "-"
                    face = 50
                    mouth_timer = 3
                if keyp(87) or active_key == "+" then operator = "+" end
                if keyp(86) or active_key == "-" then operator = "-" end
                if keyp(85) or active_key == "*" then operator = "*" end
                if keyp(84) or active_key == "/" then operator = "/" end
                local sign = 1
                if turn_negative then sign = -1 end
                add(instructions, tonum(number) * sign)
                number = ""
                add(instructions, operator)
                operator_behind = true
                display = display .. operator
                decimal = false
                turn_negative = false
                face = 50
                mouth_timer = 3
    for n = 0, 9 do
        local number_on_keypad = false
        if n == 0 then if keyp(98) then number_on_keypad = true end end
        if n == 1 then if keyp(89) then number_on_keypad = true end end
        if n == 2 then if keyp(90) then number_on_keypad = true end end
        if n == 3 then if keyp(91) then number_on_keypad = true end end
        if n == 4 then if keyp(92) then number_on_keypad = true end end
        if n == 5 then if keyp(93) then number_on_keypad = true end end
        if n == 6 then if keyp(94) then number_on_keypad = true end end
        if n == 7 then if keyp(95) then number_on_keypad = true end end
        if n == 8 then if keyp(96) then number_on_keypad = true end end
        if n == 9 then if keyp(97) then number_on_keypad = true end end
        if keyp(tostr(n)) or number_on_keypad or active_key == tostr(n) then
            number = number .. n
            display = display .. n
            operator_behind = false
            face = 50
            mouth_timer = 3
    if keyp(99) or active_key == "." 
        and not decimal and not operator_behind and number != "" then
            decimal = true
            number = number .. "."
            display = display .. "."
            operator_behind = false
            face = 50
            mouth_timer = 3
    if keyp("backspace") or active_key == "c" then
        face = 50
        mouth_timer = 3
        divided_by_zero = false
        result_given = false
    if keyp("enter") or keyp(88) or active_key == "=" then
        if number != "" and #instructions >= 2 and not operator_behind then
            local sign = 1
            if turn_negative then sign = -1 end
            add(instructions, tonum(number) * sign)
            number = ""
            operator_behind = true
            decimal = false
            turn_negative = false
            face = 50
            mouth_timer = 3
            timer = #instructions * 15

I think that's more practical, because it's kinda of a janky system lol. If you want me to outright disable the keyboard input (even the numerical keypad), just let me know and I'll send you a version of this function that only checks for the mouse.

P#146379 2024-04-11 17:39

PicoPhone 0.3 is finally out! This is the biggest update yet!
A lot of new features and completely revisioned code.
Thanks to @Eiyeron for making me understand how the Picotron GUI works!

Read the changelog:

0.3.69b Hotfix
Fixed a bug that wouldn't install PicoPhone if you've never created a startup.lua file!
(You don't need to update if you didn't experience any bug)

@profpatonildo mmh ok that's not a bad workaround, now it has a bit more sense. Thanks

P#146388 2024-04-11 19:07 ( Edited 2024-04-24 22:52)

Just a heads up for anyone using my Downloader 2.0 cart: https://www.lexaloffle.com/bbs/?pid=145411#p

If you download picophone with it and run the installer, it will instead try to install Downloader 2.0 into the tooltray instead and potentially cause some really nasty bugs

P#147060 2024-04-21 12:19

👆 Issue fixed!
Also fixed a little Taco related bug!

PicoPhone 0.4 is OUT!

New features and... PICOCHAT!

Latest release: v0.4.34

  • Fixed PicoChat once and for all!
  • Main-menu CPU usage is 18% lower!
  • Added the first version of a control panel
  • There was no phone graphics in splash screen! Added it!

Older releases


  • Fixed a PicoChat related issue and improved design using pico8 font!


  • Fixed a bug that made PicoPhone crash if you switched from PicoChat to the calculator!
  • Added a new feature! Not child friendly yet so watch where you tap and remember to save!
  • Added splash screen!

By the way...

PicoPhone is now fully open-source!


edit: Web player doesn't work now! Well neither was it working before since you had to install it in the tooltray and reboot :P But I'll work on this so we'll have a playable demo in the bbs!

P#147065 2024-04-21 14:11 ( Edited 2024-05-02 13:00)

[Please log in to post a comment]